File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ module tb_x0_protection ;
2+
3+ logic [4 : 0 ] rf_waddr_o;
4+ logic rf_we;
5+ logic illegal_reg_rv32e;
6+ logic rf_we_o;
7+
8+ assign rf_we_o = rf_we & ~ illegal_reg_rv32e & (rf_waddr_o != 5'd0 );
9+
10+ initial begin
11+ $display (" Testing x0 protection..." );
12+
13+ rf_we = 1'b1 ;
14+ illegal_reg_rv32e = 1'b0 ;
15+
16+ // x0 write
17+ rf_waddr_o = 5'd0 ;
18+ # 1 ;
19+ if (rf_we_o !== 0 )
20+ $error (" FAIL: x0 write not blocked" );
21+
22+ // ✅ valid write
23+ rf_waddr_o = 5'd5 ;
24+ # 1 ;
25+ if (rf_we_o !== 1 )
26+ $error (" FAIL: valid write blocked" );
27+
28+ $display (" ✅ PASS: x0 protection works" );
29+
30+ $finish ;
31+ end
32+
33+ endmodule
Original file line number Diff line number Diff line change @@ -1197,7 +1197,7 @@ module ibex_decoder #(
11971197 assign illegal_insn_o = illegal_insn | illegal_reg_rv32e;
11981198
11991199 // do not propagate regfile write enable if non-available registers are accessed in RV32E
1200- assign rf_we_o = rf_we & ~ illegal_reg_rv32e;
1200+ assign rf_we_o = rf_we & ~ illegal_reg_rv32e & (rf_waddr_o != 5'd0 ) ;
12011201
12021202 // Not all bits are used
12031203 assign unused_instr_alu = { instr_alu[19 : 15 ],instr_alu[11 : 7 ]} ;
You can’t perform that action at this time.
0 commit comments