Я написал код для банка регистров и синтезировал его в программном обеспечении ISE, но не получаю полного отчета о сроках, в частности о задержке проектирования (раздел в разделе «Отчет о синтезе»). Возможно, это из-за слишком большого количества предупреждений, которые я получаю.
Вот код:
module Buffer
# (parameter COUNT= 253)// Size of Line Buffer
(
input clk,rst,
input [7:0]Pixel,
output reg [7:0] R1,R2,R3,R4,R5,R6,R7,R8,R9
);
reg [7:0] line_buff1 [COUNT-1:0];
reg [7:0] line_buff2 [COUNT-1:0];
reg [7:0] RT1,RT2,RT3,RT4,RT5,RT6,RT7,RT8,RT9;// Temporary Registers
integer i;
always @ (posedge clk)
begin
if (rst) begin
RT7 <= 1'd0;
RT8 <= 1'd0;
RT9 <= 1'd0;
RT4 <= 1'd0;
RT5 <= 1'd0;
RT6 <= 1'd0;
RT1 <= 1'd0;
RT2 <= 1'd0;
RT3 <= 1'd0;
end
else begin
RT9 <= Pixel;
RT8 <= RT9;
RT7 <= RT8;
line_buff2[0] <= RT7;
RT6 <= line_buff2[COUNT-1];
for ( i=COUNT-2 ; i>=0; i=i-1 )
line_buff2[i+1] <= line_buff2[i];
RT5 <= RT6;
RT4 <= RT5;
line_buff1[0] <= RT4;
RT3 <= line_buff1[COUNT-1];
for ( i=COUNT-2 ; i>=0; i=i-1 )
line_buff1[i+1] <= line_buff1[i];
RT2 <= RT3;
RT1 <= RT2;
end
end
always @(*)
if (RT1 !== 8'bx) begin
R1<=RT1;
R2<=RT2;
R3<=RT3;
R4<=RT4;
R5<=RT5;
R6<=RT6;
R7<=RT7;
R8<=RT8;
R9<=RT9;
end
endmodule
Предупреждений много, поэтому я не смогу показать это здесь, но если вы попробуете это на ISE, вы сможете увидеть это сами.
Я ожидаю получить ЗАДЕРЖКУ проекта в сводном отчете.
Первая проблема - вот эта строчка if (RT1 !== 8'bx) begin
Синтез не знает, как проверить отсутствие забот в этом контексте. Вы можете проверять постоянные литералы, но не «x» в синтезе. Есть некоторые исключения, такие как оптимизация, которую можно сделать при разработке конечных автоматов; это не одно из тех исключений.
Я не думаю, что синтез — это завершение и создание конструкции с какой-либо логикой.
Я не понимаю, чего вы пытаетесь достичь, проверяя x. Просто избавьтесь от if
. Также измените неблокирующие назначения на блокировку для комбинационной логики. Хорошо иметь x's
на выходе модуля в начале моделирования, пока конвейер не будет инициализирован или заполнен входящими данными.
always @(*) begin
R1 = RT1;
R2 = RT2;
R3 = RT3;
R4 = RT4;
R5 = RT5;
R6 = RT6;
R7 = RT7;
R8 = RT8;
R9 = RT9;
end
Повторно запустите синтез и посмотрите, получите ли вы лучшие результаты.
Чтобы получить осмысленный отчет о времени, вам понадобится ограничение по времени. Анализатор синхронизации обеспечивает анализ на основе ограничений.
Спасибо @Mikef, все работает нормально, и я получаю то, что мне нужно.