-
LAS
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 6
-
Спасибо получено: 0
-
-
|
Все здравствуйте! Имеется такой вот код:
reg read = 1'b0;
integer strin = 0;
always @(FEN or LEN)
begin
if (st_cam && (!FEN) && (!LEN))
read <= 1'b1;
else if (st_cam && (!FEN) && LEN)
begin
read <= 1'b0;
strin <= strin+1;
end
else
begin
read <= 1'b0;
strin<=0;
end
end
Сигналы st_cam, FEN, LEN являются входами ПЛИС (input st_cam, FEN, LEN;).
При компиляции Quartus II сообщает кучу варнингов вида:
Warning (13012): Latch RGB_monitor:Data_to_RGB|strin[30] has unsafe behavior
Warning (13013): Ports D and ENA on the latch are fed by the same signal RGB_monitor:Data_to_RGB|LEN
Warning (13012): Latch RGB_monitor:Data_to_RGB|strin[29] has unsafe behavior
Warning (13013): Ports D and ENA on the latch are fed by the same signal RGB_monitor:Data_to_RGB|LEN
...............и т.д., их много.
Data_to_RGB - это название модуля, где используется вышеуказанный блок always @.
Кроме того, Quartus II сообщает еще и такой варнинг:
Warning (335093): TimeQuest Timing Analyzer is analyzing 32 combinational loops as latches.
Как мне кажется, он тоже связан с вышеуказанным блоком.
Вопрос: как исправить код, чтобы избежать этих сообщений?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от LAS.
|
-
LAS
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 6
-
Спасибо получено: 0
-
-
|
Я понимаю, о чем вы говорите, но это проблему не решает. При таком коде, варнинги те же:
reg read = 1'b0;
reg reg1 = 1'b0;
reg reg2 = 1'b0;
reg reg3 = 1'b0;
reg reg4 = 1'b0;
integer strin = 0;
always @(posedge DATAclk)
begin
reg1<=FEN;
reg2<=reg1;
reg3<=LEN;
reg4<=reg3;
end
always @(reg2 or reg4)
begin
if(st_cam && (!reg2) && (!reg4))
read <= 1'b1;
else if(st_cam && (!reg2) && reg4)
begin
read <= 1'b0;
strin <= strin+1;
end
else
begin
read <= 1'b0;
strin <= 0;
end
end
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от LAS.
|
-
LAS
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 6
-
Спасибо получено: 0
-
-
|
Я понимаю, о чем вы говорите, но это проблему не решает. При таком коде, варнинги те же:
reg read = 1'b0;
reg reg1 = 1'b0;
reg reg2 = 1'b0;
reg reg3 = 1'b0;
reg reg4 = 1'b0;
integer strin = 0;
always @(posedge DATAclk)
begin
reg1<=FEN;
reg2<=reg1;
reg3<=LEN;
reg4<=reg3;
end
always @(reg2 or reg4)
begin
if(st_cam && (!reg2) && (!reg4))
read <= 1'b1;
else if(st_cam && (!reg2) && reg4)
begin
read <= 1'b0;
strin <= strin+1;
end
else
begin
read <= 1'b0;
strin <= 0;
end
end
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от LAS.
|
-
Leka
-
-
Не в сети
-
Живу я здесь
-
-
Сообщений: 635
-
Спасибо получено: 54
-
-
|
Исходный код при синтезе эквивалентен следующему: always @*
if(st_cam && !FEN && !LEN) read <= 1;
else read <= 0;
always @*
if(st_cam && !FEN && !LEN) strin <= strin;
else if(st_cam && !FEN && LEN) strin <= strin+1;
else strin <= 0;
Ясно видно, что strin будет синтезироваться в защелку (latch), а этого надо избегать. Синхронный дизайн, это дизайн без защелок.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.113 секунд