blob: 99c2fc98fd84e89947eb4c11be76cd31d56a8a41 [file] [log] [blame]
lowRISC Contributors802543a2019-08-31 12:12:56 +01001// Copyright lowRISC contributors.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5// TOP Earlgrey configuration
6{ name: "earlgrey",
7 type: "top",
8
Michael Schaffner7b0807d2020-10-27 19:54:52 -07009 /////////////////////////////////////////////////////////////
10 // Seed for compile-time random constants //
11 // NOTE: REPLACE THIS WITH A NEW VALUE BEFORE THE TAPEOUT //
12 /////////////////////////////////////////////////////////////
13 rnd_cnst_seed: 4881560218908238235
14
15 // 32-bit datawidth
Timothy Chenc6233932020-08-19 15:34:07 -070016 datawidth: "32",
lowRISC Contributors802543a2019-08-31 12:12:56 +010017
Timothy Chen7f8cc8e2020-11-11 13:15:57 -080018 // Power information for the design
19 power: {
20 // Power domains supported by the design
21 // Aon represents domain aon
22 // 0 represents domain 0
23 domains: ["Aon", "0"],
24
25 // Default power domain used for the design
26 default: "0"
27 },
28
Michael Schaffner7b0807d2020-10-27 19:54:52 -070029 // This is the clock data structure of the design.
Timothy Chenf56c1b52020-04-28 17:00:43 -070030 // The hier path refers to the clock reference path (struct / port)
31 // - The top/ext desgination follows the same scheme as inter-module
Timothy Chen0550d692020-04-20 17:19:35 -070032 // The src key indicates the raw clock sources in the design
33 // The groups key indicates the various clock groupings in the design
34 clocks: {
35
Timothy Chenf56c1b52020-04-28 17:00:43 -070036 hier_paths: {
Timothy Chen92b526e2021-02-01 21:23:42 -080037 top: "clkmgr_aon_clocks.", // top level is a struct
38 ext: "", // ext is a port of the clock name
Timothy Chenf56c1b52020-04-28 17:00:43 -070039 },
40
Timothy Chen33b3b9d2020-05-08 10:14:17 -070041 // Clock Source attributes
42 // name: Name of group.
43 // aon: Whether the clock is free running all the time.
44 // If it is, the clock is not hanlded by clkmgr.
45 // freq: Absolute frequency of clk in Hz
Timothy Chen0550d692020-04-20 17:19:35 -070046 srcs: [
Timothy Chen33b3b9d2020-05-08 10:14:17 -070047 { name: "main", aon: "no", freq: "100000000" }
Timothy Chenced60b22020-08-20 10:35:00 -070048 { name: "io", aon: "no", freq: "96000000" }
Timothy Chen33b3b9d2020-05-08 10:14:17 -070049 { name: "usb", aon: "no", freq: "48000000" }
50 { name: "aon", aon: "yes", freq: "200000" }
Timothy Chen0550d692020-04-20 17:19:35 -070051 ],
52
Timothy Chen79972ad2020-06-30 17:13:49 -070053 // Derived clock source attributes
54 // name: Name of group.
55 // aon: Whether the clock is free running all the time.
56 // If it is, the clock is not hanlded by clkmgr.
57 // freq: Absolute frequency of clk in Hz
58 // src: From which clock source is the clock derived
59 // div: Ratio between derived clock and source clock
60 derived_srcs: [
Timothy Chenced60b22020-08-20 10:35:00 -070061 { name: "io_div2", aon: "no", div: 2, src: "io", freq: "48000000" }
62 { name: "io_div4", aon: "no", div: 4, src: "io", freq: "24000000" }
Timothy Chen79972ad2020-06-30 17:13:49 -070063 ],
64
Timothy Chen0550d692020-04-20 17:19:35 -070065 // Clock Group attributes
66 // name: name of group.
67 //
Timothy Chenf56c1b52020-04-28 17:00:43 -070068 // src: The hierarchical source of the clock
69 // "ext" - clock is supplied from a port of the top module
70 // "top" - clock is supplied from a net inside the top module
71 //
Rupert Swarbrickcba33a22020-07-02 16:46:38 +010072 // sw_cg: whether software is allowed to gate the clock
Timothy Chen0550d692020-04-20 17:19:35 -070073 // "no" - software is not allowed to gate clocks
74 // "yes" - software is allowed to gate clocks
75 // "hint" - software can provide a hint, and hw controls the rest
76 //
77 // unique: whether each module in the group can be separately gated
Rupert Swarbrickcba33a22020-07-02 16:46:38 +010078 // if sw_cg is "no", this field has no meaning
Timothy Chen0550d692020-04-20 17:19:35 -070079 // "yes" - each clock is individually controlled
80 // "no" - the group is controlled as one single unit
81 //
82 // The powerup and proc groups are unique.
Timothy Chen33b3b9d2020-05-08 10:14:17 -070083 // The powerup group of clocks do not feed through the clock
Timothy Chen0550d692020-04-20 17:19:35 -070084 // controller as they manage clock controller behavior
Michael Schaffnerbe5cb9c2020-11-19 19:53:47 -080085 // The proc group is not peripheral, and directly hardwired
Timothy Chen0550d692020-04-20 17:19:35 -070086
87 groups: [
Timothy Chen79972ad2020-06-30 17:13:49 -070088 // the powerup group is used exclusively by clk/pwr/rstmgr
89 { name: "powerup", src:"top", sw_cg: "no" }
Timothy Chenf56c1b52020-04-28 17:00:43 -070090 { name: "trans", src:"top", sw_cg: "hint", unique: "yes", }
91 { name: "infra", src:"top", sw_cg: "no", }
92 { name: "secure", src:"top", sw_cg: "no" }
93 { name: "peri", src:"top", sw_cg: "yes", unique: "no" }
94 { name: "timers", src:"top", sw_cg: "no" }
Timothy Chen0550d692020-04-20 17:19:35 -070095 { name: "proc",
Timothy Chenc6233932020-08-19 15:34:07 -070096 src: "no",
97 sw_cg: "no",
98 unique: "no",
Timothy Chen0550d692020-04-20 17:19:35 -070099 clocks: {
100 clk_proc_main: main
101 }
102 }
103 ],
Timothy Chenc6233932020-08-19 15:34:07 -0700104 },
lowRISC Contributors802543a2019-08-31 12:12:56 +0100105
Timothy Chenc6233932020-08-19 15:34:07 -0700106 // This is the reset data strcture of the design.
107 // The hier path refers to the reset reference path (struct / port)
108 // - The top/ext desgination follows the same scheme as inter-module
109 // The node key represents all the known resets in the design
110 resets: {
111
112 hier_paths: {
Timothy Chen92b526e2021-02-01 21:23:42 -0800113 top: "rstmgr_aon_resets.", // top level is a struct
114 ext: "", // ext is a port of the clock name
Timothy Chenc6233932020-08-19 15:34:07 -0700115 },
116
117 // Reset node attributes
118 // name: name of reset.
119 //
120 // gen: whether the reset is generated
121 // true: it is a generated reset inside rstmgr
122 // false: it is a hardwired design reset inside rstmgr (roots and por)
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800123 // For non-generated resets, the parent / domain definitions have no meaning.
Timothy Chenc6233932020-08-19 15:34:07 -0700124 //
125 // type: the reset type [ext, top]
126 // ext: the reset is coming in from the ports, external to earlgrey
127 // int: the reset is only used inside rstmgr
128 // top: the reset is output from rstmgr to top level struct
129 //
130 // parent: The parent reset
131 // If type is "ext", there is no root, since it is external
132 //
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800133 // domains: The power domains of a particular reset
134 // This is a list of of the supported power domains.
135 // Valid values are Aon and (power domain)0 ~ (power domain)1.
136 // If no value is supplied, the default is only the Aon version.
Timothy Chenc6233932020-08-19 15:34:07 -0700137 //
138 // clk: related clock domain for synchronous release
139 // If type is "por", there is not related clock, since it is
140 // likely external or generated from a voltage comparator
141 //
142 nodes: [
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800143 { name: "rst_ni", gen: false, type: "ext", }
144 { name: "por_aon", gen: false, type: "top", domains: ["Aon" ], clk: "aon" }
145 { name: "lc_src", gen: false, type: "int", domains: ["Aon", "0"], clk: "io_div4" }
146 { name: "sys_src", gen: false, type: "int", domains: ["Aon", "0"], clk: "io_div4" }
147 { name: "por", gen: true, type: "top", domains: ["Aon" ], parent: "por_aon", clk: "main" }
148 { name: "por_io", gen: true, type: "top", domains: ["Aon", ], parent: "por_aon", clk: "io" }
149 { name: "por_io_div2", gen: true, type: "top", domains: ["Aon", ], parent: "por_aon", clk: "io_div2" }
150 { name: "por_io_div4", gen: true , type: "top", domains: ["Aon", ], parent: "por_aon", clk: "io_div4" }
151 { name: "por_usb", gen: true, type: "top", domains: ["Aon", ], parent: "por_aon", clk: "usb" }
152 { name: "lc", gen: true, type: "top", domains: [ "0"], parent: "lc_src", clk: "main" }
153 { name: "lc_io_div4", gen: true, type: "top", domains: [ "0"], parent: "lc_src", clk: "io_div4" }
154 { name: "sys", gen: true, type: "top", domains: ["Aon", "0"], parent: "sys_src", clk: "main" }
155 { name: "sys_io_div4", gen: true, type: "top", domains: ["Aon", "0"], parent: "sys_src", clk: "io_div4" }
Timothy Chenc2b279a2021-01-14 18:53:34 -0800156 { name: "sys_aon", gen: true, type: "top", domains: ["Aon", "0"], parent: "sys_src", clk: "aon" }
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800157 { name: "spi_device", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 }
Michael Schaffnerdbd087e2021-02-12 17:58:30 -0800158 { name: "spi_host0", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 }
159 { name: "spi_host1", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 }
Timothy Chenc2b279a2021-01-14 18:53:34 -0800160 { name: "usb", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "usb", sw: 1 }
Timothy Chenb0f55772021-02-01 15:43:47 -0800161 { name: "i2c0", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 },
162 { name: "i2c1", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 },
163 { name: "i2c2", gen: true, type: "top", domains: [ "0"], parent: "sys_src", clk: "io_div2", sw: 1 },
Timothy Chenc6233932020-08-19 15:34:07 -0700164 ]
165 }
Timothy Chen3193b002019-10-04 16:56:05 -0700166
lowRISC Contributors802543a2019-08-31 12:12:56 +0100167 // Number of cores: used in rv_plic and timer
168 num_cores: "1",
169
Timothy Chene4e857d2020-12-16 18:00:01 -0800170
171 // `host` defines the host only components in the system (such as processor)
172 // This should eventually be used to cover more functionality, but for now,
173 // it is a temporary solution for top level connectivity
174 host: [
175 { name: "rv_core_ibex",
176 type: "rv_core_ibex",
177 inter_signal_list: [
178 { struct: "esc_tx",
179 type: "uni",
180 name: "esc_nmi_tx",
181 act: "rcv",
182 package: "prim_esc_pkg",
183 },
184
185 { struct: "esc_rx",
186 type: "uni",
187 name: "esc_nmi_rx",
188 act: "req",
189 package: "prim_esc_pkg",
190 },
Timothy Chenf524c212020-12-17 14:08:45 -0800191
192 { struct: "crashdump",
193 type: "uni",
194 name: "crashdump",
195 act: "req",
196 package: "rv_core_ibex_pkg",
197 },
Timothy Chene4e857d2020-12-16 18:00:01 -0800198 ],
199 }
200
201 ]
202
lowRISC Contributors802543a2019-08-31 12:12:56 +0100203 // `module` defines the peripherals.
204 // Details are coming from each modules' config file `ip.hjson`
205 // TODO: Define parameter here
Timothy Chendde68052020-08-05 16:29:35 -0700206 // generated: A module is templated and generated as part of topgen
207 // top_only: A module is not templated but is specific to 'top_*' instead of 'ip'
lowRISC Contributors802543a2019-08-31 12:12:56 +0100208 module: [
Timothy Chen2971a1e2021-01-21 16:00:01 -0800209 { name: "uart0", // instance name
lowRISC Contributors802543a2019-08-31 12:12:56 +0100210 type: "uart", // Must be matched to the ip name in `ip.hson` (_reg, _cfg permitted)
211 // and `hw/ip/{type}`
Timothy Chen3193b002019-10-04 16:56:05 -0700212
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700213 // clock connections defines the port to top level clock connection
214 // the ip.hjson will declare the clock port names
215 // If none are defined at ip.hjson, clk_i is used by default
Timothy Chen6b70fd22020-08-20 14:01:26 -0700216 clock_srcs: {clk_i: "io_div4"},
Timothy Chen3193b002019-10-04 16:56:05 -0700217
218 // reset connections defines the port to top level reset connection
219 // the ip.hjson will declare the reset port names
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700220 // If none are defined at ip.hjson, rst_ni is used by default
Timothy Chen6b70fd22020-08-20 14:01:26 -0700221 reset_connections: {rst_ni: "sys_io_div4"},
lowRISC Contributors802543a2019-08-31 12:12:56 +0100222 base_addr: "0x40000000",
223 },
Timothy Chen2971a1e2021-01-21 16:00:01 -0800224 { name: "uart1", // instance name
225 type: "uart", // Must be matched to the ip name in `ip.hson` (_reg, _cfg permitted)
226 // and `hw/ip/{type}`
227
228 // clock connections defines the port to top level clock connection
229 // the ip.hjson will declare the clock port names
230 // If none are defined at ip.hjson, clk_i is used by default
231 clock_srcs: {clk_i: "io_div4"},
232
233 // reset connections defines the port to top level reset connection
234 // the ip.hjson will declare the reset port names
235 // If none are defined at ip.hjson, rst_ni is used by default
236 reset_connections: {rst_ni: "sys_io_div4"},
237 base_addr: "0x40010000",
238 },
239 { name: "uart2", // instance name
240 type: "uart", // Must be matched to the ip name in `ip.hson` (_reg, _cfg permitted)
241 // and `hw/ip/{type}`
242
243 // clock connections defines the port to top level clock connection
244 // the ip.hjson will declare the clock port names
245 // If none are defined at ip.hjson, clk_i is used by default
246 clock_srcs: {clk_i: "io_div4"},
247
248 // reset connections defines the port to top level reset connection
249 // the ip.hjson will declare the reset port names
250 // If none are defined at ip.hjson, rst_ni is used by default
251 reset_connections: {rst_ni: "sys_io_div4"},
252 base_addr: "0x40020000",
253 },
254 { name: "uart3", // instance name
255 type: "uart", // Must be matched to the ip name in `ip.hson` (_reg, _cfg permitted)
256 // and `hw/ip/{type}`
257
258 // clock connections defines the port to top level clock connection
259 // the ip.hjson will declare the clock port names
260 // If none are defined at ip.hjson, clk_i is used by default
261 clock_srcs: {clk_i: "io_div4"},
262
263 // reset connections defines the port to top level reset connection
264 // the ip.hjson will declare the reset port names
265 // If none are defined at ip.hjson, rst_ni is used by default
266 reset_connections: {rst_ni: "sys_io_div4"},
267 base_addr: "0x40030000",
268 },
lowRISC Contributors802543a2019-08-31 12:12:56 +0100269 { name: "gpio",
270 type: "gpio",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700271 clock_srcs: {clk_i: "io_div4"},
Timothy Chen0550d692020-04-20 17:19:35 -0700272 clock_group: "peri",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700273 reset_connections: {rst_ni: "sys_io_div4"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800274 base_addr: "0x40040000",
lowRISC Contributors802543a2019-08-31 12:12:56 +0100275 }
lowRISC Contributors802543a2019-08-31 12:12:56 +0100276 { name: "spi_device",
277 type: "spi_device",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700278 clock_srcs: {clk_i: "io_div4"},
Timothy Chen0550d692020-04-20 17:19:35 -0700279 clock_group: "peri",
Timothy Chen3193b002019-10-04 16:56:05 -0700280 reset_connections: {rst_ni: "spi_device"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800281 base_addr: "0x40050000",
lowRISC Contributors802543a2019-08-31 12:12:56 +0100282 },
Michael Schaffnerdbd087e2021-02-12 17:58:30 -0800283 { name: "spi_host0",
284 type: "spi_host",
285 clock_srcs: {clk_i: "io_div4"},
286 clock_group: "peri",
287 reset_connections: {rst_ni: "spi_host0"},
288 base_addr: "0x40060000",
289 },
290 { name: "spi_host1",
291 type: "spi_host",
292 clock_srcs: {clk_i: "io_div4"},
293 clock_group: "peri",
294 reset_connections: {rst_ni: "spi_host1"},
295 base_addr: "0x40070000",
296 },
Timothy Chenb0f55772021-02-01 15:43:47 -0800297 { name: "i2c0",
298 type: "i2c",
299 clock_srcs: {clk_i: "io_div4"},
300 clock_group: "peri",
301 reset_connections: {rst_ni: "i2c0"},
302 base_addr: "0x40080000",
303 },
304 { name: "i2c1",
305 type: "i2c",
306 clock_srcs: {clk_i: "io_div4"},
307 clock_group: "peri",
308 reset_connections: {rst_ni: "i2c1"},
309 base_addr: "0x40090000",
310 },
311 { name: "i2c2",
312 type: "i2c",
313 clock_srcs: {clk_i: "io_div4"},
314 clock_group: "peri",
315 reset_connections: {rst_ni: "i2c2"},
316 base_addr: "0x400A0000",
317 },
318 { name: "pattgen",
319 type: "pattgen",
320 clock_srcs: {clk_i: "io_div4"},
321 clock_group: "peri",
322 reset_connections: {rst_ni: "sys_io_div4"},
323 base_addr: "0x400E0000",
324 },
lowRISC Contributors802543a2019-08-31 12:12:56 +0100325 { name: "rv_timer",
326 type: "rv_timer",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700327 clock_srcs: {clk_i: "io_div4"},
Timothy Chen0550d692020-04-20 17:19:35 -0700328 clock_group: "timers",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700329 reset_connections: {rst_ni: "sys_io_div4"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800330 base_addr: "0x40100000",
lowRISC Contributors802543a2019-08-31 12:12:56 +0100331 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800332 { name: "usbdev",
333 type: "usbdev",
334 clock_srcs: {clk_i: "io_div4", clk_aon_i: "aon", clk_usb_48mhz_i: "usb"},
335 clock_group: "peri",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800336 clock_reset_export: ["ast"],
Timothy Chen92b526e2021-02-01 21:23:42 -0800337 reset_connections: {rst_ni: "sys_io_div4", rst_aon_ni: "sys_aon", rst_usb_48mhz_ni: "usb"},
Pirmin Vogeld4534382019-10-17 13:18:31 +0100338 base_addr: "0x40110000",
339 },
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800340 { name: "otp_ctrl",
341 type: "otp_ctrl",
Michael Schaffner3c7892d2020-12-28 16:25:46 -0800342 clock_srcs: {clk_i: "io_div4", clk_edn_i: "main"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800343 clock_group: "timers",
Michael Schaffner3c7892d2020-12-28 16:25:46 -0800344 reset_connections: {rst_ni: "lc_io_div4", rst_edn_ni: "sys"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800345 base_addr: "0x40130000",
Timothy Chen65e16672020-12-05 09:17:14 -0800346 },
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800347 { name: "lc_ctrl",
348 type: "lc_ctrl",
349 clock_srcs: {clk_i: "io_div4"},
350 clock_group: "timers",
351 reset_connections: {rst_ni: "lc_io_div4"},
352 base_addr: "0x40140000",
353 },
Michael Schaffnerbe5cb9c2020-11-19 19:53:47 -0800354 { name: "alert_handler",
355 type: "alert_handler",
Timothy Chenf1006bd2021-02-05 13:05:43 -0800356 clock_srcs: {clk_i: "io_div4", clk_edn_i: "main"},
Michael Schaffnerbe5cb9c2020-11-19 19:53:47 -0800357 clock_group: "timers",
Timothy Chenf1006bd2021-02-05 13:05:43 -0800358 reset_connections: {rst_ni: "sys_io_div4", rst_edn_ni: "sys"},
Michael Schaffnerbe5cb9c2020-11-19 19:53:47 -0800359 base_addr: "0x40150000",
360 generated: "true" // Indicate this module is generated in the topgen
361 localparam: {
362 EscCntDw: 32,
363 AccuCntDw: 16,
364 LfsrSeed: "0x7FFFFFFF"
365 }
366 },
367 // dummy module to capture the alert handler escalation signals
368 // and test them by converting them into IRQs
369 { name: "nmi_gen",
370 type: "nmi_gen",
371 clock_srcs: {clk_i: "io_div4"},
372 clock_group: "timers",
373 reset_connections: {rst_ni: "sys_io_div4"},
374 base_addr: "0x40160000",
375 }
Timothy Chen92b526e2021-02-01 21:23:42 -0800376 { name: "pwrmgr_aon",
Timothy Chen163050b2020-04-13 23:29:29 -0700377 type: "pwrmgr",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700378 clock_srcs: {clk_i: "io_div4", clk_slow_i: "aon"},
Timothy Chen0550d692020-04-20 17:19:35 -0700379 clock_group: "powerup",
Timothy Chena4cc10d2020-05-08 16:06:20 -0700380 reset_connections: {rst_ni: "por", rst_slow_ni: "por_aon"},
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800381 domain: "Aon",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800382 base_addr: "0x40400000",
Timothy Chen4ba25312020-06-17 13:08:57 -0700383 generated: "true" // Indicate this module is generated in the topgen
Timothy Chenf56c1b52020-04-28 17:00:43 -0700384
Timothy Chen163050b2020-04-13 23:29:29 -0700385 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800386 { name: "rstmgr_aon",
Timothy Chenc59f7012020-04-16 19:11:42 -0700387 type: "rstmgr",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700388 clock_srcs: {clk_i: "io_div4", clk_aon_i: "aon", clk_main_i: "main", clk_io_i: "io", clk_usb_i: "usb",
Timothy Chen0f3c1752020-08-26 12:47:17 -0700389 clk_io_div2_i: "io_div2", clk_io_div4_i: "io_div4"},
Timothy Chenc59f7012020-04-16 19:11:42 -0700390 clock_group: "powerup",
391 reset_connections: {rst_ni: "rst_ni"},
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800392 domain: "Aon",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800393 base_addr: "0x40410000",
Timothy Chen0f3c1752020-08-26 12:47:17 -0700394 generated: "true" // Indicate this module is generated in the topgen
Timothy Chenf56c1b52020-04-28 17:00:43 -0700395 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800396 { name: "clkmgr_aon",
Timothy Chenf56c1b52020-04-28 17:00:43 -0700397 type: "clkmgr",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700398 clock_srcs: {clk_i: "io_div4"},
Timothy Chenf56c1b52020-04-28 17:00:43 -0700399 clock_group: "powerup",
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800400 reset_connections: {rst_ni: "por_io_div4", rst_main_ni: "por", rst_io_ni: "por_io", rst_usb_ni: "por_usb"
Timothy Chenced60b22020-08-20 10:35:00 -0700401 rst_io_div2_ni: "por_io_div2", rst_io_div4_ni: "por_io_div4"},
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800402 domain: "Aon",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800403 base_addr: "0x40420000",
Timothy Chenc59f7012020-04-16 19:11:42 -0700404 generated: "true"
405 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800406 { name: "pinmux_aon",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800407 type: "pinmux",
408 clock: "main",
Timothy Chen92b526e2021-02-01 21:23:42 -0800409 clock_srcs: {clk_i: "io_div4", clk_aon_i: "aon"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800410 clock_group: "secure",
Timothy Chen92b526e2021-02-01 21:23:42 -0800411 reset_connections: {rst_ni: "sys_io_div4", rst_aon_ni: "sys_aon"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800412 domain: "Aon",
413 base_addr: "0x40460000",
414 generated: "true"
415 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800416 { name: "sensor_ctrl_aon",
417 type: "sensor_ctrl",
418 clock_srcs: {clk_i: "io_div4"},
419 clock_group: "secure",
Timothy Chen4c8905e2020-08-26 10:34:33 -0700420 clock_reset_export: ["ast"],
Timothy Chen92b526e2021-02-01 21:23:42 -0800421 reset_connections: {rst_ni: "sys_io_div4"},
422 domain: "Aon",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800423 base_addr: "0x40500000",
Timothy Chen92b526e2021-02-01 21:23:42 -0800424 top_only: "true"
Pirmin Vogelea91b302020-01-14 18:53:01 +0000425 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800426 { name: "sram_ctrl_ret_aon",
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800427 type: "sram_ctrl",
428 clock_srcs: {clk_i: "io_div4", clk_otp_i: "io_div4"},
429 clock_group: "peri",
430 reset_connections: {rst_ni: "sys_io_div4", rst_otp_ni: "lc_io_div4"},
431 domain: "Aon",
432 base_addr: "0x40510000"
433 },
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800434 { name: "flash_ctrl",
435 type: "flash_ctrl",
Timothy Chenf52a4612020-12-04 20:37:49 -0800436 clock_srcs: {clk_i: "main", clk_otp_i: "io_div4"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800437 clock_group: "infra",
Timothy Chenf52a4612020-12-04 20:37:49 -0800438 reset_connections: {rst_ni: "lc", rst_otp_ni: "lc_io_div4"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800439 base_addr: "0x41000000",
440 generated: "true" // Indicate this module is generated in the topgen
441 },
442 { name: "rv_plic",
443 type: "rv_plic",
444 clock_srcs: {clk_i: "main"},
Timothy Chendde68052020-08-05 16:29:35 -0700445 clock_group: "secure",
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800446 reset_connections: {rst_ni: "sys"},
447 base_addr: "0x41010000",
448 generated: "true" // Indicate this module is generated in the topgen
449 },
450 { name: "aes",
451 type: "aes",
452 clock_srcs: {clk_i: "main"},
453 clock_group: "trans",
454 reset_connections: {rst_ni: "sys"},
455 base_addr: "0x41100000",
456 },
457 { name: "hmac",
458 type: "hmac",
459 clock_srcs: {clk_i: "main"},
460 clock_group: "trans",
461 reset_connections: {rst_ni: "sys"},
462 base_addr: "0x41110000",
463 },
464 { name: "kmac"
465 type: "kmac"
Eunchan Kim6baeda42021-01-07 12:32:16 -0800466 clock_srcs: {clk_i: "main", clk_edn_i: "main"}
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800467 clock_group: "trans"
Eunchan Kim6baeda42021-01-07 12:32:16 -0800468 reset_connections: {rst_ni: "sys", rst_edn_ni: "sys"}
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800469 base_addr: "0x41120000"
Timothy Chendde68052020-08-05 16:29:35 -0700470 },
Timothy Chen3c3f3482020-09-09 18:45:41 -0700471 { name: "keymgr",
472 type: "keymgr",
Timothy Chend5820b02020-12-05 17:19:06 -0800473 clock_srcs: {clk_i: "main", clk_edn_i: "main"},
Timothy Chen3c3f3482020-09-09 18:45:41 -0700474 clock_group: "secure",
Timothy Chend5820b02020-12-05 17:19:06 -0800475 reset_connections: {rst_ni: "sys", rst_edn_ni: "sys"},
Martin Lueker-Bodend5a1e4b2020-11-11 19:46:33 -0800476 base_addr: "0x41130000",
Michael Schaffner5ae4a232020-10-06 19:03:43 -0700477 },
Mark Branstadff807362020-11-16 07:56:15 -0800478 { name: "csrng",
479 type: "csrng",
480 clock_srcs: {clk_i: "main"},
481 clock_group: "secure",
482 reset_connections: {rst_ni: "sys"},
483 base_addr: "0x41150000",
484 },
485 { name: "entropy_src",
486 type: "entropy_src",
487 clock_srcs: {clk_i: "main"},
488 clock_group: "secure",
489 reset_connections: {rst_ni: "sys"},
Timothy Chenea59ad32021-02-03 17:51:38 -0800490 clock_reset_export: ["ast"],
Mark Branstadff807362020-11-16 07:56:15 -0800491 base_addr: "0x41160000",
492 },
493 { name: "edn0",
494 type: "edn",
495 clock_srcs: {clk_i: "main"},
496 clock_group: "secure",
497 reset_connections: {rst_ni: "sys"},
Timothy Chenea59ad32021-02-03 17:51:38 -0800498 clock_reset_export: ["ast"],
Mark Branstadff807362020-11-16 07:56:15 -0800499 base_addr: "0x41170000",
500 },
501 { name: "edn1",
502 type: "edn",
503 clock_srcs: {clk_i: "main"},
504 clock_group: "secure",
505 reset_connections: {rst_ni: "sys"},
506 base_addr: "0x41180000",
507 },
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800508 { name: "sram_ctrl_main",
509 type: "sram_ctrl",
510 clock_srcs: {clk_i: "main", clk_otp_i: "io_div4"},
511 clock_group: "secure",
512 reset_connections: {rst_ni: "sys", rst_otp_ni: "lc_io_div4"},
513 base_addr: "0x411C0000",
514 },
Philipp Wagnera4a9e402020-06-22 12:06:56 +0100515 { name: "otbn",
516 type: "otbn",
517 clock_srcs: {clk_i: "main"},
518 clock_group: "trans",
519 reset_connections: {rst_ni: "sys"},
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800520 base_addr: "0x411D0000",
Philipp Wagnera4a9e402020-06-22 12:06:56 +0100521 },
lowRISC Contributors802543a2019-08-31 12:12:56 +0100522 ]
523
524 // Memories (ROM, RAM, eFlash) are defined at the top.
525 // It utilizes the primitive cells but configurable
526 memory: [
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700527 { name: "rom",
Timothy Chen0550d692020-04-20 17:19:35 -0700528 clock_srcs: {clk_i: "main"},
529 clock_group: "infra",
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700530 reset_connections: {rst_ni: "sys"},
531 type: "rom",
532 base_addr: "0x00008000",
Weicai Yang55b2cdf2020-04-10 15:40:30 -0700533 swaccess: "ro",
Timothy Chenda2e3442020-02-24 21:37:47 -0800534 size: "0x4000"
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700535 inter_signal_list: [
536 { struct: "tl"
537 package: "tlul_pkg"
538 type: "req_rsp"
539 act: "rsp"
540 name: "tl"
541 }
542 ]
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700543 },
544 { name: "ram_main",
Timothy Chen0550d692020-04-20 17:19:35 -0700545 clock_srcs: {clk_i: "main"},
546 clock_group: "infra",
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700547 reset_connections: {rst_ni: "sys"},
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800548 type: "ram_1p_scr",
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700549 base_addr: "0x10000000",
Timothy Chen15d98b72021-02-10 20:58:34 -0800550 size: "0x20000",
Weicai Yang2ac0dee2020-12-08 12:19:18 -0800551 byte_write: "true",
Timothy Chen15d98b72021-02-10 20:58:34 -0800552 exec: "1",
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700553 inter_signal_list: [
554 { struct: "tl"
555 package: "tlul_pkg"
556 type: "req_rsp"
557 act: "rsp"
558 name: "tl"
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800559 },
560 // Interface to SRAM controller
561 { struct: "sram_scr",
562 package: "sram_ctrl_pkg"
563 type: "req_rsp",
564 name: "sram_scr",
565 act: "rsp",
Timothy Chen15d98b72021-02-10 20:58:34 -0800566 },
567 { struct: "tl_instr_en",
568 package: "tlul_pkg"
569 type: "uni",
570 name: "en_ifetch",
571 act: "rcv",
572 },
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700573 ]
574 },
Timothy Chen92b526e2021-02-01 21:23:42 -0800575 { name: "ram_ret_aon",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700576 clock_srcs: {clk_i: "io_div4"},
Timothy Chen2c9e1a92020-06-29 15:03:25 -0700577 clock_group: "infra",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700578 reset_connections: {rst_ni: "sys_io_div4"},
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800579 domain: "Aon",
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800580 type: "ram_1p_scr",
Silvestrs Timofejevsaf2b5c22021-02-05 10:33:18 +0000581 base_addr: "0x40600000",
Timothy Chen7f8cc8e2020-11-11 13:15:57 -0800582 size: "0x1000",
Weicai Yang2ac0dee2020-12-08 12:19:18 -0800583 byte_write: "true",
Timothy Chen15d98b72021-02-10 20:58:34 -0800584 exec: "0",
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700585 inter_signal_list: [
586 { struct: "tl"
587 package: "tlul_pkg"
588 type: "req_rsp"
589 act: "rsp"
590 name: "tl"
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800591 },
592 // Interface to SRAM controller
593 { struct: "sram_scr",
594 package: "sram_ctrl_pkg"
595 type: "req_rsp",
596 name: "sram_scr",
597 act: "rsp",
Timothy Chen15d98b72021-02-10 20:58:34 -0800598 },
599 { struct: "tl_instr_en",
600 package: "tlul_pkg"
601 type: "uni",
602 name: "en_ifetch",
603 act: "rcv",
604 },
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700605 ]
606 },
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700607 { name: "eflash",
Timothy Chen0550d692020-04-20 17:19:35 -0700608 clock_srcs: {clk_i: "main"},
609 clock_group: "infra",
Timothy Chen80bd8aa2019-10-04 15:57:11 -0700610 reset_connections: {rst_ni: "lc"},
611 type: "eflash",
612 base_addr: "0x20000000",
Timothy Chen1daf5822020-10-26 17:28:15 -0700613 banks: 2,
Timothy Chen4367c482021-01-22 00:18:45 -0800614 pages_per_bank: 256,
Timothy Chene97e0b82020-12-11 17:18:43 -0800615 program_resolution: 8, // maximum number of flash words allowed to program at one time
Weicai Yang55b2cdf2020-04-10 15:40:30 -0700616 swaccess: "ro",
Eunchan Kime4a85072020-02-05 16:00:00 -0800617 inter_signal_list: [
618 { struct: "flash", // flash_req_t, flash_rsp_t
619 type: "req_rsp",
620 name: "flash_ctrl", // flash_ctrl_i (req), flash_ctrl_o (rsp)
Eunchan Kim40098a92020-04-17 12:22:36 -0700621 act: "rsp",
Timothy Chenac620652020-06-25 13:48:50 -0700622 },
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700623 { struct: "tl"
624 package: "tlul_pkg"
625 type: "req_rsp"
626 act: "rsp"
627 name: "tl"
Timothy Chend2c9ff42020-11-19 16:03:54 -0800628 },
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800629 { struct: "lc_tx",
630 package: "lc_ctrl_pkg",
631 type: "uni"
632 act: "rcv"
Timothy Chenb1ba59b2021-01-07 12:18:11 -0800633 name: "lc_nvm_debug_en"
634 },
Timothy Chen16741102021-01-15 17:32:13 -0800635 { struct: "lc_tx"
636 package: "lc_ctrl_pkg"
Timothy Chenb1ba59b2021-01-07 12:18:11 -0800637 type: "uni"
638 act: "rcv"
639 name: "flash_bist_enable"
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800640 },
Timothy Chend2c9ff42020-11-19 16:03:54 -0800641 { struct: "logic"
642 package: ""
643 type: "uni"
644 act: "rcv"
645 name: "flash_power_down_h"
646 },
647 { struct: "logic"
648 package: ""
649 type: "uni"
650 act: "rcv"
651 name: "flash_power_ready_h"
652 },
653 { struct: "logic",
654 package: "",
Michael Schaffner9c3d6a82021-02-02 17:05:31 -0800655 width: "4",
Timothy Chend2c9ff42020-11-19 16:03:54 -0800656 type: "uni"
657 act: "rcv"
658 name: "flash_test_mode_a"
659 },
660 { struct: "logic",
661 package: "",
662 type: "uni"
663 act: "rcv"
664 name: "flash_test_voltage_h"
665 },
Eunchan Kime4a85072020-02-05 16:00:00 -0800666 ],
667 },
lowRISC Contributors802543a2019-08-31 12:12:56 +0100668 ],
669
Timothy Chen075ed372021-02-04 14:42:29 -0800670 // The port data structure is not something that should be used liberally.
671 // It is used specifically to assign special attributes to specific ports.
672 // For example, this allows us to designate a port as part of inter-module
673 // connections.
674 port: [
675 { name: "ast_edn",
676 inter_signal_list: [
677 { struct: "edn",
678 type: "req_rsp",
679 name: "edn",
680 // The activity direction for a port inter-signal is "opposite" of
681 // what the external module actually needs.
682 act: "rsp",
683 package: "edn_pkg",
684 },
685 ]
686 },
687 ]
688
Eunchan Kime4a85072020-02-05 16:00:00 -0800689 // Inter-module Connection.
690 // format:
691 // requester: [ resp1, resp2, ... ],
692 //
Eunchan Kim40098a92020-04-17 12:22:36 -0700693 // the field and value should be module_inst.port_name
Eunchan Kime4a85072020-02-05 16:00:00 -0800694 // e.g flash_ctrl0.flash: [flash_phy0.flash_ctrl]
695 inter_module: {
Eunchan Kim40098a92020-04-17 12:22:36 -0700696 'connect': {
Timothy Chen92b526e2021-02-01 21:23:42 -0800697 'alert_handler.crashdump' : ['rstmgr_aon.alert_dump'],
Timothy Chene4e857d2020-12-16 18:00:01 -0800698 'alert_handler.esc_rx' : ['rv_core_ibex.esc_nmi_rx',
699 'lc_ctrl.esc_wipe_secrets_rx',
700 'lc_ctrl.esc_scrap_state_rx'
Timothy Chen92b526e2021-02-01 21:23:42 -0800701 'pwrmgr_aon.esc_rst_rx'],
Timothy Chene4e857d2020-12-16 18:00:01 -0800702 'alert_handler.esc_tx' : ['rv_core_ibex.esc_nmi_tx',
703 'lc_ctrl.esc_wipe_secrets_tx',
704 'lc_ctrl.esc_scrap_state_tx',
Timothy Chen92b526e2021-02-01 21:23:42 -0800705 'pwrmgr_aon.esc_rst_tx'],
Timothy Chene4e857d2020-12-16 18:00:01 -0800706 'csrng.csrng_cmd' : ['edn0.csrng_cmd', 'edn1.csrng_cmd'],
Timothy Chenf52a4612020-12-04 20:37:49 -0800707 'csrng.entropy_src_hw_if' : ['entropy_src.entropy_src_hw_if'],
Timothy Chend39402a2020-12-15 20:34:09 -0800708 'flash_ctrl.flash' : ['eflash.flash_ctrl'],
709 'flash_ctrl.keymgr' : ['keymgr.flash'],
710 'flash_ctrl.otp' : ['otp_ctrl.flash_otp_key'],
711 'flash_ctrl.rma_req' : ['lc_ctrl.lc_flash_rma_req'],
712 'flash_ctrl.rma_ack' : ['lc_ctrl.lc_flash_rma_ack'],
713 'flash_ctrl.rma_seed' : ['lc_ctrl.lc_flash_rma_seed'],
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800714 'sram_ctrl_main.sram_scr' : ['ram_main.sram_scr'],
Timothy Chen92b526e2021-02-01 21:23:42 -0800715 'sram_ctrl_ret_aon.sram_scr' : ['ram_ret_aon.sram_scr'],
Timothy Chen15d98b72021-02-10 20:58:34 -0800716 'sram_ctrl_main.en_ifetch' : ['ram_main.en_ifetch']
717 'sram_ctrl_ret_aon.en_ifetch' : ['ram_ret_aon.en_ifetch']
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800718 'otp_ctrl.sram_otp_key' : ['sram_ctrl_main.sram_otp_key',
Timothy Chen92b526e2021-02-01 21:23:42 -0800719 'sram_ctrl_ret_aon.sram_otp_key']
720 'pwrmgr_aon.pwr_flash' : ['flash_ctrl.pwrmgr'],
721 'pwrmgr_aon.pwr_rst' : ['rstmgr_aon.pwr'],
722 'pwrmgr_aon.pwr_clk' : ['clkmgr_aon.pwr'],
723 'pwrmgr_aon.pwr_otp' : ['otp_ctrl.pwr_otp'],
724 'pwrmgr_aon.pwr_lc' : ['lc_ctrl.pwr_lc'],
Timothy Chend39402a2020-12-15 20:34:09 -0800725 'flash_ctrl.keymgr' : ['keymgr.flash'],
Timothy Chen92b526e2021-02-01 21:23:42 -0800726 'alert_handler.crashdump' : ['rstmgr_aon.alert_dump'],
727 'rv_core_ibex.crashdump' : ['rstmgr_aon.cpu_dump'],
Mark Branstadff807362020-11-16 07:56:15 -0800728 'csrng.entropy_src_hw_if' : ['entropy_src.entropy_src_hw_if'],
Timothy Chenc2b279a2021-01-14 18:53:34 -0800729
730 // usbdev connection to pinmux
Timothy Chen92b526e2021-02-01 21:23:42 -0800731 'usbdev.usb_out_of_rst' : ['pinmux_aon.usb_out_of_rst'],
732 'usbdev.usb_aon_wake_en' : ['pinmux_aon.usb_aon_wake_en'],
733 'usbdev.usb_aon_wake_ack' : ['pinmux_aon.usb_aon_wake_ack'],
734 'usbdev.usb_suspend' : ['pinmux_aon.usb_suspend'],
735 'pinmux_aon.usb_state_debug' : ['usbdev.usb_state_debug'],
Timothy Chenc2b279a2021-01-14 18:53:34 -0800736
Timothy Chend5820b02020-12-05 17:19:06 -0800737 // TODO see #4447
Timothy Chenf1006bd2021-02-05 13:05:43 -0800738 'edn0.edn' : ['keymgr.edn', 'otp_ctrl.edn', 'ast_edn.edn', 'kmac.entropy'],
739 'edn1.edn' : ['alert_handler.edn'],
Timothy Chend5820b02020-12-05 17:19:06 -0800740
Eunchan Kim97be1d02020-11-03 14:33:52 -0800741 // KeyMgr Sideload & KDF function
Timothy Chen92b526e2021-02-01 21:23:42 -0800742 'otp_ctrl.otp_keymgr_key' : ['keymgr.otp_key'],
743 'keymgr.kmac_key' : ['kmac.keymgr_key']
744 'keymgr.kmac_data' : ['kmac.keymgr_kdf']
Timothy Chen455afcb2020-10-01 11:46:35 -0700745 // The idle connection is automatically connected through topgen.
746 // The user does not need to explicitly declare anything other than
747 // an empty list.
Timothy Chen92b526e2021-02-01 21:23:42 -0800748 'clkmgr_aon.idle' : [],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800749
750 // OTP LC interface
751 'otp_ctrl.otp_lc_data' : ['lc_ctrl.otp_lc_data'],
752 'lc_ctrl.lc_otp_program' : ['otp_ctrl.lc_otp_program'],
753 'lc_ctrl.lc_otp_token' : ['otp_ctrl.lc_otp_token'],
754
755 // HW_CFG broadcast
Timothy Chen15d98b72021-02-10 20:58:34 -0800756 'otp_ctrl.otp_hw_cfg' : ['lc_ctrl.otp_hw_cfg', 'keymgr.otp_hw_cfg',
757 'sram_ctrl_main.otp_hw_cfg', 'sram_ctrl_ret_aon.otp_hw_cfg'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800758
759 // Diversification constant coming from life cycle
Timothy Chen0a120942020-12-14 17:20:51 -0800760 'lc_ctrl.lc_keymgr_div' : ['keymgr.lc_keymgr_div'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800761
762 // LC function control signal broadcast
763 // TODO(#3920): connect all these signals once top-level sim and FPGA can backload LC state
Timothy Chenb1ba59b2021-01-07 12:18:11 -0800764 'lc_ctrl.lc_dft_en' : ['otp_ctrl.lc_dft_en'],
765 'lc_ctrl.lc_nvm_debug_en' : ['eflash.lc_nvm_debug_en'],
Timothy Chen15d98b72021-02-10 20:58:34 -0800766 'lc_ctrl.lc_hw_debug_en' : ['sram_ctrl_main.lc_hw_debug_en',
767 'sram_ctrl_ret_aon.lc_hw_debug_en'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800768 'lc_ctrl.lc_cpu_en' : [],
Timothy Chen0a120942020-12-14 17:20:51 -0800769 //'lc_ctrl.lc_keymgr_en' : ['keymgr.lc_keymgr_en'],
Michael Schaffnerbd9a3542020-12-21 13:08:32 -0800770 'lc_ctrl.lc_escalate_en' : ['otp_ctrl.lc_escalate_en',
771 'sram_ctrl_main.lc_escalate_en',
Timothy Chen92b526e2021-02-01 21:23:42 -0800772 'sram_ctrl_ret_aon.lc_escalate_en'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800773
Michael Schaffnerc506dc52020-12-22 21:07:17 -0800774 'lc_ctrl.lc_check_byp_en' : ['otp_ctrl.lc_check_byp_en'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800775 // TODO: OTP Clock bypass signal going from LC to AST/clkmgr
Timothy Chen92b526e2021-02-01 21:23:42 -0800776 'lc_ctrl.lc_clk_byp_ack' : ['clkmgr_aon.lc_clk_bypass_ack'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800777
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800778 // LC access control signal broadcast
779 'lc_ctrl.lc_creator_seed_sw_rw_en' : ['otp_ctrl.lc_creator_seed_sw_rw_en',
Timothy Chen0a120942020-12-14 17:20:51 -0800780 'flash_ctrl.lc_creator_seed_sw_rw_en'],
Michael Schaffner60aa10e2020-12-07 19:39:08 -0800781 'lc_ctrl.lc_owner_seed_sw_rw_en' : ['flash_ctrl.lc_owner_seed_sw_rw_en'],
782 'lc_ctrl.lc_iso_part_sw_rd_en' : ['flash_ctrl.lc_iso_part_sw_rd_en'],
783 'lc_ctrl.lc_iso_part_sw_wr_en' : ['flash_ctrl.lc_iso_part_sw_wr_en'],
784 'lc_ctrl.lc_seed_hw_rd_en' : ['otp_ctrl.lc_seed_hw_rd_en',
785 'flash_ctrl.lc_seed_hw_rd_en'],
Eunchan Kim40098a92020-04-17 12:22:36 -0700786 }
787
788 // top is to connect to top net/struct.
789 // It defines the signal in the top and connect from the module,
790 // use of the signal is up to top template
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700791 'top': [
Timothy Chen92b526e2021-02-01 21:23:42 -0800792 'rstmgr_aon.resets', 'rstmgr_aon.cpu', 'pwrmgr_aon.pwr_cpu', 'clkmgr_aon.clocks',
Eunchan Kime0d37fe2020-08-03 12:05:21 -0700793
794 // Xbars
795 'main.tl_corei', 'main.tl_cored', 'main.tl_dm_sba', 'main.tl_debug_mem'
796 ],
Eunchan Kim40098a92020-04-17 12:22:36 -0700797
798 // ext is to create port in the top.
Eunchan Kim57071c02020-08-07 13:59:05 -0700799 'external': {
Timothy Chen5649c2a2021-02-08 18:32:22 -0800800 'clkmgr_aon.clk_main' : 'clk_main', // clock inputs
Timothy Chenea59ad32021-02-03 17:51:38 -0800801 'clkmgr_aon.clk_io' : 'clk_io', // clock inputs
802 'clkmgr_aon.clk_usb' : 'clk_usb', // clock inputs
803 'clkmgr_aon.clk_aon' : 'clk_aon', // clock inputs
Timothy Chen5649c2a2021-02-08 18:32:22 -0800804 'clkmgr_aon.jitter_en' : 'clk_main_jitter_en',
Timothy Chenea59ad32021-02-03 17:51:38 -0800805 'rstmgr_aon.ast' : 'rstmgr_ast',
806 'pwrmgr_aon.pwr_ast' : 'pwrmgr_ast',
807 'sensor_ctrl_aon.ast_alert' : 'sensor_ctrl_ast_alert',
808 'sensor_ctrl_aon.ast_status' : 'sensor_ctrl_ast_status',
809 'usbdev.usb_ref_val' : '',
810 'usbdev.usb_ref_pulse' : '',
811 'peri.tl_ast_wrapper' : 'ast_tl',
812 'otp_ctrl.otp_ast_pwr_seq' : '',
813 'otp_ctrl.otp_ast_pwr_seq_h' : '',
814 'eflash.flash_bist_enable' : 'flash_bist_enable',
815 'eflash.flash_power_down_h' : 'flash_power_down_h',
816 'eflash.flash_power_ready_h' : 'flash_power_ready_h',
817 'eflash.flash_test_mode_a' : 'flash_test_mode_a',
818 'eflash.flash_test_voltage_h' : 'flash_test_voltage_h',
819 'entropy_src.entropy_src_rng' : 'es_rng',
820 'lc_ctrl.lc_clk_byp_req' : 'lc_clk_byp_req',
821 'clkmgr_aon.ast_clk_bypass_ack': 'lc_clk_byp_ack',
822 'ast_edn.edn' : ''
Eunchan Kim57071c02020-08-07 13:59:05 -0700823 },
Eunchan Kime4a85072020-02-05 16:00:00 -0800824 },
825
lowRISC Contributors802543a2019-08-31 12:12:56 +0100826 debug_mem_base_addr: "0x1A110000",
827
828 // Crossbars: having a top level crossbar
829 // This version assumes all crossbars are instantiated at the top.
830 // Assume xbar.hjson is located in the same directory of top.hjson
831 xbar: [
832 { name: "main",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700833 clock_srcs: {clk_main_i: "main", clk_fixed_i: "io_div4"},
Timothy Chen0550d692020-04-20 17:19:35 -0700834 clock_group: "infra",
Timothy Chen3193b002019-10-04 16:56:05 -0700835 reset: "sys",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700836 reset_connections: {rst_main_ni: "sys", rst_fixed_ni: "sys_io_div4"}
lowRISC Contributors802543a2019-08-31 12:12:56 +0100837 },
Eunchan Kim0523f6b2019-12-17 13:53:11 -0800838 { name: "peri",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700839 clock_srcs: {clk_peri_i: "io_div4"},
Timothy Chen0550d692020-04-20 17:19:35 -0700840 clock_group: "infra",
Timothy Chen6b70fd22020-08-20 14:01:26 -0700841 reset: "sys_io_div4",
842 reset_connections: {rst_peri_ni: "sys_io_div4"},
Eunchan Kim0523f6b2019-12-17 13:53:11 -0800843 }
lowRISC Contributors802543a2019-08-31 12:12:56 +0100844 ],
845
846 // ===== INTERRUPT CTRL =====================================================
847 // `rv_plic` will be instantiate (need to be defined in `module` field
848 // If interrupt is not defined, it uses the order from the module list
849 // and include every modules.
850 // first item goes to LSB of the interrupt source
Timothy Chen2971a1e2021-01-21 16:00:01 -0800851 interrupt_module: ["uart0", "uart1", "uart2", "uart3",
Timothy Chenb0f55772021-02-01 15:43:47 -0800852 "gpio", "spi_device", "i2c0", "i2c1", "i2c2", "pattgen",
Timothy Chen92b526e2021-02-01 21:23:42 -0800853 "flash_ctrl", "hmac", "alert_handler", "nmi_gen", "usbdev", "pwrmgr_aon",
Timothy Chen5e717932020-12-17 18:49:52 -0800854 "otbn", "keymgr", "kmac", "otp_ctrl", "csrng", "edn0", "edn1",
855 "entropy_src"]
lowRISC Contributors802543a2019-08-31 12:12:56 +0100856
857 // RV_PLIC has two searching algorithm internally to pick the most highest priority interrupt
858 // source. "sequential" is smaller but slower, "matrix" is larger but faster.
859 // Choose depends on the criteria. Currently it is set to "matrix" to meet FPGA timing @ 50MHz
860
861 // generated:
862 interrupt: [
863 ]
864
Michael Schaffner666dde12019-10-25 11:57:54 -0700865 // ===== ALERT HANDLER ======================================================
866 // list all modules that expose alerts
Philipp Wagnera4a9e402020-06-22 12:06:56 +0100867 // first item goes to LSB of the alert source
Timothy Chen92b526e2021-02-01 21:23:42 -0800868 alert_module: [ "aes", "otbn", "sensor_ctrl_aon", "keymgr", "otp_ctrl", "lc_ctrl",
Michael Schaffnerb5b8eba2021-02-09 20:07:04 -0800869 "entropy_src","csrng",
Mark Branstadd65d1392021-02-10 13:15:39 -0800870 "sram_ctrl_main", "sram_ctrl_ret_aon", "flash_ctrl"]
Michael Schaffner666dde12019-10-25 11:57:54 -0700871
872 // generated list of alerts:
873 alert: [
874 ]
lowRISC Contributors802543a2019-08-31 12:12:56 +0100875
Michael Schaffner43ce8d52021-02-10 17:04:57 -0800876 // TODO: need to overhaul this datastructure.
Eunchan Kim632c6f72019-09-30 11:11:51 -0700877 pinmux: {
878
Eunchan Kim436d2242019-10-29 17:25:51 -0700879 // Total number of Multiplexed I/O
880 // All the input/outputs from IPs are muxed in pinmux, and it has # of I/O
881 // talks to the outside of top_earlgrey.
882 // This field will be replaced to the length of PAD if padctrl is defined
Michael Schaffnerb5b8eba2021-02-09 20:07:04 -0800883 num_mio: 44
Eunchan Kim436d2242019-10-29 17:25:51 -0700884
Eunchan Kim632c6f72019-09-30 11:11:51 -0700885 // Dedicated IO modules. The in/out ports of the modules below are connected
886 // to TOP IO port through PADS directly. It bypasses PINMUX multiplexers
887 dio_modules: [
Michael Schaffnerdbd087e2021-02-12 17:58:30 -0800888 { name: "spi_device", pad: ["ChC[0..5]"] },
889 { name: "spi_host0", pad: ["ChB[0..5]"] },
890 { name: "usbdev", pad: ["ChA[0..8]"] },
Eunchan Kim632c6f72019-09-30 11:11:51 -0700891 ],
892
893 // Multiplexing IO modules. The in/out ports of the modules below are
894 // connected through PINMUX, which gives controllability of the connection
895 // between the modules and the IO PADS.
896 // If `mio_modules` aren't defined, it uses all remaining modules from
897 // module list except defined in `dio_modules`.
Michael Schaffnerdbd087e2021-02-12 17:58:30 -0800898 mio_modules: ["gpio", "uart0", "uart1", "uart2", "uart3",
899 "i2c0", "i2c1", "i2c2", "pattgen", "spi_host1"]
Eunchan Kim632c6f72019-09-30 11:11:51 -0700900
901 // If any module isn't defined in above two lists, its inputs will be tied
902 // to 0, and the output/OE signals will be floating (or connected to
903 // unused signal). `rv_plic` is special module, shouldn't be defined here.
904 nc_modules: ["rv_timer", "hmac"]
905
Michael Schaffner57c490d2020-04-29 15:08:55 -0700906 // Number of wakeup detectors to instantiate, and bitwidth for the wakeup
907 // counters. Note that all MIO pad inputs are connected to the wakeup detectors,
908 // and there is no way to disable this. DIO inputs on the other hand are by
909 // default not connected.
910 // TODO: need to add mechanism to mark them as wakeup pins.
911 num_wkup_detect: 8
912 wkup_cnt_width: 8
913
Eunchan Kim632c6f72019-09-30 11:11:51 -0700914 // Below fields are generated.
915 // inputs: [
916 // { name: "xxx", width: xx },
917 // ]
918 // outputs: [
919 // { name: "xxx", width: xx },
920 // ]
921 // inouts: [
922 // { name: "xxx", width: xx },
923 // ]
924 }
925
Michael Schaffner43ce8d52021-02-10 17:04:57 -0800926 // TODO: need to overhaul this datastructure.
Eunchan Kim632c6f72019-09-30 11:11:51 -0700927 // PADS instantiation
928 // Number of in/outs and the numer of PAD instances doesn't have to be
929 // same. The number given below excludes clock/reset and other necessary
930 // PADS but only defines GPIO pads.
931 padctrl: {
932 attr_default: ["STRONG"],
933 pads: [
934 { name: "ChA" type: "IO_33V", count: 32 }, // Accessing as ChA[0] .. ChA[31]
935 { name: "ChB" type: "IO_33V", count: 4, attr: ["KEEP", "WEAK"]},
Pirmin Vogelea91b302020-01-14 18:53:01 +0000936 { name: "ChC" type: "IO_33V", count: 4, attr: ["KEEP", "STRONG"]},
Eunchan Kim632c6f72019-09-30 11:11:51 -0700937 ]
938 }
lowRISC Contributors802543a2019-08-31 12:12:56 +0100939
940}