Сокращение чистой задержки в Xilinx Vivado - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь реализовать декодер на 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.

Отчет по времени показан ниже:

enter image description here

Логическая задержка хорошо соответствует заданному требованию по тактовым сигналам, т.е. 10 нс (тактовая частота 100 МГц). Что я должен сделать, чтобы уменьшить чистую задержку?

...