我正在尝试在FPGA上实现解码器。解码器有几个模块,其中一个模块如下所示:
exp_to_polynomial_conv和polynomial_to_exp_conv仅包含一个case语句,每个语句具有1024个条目。
module find_error_locator_polynomial(
input [9:0] S1,
input [9:0] S3,
input [9:0] S5,
output [9:0] lambda1,
output [9:0] lambda2,
output [9:0] lambda3
);
wire [9:0] temp_exp,temp,temp2,temp3,temp3_exp,temp4,temp_16,temp5,temp7,temp8,temp8_exp,temp6,temp6_exp,temp5_exp,temp4_exp,temp2_exp,S3_exp,S1_exp;
//Formulas for the three error correction relation between syndromea and lambda's is given on Page 252 Tood k MOON
wire temp_15 ;
assign lambda1=S1;
// Direct assignment of S1 to lambda1
// What if S1 is 10'd0 ????
// In that case the polynomial to exp conv will not return anything ???
//
polynomial_to_exp_conv PTEC1(S1,S1_exp);
polynomial_to_exp_conv PTEC2(S3,S3_exp);
assign temp_exp=(S1_exp==10'b1111111111 || S3_exp==10'b1111111111)?10'b1111111111:(2*S1_exp+S3_exp)%1023;
exp_to_polynomial_conv ETPC1(temp_exp,temp);
assign temp2=temp ^ S5;
polynomial_to_exp_conv PTEC3(temp2,temp2_exp);
assign temp3_exp=(S1_exp==10'b1111111111)?10'b1111111111:(S1_exp * 3)%1023;
exp_to_polynomial_conv ETPC2(temp3_exp,temp3);
assign temp4=temp3 ^ S3;
assign temp_15= (temp4==10'd0)?1'b1:1'b0;
polynomial_to_exp_conv PTEC4(temp4,temp4_exp);
assign temp5_exp=(temp2_exp == 10'b1111111111)?10'b1111111111:(temp2_exp+1023-temp4_exp)%1023;
exp_to_polynomial_conv ETPC3(temp5_exp,temp_16);
assign lambda2 = (temp_15==1)? 10'd0 : temp_16;
assign temp7=temp3 ^ S3;
assign temp8_exp=(S1_exp == 10'b1111111111 || temp5_exp==10'b1111111111)?10'b1111111111:(S1_exp + temp5_exp)%1023;
exp_to_polynomial_conv PTEC5(temp8_exp,temp8);
assign lambda3=(temp4==10'd0 )?10'd0:(temp7^temp8);
endmodule
此模块在IP块用户逻辑内实例化16次,因此我可以进行16个并行解码操作。
在生成比特流时,我收到一条错误消息,指出未达到设计时序。 WNS = -12.16,TNS = -3285.23。
时序报告如下所示:
时钟的逻辑延迟很好地处于指定要求之下,即10 ns(100 MHz时钟)。我该怎么做才能减少网络延迟?