diff options
Diffstat (limited to 'src/rtl/montprod.v')
-rw-r--r-- | src/rtl/montprod.v | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/rtl/montprod.v b/src/rtl/montprod.v index 465bd70..cd7d5a9 100644 --- a/src/rtl/montprod.v +++ b/src/rtl/montprod.v @@ -142,10 +142,9 @@ module montprod( reg shr_carry_in_reg; reg shr_carry_in_new; - reg reset_word_index_lsw; - reg reset_word_index_msw; - - reg [31 : 0] sa_adder_data_in; + reg first_iteration_reg; + reg first_iteration_new; + reg first_iteration_we; //---------------------------------------------------------------- @@ -161,6 +160,11 @@ module montprod( wire shr_carry_out; wire [31 : 0] shr_data_out; + reg reset_word_index_lsw; + reg reset_word_index_msw; + + reg [31 : 0] sa_adder_data_in; + //---------------------------------------------------------------- @@ -226,7 +230,7 @@ module montprod( begin : reg_update if (!reset_n) begin - ready_reg <= 1'b0; + ready_reg <= 1'b1; loop_ctr_reg <= 13'h0; word_index_reg <= 8'h0; word_index_prev_reg <= 8'h0; @@ -239,6 +243,7 @@ module montprod( s_mem_we_reg <= 1'b0; s_mem_wr_addr_reg <= 8'h0; b_bit_index_reg <= 5'h0; + first_iteration_reg <= 1'b0; montprod_ctrl_reg <= CTRL_IDLE; end else @@ -254,6 +259,9 @@ module montprod( add_carry_in_sa_reg <= add_carry_in_sa_new; add_carry_in_sm_reg <= add_carry_in_sm_new; + if (first_iteration_we) + first_iteration_reg <= first_iteration_new; + if (b_bit_index_we) b_bit_index_reg <= b_bit_index_new; @@ -445,21 +453,19 @@ module montprod( //---------------------------------------------------------------- always @* begin : montprod_ctrl - ready_new = 1'b0; - ready_we = 1'b0; - montprod_ctrl_new = CTRL_IDLE; - montprod_ctrl_we = 1'b0; - - loop_ctr_set = 1'b0; - loop_ctr_dec = 1'b0; - b_bit_index_we = 1'b0; - bq_we = 1'b0; - - s_mux_new = SMUX_0; - + ready_new = 1'b0; + ready_we = 1'b0; + loop_ctr_set = 1'b0; + loop_ctr_dec = 1'b0; + b_bit_index_we = 1'b0; + bq_we = 1'b0; + s_mux_new = SMUX_0; reset_word_index_lsw = 1'b0; reset_word_index_msw = 1'b0; - + first_iteration_new = 1'b0; + first_iteration_we = 1'b0; + montprod_ctrl_new = CTRL_IDLE; + montprod_ctrl_we = 1'b0; case (montprod_ctrl_reg) CTRL_IDLE: @@ -468,14 +474,11 @@ module montprod( begin ready_new = 1'b0; ready_we = 1'b1; - montprod_ctrl_new = CTRL_INIT_S; - montprod_ctrl_we = 1'b1; reset_word_index_lsw = 1'b1; - end - else - begin - ready_new = 1'b1; - ready_we = 1'b1; + first_iteration_new = 1'b1; + first_iteration_we = 1'b1; + montprod_ctrl_new = CTRL_INIT_S; + montprod_ctrl_we = 1'b1; end end @@ -529,6 +532,8 @@ module montprod( CTRL_L_STALLPIPE_SA: begin + first_iteration_new = 1'b0; + first_iteration_we = 1'b1; montprod_ctrl_new = CTRL_L_CALC_SDIV2; montprod_ctrl_we = 1'b1; reset_word_index_msw = 1'b1; |