From 48fcb312c69e85941d670e301d8f9810a8b26d78 Mon Sep 17 00:00:00 2001 From: yiczhong Date: Mon, 25 Aug 2025 09:02:33 -0500 Subject: [PATCH 1/2] [rtl] Fix missing instruction address check to ram Fixes issue #2311 --- examples/simple_system/rtl/ibex_simple_system.sv | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/simple_system/rtl/ibex_simple_system.sv b/examples/simple_system/rtl/ibex_simple_system.sv index e466ac286d..e86a76f783 100644 --- a/examples/simple_system/rtl/ibex_simple_system.sv +++ b/examples/simple_system/rtl/ibex_simple_system.sv @@ -114,9 +114,6 @@ module ibex_simple_system ( logic [31:0] instr_rdata; logic instr_err; - assign instr_gnt = instr_req; - assign instr_err = '0; - `ifdef VERILATOR assign clk_sys = IO_CLK; assign rst_sys_n = IO_RST_N; @@ -262,6 +259,10 @@ module ibex_simple_system ( .core_sleep_o () ); + assign instr_gnt = instr_req; + assign instr_err = (instr_addr & cfg_device_addr_mask[Ram]) != + cfg_device_addr_base[Ram]; + // SRAM block for instruction and data storage ram_2p #( .Depth(1024*1024/4), From f65a73473e2665c732797e552ada1de04836b1c6 Mon Sep 17 00:00:00 2001 From: yiczhong Date: Mon, 25 Aug 2025 09:29:20 -0500 Subject: [PATCH 2/2] Use named constant for RAM address & capacity use localparams to substitute chicken bits --- examples/simple_system/rtl/ibex_simple_system.sv | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/simple_system/rtl/ibex_simple_system.sv b/examples/simple_system/rtl/ibex_simple_system.sv index e86a76f783..682cbfbe9b 100644 --- a/examples/simple_system/rtl/ibex_simple_system.sv +++ b/examples/simple_system/rtl/ibex_simple_system.sv @@ -97,10 +97,13 @@ module ibex_simple_system ( logic device_err [NrDevices]; // Device address mapping + localparam int unsigned RAMBaseAddr = 32'h100000; + localparam int unsigned RAMCapacity = 32'h100000; // 1 MB + logic [31:0] cfg_device_addr_base [NrDevices]; logic [31:0] cfg_device_addr_mask [NrDevices]; - assign cfg_device_addr_base[Ram] = 32'h100000; - assign cfg_device_addr_mask[Ram] = ~32'hFFFFF; // 1 MB + assign cfg_device_addr_base[Ram] = RAMBaseAddr; + assign cfg_device_addr_mask[Ram] = ~(RAMCapacity - 1); assign cfg_device_addr_base[SimCtrl] = 32'h20000; assign cfg_device_addr_mask[SimCtrl] = ~32'h3FF; // 1 kB assign cfg_device_addr_base[Timer] = 32'h30000;