Skip to content

Commit 11ce040

Browse files
akashlevyhcallahan-lowrisc
authored andcommitted
Fix dsim RTL incompatibilities
1 parent 95067af commit 11ce040

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

rtl/ibex_core.sv

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,9 +1591,28 @@ module ibex_core import ibex_pkg::*; #(
15911591
rvfi_ext_stage_debug_req[i+1] <= '0;
15921592
rvfi_ext_stage_debug_mode[i] <= '0;
15931593
rvfi_ext_stage_mcycle[i] <= '0;
1594-
rvfi_ext_stage_mhpmcounters[i] <= '{10{'0}};
1595-
rvfi_ext_stage_mhpmcountersh[i] <= '{10{'0}};
15961594
rvfi_ext_stage_ic_scr_key_valid[i] <= '0;
1595+
// DSim does not properly support array assignment in for loop, so unroll
1596+
rvfi_ext_stage_mhpmcounters[i][0] <= '0;
1597+
rvfi_ext_stage_mhpmcountersh[i][0] <= '0;
1598+
rvfi_ext_stage_mhpmcounters[i][1] <= '0;
1599+
rvfi_ext_stage_mhpmcountersh[i][1] <= '0;
1600+
rvfi_ext_stage_mhpmcounters[i][2] <= '0;
1601+
rvfi_ext_stage_mhpmcountersh[i][2] <= '0;
1602+
rvfi_ext_stage_mhpmcounters[i][3] <= '0;
1603+
rvfi_ext_stage_mhpmcountersh[i][3] <= '0;
1604+
rvfi_ext_stage_mhpmcounters[i][4] <= '0;
1605+
rvfi_ext_stage_mhpmcountersh[i][4] <= '0;
1606+
rvfi_ext_stage_mhpmcounters[i][5] <= '0;
1607+
rvfi_ext_stage_mhpmcountersh[i][5] <= '0;
1608+
rvfi_ext_stage_mhpmcounters[i][6] <= '0;
1609+
rvfi_ext_stage_mhpmcountersh[i][6] <= '0;
1610+
rvfi_ext_stage_mhpmcounters[i][7] <= '0;
1611+
rvfi_ext_stage_mhpmcountersh[i][7] <= '0;
1612+
rvfi_ext_stage_mhpmcounters[i][8] <= '0;
1613+
rvfi_ext_stage_mhpmcountersh[i][8] <= '0;
1614+
rvfi_ext_stage_mhpmcounters[i][9] <= '0;
1615+
rvfi_ext_stage_mhpmcountersh[i][9] <= '0;
15971616
end else begin
15981617
rvfi_stage_valid[i] <= rvfi_stage_valid_d[i];
15991618

@@ -1624,12 +1643,27 @@ module ibex_core import ibex_pkg::*; #(
16241643
rvfi_ext_stage_debug_mode[i] <= debug_mode;
16251644
rvfi_ext_stage_mcycle[i] <= cs_registers_i.mcycle_counter_i.counter_val_o;
16261645
rvfi_ext_stage_ic_scr_key_valid[i] <= cs_registers_i.cpuctrlsts_ic_scr_key_valid_q;
1627-
// This is done this way because SystemVerilog does not support looping through
1628-
// gen_cntrs[k] within a for loop.
1629-
for (int k=0; k < 10; k++) begin
1630-
rvfi_ext_stage_mhpmcounters[i][k] <= cs_registers_i.mhpmcounter[k+3][31:0];
1631-
rvfi_ext_stage_mhpmcountersh[i][k] <= cs_registers_i.mhpmcounter[k+3][63:32];
1632-
end
1646+
// DSim does not properly support array assignment in for loop, so unroll
1647+
rvfi_ext_stage_mhpmcounters[i][0] <= cs_registers_i.mhpmcounter[3][31:0];
1648+
rvfi_ext_stage_mhpmcountersh[i][0] <= cs_registers_i.mhpmcounter[3][63:32];
1649+
rvfi_ext_stage_mhpmcounters[i][1] <= cs_registers_i.mhpmcounter[4][31:0];
1650+
rvfi_ext_stage_mhpmcountersh[i][1] <= cs_registers_i.mhpmcounter[4][63:32];
1651+
rvfi_ext_stage_mhpmcounters[i][2] <= cs_registers_i.mhpmcounter[5][31:0];
1652+
rvfi_ext_stage_mhpmcountersh[i][2] <= cs_registers_i.mhpmcounter[5][63:32];
1653+
rvfi_ext_stage_mhpmcounters[i][3] <= cs_registers_i.mhpmcounter[6][31:0];
1654+
rvfi_ext_stage_mhpmcountersh[i][3] <= cs_registers_i.mhpmcounter[6][63:32];
1655+
rvfi_ext_stage_mhpmcounters[i][4] <= cs_registers_i.mhpmcounter[7][31:0];
1656+
rvfi_ext_stage_mhpmcountersh[i][4] <= cs_registers_i.mhpmcounter[7][63:32];
1657+
rvfi_ext_stage_mhpmcounters[i][5] <= cs_registers_i.mhpmcounter[8][31:0];
1658+
rvfi_ext_stage_mhpmcountersh[i][5] <= cs_registers_i.mhpmcounter[8][63:32];
1659+
rvfi_ext_stage_mhpmcounters[i][6] <= cs_registers_i.mhpmcounter[9][31:0];
1660+
rvfi_ext_stage_mhpmcountersh[i][6] <= cs_registers_i.mhpmcounter[9][63:32];
1661+
rvfi_ext_stage_mhpmcounters[i][7] <= cs_registers_i.mhpmcounter[10][31:0];
1662+
rvfi_ext_stage_mhpmcountersh[i][7] <= cs_registers_i.mhpmcounter[10][63:32];
1663+
rvfi_ext_stage_mhpmcounters[i][8] <= cs_registers_i.mhpmcounter[11][31:0];
1664+
rvfi_ext_stage_mhpmcountersh[i][8] <= cs_registers_i.mhpmcounter[11][63:32];
1665+
rvfi_ext_stage_mhpmcounters[i][9] <= cs_registers_i.mhpmcounter[12][31:0];
1666+
rvfi_ext_stage_mhpmcountersh[i][9] <= cs_registers_i.mhpmcounter[12][63:32];
16331667
end
16341668

16351669
// Some of the rvfi_ext_* signals are used to provide an interrupt notification (signalled

0 commit comments

Comments
 (0)