blob: 5948e16387d8fad84876efe107c1a711bd2bc45d [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// TOP Earlgrey configuration
{ name: "earlgrey",
type: "top",
datawidth: "32", # 32-bit datawidth
clocks: [
{ name: "main", freq: "100000000" }
]
// Number of cores: used in rv_plic and timer
num_cores: "1",
// `module` defines the peripherals.
// Details are coming from each modules' config file `ip.hjson`
// TODO: Define parameter here
module: [
{ name: "uart", // instance name
type: "uart", // Must be matched to the ip name in `ip.hson` (_reg, _cfg permitted)
// and `hw/ip/{type}`
clock: "main", // `ip.hjson` clock is internal name, here top determines
// actual clock (signal matched at the top)
base_addr: "0x40000000",
},
{ name: "gpio",
type: "gpio",
clock: "main",
base_addr: "0x40010000",
}
{ name: "spi_device",
type: "spi_device",
clock: "main",
base_addr: "0x40020000",
},
{ name: "flash_ctrl",
type: "flash_ctrl",
clock: "main",
base_addr: "0x40030000",
},
{ name: "rv_timer",
type: "rv_timer",
clock: "main",
base_addr: "0x40080000",
},
{ name: "hmac",
type: "hmac",
clock: "main",
base_addr: "0x40120000",
},
{ name: "rv_plic",
type: "rv_plic",
clock: "main",
base_addr: "0x40090000",
generated: "true" // Indicate this module is generated in the topgen
parameter: {
// FIND_MAX determines the algorithm for searching highest priority interrupt.
// Available: { SEQUENTIAL, MATRIX }
FIND_MAX: "MATRIX", // Parameter as key
}
}
]
// Memories (ROM, RAM, eFlash) are defined at the top.
// It utilizes the primitive cells but configurable
memory: [
{ name: "rom", type: "ram_1p", base_addr: "0x00008000", size: "0x2000" },
{ name: "ram_main", type: "ram_1p", base_addr: "0x10000000", size: "0x10000" },
{ name: "eflash", type: "eflash", base_addr: "0x20000000", size: "0x80000" },
],
debug_mem_base_addr: "0x1A110000",
// Crossbars: having a top level crossbar
// This version assumes all crossbars are instantiated at the top.
// Assume xbar.hjson is located in the same directory of top.hjson
xbar: [
{ name: "main",
clock: "main", // Main clock, used in sockets
},
],
// ===== INTERRUPT CTRL =====================================================
// `rv_plic` will be instantiate (need to be defined in `module` field
// If interrupt is not defined, it uses the order from the module list
// and include every modules.
// first item goes to LSB of the interrupt source
interrupt_module: ["gpio", "uart", "spi_device", "flash_ctrl", "hmac" ]
// RV_PLIC has two searching algorithm internally to pick the most highest priority interrupt
// source. "sequential" is smaller but slower, "matrix" is larger but faster.
// Choose depends on the criteria. Currently it is set to "matrix" to meet FPGA timing @ 50MHz
// generated:
interrupt: [
]
// TODO: ALERT HANDLER
// TODO: PINMUX
}