В исходном коде verilog (код не мой, но мне достался на доделки) имеется фифо SFIFO. По сути это большой сдвиговый регистр.
Квартус автогенерирует для этого фифо компонент altshift_taps и распределяет по рам-ячейкам.
Частота работы с этим фифо задана 175 МГц (а хочется еще больше).
Иногда удается достичь такую частоту.
А иногда после изменений и очередной компиляции ТаймКвест показывает 150МГц и ругается на
FPGA_Calc_CT:FPGA_Calc_CT_inst|hmod:\gen_hsh0:hsh0_inst|altshift_taps:SFIFO_rtl_0|shift_taps_j0v:auto_generated|
cntr_cjf:cntr1|counter_reg_bit[2]
FPGA_Calc_CT:FPGA_Calc_CT_inst|hmod:\gen_hsh0:hsh0_inst|altshift_taps:SFIFO_rtl_0|shift_taps_j0v:auto_generated|
dffe3a[1]
Нажмите для просмотра прикрепленного файла
От компиляции к компиляции конкретные биты и элементы фифо могут получаться другие в ТаймКвесте.
Есть ли способ указать квартусу разместить это фифо на ALM, а не на рамах? И поможет ли это?
И еще вопрос. Как уже написал. Иногда фитеровщик разводит под заданную частоту, а иногда нет, хотя существенных изменений в коде не производится.
Можно ему както дать понять, что заданные констрейны нужно выполнить хоть кровь из носа, а не так, как это он делает сейчас - иногда плучится, иногда нет.
код (условный):
Код
reg [63:0]SFIFO[40:0];
always @(posedge Clk)
begin
...
SFIFO[23] <= SFIFO[22];
SFIFO[24] <= SFIFO[23];
SFIFO[25] <= SFIFO[24];
SFIFO[26] <= SFIFO[25];
q[27] <= SFIFO[26] + 32'h11111111; //sum const
SFIFO[27] <= SFIFO[26];
SFIFO[28] <= SFIFO[27];
SFIFO[29] <= SFIFO[28];
SFIFO[30] <= SFIFO[29];
q[30] <= SFIFO[29] + 32'h22222222; // sum const
...
end
always @(posedge Clk)
begin
...
SFIFO[23] <= SFIFO[22];
SFIFO[24] <= SFIFO[23];
SFIFO[25] <= SFIFO[24];
SFIFO[26] <= SFIFO[25];
q[27] <= SFIFO[26] + 32'h11111111; //sum const
SFIFO[27] <= SFIFO[26];
SFIFO[28] <= SFIFO[27];
SFIFO[29] <= SFIFO[28];
SFIFO[30] <= SFIFO[29];
q[30] <= SFIFO[29] + 32'h22222222; // sum const
...
end