feat: refactor RIB interfaces and update test cases

- Renamed  and  to  and  respectively across various test files and modules.
- Updated response codes in tests to use new definitions ().
- Added new testbench  to validate RIB to RAM interactions.
- Created  for testing RIBP topology routing.
- Adjusted memory map tests to reflect new interface names.
- Ensured all references to old interface names were replaced in Python test scripts.
- Verified that all test cases pass with the new interface structure.
This commit is contained in:
maksyuki committed 2026-08-04 16:12:22 +08:00
1 parent d51d58dd25
commit a87236ae33
73 files changed
+673 -958

No files matched your search

+23 -24
View File
@@ -11,10 +11,10 @@ module bus_fault_tb;
logic [ 1:0] fault_master_o;
logic [ 2:0] fault_code_o;
logic user_bus_idle_o;
soc_ribl_if mgmt_ribl ();
soc_rib_if user_rib ();
soc_rib_if dma_rib ();
soc_rib_if rib ();
ribp_if mgmt_ribp ();
rib_if user_rib ();
rib_if dma_rib ();
rib_if rib ();
ribp_if apb_ribp ();
always #5 clk_i = ~clk_i;
@@ -24,7 +24,7 @@ module bus_fault_tb;
assign rib.rsp_valid = 1'b0;
assign rib.rdata = 32'hCAFE_BABE;
assign rib.resp_err = 1'b0;
assign rib.resp_code = `SOC_RIB_RESP_OK;
assign rib.resp_code = `RIB_RESP_OK;
assign rib.rsp_beat = '0;
assign rib.rsp_last = 1'b0;
assign apb_ribp.ready = 1'b1;
@@ -33,14 +33,13 @@ module bus_fault_tb;
bus u_bus (
.clk_i (clk_i),
.rst_n_i (rst_n_i),
.mgmt_ribl (mgmt_ribl),
.mgmt_ribp (mgmt_ribp),
.user_rib (user_rib),
.dma_rib (dma_rib),
.user_bus_enable_i(1'b1),
.user_bus_idle_o (user_bus_idle_o),
.rib (rib),
.apb_ribp (apb_ribp),
.apb_resp_err_i (1'b0),
.perf_enable_i (1'b0),
.perf_clear_i (1'b0),
.fault_valid_o (fault_valid_o),
@@ -56,22 +55,22 @@ module bus_fault_tb;
input logic reserved, input logic [2:0] expected_code);
begin
@(negedge clk_i);
mgmt_ribl.addr = address;
mgmt_ribl.wdata = 32'hA5A5_5A5A;
mgmt_ribl.wstrb = write_strobes;
mgmt_ribl.valid = 1'b1;
mgmt_ribp.addr = address;
mgmt_ribp.wdata = 32'hA5A5_5A5A;
mgmt_ribp.wstrb = write_strobes;
mgmt_ribp.valid = 1'b1;
while (!fault_valid_o) @(posedge clk_i);
if (fault_addr_o !== address || fault_wstrb_o !== write_strobes ||
fault_reserved_o !== reserved || fault_access_o || fault_code_o !== expected_code ||
rib.cmd_valid || apb_ribp.valid) begin
$fatal(1, "unexpected fault response for address %h", address);
end
while (!mgmt_ribl.ready) @(posedge clk_i);
if (mgmt_ribl.rdata !== 32'd0 || !mgmt_ribl.resp_err) begin
while (!mgmt_ribp.ready) @(posedge clk_i);
if (mgmt_ribp.rdata !== 32'd0 || !mgmt_ribp.resp_err) begin
$fatal(1, "fault response data must be zero");
end
@(negedge clk_i);
mgmt_ribl.valid = 1'b0;
mgmt_ribp.valid = 1'b0;
while (fault_valid_o) @(posedge clk_i);
end
endtask
@@ -81,7 +80,7 @@ module bus_fault_tb;
@(negedge clk_i);
user_rib.cmd_addr = address;
user_rib.cmd_write = |write_strobes;
user_rib.cmd_len = `SOC_RIB_LEN_INCR1;
user_rib.cmd_len = `RIB_LEN_INCR1;
user_rib.cmd_valid = 1'b1;
while (!user_rib.cmd_ready) @(posedge clk_i);
@(negedge clk_i);
@@ -100,7 +99,7 @@ module bus_fault_tb;
$fatal(1, "user access was not denied locally");
end
if (user_rib.rdata !== 32'd0 || !user_rib.resp_err || !user_rib.rsp_last ||
user_rib.resp_code !== `SOC_RIB_RESP_PROTERR) begin
user_rib.resp_code !== `RIB_RESP_PROTERR) begin
$fatal(1, "denied user response data must be zero");
end
while (fault_valid_o) @(posedge clk_i);
@@ -108,14 +107,14 @@ module bus_fault_tb;
endtask
initial begin
mgmt_ribl.valid = 1'b0;
mgmt_ribl.addr = '0;
mgmt_ribl.wdata = '0;
mgmt_ribl.wstrb = '0;
mgmt_ribp.valid = 1'b0;
mgmt_ribp.addr = '0;
mgmt_ribp.wdata = '0;
mgmt_ribp.wstrb = '0;
user_rib.cmd_valid = 1'b0;
user_rib.cmd_addr = '0;
user_rib.cmd_write = 1'b0;
user_rib.cmd_len = `SOC_RIB_LEN_INCR1;
user_rib.cmd_len = `RIB_LEN_INCR1;
user_rib.w_valid = 1'b0;
user_rib.wdata = '0;
user_rib.wstrb = '0;
@@ -124,7 +123,7 @@ module bus_fault_tb;
dma_rib.cmd_valid = 1'b0;
dma_rib.cmd_addr = '0;
dma_rib.cmd_write = 1'b0;
dma_rib.cmd_len = `SOC_RIB_LEN_INCR1;
dma_rib.cmd_len = `RIB_LEN_INCR1;
dma_rib.w_valid = 1'b0;
dma_rib.wdata = '0;
dma_rib.wstrb = '0;
@@ -134,8 +133,8 @@ module bus_fault_tb;
repeat (2) @(posedge clk_i);
rst_n_i = 1'b1;
expect_fault(32'h1000_F000, 4'hF, 1'b1, `SOC_RIB_RESP_RESERVED);
expect_fault(32'hA000_0000, 4'h0, 1'b0, `SOC_RIB_RESP_DECERR);
expect_fault(32'h1000_F000, 4'hF, 1'b1, `RIB_RESP_RESERVED);
expect_fault(32'hA000_0000, 4'h0, 1'b0, `RIB_RESP_DECERR);
expect_user_denied(32'h1000_B000, 4'hF);
$display("bus fault responder test passed");
$finish;
+5 -5
View File
@@ -33,7 +33,7 @@ module dma_error_tb;
logic model_write_q = 1'b0;
logic model_error_q = 1'b0;
dma_hw_trg_if hw_trg ();
soc_rib_if rib ();
rib_if rib ();
always #5 clk_i = ~clk_i;
@@ -42,7 +42,7 @@ module dma_error_tb;
assign rib.rsp_valid = model_state_q == MODEL_RESP;
assign rib.rdata = 32'hA5A5_5A5A + model_beat_q;
assign rib.resp_err = model_error_q;
assign rib.resp_code = model_error_q ? `SOC_RIB_RESP_DECERR : `SOC_RIB_RESP_OK;
assign rib.resp_code = model_error_q ? `RIB_RESP_DECERR : `RIB_RESP_OK;
assign rib.rsp_beat = model_beat_q;
assign rib.rsp_last = model_write_q || model_error_q || (model_beat_q == model_len_q);
@@ -63,10 +63,10 @@ module dma_error_tb;
model_write_q <= rib.cmd_write;
model_error_q <= error_mode && !rib.cmd_write;
model_state_q <= rib.cmd_write ? MODEL_WDATA : MODEL_RESP;
if (rib.cmd_len == `SOC_RIB_LEN_INCR4 && rib.cmd_write) begin
if (rib.cmd_len == `RIB_LEN_INCR4 && rib.cmd_write) begin
incr4_write_count <= incr4_write_count + 1;
end
if (rib.cmd_len == `SOC_RIB_LEN_INCR4 && !rib.cmd_write) begin
if (rib.cmd_len == `RIB_LEN_INCR4 && !rib.cmd_write) begin
incr4_read_count <= incr4_read_count + 1;
end
end
@@ -157,7 +157,7 @@ module dma_error_tb;
start_transfer();
wait (error_o);
@(negedge clk_i);
if (error_code_o !== `SOC_RIB_RESP_DECERR || error_addr_o !== srcaddr_i) begin
if (error_code_o !== `RIB_RESP_DECERR || error_addr_o !== srcaddr_i) begin
$fatal(1, "DMA error response was not propagated");
end
if (write_count != 1) begin
@@ -1,12 +1,12 @@
`timescale 1ns / 1ps
module soc_rib2ram_tb;
module rib2ram_tb;
logic clk_i = 1'b0;
logic rst_n_i = 1'b0;
logic [31:0] memory [0:31];
logic [31:0] expected [ 0:3];
integer index;
soc_rib_if rib ();
rib_if rib ();
ram_if ram ();
always #5 clk_i = ~clk_i;
@@ -19,7 +19,7 @@ module soc_rib2ram_tb;
if (ram.wstrb[3]) memory[ram.addr][31:24] <= ram.wdata[31:24];
end
soc_rib2ram u_dut (
rib2ram u_dut (
.clk_i (clk_i),
.rst_n_i(rst_n_i),
.rib (rib),
@@ -31,7 +31,7 @@ module soc_rib2ram_tb;
@(negedge clk_i);
rib.cmd_addr = 32'h3000_0000;
rib.cmd_write = write;
rib.cmd_len = `SOC_RIB_LEN_INCR4;
rib.cmd_len = `RIB_LEN_INCR4;
rib.cmd_valid = 1'b1;
while (!rib.cmd_ready) @(posedge clk_i);
@(negedge clk_i);
+15 -16
View File
@@ -16,10 +16,10 @@ module rib_bus_tb;
logic fault_valid_o;
logic [2:0] fault_code_o;
logic user_bus_idle_o;
soc_ribl_if mgmt_ribl ();
soc_rib_if user_rib ();
soc_rib_if dma_rib ();
soc_rib_if rib ();
ribp_if mgmt_ribp ();
rib_if user_rib ();
rib_if dma_rib ();
rib_if rib ();
ribp_if apb_ribp ();
always #5 clk_i = ~clk_i;
@@ -30,7 +30,7 @@ module rib_bus_tb;
assign rib.rsp_valid = target_state_q == TARGET_RESP;
assign rib.rdata = 32'hCAFE_0000 + target_beat_q;
assign rib.resp_err = 1'b0;
assign rib.resp_code = `SOC_RIB_RESP_OK;
assign rib.resp_code = `RIB_RESP_OK;
assign rib.rsp_beat = target_beat_q;
assign rib.rsp_last = target_beat_q == target_len_q;
@@ -63,14 +63,13 @@ module rib_bus_tb;
bus u_bus (
.clk_i (clk_i),
.rst_n_i (rst_n_i),
.mgmt_ribl (mgmt_ribl),
.mgmt_ribp (mgmt_ribp),
.user_rib (user_rib),
.dma_rib (dma_rib),
.user_bus_enable_i(1'b1),
.user_bus_idle_o (user_bus_idle_o),
.rib (rib),
.apb_ribp (apb_ribp),
.apb_resp_err_i (1'b0),
.perf_enable_i (1'b0),
.perf_clear_i (1'b0),
.fault_valid_o (fault_valid_o),
@@ -109,7 +108,7 @@ module rib_bus_tb;
$fatal(1, "unexpected response status for %h", address);
end
if (expect_error) begin
if (dma_rib.resp_code !== `SOC_RIB_RESP_BURSTERR || !dma_rib.rsp_last) begin
if (dma_rib.resp_code !== `RIB_RESP_BURSTERR || !dma_rib.rsp_last) begin
$fatal(1, "illegal burst did not return terminal BURSTERR");
end
response_count = length + 1;
@@ -130,10 +129,10 @@ module rib_bus_tb;
endtask
initial begin
mgmt_ribl.valid = 1'b0;
mgmt_ribl.addr = '0;
mgmt_ribl.wdata = '0;
mgmt_ribl.wstrb = '0;
mgmt_ribp.valid = 1'b0;
mgmt_ribp.addr = '0;
mgmt_ribp.wdata = '0;
mgmt_ribp.wstrb = '0;
user_rib.cmd_valid = 1'b0;
user_rib.cmd_addr = '0;
user_rib.cmd_write = 1'b0;
@@ -156,13 +155,13 @@ module rib_bus_tb;
repeat (2) @(posedge clk_i);
rst_n_i = 1'b1;
issue_read(32'h3800_1000, `SOC_RIB_LEN_INCR4, 1'b0);
issue_read(32'h3800_1000, `RIB_LEN_INCR4, 1'b0);
if (rib_command_count != 1) begin
$fatal(1, "INCR4 was split before reaching the burst RIB target");
end
issue_read(32'h3800_1004, `SOC_RIB_LEN_INCR4, 1'b1);
issue_read(32'h1000_0000, `SOC_RIB_LEN_INCR4, 1'b1);
issue_read(32'h2000_0000, `SOC_RIB_LEN_INCR4, 1'b1);
issue_read(32'h3800_1004, `RIB_LEN_INCR4, 1'b1);
issue_read(32'h1000_0000, `RIB_LEN_INCR4, 1'b1);
issue_read(32'h2000_0000, `RIB_LEN_INCR4, 1'b1);
issue_read(32'h3800_1000, 2'd2, 1'b1);
if (rib_command_count != 1 || apb_ribp.valid) begin
$fatal(1, "illegal burst reached a downstream target");
@@ -2,13 +2,13 @@
`include "mmap_define.svh"
module soc_topology_ribp_tb;
module ribp_topology_tb;
logic clk_i = 1'b0;
logic rst_n_i = 1'b0;
ribp_if ribp ();
`include "soc_ribp_interfaces.svh"
`include "soc_ribp_routes.svh"
`include "ribp_interfaces.svh"
`include "ribp_routes.svh"
always #5 clk_i = ~clk_i;
@@ -53,6 +53,26 @@ module soc_topology_ribp_tb;
end
endtask
task automatic expect_error_route(input logic [31:0] address, input integer slot);
begin
@(negedge clk_i);
ribp.addr = address;
ribp.valid = 1'b1;
#1;
if (s_slv_sel_d !== (18'd1 << slot)) begin
$fatal(1, "unexpected error target slot for %h", address);
end
@(posedge clk_i);
#1;
if (!ribp.ready || !ribp.resp_err) begin
$fatal(1, "error response was not propagated for %h", address);
end
@(negedge clk_i);
ribp.valid = 1'b0;
@(posedge clk_i);
end
endtask
initial begin
ribp.valid = 1'b0;
ribp.addr = '0;
@@ -97,6 +117,25 @@ module soc_topology_ribp_tb;
u_opipsram_ribp_if.rdata = 32'h0F0F_0F0F;
u_i2c1_ribp_if.rdata = 32'h1234_5678;
u_uart_ribp_if.resp_err = 1'b0;
u_gpio_ribp_if.resp_err = 1'b0;
u_tim0_ribp_if.resp_err = 1'b0;
u_tim1_ribp_if.resp_err = 1'b0;
u_psram_ribp_if.resp_err = 1'b0;
u_spisd_ribp_if.resp_err = 1'b0;
u_i2c0_ribp_if.resp_err = 1'b0;
u_i2s_ribp_if.resp_err = 1'b0;
u_onewire_ribp_if.resp_err = 1'b0;
u_xpi_ribp_if.resp_err = 1'b0;
u_dma_ribp_if.resp_err = 1'b0;
u_sysctrl_ribp_if.resp_err = 1'b0;
u_clint_ribp_if.resp_err = 1'b0;
u_sdram_ribp_if.resp_err = 1'b0;
u_dvp_ribp_if.resp_err = 1'b0;
u_sdio_ribp_if.resp_err = 1'b0;
u_opipsram_ribp_if.resp_err = 1'b0;
u_i2c1_ribp_if.resp_err = 1'b0;
repeat (2) @(posedge clk_i);
rst_n_i = 1'b1;
@@ -105,6 +144,9 @@ module soc_topology_ribp_tb;
expect_route(`SOC_ADDR_FLASH_BASE, 9, 32'h9999_9999);
expect_route(`SOC_ADDR_RIBP_I2C1_BASE, 17, 32'h1234_5678);
expect_disabled(`SOC_ADDR_RIBP_SDIO_BASE);
u_gpio_ribp_if.resp_err = 1'b1;
expect_error_route(`SOC_ADDR_RIBP_GPIO_BASE, 1);
u_gpio_ribp_if.resp_err = 1'b0;
$display("SoC topology RIBP routing test passed");
$finish;
+4 -4
View File
@@ -63,7 +63,7 @@ module sysctrl_fault_tb;
sysctrl.user_bus_idle_i = 1'b1;
sysctrl.fault_access_i = 1'b0;
sysctrl.fault_master_i = '0;
sysctrl.fault_code_i = `SOC_RIB_RESP_RESERVED;
sysctrl.fault_code_i = `RIB_RESP_RESERVED;
sysctrl.perf_mgmt_wait_i = 64'd11;
sysctrl.perf_user_wait_i = 64'd12;
sysctrl.perf_dma_wait_i = 64'd13;
@@ -98,10 +98,10 @@ module sysctrl_fault_tb;
read_register(32'h1000_B018, read_data);
if (read_data !== 32'h0000_0001) $fatal(1, "fault count was not incremented");
read_register(32'h1000_B02C, read_data);
if (read_data !== `SOC_RIB_RESP_RESERVED) $fatal(1, "fault detail was not recorded");
if (read_data !== `RIB_RESP_RESERVED) $fatal(1, "fault detail was not recorded");
@(negedge clk_i);
sysctrl.fault_code_i = `SOC_RIB_RESP_DECERR;
sysctrl.fault_code_i = `RIB_RESP_DECERR;
fault_valid_i = 1'b1;
fault_addr_i = 32'hA000_0000;
fault_wstrb_i = 4'h0;
@@ -113,7 +113,7 @@ module sysctrl_fault_tb;
read_register(32'h1000_B018, read_data);
if (read_data !== 32'h0000_0002) $fatal(1, "later fault did not increment count");
read_register(32'h1000_B02C, read_data);
if (read_data !== `SOC_RIB_RESP_RESERVED) $fatal(1, "later fault overwrote first fault detail");
if (read_data !== `RIB_RESP_RESERVED) $fatal(1, "later fault overwrote first fault detail");
write_register(32'h1000_B010, 32'h0000_0001);
read_register(32'h1000_B010, read_data);
+1 -2
View File
@@ -40,8 +40,7 @@ def test_dma_reports_bus_errors_and_transfers_exact_word_count(tmp_path: Path) -
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
f"+incdir+{ROOT / 'rtl/mini/top'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/mini/top/soc_ribl_if.sv"),
str(ROOT / "rtl/mini/top/soc_rib_if.sv"),
str(ROOT / "rtl/mini/top/rib_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/fifo.sv"),
str(ROOT / "rtl/ip/ribp/peripheral/dma.sv"),
+5 -8
View File
@@ -114,14 +114,13 @@ def test_bus_fault_responder_handles_reserved_and_unmapped_addresses(tmp_path: P
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ram_if.sv"),
str(ROOT / "rtl/mini/top/soc_ribl_if.sv"),
str(ROOT / "rtl/mini/top/soc_rib_if.sv"),
str(ROOT / "rtl/mini/top/rib_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/spill_register.sv"),
str(ROOT / "rtl/mini/top/soc_ribl2rib.sv"),
str(ROOT / "rtl/mini/top/soc_rib2ribp.sv"),
str(ROOT / "rtl/mini/top/soc_rib_error_slave.sv"),
str(ROOT / "rtl/mini/top/soc_rib2ram.sv"),
str(ROOT / "rtl/mini/top/ribp2rib.sv"),
str(ROOT / "rtl/mini/top/rib2ribp.sv"),
str(ROOT / "rtl/mini/top/rib_error_slave.sv"),
str(ROOT / "rtl/mini/top/rib2ram.sv"),
str(ROOT / "rtl/mini/top/bus.sv"),
str(ROOT / "tests/rtl/bus_fault_tb.sv"),
"",
@@ -173,7 +172,6 @@ def test_sysctrl_fault_registers_record_and_clear_pending(tmp_path: Path) -> Non
f"+incdir+{ROOT / 'rtl/mini/top'}",
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/mini/top/soc_ribl_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/ip/ribp/peripheral/pll_ctrl_if.sv"),
str(ROOT / "rtl/ip/ribp/peripheral/sysctrl.sv"),
@@ -222,7 +220,6 @@ def test_pll_controller_reconfigures_and_falls_back_to_the_safe_clock(tmp_path:
f"+incdir+{ROOT / 'rtl/mini/top'}",
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/mini/top/soc_ribl_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/cdc/cdc_sync.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/cdc/cdc_rst_ctrlr.sv"),
+12 -13
View File
@@ -41,14 +41,13 @@ def test_bus_preserves_incr4_and_rejects_illegal_bursts(tmp_path: Path) -> None:
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ram_if.sv"),
str(ROOT / "rtl/mini/top/soc_ribl_if.sv"),
str(ROOT / "rtl/mini/top/soc_rib_if.sv"),
str(ROOT / "rtl/mini/top/rib_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/spill_register.sv"),
str(ROOT / "rtl/mini/top/soc_ribl2rib.sv"),
str(ROOT / "rtl/mini/top/soc_rib2ribp.sv"),
str(ROOT / "rtl/mini/top/soc_rib_error_slave.sv"),
str(ROOT / "rtl/mini/top/soc_rib2ram.sv"),
str(ROOT / "rtl/mini/top/ribp2rib.sv"),
str(ROOT / "rtl/mini/top/rib2ribp.sv"),
str(ROOT / "rtl/mini/top/rib_error_slave.sv"),
str(ROOT / "rtl/mini/top/rib2ram.sv"),
str(ROOT / "rtl/mini/top/bus.sv"),
str(ROOT / "tests/rtl/rib_bus_tb.sv"),
"",
@@ -83,7 +82,7 @@ def test_burst_sram_preserves_data_and_backpressure(tmp_path: Path) -> None:
if iverilog is None or vvp is None:
return
source_list = tmp_path / "soc_rib2ram.fl"
source_list = tmp_path / "rib2ram.fl"
source_list.write_text(
"\n".join(
[
@@ -91,17 +90,17 @@ def test_burst_sram_preserves_data_and_backpressure(tmp_path: Path) -> None:
f"+incdir+{ROOT / 'rtl/mini/top'}",
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ram_if.sv"),
str(ROOT / "rtl/mini/top/soc_rib_if.sv"),
str(ROOT / "rtl/mini/top/rib_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/spill_register.sv"),
str(ROOT / "rtl/mini/top/soc_rib2ram.sv"),
str(ROOT / "tests/rtl/soc_rib2ram_tb.sv"),
str(ROOT / "rtl/mini/top/rib2ram.sv"),
str(ROOT / "tests/rtl/rib2ram_tb.sv"),
"",
]
),
encoding="utf-8",
)
converted = tmp_path / "soc_rib2ram_tb.v"
converted = tmp_path / "rib2ram_tb.v"
subprocess.run(
[
sys.executable,
@@ -113,9 +112,9 @@ def test_burst_sram_preserves_data_and_backpressure(tmp_path: Path) -> None:
],
check=True,
)
simulation = tmp_path / "soc_rib2ram_tb"
simulation = tmp_path / "rib2ram_tb"
subprocess.run(
[iverilog, "-g2012", "-s", "soc_rib2ram_tb", "-o", str(simulation), str(converted)],
[iverilog, "-g2012", "-s", "rib2ram_tb", "-o", str(simulation), str(converted)],
check=True,
)
result = subprocess.run([vvp, str(simulation)], text=True, capture_output=True, check=True)
+5 -5
View File
@@ -210,11 +210,11 @@ def test_formal_filelists_are_scoped_to_the_protocol_duts(tmp_path: Path) -> Non
gpio_user = parse_filelists([gpio_user_filelist], require_files=False)
assert "+define+SV_ASSRT_DISABLE" in bus.defines
assert ROOT / "rtl/mini/top/bus.sv" in bus.files
assert ROOT / "rtl/mini/top/soc_rib_if.sv" in bus.files
assert ROOT / "rtl/mini/top/soc_ribl2rib.sv" in bus.files
assert ROOT / "rtl/mini/top/soc_rib_error_slave.sv" in bus.files
assert ROOT / "rtl/mini/top/rib_if.sv" in bus.files
assert ROOT / "rtl/mini/top/ribp2rib.sv" in bus.files
assert ROOT / "rtl/mini/top/rib_error_slave.sv" in bus.files
assert ROOT / "rtl/mini/formal/bus_formal.sv" in bus.files
assert ROOT / "rtl/mini/top/soc_rib2ribp.sv" in rib_adapter.files
assert ROOT / "rtl/mini/top/rib2ribp.sv" in rib_adapter.files
assert ROOT / "rtl/mini/formal/rib_adapter_formal.sv" in rib_adapter.files
assert ROOT / "rtl/ip/ribp/interconnect/ribp2apb.sv" in ribp2apb.files
assert ROOT / "rtl/mini/formal/ribp2apb_formal.sv" in ribp2apb.files
@@ -654,7 +654,7 @@ def test_management_core_selection_is_limited_to_hazard3_and_picorv32() -> None:
assert "DEF_LIST += +define+CORE_$(CORE)" in makefile
assert "`ifdef CORE_PICORV32" in wrapper
assert "`elsif CORE_HAZARD3" in wrapper
assert "ahbl2soc_ribl u_ahbl2soc_rib" in wrapper
assert "ahbl2ribp u_ahbl2ribp" in wrapper
assert ".RESET_VECTOR (`SOC_CPU_RESET_ADDR)" in wrapper
+14 -13
View File
@@ -57,8 +57,8 @@ def write_invalid_topology(tmp_path: Path, document: dict[str, object]) -> Path:
def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -> None:
generate(tmp_path)
interfaces = (tmp_path / "rtl/soc_ribp_interfaces.svh").read_text(encoding="utf-8")
routes = (tmp_path / "rtl/soc_ribp_routes.svh").read_text(encoding="utf-8")
interfaces = (tmp_path / "rtl/ribp_interfaces.svh").read_text(encoding="utf-8")
routes = (tmp_path / "rtl/ribp_routes.svh").read_text(encoding="utf-8")
gpio = (tmp_path / "rtl/soc_gpio_alt_bindings.svh").read_text(encoding="utf-8")
apb_interfaces = (tmp_path / "rtl/soc_apb_interfaces.svh").read_text(encoding="utf-8")
apb_declarations = (tmp_path / "rtl/soc_apb_declarations.svh").read_text(encoding="utf-8")
@@ -67,7 +67,7 @@ def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -
fabric = (tmp_path / "rtl/soc_fabric_interfaces.svh").read_text(encoding="utf-8")
bus_fabric = (tmp_path / "rtl/soc_bus_fabric.svh").read_text(encoding="utf-8")
irq_config = (tmp_path / "rtl/soc_irq_config.svh").read_text(encoding="utf-8")
rib_irq = (tmp_path / "rtl/soc_ribp_irq_bindings.svh").read_text(encoding="utf-8")
rib_irq = (tmp_path / "rtl/ribp_irq_bindings.svh").read_text(encoding="utf-8")
apb_irq = (tmp_path / "rtl/soc_apb_irq_bindings.svh").read_text(encoding="utf-8")
irq_wiring = (tmp_path / "rtl/soc_irq_wiring.svh").read_text(encoding="utf-8")
irq_sva = (tmp_path / "rtl/soc_irq_sva.svh").read_text(encoding="utf-8")
@@ -77,6 +77,8 @@ def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -
assert "nmi_if" not in interfaces
assert "soc_nmi" not in interfaces
assert "assign s_slv_sel_d[17] = u_i2c1_ribp_if.valid;" in routes
assert "assign s_slv_resp_err[17] = u_i2c1_ribp_if.resp_err;" in routes
assert "assign ribp.resp_err = |(s_slv_sel_q & s_slv_ready & s_slv_resp_err);" in routes
assert "assign s_xpi_region_sel[1] = (ribp.addr <= `SOC_ADDR_FLASH_END);" in routes
assert "assign u_sdio_ribp_if.valid = 1'b0;" in routes
assert gpio.count("// GPIO") == 64
@@ -87,10 +89,9 @@ def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -
assert "assign tmr.paddr = ribp.addr;" in apb_routes
assert "({32{s_psel_q[8]}} & tmr.prdata)" in apb_response
assert "localparam int NSLV = 10;" in apb_declarations
assert fabric.count("soc_ribl_if u_") == 1
assert fabric.count("soc_rib_if u_") == 3
assert fabric.count("ribp_if u_") == 1
assert ".mgmt_ribl(u_mgmt_ribl_if)" in bus_fabric
assert fabric.count("ribp_if u_") == 2
assert fabric.count("rib_if u_") == 3
assert ".mgmt_ribp(u_mgmt_ribp_if)" in bus_fabric
assert ".user_rib(u_user_rib_if)" in bus_fabric
assert ".apb_ribp(u_apb_ribp_if)" in bus_fabric
assert ".rib(u_rib_if)" in bus_fabric
@@ -157,7 +158,7 @@ def test_topology_always_adds_the_user_apb_target(tmp_path: Path) -> None:
assert "apb4_pure_if user_ip ();" in formal_design
assert ".user_ip (user_ip)" in formal_design
assert "logic [ 9:0] psel_comb" in formal_design
assert "wire [ 9:0] psel_comb" in formal_properties
assert "wire [9:0] psel_comb" in formal_properties
def test_topology_rejects_unknown_or_non_rib_regions(tmp_path: Path) -> None:
@@ -317,7 +318,7 @@ def test_generated_rib_routes_select_and_return_the_expected_target(tmp_path: Pa
topology_output = tmp_path / "topology"
generate(topology_output)
source_list = tmp_path / "soc_topology_ribp.fl"
source_list = tmp_path / "ribp_topology.fl"
source_list.write_text(
"\n".join(
[
@@ -327,13 +328,13 @@ def test_generated_rib_routes_select_and_return_the_expected_target(tmp_path: Pa
f"+incdir+{ROOT / 'rtl/managed/clusterip/common/rtl'}",
str(ROOT / "rtl/managed/clusterip/common/rtl/interface/ribp_if.sv"),
str(ROOT / "rtl/managed/clusterip/common/rtl/utils/register.sv"),
str(ROOT / "tests/rtl/soc_topology_ribp_tb.sv"),
str(ROOT / "tests/rtl/ribp_topology_tb.sv"),
"",
]
),
encoding="utf-8",
)
converted = tmp_path / "soc_topology_ribp_tb.v"
converted = tmp_path / "ribp_topology_tb.v"
subprocess.run(
[
sys.executable,
@@ -345,13 +346,13 @@ def test_generated_rib_routes_select_and_return_the_expected_target(tmp_path: Pa
],
check=True,
)
simulation = tmp_path / "soc_topology_ribp_tb"
simulation = tmp_path / "ribp_topology_tb"
subprocess.run(
[
iverilog,
"-g2012",
"-s",
"soc_topology_ribp_tb",
"ribp_topology_tb",
"-o",
str(simulation),
str(converted),
+1 -1
View File
@@ -48,7 +48,7 @@ def test_extensions_generate_isolated_scalar_bindings(tmp_path: Path) -> None:
ip = (tmp_path / "rtl/user_ip_bindings.svh").read_text(encoding="utf-8")
filelist = (tmp_path / "user_extensions.fl").read_text(encoding="utf-8")
assert core.count("soc_rib_if u_user_") == 6
assert core.count("rib_if u_user_") == 6
assert core.count("ribp_if u_user_") == 6
assert core.count("ribp2rib #(") == 6
assert core.count(".SYNC_RESET(1'b1)") == 2