mirror of
https://github.com/olofk/serv.git
synced 2025-04-20 11:57:07 -04:00
Optimize CSR immediate handling
This commit is contained in:
parent
badcd7ea55
commit
7f16f17ca5
3 changed files with 7 additions and 7 deletions
|
@ -52,6 +52,7 @@ module serv_decode
|
|||
output wire o_csr_mcause_en,
|
||||
output wire [1:0] o_csr_source,
|
||||
output wire o_csr_d_sel,
|
||||
output wire o_csr_imm,
|
||||
//To top
|
||||
output wire o_imm,
|
||||
output wire o_op_b_source,
|
||||
|
@ -151,6 +152,7 @@ module serv_decode
|
|||
|
||||
assign o_csr_source = funct3[1:0];
|
||||
assign o_csr_d_sel = funct3[2];
|
||||
assign o_csr_imm = o_rf_rs1_addr[0];
|
||||
|
||||
assign o_csr_addr = (op26 & !op20) ? CSR_MSCRATCH :
|
||||
(op26 & !op21) ? CSR_MEPC :
|
||||
|
@ -209,6 +211,8 @@ module serv_decode
|
|||
imm30_25 <= {m2[1] ? imm7 : m2[0] ? signbit : imm19_12_20[0], imm30_25[5:1]};
|
||||
imm24_20 <= {imm30_25[0], imm24_20[4:1]};
|
||||
imm11_7 <= {imm30_25[0], imm11_7[4:1]};
|
||||
if (csr_op & o_csr_d_sel)
|
||||
o_rf_rs1_addr <= {1'b0,o_rf_rs1_addr[4:1]};
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -18,7 +18,6 @@ module serv_state
|
|||
input wire i_slt_op,
|
||||
input wire i_e_op,
|
||||
input wire i_rd_op,
|
||||
input wire [4:0] i_rs1_addr,
|
||||
output wire o_init,
|
||||
output wire o_cnt_en,
|
||||
output reg [4:0] o_cnt,
|
||||
|
@ -33,8 +32,7 @@ module serv_state
|
|||
output wire [1:0] o_mem_bytecnt,
|
||||
input wire i_mem_misalign,
|
||||
output reg o_cnt_done,
|
||||
output wire o_bufreg_hold,
|
||||
output wire o_csr_imm);
|
||||
output wire o_bufreg_hold);
|
||||
|
||||
localparam [1:0]
|
||||
IDLE = 2'd0,
|
||||
|
@ -49,7 +47,6 @@ module serv_state
|
|||
//Update PC in RUN or TRAP states
|
||||
assign o_ctrl_pc_en = o_cnt_en & !o_init;
|
||||
|
||||
assign o_csr_imm = (o_cnt < 5) ? i_rs1_addr[o_cnt[2:0]] : 1'b0;
|
||||
assign o_alu_shamt_en = (o_cnt < 5) & o_init;
|
||||
|
||||
assign o_mem_bytecnt = o_cnt[4:3];
|
||||
|
|
|
@ -163,7 +163,6 @@ module serv_top
|
|||
.i_slt_op (slt_op),
|
||||
.i_e_op (e_op),
|
||||
.i_rd_op (rd_op),
|
||||
.i_rs1_addr (rs1_addr),
|
||||
.o_init (init),
|
||||
.o_cnt_en (cnt_en),
|
||||
.o_cnt (cnt),
|
||||
|
@ -178,8 +177,7 @@ module serv_top
|
|||
.i_alu_sh_done (alu_sh_done),
|
||||
.o_dbus_cyc (o_dbus_cyc),
|
||||
.o_mem_bytecnt (mem_bytecnt),
|
||||
.i_mem_misalign (mem_misalign),
|
||||
.o_csr_imm (csr_imm));
|
||||
.i_mem_misalign (mem_misalign));
|
||||
|
||||
wire bufreg_clr_lsb;
|
||||
|
||||
|
@ -237,6 +235,7 @@ module serv_top
|
|||
.o_csr_mcause_en (csr_mcause_en),
|
||||
.o_csr_source (csr_source),
|
||||
.o_csr_d_sel (csr_d_sel),
|
||||
.o_csr_imm (csr_imm),
|
||||
//To top
|
||||
.o_imm (imm),
|
||||
.o_rd_csr_en (rd_csr_en),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue