From 8faf0cf33bd2b7f5c7f51589647e7091b884f6a9 Mon Sep 17 00:00:00 2001 From: Olof Kindgren Date: Thu, 27 Aug 2020 21:09:49 +0200 Subject: [PATCH] Simplify and explain csr_imm_en --- rtl/serv_decode.v | 2 +- rtl/serv_immdec.v | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rtl/serv_decode.v b/rtl/serv_decode.v index 14bc21d..30d80ac 100644 --- a/rtl/serv_decode.v +++ b/rtl/serv_decode.v @@ -144,7 +144,7 @@ module serv_decode assign o_csr_source = funct3[1:0]; assign o_csr_d_sel = funct3[2]; - assign o_csr_imm_en = csr_op & o_csr_d_sel; + assign o_csr_imm_en = opcode[4] & opcode[2] & funct3[2]; assign o_csr_addr = (op26 & !op20) ? CSR_MSCRATCH : (op26 & !op21) ? CSR_MEPC : diff --git a/rtl/serv_immdec.v b/rtl/serv_immdec.v index 1a7c5b6..bdc1f1c 100644 --- a/rtl/serv_immdec.v +++ b/rtl/serv_immdec.v @@ -30,6 +30,7 @@ module serv_immdec always @(posedge i_clk) begin if (i_wb_en) begin + /* CSR immediates are always zero-extended, hence clear the signbit */ signbit <= i_wb_rdt[31] & !i_csr_imm_en; imm19_12_20 <= {i_wb_rdt[19:12],i_wb_rdt[20]}; imm7 <= i_wb_rdt[7];