Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по Verilog.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Alexander V. Stolyarov
Сабж. Только-только начал изучать Verilog. Наваял следующий код:

Код
module counter (clk,count);

input clk;
output[9:0] count;
reg [9:0] count;


initial count = 1'b1;

always @(posedge clk) begin
if (count == 255) count = 0;
else count = count << 1;
end

endmodule


Результатом работы которого является нечто:



Как видно, 6-й переход явно какой-то не такой.

А вот если я пишу так:

Код
module counter (clk,count);

input clk;
output[9:0] count;
reg [9:0] count;


initial count = 1'b1;

always @(posedge clk) begin
if (count == 255) count = 0;
else count = count + 1;
end

endmodule


Естественно, графы другие. Но таких явных нарушений в работе нет.

Где грабли?
DASM
Давноо было дело, забыл наверно я, но Вы пробовали ставить неблокирующее присваиваивание вместо count = count << 1;
написать count <= count << 1; ?
PS если Вам нужен 8 битный регистр то вроде ж так - reg [8:0] count; иначе я не понимаю смысла строки (count == 255)
Хотя я ее все равно не понимаю smile.gif Сдвиги то до 128 только дойдут
Doka
судя по дрожанию времянок, я сильно сомневаюсь, что это "чисто поведенческое" моделирование.
попробуйте режим моделирования без "задержек" (behavioral/functional)
Alexander V. Stolyarov
Цитата(DASM @ Nov 26 2007, 23:33) *
Давноо было дело, забыл наверно я, но Вы пробовали ставить неблокирующее присваиваивание вместо count = count << 1;
написать count <= count << 1; ?
PS если Вам нужен 8 битный регистр то вроде ж так - reg [8:0] count; иначе я не понимаю смысла строки (count == 255)
Хотя я ее все равно не понимаю smile.gif Сдвиги то до 128 только дойдут


Пробовал, не помогло.

Нужен именно десятичный регистр.

Цитата(Doka @ Nov 26 2007, 23:51) *
судя по дрожанию времянок, я сильно сомневаюсь, что это "чисто поведенческое" моделирование.
попробуйте режим моделирования без "задержек" (behavioral/functional)


А подскажите, где в Quartus это указать?
Tran
Вы моделируете работу узла на частоте примерно 200 МГц. Если лействительно нужна такая частота, то нужно подбирать м/с и по типу и по быстродействию + накладывать констрейны таймквестом, если нет - то просто понизьте частоту клока и всё станет на место.
vetal
Цитата
Естественно, графы другие. Но таких явных нарушений в работе нет.

Это нормальное явление. Смотрите значения сигналов на триггерах, а не на выводах микросхемы прошедших километровые пути.

Вас интересует значение сигнала на триггерах или на выходе? Если на выходе - поставьте буферный регистр на выходе сдвигателя и квартус вам их разместит в элементах ввода/вывода микросхемы.
Alexander V. Stolyarov
Цитата(Tran @ Nov 27 2007, 00:44) *
Вы моделируете работу узла на частоте примерно 200 МГц. Если лействительно нужна такая частота, то нужно подбирать м/с и по типу и по быстродействию + накладывать констрейны таймквестом, если нет - то просто понизьте частоту клока и всё станет на место.


Понизил частоту, тайминги стали значително лучше, но некоторое смещение на 6-м переходе осталось. Не в таком объеме конечно...


Цитата(vetal @ Nov 27 2007, 00:57) *
Это нормальное явление. Смотрите значения сигналов на триггерах, а не на выводах микросхемы прошедших километровые пути.

Вас интересует значение сигнала на триггерах или на выходе? Если на выходе - поставьте буферный регистр на выходе сдвигателя и квартус вам их разместит в элементах ввода/вывода микросхемы.


Меня интересует наличие сигнала на выходе. Я не совсем понял, как это сделать. Разве выход уже не является регистром? Как описать еще дополнительный буферный регистр?
andrew_b
Цитата(Alexander V. Stolyarov @ Nov 27 2007, 12:22) *
Меня интересует наличие сигнала на выходе. Я не совсем понял, как это сделать. Разве выход уже не является регистром?
Смотря что под этим понимать. Формально да, но в данном случае этот регистр стоит не в блоках ввода-вывода, поэтому времянка на выходах может плавать от разводки к разводке.

Цитата
Как описать еще дополнительный буферный регистр?
Поставить регистр между счётчиком и буфером. Прописать в assignments FAST_OUTPUT_REGISTER на эти выходы, тогда этот дополнительный регистр ляжет в блоки выода-вывода, и времянка на выходах будет хорошая, поскольку путь от триггера до пина минимально возможный.
dxp
Цитата(andrew_b @ Nov 27 2007, 16:22) *
Поствить регистр между счётчиком и буфером. Прописать в assignments FAST_OUTPUT_REGISTER на эти выходы, тогда этот дополнительный регистр ляжет в блоки выода-вывода, и времянка на выходах будет хорошая, поскольку путь от триггера до пина минимально возможный.

Точнее будет, наверное, сказать, разброс задержек от выходных триггеров до пинов минимально возможный, т.к. именно разброс определяет насколько выходные сигналы "разъезжаются".
Camelot
Цитата(Alexander V. Stolyarov @ Nov 26 2007, 22:12) *
Сабж. Только-только начал изучать Verilog. Наваял следующий код:

Код
module counter (clk,count);

input clk;
output[9:0] count;
reg [9:0] count;
initial count = 1'b1;

always @(posedge clk) begin
if (count == 255) count = 0;
else count = count << 1;
end

endmodule


Результатом работы которого является нечто:



Как видно, 6-й переход явно какой-то не такой.

А вот если я пишу так:

Код
module counter (clk,count);

input clk;
output[9:0] count;
reg [9:0] count;
initial count = 1'b1;

always @(posedge clk) begin
if (count == 255) count = 0;
else count = count + 1;
end

endmodule


Естественно, графы другие. Но таких явных нарушений в работе нет.

Где грабли?


Я вот подумал, в результате написанного кода, что может синтезнуться? Значение 255 никогда не будет в каунтере, так как это все 1 в 8 битах. У вас же бегущая единица и то под вопросом. Может измените алгоритм? Или я чтото не понимаю..
Alexander V. Stolyarov
Цитата(Camelot @ Nov 27 2007, 14:34) *
Я вот подумал, в результате написанного кода, что может синтезнуться? Значение 255 никогда не будет в каунтере, так как это все 1 в 8 битах. У вас же бегущая единица и то под вопросом. Может измените алгоритм? Или я чтото не понимаю..


Да, я согласен с вами.
Во-первых, там должно быть не 255, а 256.
Во-вторых, т.к. разрядов 10, то сравнивать нужно не с 256, а с 512.

Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.