More width mismatch fixes

This commit is contained in:
Luke Wren 2022-08-20 15:27:14 +01:00
parent dbe9a7824a
commit bc274867c0
2 changed files with 10 additions and 10 deletions

View File

@ -435,7 +435,7 @@ end
// preemption level: this masking helps avoid re-taking IRQs in frames that you
// have preempted.
assign meipa = {{MAX_IRQS{1'b0}}, irq_r} | meifa;
assign meipa = {{MAX_IRQS-NUM_IRQS{1'b0}}, irq_r} | meifa;
reg [NUM_IRQS-1:0] eirq_active_above_preempt;
reg [NUM_IRQS-1:0] eirq_active_above_ppreempt;

View File

@ -84,22 +84,22 @@ end else begin: instr_decompress
casez (instr_in[15:0])
16'h0: invalid = 1'b1;
RV_C_ADDI4SPN: instr_out = RV_NOZ_ADDI | rfmt_rd(rd_s) | rfmt_rs1(5'h2)
| ({instr_in[10:7], instr_in[12:11], instr_in[5], instr_in[6], 2'b00} << 20);
| {2'h0, instr_in[10:7], instr_in[12:11], instr_in[5], instr_in[6], 2'b00, 20'h00000};
RV_C_LW: instr_out = RV_NOZ_LW | rfmt_rd(rd_s) | rfmt_rs1(rs1_s)
| ({instr_in[5], instr_in[12:10], instr_in[6], 2'b00} << 20);
| {6'h00, instr_in[5], instr_in[12:10], instr_in[6], 2'b00, 20'h00000};
RV_C_SW: instr_out = RV_NOZ_SW | rfmt_rs2(rs2_s) | rfmt_rs1(rs1_s)
| ({instr_in[11:10], instr_in[6], 2'b00} << 7) | ({instr_in[5], instr_in[12]} << 25);
| {5'h00, instr_in[5], instr_in[12], 13'h000, instr_in[11:10], instr_in[6], 2'b00, 7'h00};
RV_C_ADDI: instr_out = RV_NOZ_ADDI | rfmt_rd(rd_l) | rfmt_rs1(rs1_l) | imm_ci;
RV_C_JAL: instr_out = RV_NOZ_JAL | rfmt_rd(5'h1) | imm_cj;
RV_C_J: instr_out = RV_NOZ_JAL | rfmt_rd(5'h0) | imm_cj;
RV_C_LI: instr_out = RV_NOZ_ADDI | rfmt_rd(rd_l) | imm_ci;
RV_C_LUI: begin
if (rd_l == 5'h2) begin
// addi6sp
// addi16sp
instr_out = RV_NOZ_ADDI | rfmt_rd(5'h2) | rfmt_rs1(5'h2) |
({{3{instr_in[12]}}, instr_in[4:3], instr_in[5], instr_in[2], instr_in[6]} << 24);
{{3{instr_in[12]}}, instr_in[4:3], instr_in[5], instr_in[2], instr_in[6], 24'h000000};
end else begin
instr_out = RV_NOZ_LUI | rfmt_rd(rd_l) | ({{15{instr_in[12]}}, instr_in[6:2]} << 12);
instr_out = RV_NOZ_LUI | rfmt_rd(rd_l) | {{15{instr_in[12]}}, instr_in[6:2], 12'h000};
end
invalid = ~|{instr_in[12], instr_in[6:2]}; // RESERVED if imm == 0
end
@ -129,12 +129,12 @@ end else begin: instr_decompress
end
end
RV_C_LWSP: begin
instr_out = RV_NOZ_LW | rfmt_rd(rd_l) | rfmt_rs1(5'h2)
| ({instr_in[3:2], instr_in[12], instr_in[6:4], 2'b00} << 20);
instr_out = RV_NOZ_LW | rfmt_rd(rd_l) | rfmt_rs1(5'h2) |
{4'h0, instr_in[3:2], instr_in[12], instr_in[6:4], 2'b00, 20'h00000};
invalid = ~|rd_l; // RESERVED
end
RV_C_SWSP: instr_out = RV_NOZ_SW | rfmt_rs2(rs2_l) | rfmt_rs1(5'h2)
| ({instr_in[11:9], 2'b00} << 7) | ({instr_in[8:7], instr_in[12]} << 25);
| {4'h0, instr_in[8:7], instr_in[12], 13'h0000, instr_in[11:9], 2'b00, 7'h00};
RV_C_BEQZ: instr_out = RV_NOZ_BEQ | rfmt_rs1(rs1_s) | imm_cb;
RV_C_BNEZ: instr_out = RV_NOZ_BNE | rfmt_rs1(rs1_s) | imm_cb;
default: invalid = 1'b1;