1.对于频繁使用的计算单元,可以做一个function,减少代码量,增加代码可读性。
function [9:0] s_value_function;
input [9:0] q_sequence_value;
input [3:0] m_polar_len_n;
input [10:0] m_polar_len_N;
reg [4:0] var_tmp3_value;
reg [2:0] m_polar_len_sub5 = m_polar_len_n -5; //0,1,2,3,4,5
reg [5:0] var_tmp0 = 1 << m_polar_len_sub5; //1,2,4,8,16,32
reg [4:0] var_tmp1 = q_sequence_value % var_tmp0; // m/(N/32) (0-31)
reg [9:0] var_tmp2 = q_sequence_value - var_tmp1; // m - m/(N/32) (0-992=32*31)
reg [4:0] var_tmp3 = var_tmp2 >> m_polar_len_sub5; // j = (m - m/(N/32)) >> (1,2,4,8,16,32) (0-31)
reg [4:0] var_tmp4 = var_tmp3_value; // Q(j) (0-31)
reg [9:0] var_add0 = var_tmp4 << m_polar_len_sub5; // Q(j)*(N/32)
reg [4:0] var_add1 = var_tmp1;// mod(m,N/32)
s_value_function = var_add0 + var_add1;// sum (0-1023)
begin
case (var_tmp3)
5'd0: var_tmp3_value = 5'd0;
5'd1: var_tmp3_value = 5'd1;
5'd2: var_tmp3_value = 5'd2;
5'd3: var_tmp3_value = 5'd4;
5'd4: var_tmp3_value = 5'd3;
5'd5: var_tmp3_value = 5'd5;
5'd6: var_tmp3_value = 5'd6;
5'd7: var_tmp3_value = 5'd7;
5'd8: var_tmp3_value = 5'd8;
5'd9: var_tmp3_value = 5'd10;
5'd10: var_tmp3_value = 5'd12;
5'd11: var_tmp3_value = 5'd14;
5'd12: var_tmp3_value = 5'd16;
5'd13: var_tmp3_value = 5'd18;
5'd14: var_tmp3_value = 5'd20;
5'd15: var_tmp3_value = 5'd22;
5'd16: var_tmp3_value = 5'd8;
5'd17: var_tmp3_value = 5'd11;
5'd18: var_tmp3_value = 5'd13;
5'd19: var_tmp3_value = 5'd15;
5'd20: var_tmp3_value = 5'd17;
5'd21: var_tmp3_value = 5'd19;
5'd22: var_tmp3_value = 5'd21;
5'd23: var_tmp3_value = 5'd23;
5'd24: var_tmp3_value = 5'd24;
5'd25: var_tmp3_value = 5'd25;
5'd26: var_tmp3_value = 5'd26;
5'd27: var_tmp3_value = 5'd28;
5'd28: var_tmp3_value = 5'd27;
5'd29: var_tmp3_value = 5'd29;
5'd30: var_tmp3_value = 5'd30;
5'd31: var_tmp3_value = 5'd31;
default: var_tmp3_value = 5'd0;
endcase
end
endfunction