⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mea.v

📁 rs的译码器
💻 V
📖 第 1 页 / 共 3 页
字号:
          else if ( (li != 5'h0) && (swap == 1'b1) )
            next_state    =  shift_with_swap;
          else if ( (li != 5'h0) && (swap == 1'b0) )
            next_state    =  shift_non_swap;
          else
            next_state    =  ready;
        end

      shift_non_swap :
        begin
          start_calc      =  1'b0;
          if ( shift_counter != 5'h0 )
            next_state    =  shift_non_swap;
          else
            next_state    =  non_swap_reload;
        end

      shift_with_swap :
        begin
          start_calc      =  1'b0;
          if ( shift_counter != 5'h0 )
            next_state    =  shift_with_swap;
          else
            next_state    =  swap_reload;
        end

      non_swap_reload :
        begin
          if( reload_counter == 5'h11 )
            begin
            start_calc    =  1'b1;
            next_state    =  ready;
            end
          else
            begin
            start_calc    =  1'b0;
            next_state    =  non_swap_reload;
            end
        end
      
      swap_reload :
        begin
          if( reload_counter == 5'h11 )
            begin
            start_calc    =  1'b1;
            next_state    =  ready;
            end
          else
            begin
            start_calc    =  1'b0;
            next_state    =  swap_reload;
            end
        end

      default :
        begin
          start_calc      =  1'b0;
          next_state      =  idle;
        end
    endcase
  end


always@(posedge clk or negedge n_rst)
  begin
    //reset values of the Ri Qi Li Ui registers, after reset
    if ( n_rst == 1'b0 )
      begin
      R16 <= 8'h0; Q16 <= 8'h0; L16 <= 8'h0; U16 <= 8'h0;
      R15 <= 8'h0; Q15 <= 8'h0; L15 <= 8'h0; U15 <= 8'h0;
      R14 <= 8'h0; Q14 <= 8'h0; L14 <= 8'h0; U14 <= 8'h0;
      R13 <= 8'h0; Q13 <= 8'h0; L13 <= 8'h0; U13 <= 8'h0;
      R12 <= 8'h0; Q12 <= 8'h0; L12 <= 8'h0; U12 <= 8'h0;
      R11 <= 8'h0; Q11 <= 8'h0; L11 <= 8'h0; U11 <= 8'h0;
      R10 <= 8'h0; Q10 <= 8'h0; L10 <= 8'h0; U10 <= 8'h0;
      R9  <= 8'h0; Q9  <= 8'h0; L9  <= 8'h0; U9  <= 8'h0;
      R8  <= 8'h0; Q8  <= 8'h0; L8  <= 8'h0; U8  <= 8'h0;
      R7  <= 8'h0; Q7  <= 8'h0; L7  <= 8'h0; U7  <= 8'h0;
      R6  <= 8'h0; Q6  <= 8'h0; L6  <= 8'h0; U6  <= 8'h0;
      R5  <= 8'h0; Q5  <= 8'h0; L5  <= 8'h0; U5  <= 8'h0;
      R4  <= 8'h0; Q4  <= 8'h0; L4  <= 8'h0; U4  <= 8'h0;
      R3  <= 8'h0; Q3  <= 8'h0; L3  <= 8'h0; U3  <= 8'h0;
      R2  <= 8'h0; Q2  <= 8'h0; L2  <= 8'h0; U2  <= 8'h0;
      R1  <= 8'h0; Q1  <= 8'h0; L1  <= 8'h0; U1  <= 8'h0;
      R0  <= 8'h0; Q0  <= 8'h0; L0  <= 8'h0; U0  <= 8'h0;
      end
 
    //load initial values of Ri Qi Li Ui registers, from idle -> ready
    else if ( current_state == idle && clken == 1'b1 && phase1 == 1'b1 )
      begin
      R16 <= 8'h1; Q16 <= 8'h0      ; L16 <= 8'h0; U16 <= 8'h0;
      R15 <= 8'h0; Q15 <= syndrome15; L15 <= 8'h0; U15 <= 8'h0;
      R14 <= 8'h0; Q14 <= syndrome14; L14 <= 8'h0; U14 <= 8'h0;
      R13 <= 8'h0; Q13 <= syndrome13; L13 <= 8'h0; U13 <= 8'h0;
      R12 <= 8'h0; Q12 <= syndrome12; L12 <= 8'h0; U12 <= 8'h0;
      R11 <= 8'h0; Q11 <= syndrome11; L11 <= 8'h0; U11 <= 8'h0;
      R10 <= 8'h0; Q10 <= syndrome10; L10 <= 8'h0; U10 <= 8'h0;
      R9  <= 8'h0; Q9  <= syndrome9 ; L9  <= 8'h0; U9  <= 8'h0;
      R8  <= 8'h0; Q8  <= syndrome8 ; L8  <= 8'h0; U8  <= 8'h0;
      R7  <= 8'h0; Q7  <= syndrome7 ; L7  <= 8'h0; U7  <= 8'h0;
      R6  <= 8'h0; Q6  <= syndrome6 ; L6  <= 8'h0; U6  <= 8'h0;
      R5  <= 8'h0; Q5  <= syndrome5 ; L5  <= 8'h0; U5  <= 8'h0;
      R4  <= 8'h0; Q4  <= syndrome4 ; L4  <= 8'h0; U4  <= 8'h0;
      R3  <= 8'h0; Q3  <= syndrome3 ; L3  <= 8'h0; U3  <= 8'h0;
      R2  <= 8'h0; Q2  <= syndrome2 ; L2  <= 8'h0; U2  <= 8'h0;
      R1  <= 8'h0; Q1  <= syndrome1 ; L1  <= 8'h0; U1  <= 8'h0;
      R0  <= 8'h0; Q0  <= syndrome0 ; L0  <= 8'h0; U0  <= 8'h1;
      end

    //prepare for non_swap shift, from ready -> shift_non_swap or from shift_non_swap -> shift_non_swap
    else if ( (current_state == ready || current_state == shift_non_swap) && next_state == shift_non_swap 
               && clken == 1'b1 && phase1 == 1'b1 )
      begin
      R16 <= R16;  Q16 <= Q15; L16 <= L16; U16 <= U15;
      R15 <= R15;  Q15 <= Q14; L15 <= L15; U15 <= U14;
      R14 <= R14;  Q14 <= Q13; L14 <= L14; U14 <= U13;
      R13 <= R13;  Q13 <= Q12; L13 <= L13; U13 <= U12;
      R12 <= R12;  Q12 <= Q11; L12 <= L12; U12 <= U11;
      R11 <= R11;  Q11 <= Q10; L11 <= L11; U11 <= U10;
      R10 <= R10;  Q10 <= Q9 ; L10 <= L10; U10 <= U9 ;
      R9  <= R9 ;  Q9  <= Q8 ; L9  <= L9 ; U9  <= U8 ;
      R8  <= R8 ;  Q8  <= Q7 ; L8  <= L8 ; U8  <= U7 ;
      R7  <= R7 ;  Q7  <= Q6 ; L7  <= L7 ; U7  <= U6 ;
      R6  <= R6 ;  Q6  <= Q5 ; L6  <= L6 ; U6  <= U5 ;
      R5  <= R5 ;  Q5  <= Q4 ; L5  <= L5 ; U5  <= U4 ;
      R4  <= R4 ;  Q4  <= Q3 ; L4  <= L4 ; U4  <= U3 ;
      R3  <= R3 ;  Q3  <= Q2 ; L3  <= L3 ; U3  <= U2 ;
      R2  <= R2 ;  Q2  <= Q1 ; L2  <= L2 ; U2  <= U1 ;
      R1  <= R1 ;  Q1  <= Q0 ; L1  <= L1 ; U1  <= U0 ;
      R0  <= R0 ;  Q0  <= Q16; L0  <= L0 ; U0  <= U16;
      end
        
    //prepare for with_swap shift, from ready -> shift_with_swap or from shift_with_swap -> shift_with_swap
    else if ( (current_state == ready || current_state == shift_with_swap) && next_state == shift_with_swap 
              && clken == 1'b1 && phase1 == 1'b1 )
      begin                                       
      R16 <= R15;  Q16 <= Q16; L16 <= L15; U16 <= U16;
      R15 <= R14;  Q15 <= Q15; L15 <= L14; U15 <= U15;
      R14 <= R13;  Q14 <= Q14; L14 <= L13; U14 <= U14;
      R13 <= R12;  Q13 <= Q13; L13 <= L12; U13 <= U13;
      R12 <= R11;  Q12 <= Q12; L12 <= L11; U12 <= U12;
      R11 <= R10;  Q11 <= Q11; L11 <= L10; U11 <= U11;
      R10 <= R9 ;  Q10 <= Q10; L10 <= L9 ; U10 <= U10;
      R9  <= R8 ;  Q9  <= Q9 ; L9  <= L8 ; U9  <= U9 ;
      R8  <= R7 ;  Q8  <= Q8 ; L8  <= L7 ; U8  <= U8 ;
      R7  <= R6 ;  Q7  <= Q7 ; L7  <= L6 ; U7  <= U7 ;
      R6  <= R5 ;  Q6  <= Q6 ; L6  <= L5 ; U6  <= U6 ;
      R5  <= R4 ;  Q5  <= Q5 ; L5  <= L4 ; U5  <= U5 ;
      R4  <= R3 ;  Q4  <= Q4 ; L4  <= L3 ; U4  <= U4 ;
      R3  <= R2 ;  Q3  <= Q3 ; L3  <= L2 ; U3  <= U3 ;
      R2  <= R1 ;  Q2  <= Q2 ; L2  <= L1 ; U2  <= U2 ;
      R1  <= R0 ;  Q1  <= Q1 ; L1  <= L0 ; U1  <= U1 ;
      R0  <= R16;  Q0  <= Q0 ; L0  <= L16; U0  <= U0 ;
      end

    //prepare for reload without shift, from ready -> non_swap_reload or from shift_non_swap -> non_swap_reload
    else if ( (current_state == ready || current_state == shift_non_swap) && next_state == non_swap_reload
             && clken == 1'b1 && phase1 == 1'b1 )
      begin
      R16 <= R15 ;       Q16 <= Q15;  L16 <= L15;       U16 <= U15;
      R15 <= R14 ;       Q15 <= Q14;  L15 <= L14;       U15 <= U14;
      R14 <= R13 ;       Q14 <= Q13;  L14 <= L13;       U14 <= U13;
      R13 <= R12 ;       Q13 <= Q12;  L13 <= L12;       U13 <= U12;
      R12 <= R11 ;       Q12 <= Q11;  L12 <= L11;       U12 <= U11;
      R11 <= R10 ;       Q11 <= Q10;  L11 <= L10;       U11 <= U10;
      R10 <= R9  ;       Q10 <= Q9 ;  L10 <= L9 ;       U10 <= U9 ;
      R9  <= R8  ;       Q9  <= Q8 ;  L9  <= L8 ;       U9  <= U8 ;
      R8  <= R7  ;       Q8  <= Q7 ;  L8  <= L7 ;       U8  <= U7 ;
      R7  <= R6  ;       Q7  <= Q6 ;  L7  <= L6 ;       U7  <= U6 ;
      R6  <= R5  ;       Q6  <= Q5 ;  L6  <= L5 ;       U6  <= U5 ;
      R5  <= R4  ;       Q5  <= Q4 ;  L5  <= L4 ;       U5  <= U4 ;
      R4  <= R3  ;       Q4  <= Q3 ;  L4  <= L3 ;       U4  <= U3 ;
      R3  <= R2  ;       Q3  <= Q2 ;  L3  <= L2 ;       U3  <= U2 ;
      R2  <= R1  ;       Q2  <= Q1 ;  L2  <= L1 ;       U2  <= U1 ;
      R1  <= R0  ;       Q1  <= Q0 ;  L1  <= L0 ;       U1  <= U0 ;
      R0  <= result_RQ ; Q0  <= Q16;  L0  <= result_LU; U0  <= U16;
      end

    //prepare for reload with shift, from shift_non_swap -> reload and from shift_with_swap -> reload
    else if ( current_state == shift_with_swap && next_state == swap_reload && clken == 1'b1 && phase1 == 1'b1 )
      begin
      R16 <= R15 ;       Q16 <= Q15;  L16 <= L15;       U16 <= U15;
      R15 <= R14 ;       Q15 <= Q14;  L15 <= L14;       U15 <= U14;
      R14 <= R13 ;       Q14 <= Q13;  L14 <= L13;       U14 <= U13;
      R13 <= R12 ;       Q13 <= Q12;  L13 <= L12;       U13 <= U12;
      R12 <= R11 ;       Q12 <= Q11;  L12 <= L11;       U12 <= U11;
      R11 <= R10 ;       Q11 <= Q10;  L11 <= L10;       U11 <= U10;
      R10 <= R9  ;       Q10 <= Q9 ;  L10 <= L9 ;       U10 <= U9 ;
      R9  <= R8  ;       Q9  <= Q8 ;  L9  <= L8 ;       U9  <= U8 ;
      R8  <= R7  ;       Q8  <= Q7 ;  L8  <= L7 ;       U8  <= U7 ;
      R7  <= R6  ;       Q7  <= Q6 ;  L7  <= L6 ;       U7  <= U6 ;
      R6  <= R5  ;       Q6  <= Q5 ;  L6  <= L5 ;       U6  <= U5 ;
      R5  <= R4  ;       Q5  <= Q4 ;  L5  <= L4 ;       U5  <= U4 ;
      R4  <= R3  ;       Q4  <= Q3 ;  L4  <= L3 ;       U4  <= U3 ;
      R3  <= R2  ;       Q3  <= Q2 ;  L3  <= L2 ;       U3  <= U2 ;
      R2  <= R1  ;       Q2  <= Q1 ;  L2  <= L1 ;       U2  <= U1 ;
      R1  <= R0  ;       Q1  <= Q0 ;  L1  <= L0 ;       U1  <= U0 ;
      R0  <= result_RQ ; Q0  <= R16;  L0  <= result_LU; U0  <= L16;
      end
    
    //non_swap_reload process, care for the stop conditions
    else if( current_state == non_swap_reload && clken == 1'b1 && reload_counter < 5'h10 - li )
      begin
      R16 <= R15 ;       Q16 <= Q15;  L16 <= L15;       U16 <= U15;
      R15 <= R14 ;       Q15 <= Q14;  L15 <= L14;       U15 <= U14;
      R14 <= R13 ;       Q14 <= Q13;  L14 <= L13;       U14 <= U13;
      R13 <= R12 ;       Q13 <= Q12;  L13 <= L12;       U13 <= U12;
      R12 <= R11 ;       Q12 <= Q11;  L12 <= L11;       U12 <= U11;
      R11 <= R10 ;       Q11 <= Q10;  L11 <= L10;       U11 <= U10;
      R10 <= R9  ;       Q10 <= Q9 ;  L10 <= L9 ;       U10 <= U9 ;
      R9  <= R8  ;       Q9  <= Q8 ;  L9  <= L8 ;       U9  <= U8 ;
      R8  <= R7  ;       Q8  <= Q7 ;  L8  <= L7 ;       U8  <= U7 ;
      R7  <= R6  ;       Q7  <= Q6 ;  L7  <= L6 ;       U7  <= U6 ;
      R6  <= R5  ;       Q6  <= Q5 ;  L6  <= L5 ;       U6  <= U5 ;
      R5  <= R4  ;       Q5  <= Q4 ;  L5  <= L4 ;       U5  <= U4 ;
      R4  <= R3  ;       Q4  <= Q3 ;  L4  <= L3 ;       U4  <= U3 ;
      R3  <= R2  ;       Q3  <= Q2 ;  L3  <= L2 ;       U3  <= U2 ;
      R2  <= R1  ;       Q2  <= Q1 ;  L2  <= L1 ;       U2  <= U1 ;
      R1  <= R0  ;       Q1  <= Q0 ;  L1  <= L0 ;       U1  <= U0 ;
      R0  <= result_RQ ; Q0  <= Q16;  L0  <= result_LU; U0  <= U16;
      end

    else if( current_state == non_swap_reload && clken == 1'b1 && (reload_counter >= 5'h10 - li && reload_counter < 5'h10) )
      begin
      R16 <= R15 ;       Q16 <= Q16;  L16 <= L15;       U16 <= U16;
      R15 <= R14 ;       Q15 <= Q15;  L15 <= L14;       U15 <= U15;
      R14 <= R13 ;       Q14 <= Q14;  L14 <= L13;       U14 <= U14;
      R13 <= R12 ;       Q13 <= Q13;  L13 <= L12;       U13 <= U13;
      R12 <= R11 ;       Q12 <= Q12;  L12 <= L11;       U12 <= U12;
      R11 <= R10 ;       Q11 <= Q11;  L11 <= L10;       U11 <= U11;
      R10 <= R9  ;       Q10 <= Q10;  L10 <= L9 ;       U10 <= U10;
      R9  <= R8  ;       Q9  <= Q9 ;  L9  <= L8 ;       U9  <= U9 ;
      R8  <= R7  ;       Q8  <= Q8 ;  L8  <= L7 ;       U8  <= U8 ;
      R7  <= R6  ;       Q7  <= Q7 ;  L7  <= L6 ;       U7  <= U7 ;
      R6  <= R5  ;       Q6  <= Q6 ;  L6  <= L5 ;       U6  <= U6 ;
      R5  <= R4  ;       Q5  <= Q5 ;  L5  <= L4 ;       U5  <= U5 ;
      R4  <= R3  ;       Q4  <= Q4 ;  L4  <= L3 ;       U4  <= U4 ;
      R3  <= R2  ;       Q3  <= Q3 ;  L3  <= L2 ;       U3  <= U3 ;
      R2  <= R1  ;       Q2  <= Q2 ;  L2  <= L1 ;       U2  <= U2 ;
      R1  <= R0  ;       Q1  <= Q1 ;  L1  <= L0 ;       U1  <= U1 ;
      R0  <= result_RQ ; Q0  <= Q0 ;  L0  <= result_LU; U0  <= U0 ;
      end

    //swap_reload process, care for the stop conditions, we assume li = 1,2,3,4,5,6,7,8
    else if( current_state == swap_reload && clken == 1'b1 && reload_counter < 5'h10 - li )
      begin
      R16 <= R15 ;       Q16 <= Q15;  L16 <= L15;       U16 <= U15;
      R15 <= R14 ;       Q15 <= Q14;  L15 <= L14;       U15 <= U14;
      R14 <= R13 ;       Q14 <= Q13;  L14 <= L13;       U14 <= U13;
      R13 <= R12 ;       Q13 <= Q12;  L13 <= L12;       U13 <= U12;
      R12 <= R11 ;       Q12 <= Q11;  L12 <= L11;       U12 <= U11;
      R11 <= R10 ;       Q11 <= Q10;  L11 <= L10;       U11 <= U10;
      R10 <= R9  ;       Q10 <= Q9 ;  L10 <= L9 ;       U10 <= U9 ;
      R9  <= R8  ;       Q9  <= Q8 ;  L9  <= L8 ;       U9  <= U8 ;
      R8  <= R7  ;       Q8  <= Q7 ;  L8  <= L7 ;       U8  <= U7 ;
      R7  <= R6  ;       Q7  <= Q6 ;  L7  <= L6 ;       U7  <= U6 ;
      R6  <= R5  ;       Q6  <= Q5 ;  L6  <= L5 ;       U6  <= U5 ;
      R5  <= R4  ;       Q5  <= Q4 ;  L5  <= L4 ;       U5  <= U4 ;
      R4  <= R3  ;       Q4  <= Q3 ;  L4  <= L3 ;       U4  <= U3 ;
      R3  <= R2  ;       Q3  <= Q2 ;  L3  <= L2 ;       U3  <= U2 ;
      R2  <= R1  ;       Q2  <= Q1 ;  L2  <= L1 ;       U2  <= U1 ;
      R1  <= R0  ;       Q1  <= Q0 ;  L1  <= L0 ;       U1  <= U0 ;
      R0  <= result_RQ ; Q0  <= R16;  L0  <= result_LU; U0  <= L16;
      end

    //in the following branches, we will deal with the detailed case of li = 1
    else if( current_state == swap_reload && clken == 1'b1 && reload_counter == 5'hf && li == 5'h1 )
      begin
      R16 <= R15 ;       Q16 <= R16;  L16 <= L15;       U16 <= L16;
      R15 <= R14 ;       Q15 <= Q15;  L15 <= L14;       U15 <= U15;
      R14 <= R13 ;       Q14 <= Q14;  L14 <= L13;       U14 <= U14;
      R13 <= R12 ;       Q13 <= Q13;  L13 <= L12;       U13 <= U13;
      R12 <= R11 ;       Q12 <= Q12;  L12 <= L11;       U12 <= U12;
      R11 <= R10 ;       Q11 <= Q11;  L11 <= L10;       U11 <= U11;
      R10 <= R9  ;       Q10 <= Q10;  L10 <= L9 ;       U10 <= U10;
      R9  <= R8  ;       Q9  <= Q9 ;  L9  <= L8 ;       U9  <= U9 ;
      R8  <= R7  ;       Q8  <= Q8 ;  L8  <= L7 ;       U8  <= U8 ;
      R7  <= R6  ;       Q7  <= Q7 ;  L7  <= L6 ;       U7  <= U7 ;
      R6  <= R5  ;       Q6  <= Q6 ;  L6  <= L5 ;       U6  <= U6 ;
      R5  <= R4  ;       Q5  <= Q5 ;  L5  <= L4 ;       U5  <= U5 ;
      R4  <= R3  ;       Q4  <= Q4 ;  L4  <= L3 ;       U4  <= U4 ;
      R3  <= R2  ;       Q3  <= Q3 ;  L3  <= L2 ;       U3  <= U3 ;
      R2  <= R1  ;       Q2  <= Q2 ;  L2  <= L1 ;       U2  <= U2 ;
      R1  <= R0  ;       Q1  <= Q1 ;  L1  <= L0 ;       U1  <= U1 ;
      R0  <= result_RQ ; Q0  <= Q0 ;  L0  <= result_LU; U0  <= U0 ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -