-
YarPv14
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 7
-
Спасибо получено: 0
-
-
|
Здравствуйте!
Только начал изучать Верилог, помогите разобраться:
есть двоичный четырёх-разрядный счётчик counter, который постоянно инкрементируется от сигнала clk, т.е. принимает значения 0, 1, 2, ..., 15, 0, 1, 2, и т.д.
Необходимо создать провод de, на выходе которого будет 1, если значение счётчика будет 2, 3, 4, 5.
Если я напишу так
module my_module (
// inputs:
input wire clk,
// outputs:
output reg [3:0] counter,
output wire de
);
always @*
begin
de = ((counter >= 2) && (counter <= 5));
end
always @(posedge clock)
begin
counter <= counter + 1'b1;
end
endmodule насколько это будет корректно? Не будут ли в сигнале de в моменты изменения кода в счётчике 2, 3, 4, 5 формироваться "иголки"?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
У вас сигнал "de" - выход комбинаторной логики, и на нем могут быть "иголки".
Где вы собираетесь этот сигнал использовать? Если внутри самого проекта, и сам проект синхронный, Т.е все события происходят по клоку,
то ничего страшного в этом нет, все сигналы к приходу следующего клока обязаны "устаканится".
Если вы , например, выводите этот сигнал наружу, и там наличие "иголок" недопустимо, то сделайте "de" регистром и замените неблокирующее присвоение на блокирующее.
Но нужно учесть, что "de" будет появляться позже на один такт.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
YarPv14
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 7
-
Спасибо получено: 0
-
-
|
На выходе "иголки" не допустимы.
Я посмотрел Ваши примеры, но смущает, что по переднему фронту клока происходит и инкремент счётчика и защёлкивание результата. Насколько это надёжно? Не лучше ли инкремент счётчика делать по переднему фронту клока, а защелкивание значения по заднему фронту клока?
module my_module (
// inputs:
input wire clk,
// outputs:
output reg [3:0] counter,
output reg de
);
always (negedge clock)
begin
de <= ((counter >= 2) && (counter <= 5));
end
always @(posedge clock)
begin
counter <= counter + 1'b1;
end
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от YarPv14.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Следите за параметром "Fmax" в отчете ТаймингАналайзера.
Этот параметр показывает худшее время исполнения логической функции проекта между фронтами клока.
Можно , конечно, защелкивать и спадом, но это только ухудшит ситуацию в два раза.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
YarPv14
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 7
-
Спасибо получено: 0
-
-
|
umarsohod пишет: Можно , конечно, защелкивать и спадом, но это только ухудшит ситуацию в два раза.
Ухудшит потому, что к приходу спада логическая функция может не успеть выполниться?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от YarPv14.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
YarPv14 пишет: Ухудшит потому, что к приходу спада логическая функция может не успеть выполниться?
Нужно оценивать количественно, какие у вас частоты и насколько сложная логическая функция.
Опять-же, смотрите отчет компилятора.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.124 секунд