-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Здравствуйте!
Мне нужно реализовать простую защелку. Я пишу следующий код:
always @*
begin
if (reset)
data_out <= 8'h00;
else
begin
if (ale)
data_out <= data_in;
end
end
Вроде бы ничего необычного, однако при компиляции выдается пачка предупреждений типа
"Warning (332125): Found combinational loop of 2 nodes
Warning (332126): Node "data_out[7]$latch~9|[3]"
Warning (332126): Node "data_out[7]$latch~9|dataout"
Я не очень силен в английском. Наверно это предупреждение означает, что где-то образовалась обратная связь. Но в RTL viewer тоже не видно ничего подозрительного. В чем может быть дело и как от этого избавиться?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
nckm
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 112
-
Спасибо получено: 34
-
-
-
-
-
|
по своему опыту хочу сказать, что использование защелок нежелательно. Стараюсь их всячески избегать и использовать только синхронную логику. особенно большие проекты с защелками плохо, нестабильно работают.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Как же тогда поступить? Мне нужно связать микроконтроллер со статической памятью. А это делается через защелку. Ставить отдельную микросхему неспортивно.
Попробовал изменить код: module decoder(
input wire reset,
input wire clock,
input wire psen,
input wire rd,
input wire ale,
input wire [7:0] data_in,
output reg [7:0] data_out,
output reg oe
);
always @(posedge clock)
begin
if (reset)
data_out <= 8'h00;
else
begin
if (ale)
data_out <= data_in;
end
end
always @*
begin
oe <= psen & rd;
end
endmodule Предупреждения исчезли, однако сгенерировалась жуткая схема:
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Сейчас смотрю на старую материнскую плату. Там возле панелек для кэш-памяти стоят два регистра-защелки, несмотря на окружающие ПЛИСы.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
SOVA
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 82
-
Спасибо получено: 5
-
-
-
-
|
Ну, если ресет синхронный, да разрешение хранения, то так оно и будет.
Выведи ресет из цикла - сделай асинхронным. Будет легче.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
nckm
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 112
-
Спасибо получено: 34
-
-
-
-
-
|
вся схема должна быть синхронной, никаких защелок, только регистры - это залог работоспособности.
Я согласен с SOVA - можно сделать ресет ассинхронным - будет красивей
always @(posedge clock or posedge reset)
begin
if (reset)
data_out <= 8'h00;
else
if (ale)
data_out <= data_in;
end
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.140 секунд