@@ -648,11 +648,12 @@ module picorv32 #(
648
648
reg instr_lb, instr_lh, instr_lw, instr_lbu, instr_lhu, instr_sb, instr_sh, instr_sw;
649
649
reg instr_addi, instr_slti, instr_sltiu, instr_xori, instr_ori, instr_andi, instr_slli, instr_srli, instr_srai;
650
650
reg instr_add, instr_sub, instr_sll, instr_slt, instr_sltu, instr_xor, instr_srl, instr_sra, instr_or, instr_and;
651
- reg instr_rdcycle, instr_rdcycleh, instr_rdinstr, instr_rdinstrh, instr_ecall_ebreak;
651
+ reg instr_rdcycle, instr_rdcycleh, instr_rdinstr, instr_rdinstrh, instr_ecall_ebreak, instr_fence ;
652
652
reg instr_getq, instr_setq, instr_retirq, instr_maskirq, instr_waitirq, instr_timer;
653
653
wire instr_trap;
654
654
655
- reg [regindex_bits- 1 :0 ] decoded_rd, decoded_rs1, decoded_rs2;
655
+ reg [regindex_bits- 1 :0 ] decoded_rd, decoded_rs1;
656
+ reg [4 :0 ] decoded_rs2;
656
657
reg [31 :0 ] decoded_imm, decoded_imm_j;
657
658
reg decoder_trigger;
658
659
reg decoder_trigger_q;
@@ -680,7 +681,7 @@ module picorv32 #(
680
681
instr_lb, instr_lh, instr_lw, instr_lbu, instr_lhu, instr_sb, instr_sh, instr_sw,
681
682
instr_addi, instr_slti, instr_sltiu, instr_xori, instr_ori, instr_andi, instr_slli, instr_srli, instr_srai,
682
683
instr_add, instr_sub, instr_sll, instr_slt, instr_sltu, instr_xor, instr_srl, instr_sra, instr_or, instr_and,
683
- instr_rdcycle, instr_rdcycleh, instr_rdinstr, instr_rdinstrh,
684
+ instr_rdcycle, instr_rdcycleh, instr_rdinstr, instr_rdinstrh, instr_fence,
684
685
instr_getq, instr_setq, instr_retirq, instr_maskirq, instr_waitirq, instr_timer};
685
686
686
687
wire is_rdcycle_rdcycleh_rdinstr_rdinstrh;
@@ -746,6 +747,7 @@ module picorv32 #(
746
747
if (instr_rdcycleh) new_ascii_instr = "rdcycleh" ;
747
748
if (instr_rdinstr) new_ascii_instr = "rdinstr" ;
748
749
if (instr_rdinstrh) new_ascii_instr = "rdinstrh" ;
750
+ if (instr_fence) new_ascii_instr = "fence" ;
749
751
750
752
if (instr_getq) new_ascii_instr = "getq" ;
751
753
if (instr_setq) new_ascii_instr = "setq" ;
@@ -1083,6 +1085,7 @@ module picorv32 #(
1083
1085
1084
1086
instr_ecall_ebreak <= ((mem_rdata_q[6 :0 ] == 7'b1110011 && ! mem_rdata_q[31 :21 ] && ! mem_rdata_q[19 :7 ]) ||
1085
1087
(COMPRESSED_ISA && mem_rdata_q[15 :0 ] == 16'h9002 ));
1088
+ instr_fence <= (mem_rdata_q[6 :0 ] == 7'b0001111 && ! mem_rdata_q[14 :12 ]);
1086
1089
1087
1090
instr_getq <= mem_rdata_q[6 :0 ] == 7'b0001011 && mem_rdata_q[31 :25 ] == 7'b0000000 && ENABLE_IRQ && ENABLE_IRQ_QREGS;
1088
1091
instr_setq <= mem_rdata_q[6 :0 ] == 7'b0001011 && mem_rdata_q[31 :25 ] == 7'b0000001 && ENABLE_IRQ && ENABLE_IRQ_QREGS;
@@ -1158,6 +1161,8 @@ module picorv32 #(
1158
1161
instr_sra <= 0 ;
1159
1162
instr_or <= 0 ;
1160
1163
instr_and <= 0 ;
1164
+
1165
+ instr_fence <= 0 ;
1161
1166
end
1162
1167
end
1163
1168
0 commit comments