diff --git a/alu.sv b/alu.sv index 5d345245..caa462f2 100644 --- a/alu.sv +++ b/alu.sv @@ -331,7 +331,7 @@ module riscv_alu begin cmp_signed = 4'b0; - case (operator_i) + unique case (operator_i) `ALU_GTS, `ALU_GES, `ALU_LTS, @@ -347,6 +347,8 @@ module riscv_alu default: cmp_signed[3:0] = 4'b1000; endcase end + + default:; endcase end @@ -576,7 +578,7 @@ module riscv_alu end `ALU_SHUF2: begin - case (vector_mode_i) + unique case (vector_mode_i) `VEC_MODE8: begin shuffle_reg_sel[3] = operand_b_i[26]; shuffle_reg_sel[2] = operand_b_i[18]; @@ -590,6 +592,8 @@ module riscv_alu shuffle_reg_sel[1] = operand_b_i[ 1]; shuffle_reg_sel[0] = operand_b_i[ 1]; end + + default:; endcase end @@ -601,7 +605,7 @@ module riscv_alu `ALU_PCKLO, `ALU_PCKHI: begin - case (vector_mode_i) + unique case (vector_mode_i) `VEC_MODE8: begin shuffle_byte_sel[3] = 2'b00; shuffle_byte_sel[2] = 2'b00; @@ -615,12 +619,14 @@ module riscv_alu shuffle_byte_sel[1] = 2'b01; shuffle_byte_sel[0] = 2'b00; end + + default:; endcase end `ALU_SHUF2, `ALU_SHUF: begin - case (vector_mode_i) + unique case (vector_mode_i) `VEC_MODE8: begin shuffle_byte_sel[3] = operand_b_i[25:24]; shuffle_byte_sel[2] = operand_b_i[17:16]; @@ -634,6 +640,8 @@ module riscv_alu shuffle_byte_sel[1] = {operand_b_i[ 0], 1'b1}; shuffle_byte_sel[0] = {operand_b_i[ 0], 1'b0}; end + + default:; endcase end @@ -999,36 +1007,36 @@ module alu_popcnt output logic [5: 0] result_o ); - logic [1:0] cnt_l1[16]; - logic [2:0] cnt_l2[8]; - logic [3:0] cnt_l3[4]; - logic [4:0] cnt_l4[2]; + logic [15:0][1:0] cnt_l1; + logic [ 7:0][2:0] cnt_l2; + logic [ 3:0][3:0] cnt_l3; + logic [ 1:0][4:0] cnt_l4; genvar l, m, n, p; generate for(l = 0; l < 16; l++) begin - assign cnt_l1[l] = in_i[2*l] + in_i[2*l + 1]; + assign cnt_l1[l] = {1'b0, in_i[2*l]} + {1'b0, in_i[2*l + 1]}; end endgenerate generate for(m = 0; m < 8; m++) begin - assign cnt_l2[m] = cnt_l1[2*m] + cnt_l1[2*m + 1]; + assign cnt_l2[m] = {1'b0, cnt_l1[2*m]} + {1'b0, cnt_l1[2*m + 1]}; end endgenerate generate for(n = 0; n < 4; n++) begin - assign cnt_l3[n] = cnt_l2[2*n] + cnt_l2[2*n + 1]; + assign cnt_l3[n] = {1'b0, cnt_l2[2*n]} + {1'b0, cnt_l2[2*n + 1]}; end endgenerate generate for(p = 0; p < 2; p++) begin - assign cnt_l4[p] = cnt_l3[2*p] + cnt_l3[2*p + 1]; + assign cnt_l4[p] = {1'b0, cnt_l3[2*p]} + {1'b0, cnt_l3[2*p + 1]}; end endgenerate - assign result_o = cnt_l4[0] + cnt_l4[1]; + assign result_o = {1'b0, cnt_l4[0]} + {1'b0, cnt_l4[1]}; endmodule diff --git a/id_stage.sv b/id_stage.sv index 9dea931a..9ad7a744 100644 --- a/id_stage.sv +++ b/id_stage.sv @@ -431,7 +431,7 @@ module riscv_id_stage /////////////////////////////////////////////// // hwloop register id - assign hwloop_regid_int = instr[8:7]; // rd contains hwloop register id + assign hwloop_regid_int = instr[7]; // rd contains hwloop register id // hwloop target mux always_comb diff --git a/mult.sv b/mult.sv index 88779c63..806a4ed1 100644 --- a/mult.sv +++ b/mult.sv @@ -59,7 +59,7 @@ module riscv_mult logic [16:0] short_op_a; logic [16:0] short_op_b; - logic [31:0] short_mac; + logic [33:0] short_mac; logic [31:0] short_round, short_round_tmp; logic [31:0] short_result; @@ -108,7 +108,7 @@ module riscv_mult logic [1:0][16:0] dot_short_op_a; logic [1:0][16:0] dot_short_op_b; - logic [1:0][31:0] dot_short_mul; + logic [1:0][33:0] dot_short_mul; logic [31:0] dot_short_result; @@ -127,7 +127,9 @@ module riscv_mult assign dot_char_mul[2] = $signed(dot_char_op_a[2]) * $signed(dot_char_op_b[2]); assign dot_char_mul[3] = $signed(dot_char_op_a[3]) * $signed(dot_char_op_b[3]); - assign dot_char_result = $signed(dot_char_mul[0]) + $signed(dot_char_mul[1]) + $signed(dot_char_mul[2]) + $signed(dot_char_mul[3]) + $signed(dot_op_c_i); + assign dot_char_result = $signed(dot_char_mul[0]) + $signed(dot_char_mul[1]) + + $signed(dot_char_mul[2]) + $signed(dot_char_mul[3]) + + $signed(dot_op_c_i); assign dot_short_op_a[0] = {dot_signed_i[1] & dot_op_a_i[15], dot_op_a_i[15: 0]}; @@ -139,7 +141,7 @@ module riscv_mult assign dot_short_mul[0] = $signed(dot_short_op_a[0]) * $signed(dot_short_op_b[0]); assign dot_short_mul[1] = $signed(dot_short_op_a[1]) * $signed(dot_short_op_b[1]); - assign dot_short_result = $signed(dot_short_mul[0]) + $signed(dot_short_mul[1]) + $signed(dot_op_c_i); + assign dot_short_result = $signed(dot_short_mul[0][31:0]) + $signed(dot_short_mul[1][31:0]) + $signed(dot_op_c_i); //////////////////////////////////////////////////////// diff --git a/register_file_ff.sv b/register_file_ff.sv index e94c06a3..7f9e214e 100644 --- a/register_file_ff.sv +++ b/register_file_ff.sv @@ -65,9 +65,9 @@ module riscv_register_file begin : we_a_decoder for (int i = 0; i < NUM_WORDS; i++) begin if (waddr_a_i == i) - we_a_dec[i] <= we_a_i; + we_a_dec[i] = we_a_i; else - we_a_dec[i] <= 1'b0; + we_a_dec[i] = 1'b0; end end @@ -75,9 +75,9 @@ module riscv_register_file begin : we_b_decoder for (int i=0; i