diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rtl/montprod.v | 49 | ||||
-rw-r--r-- | src/tb/tb_montprod.v | 2 |
2 files changed, 14 insertions, 37 deletions
diff --git a/src/rtl/montprod.v b/src/rtl/montprod.v index ccf8341..189bb18 100644 --- a/src/rtl/montprod.v +++ b/src/rtl/montprod.v @@ -68,16 +68,14 @@ module montprod #(parameter OPW = 32, parameter ADW = 8) // Internal constant and parameter definitions. //---------------------------------------------------------------- localparam CTRL_IDLE = 4'h0; - localparam CTRL_INIT_S = 4'h1; - localparam CTRL_WAIT = 4'h2; - localparam CTRL_LOOP_ITER = 4'h3; - localparam CTRL_LOOP_BQ = 4'h4; - localparam CTRL_CALC_ADD = 4'h5; - localparam CTRL_STALLPIPE_ADD = 4'h6; - localparam CTRL_CALC_SDIV2 = 4'h7; - localparam CTRL_STALLPIPE_SDIV2 = 4'h8; - localparam CTRL_L_STALLPIPE_ES = 4'h9; - localparam CTRL_EMIT_S = 4'ha; + localparam CTRL_LOOP_ITER = 4'h1; + localparam CTRL_LOOP_BQ = 4'h2; + localparam CTRL_CALC_ADD = 4'h3; + localparam CTRL_STALLPIPE_ADD = 4'h4; + localparam CTRL_CALC_SDIV2 = 4'h5; + localparam CTRL_STALLPIPE_SDIV2 = 4'h6; + localparam CTRL_L_STALLPIPE_ES = 4'h7; + localparam CTRL_EMIT_S = 4'h8; localparam SMUX_ZERO = 2'h0; localparam SMUX_ITER = 2'h1; @@ -317,11 +315,6 @@ module montprod #(parameter OPW = 32, parameter ADW = 8) s_mem_we = 1'b0; case (montprod_ctrl_reg) - CTRL_INIT_S: - begin - s_mem_we_new = 1'b1; - end - CTRL_LOOP_ITER: begin s_mem_read_addr = length_m1; @@ -409,7 +402,11 @@ module montprod #(parameter OPW = 32, parameter ADW = 8) always @* begin : bq b_new = opb_data[b_bit_index_reg]; - q_new = s_mem_read_data[0] ^ (opa_data[0] & b_new); + + if (first_iteration_reg) + q_new = 1'b0 ^ (opa_data[0] & b_new); + else + q_new = s_mem_read_data[0] ^ (opa_data[0] & b_new); b_bit_index_new = (2**(13 - ADW) - 1) - loop_ctr_reg[(13 - ADW - 1) : 0]; b_word_index = loop_ctr_reg[12 : (13 - ADW)]; @@ -513,29 +510,11 @@ module montprod #(parameter OPW = 32, parameter ADW = 8) ready_we = 1'b1; reset_word_index_lsw = 1'b1; loop_ctr_set = 1'b1; - montprod_ctrl_new = CTRL_INIT_S; + montprod_ctrl_new = CTRL_LOOP_ITER; montprod_ctrl_we = 1'b1; end end - CTRL_INIT_S: - begin - s_mux_new = SMUX_ZERO; - dec_word_index = 1'b1; - - if (word_index_reg == 0) - begin - montprod_ctrl_new = CTRL_WAIT; - montprod_ctrl_we = 1'b1; - end - end - - CTRL_WAIT: - begin - montprod_ctrl_new = CTRL_LOOP_ITER; - montprod_ctrl_we = 1'b1; - end - //calculate q = (s - b * A) & 1;. // Also abort loop if done. CTRL_LOOP_ITER: diff --git a/src/tb/tb_montprod.v b/src/tb/tb_montprod.v index c98e8a2..cd27949 100644 --- a/src/tb/tb_montprod.v +++ b/src/tb/tb_montprod.v @@ -241,8 +241,6 @@ module tb_montprod(); case (dut.montprod_ctrl_new) dut.CTRL_IDLE: $display("FSM: IDLE"); - dut.CTRL_INIT_S: - $display("FSM: INIT_S"); dut.CTRL_LOOP_ITER: $display("FSM: LOOP_ITER"); dut.CTRL_LOOP_BQ: |