@@ -98,6 +98,7 @@ entity neorv32_top is
98
98
XIRQ_NUM_CH : natural range 0 to 32 := 0 ; -- number of external IRQ channels (0..32)
99
99
100
100
-- Processor peripherals --
101
+ IO_DISABLE_SYSINFO : boolean := false ; -- disable the SYSINFO module (for advanced users only)
101
102
IO_GPIO_NUM : natural range 0 to 64 := 0 ; -- number of GPIO input/output pairs (0..64)
102
103
IO_MTIME_EN : boolean := false ; -- implement machine system timer (MTIME)?
103
104
IO_UART0_EN : boolean := false ; -- implement primary universal asynchronous receiver/transmitter (UART0)?
@@ -241,6 +242,7 @@ architecture neorv32_top_rtl of neorv32_top is
241
242
constant io_xirq_en_c : boolean := boolean (XIRQ_NUM_CH > 0 );
242
243
constant io_pwm_en_c : boolean := boolean (IO_PWM_NUM_CH > 0 );
243
244
constant cpu_smpmp_c : boolean := boolean (PMP_NUM_REGIONS > 0 );
245
+ constant io_sysinfo_en_c : boolean := not IO_DISABLE_SYSINFO;
244
246
245
247
-- convert JEDEC ID to mvendor CSR --
246
248
constant vendorid_c : std_ulogic_vector (31 downto 0 ) := x"00000" & "0" & JEDEC_ID;
@@ -363,7 +365,7 @@ begin
363
365
cond_sel_string_f(IO_DMA_EN, " DMA " , " " ) &
364
366
cond_sel_string_f(IO_SLINK_EN, " SLINK " , " " ) &
365
367
cond_sel_string_f(IO_CRC_EN, " CRC " , " " ) &
366
- cond_sel_string_f(true , " SYSINFO " , " " ) & -- always enabled
368
+ cond_sel_string_f(io_sysinfo_en_c , " SYSINFO " , " " ) &
367
369
cond_sel_string_f(ON_CHIP_DEBUGGER_EN, " OCD " , " " ) &
368
370
" "
369
371
severity note ;
@@ -376,6 +378,10 @@ begin
376
378
assert not ((dmem_size_valid_c = false ) and (MEM_INT_DMEM_EN = true )) report
377
379
" [NEORV32] Auto-adjusting invalid DMEM size configuration." severity warning ;
378
380
381
+ -- SYSINFO warning --
382
+ assert not (io_sysinfo_en_c = false ) report
383
+ " [NEORV32] SYSINFO module disabled - large parts of the NEORV32 software framework will no longer work!" severity warning ;
384
+
379
385
end generate ; -- /sanity_checks
380
386
381
387
@@ -1001,7 +1007,7 @@ begin
1001
1007
generic map (
1002
1008
DEV_SIZE => iodev_size_c, -- size of a single IO device
1003
1009
DEV_00_EN => ON_CHIP_DEBUGGER_EN, DEV_00_BASE => base_io_dm_c,
1004
- DEV_01_EN => true , DEV_01_BASE => base_io_sysinfo_c, -- always enabled (mandatory core module)
1010
+ DEV_01_EN => io_sysinfo_en_c , DEV_01_BASE => base_io_sysinfo_c,
1005
1011
DEV_02_EN => IO_NEOLED_EN, DEV_02_BASE => base_io_neoled_c,
1006
1012
DEV_03_EN => io_gpio_en_c, DEV_03_BASE => base_io_gpio_c,
1007
1013
DEV_04_EN => IO_WDT_EN, DEV_04_BASE => base_io_wdt_c,
@@ -1567,55 +1573,64 @@ begin
1567
1573
1568
1574
-- System Configuration Information Memory (SYSINFO) --------------------------------------
1569
1575
-- -------------------------------------------------------------------------------------------
1570
- neorv32_sysinfo_inst : entity neorv32 .neorv32_sysinfo
1571
- generic map (
1572
- CLOCK_FREQUENCY => CLOCK_FREQUENCY,
1573
- CLOCK_GATING_EN => CLOCK_GATING_EN,
1574
- INT_BOOTLOADER_EN => INT_BOOTLOADER_EN,
1575
- MEM_INT_IMEM_EN => MEM_INT_IMEM_EN,
1576
- MEM_INT_IMEM_SIZE => imem_size_c,
1577
- MEM_INT_DMEM_EN => MEM_INT_DMEM_EN,
1578
- MEM_INT_DMEM_SIZE => dmem_size_c,
1579
- ICACHE_EN => ICACHE_EN,
1580
- ICACHE_NUM_BLOCKS => ICACHE_NUM_BLOCKS,
1581
- ICACHE_BLOCK_SIZE => ICACHE_BLOCK_SIZE,
1582
- DCACHE_EN => DCACHE_EN,
1583
- DCACHE_NUM_BLOCKS => DCACHE_NUM_BLOCKS,
1584
- DCACHE_BLOCK_SIZE => DCACHE_BLOCK_SIZE,
1585
- XBUS_EN => XBUS_EN,
1586
- XBUS_CACHE_EN => XBUS_CACHE_EN,
1587
- XBUS_CACHE_NUM_BLOCKS => XBUS_CACHE_NUM_BLOCKS,
1588
- XBUS_CACHE_BLOCK_SIZE => XBUS_CACHE_BLOCK_SIZE,
1589
- XIP_EN => XIP_EN,
1590
- XIP_CACHE_EN => XIP_CACHE_EN,
1591
- XIP_CACHE_NUM_BLOCKS => XIP_CACHE_NUM_BLOCKS,
1592
- XIP_CACHE_BLOCK_SIZE => XIP_CACHE_BLOCK_SIZE,
1593
- ON_CHIP_DEBUGGER_EN => ON_CHIP_DEBUGGER_EN,
1594
- IO_GPIO_EN => io_gpio_en_c,
1595
- IO_MTIME_EN => IO_MTIME_EN,
1596
- IO_UART0_EN => IO_UART0_EN,
1597
- IO_UART1_EN => IO_UART1_EN,
1598
- IO_SPI_EN => IO_SPI_EN,
1599
- IO_SDI_EN => IO_SDI_EN,
1600
- IO_TWI_EN => IO_TWI_EN,
1601
- IO_PWM_EN => io_pwm_en_c,
1602
- IO_WDT_EN => IO_WDT_EN,
1603
- IO_TRNG_EN => IO_TRNG_EN,
1604
- IO_CFS_EN => IO_CFS_EN,
1605
- IO_NEOLED_EN => IO_NEOLED_EN,
1606
- IO_XIRQ_EN => io_xirq_en_c,
1607
- IO_GPTMR_EN => IO_GPTMR_EN,
1608
- IO_ONEWIRE_EN => IO_ONEWIRE_EN,
1609
- IO_DMA_EN => IO_DMA_EN,
1610
- IO_SLINK_EN => IO_SLINK_EN,
1611
- IO_CRC_EN => IO_CRC_EN
1612
- )
1613
- port map (
1614
- clk_i => clk_i,
1615
- rstn_i => rstn_sys,
1616
- bus_req_i => iodev_req(IODEV_SYSINFO),
1617
- bus_rsp_o => iodev_rsp(IODEV_SYSINFO)
1618
- );
1576
+ neorv32_sysinfo_inst_true:
1577
+ if io_sysinfo_en_c generate
1578
+ neorv32_sysinfo_inst : entity neorv32 .neorv32_sysinfo
1579
+ generic map (
1580
+ CLOCK_FREQUENCY => CLOCK_FREQUENCY,
1581
+ CLOCK_GATING_EN => CLOCK_GATING_EN,
1582
+ INT_BOOTLOADER_EN => INT_BOOTLOADER_EN,
1583
+ MEM_INT_IMEM_EN => MEM_INT_IMEM_EN,
1584
+ MEM_INT_IMEM_SIZE => imem_size_c,
1585
+ MEM_INT_DMEM_EN => MEM_INT_DMEM_EN,
1586
+ MEM_INT_DMEM_SIZE => dmem_size_c,
1587
+ ICACHE_EN => ICACHE_EN,
1588
+ ICACHE_NUM_BLOCKS => ICACHE_NUM_BLOCKS,
1589
+ ICACHE_BLOCK_SIZE => ICACHE_BLOCK_SIZE,
1590
+ DCACHE_EN => DCACHE_EN,
1591
+ DCACHE_NUM_BLOCKS => DCACHE_NUM_BLOCKS,
1592
+ DCACHE_BLOCK_SIZE => DCACHE_BLOCK_SIZE,
1593
+ XBUS_EN => XBUS_EN,
1594
+ XBUS_CACHE_EN => XBUS_CACHE_EN,
1595
+ XBUS_CACHE_NUM_BLOCKS => XBUS_CACHE_NUM_BLOCKS,
1596
+ XBUS_CACHE_BLOCK_SIZE => XBUS_CACHE_BLOCK_SIZE,
1597
+ XIP_EN => XIP_EN,
1598
+ XIP_CACHE_EN => XIP_CACHE_EN,
1599
+ XIP_CACHE_NUM_BLOCKS => XIP_CACHE_NUM_BLOCKS,
1600
+ XIP_CACHE_BLOCK_SIZE => XIP_CACHE_BLOCK_SIZE,
1601
+ ON_CHIP_DEBUGGER_EN => ON_CHIP_DEBUGGER_EN,
1602
+ IO_GPIO_EN => io_gpio_en_c,
1603
+ IO_MTIME_EN => IO_MTIME_EN,
1604
+ IO_UART0_EN => IO_UART0_EN,
1605
+ IO_UART1_EN => IO_UART1_EN,
1606
+ IO_SPI_EN => IO_SPI_EN,
1607
+ IO_SDI_EN => IO_SDI_EN,
1608
+ IO_TWI_EN => IO_TWI_EN,
1609
+ IO_PWM_EN => io_pwm_en_c,
1610
+ IO_WDT_EN => IO_WDT_EN,
1611
+ IO_TRNG_EN => IO_TRNG_EN,
1612
+ IO_CFS_EN => IO_CFS_EN,
1613
+ IO_NEOLED_EN => IO_NEOLED_EN,
1614
+ IO_XIRQ_EN => io_xirq_en_c,
1615
+ IO_GPTMR_EN => IO_GPTMR_EN,
1616
+ IO_ONEWIRE_EN => IO_ONEWIRE_EN,
1617
+ IO_DMA_EN => IO_DMA_EN,
1618
+ IO_SLINK_EN => IO_SLINK_EN,
1619
+ IO_CRC_EN => IO_CRC_EN
1620
+ )
1621
+ port map (
1622
+ clk_i => clk_i,
1623
+ rstn_i => rstn_sys,
1624
+ bus_req_i => iodev_req(IODEV_SYSINFO),
1625
+ bus_rsp_o => iodev_rsp(IODEV_SYSINFO)
1626
+ );
1627
+ end generate ;
1628
+
1629
+ neorv32_sysinfo_inst_false:
1630
+ if not io_sysinfo_en_c generate
1631
+ iodev_rsp(IODEV_SYSINFO) <= rsp_terminate_c;
1632
+ end generate ;
1633
+
1619
1634
1620
1635
end generate ; -- /io_system
1621
1636
0 commit comments