📄 mea.v
字号:
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 + -