|
Вопрос по Verilog., Описал сдвиговый регистр, тайминги не лезут ни в какие ворота. |
|
|
|
Nov 26 2007, 19:12
|
Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592

|
Сабж. Только-только начал изучать 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 Естественно, графы другие. Но таких явных нарушений в работе нет. Где грабли?
Сообщение отредактировал Alexander V. Stolyarov - Nov 26 2007, 19:13
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Nov 26 2007, 19:59
|
Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592

|
Цитата(DASM @ Nov 26 2007, 23:33)  Давноо было дело, забыл наверно я, но Вы пробовали ставить неблокирующее присваиваивание вместо count = count << 1; написать count <= count << 1; ? PS если Вам нужен 8 битный регистр то вроде ж так - reg [8:0] count; иначе я не понимаю смысла строки (count == 255) Хотя я ее все равно не понимаю  Сдвиги то до 128 только дойдут Пробовал, не помогло. Нужен именно десятичный регистр. Цитата(Doka @ Nov 26 2007, 23:51)  судя по дрожанию времянок, я сильно сомневаюсь, что это "чисто поведенческое" моделирование. попробуйте режим моделирования без "задержек" (behavioral/functional) А подскажите, где в Quartus это указать?
|
|
|
|
|
Nov 26 2007, 20:44
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 21-06-04
Пользователь №: 70

|
Вы моделируете работу узла на частоте примерно 200 МГц. Если лействительно нужна такая частота, то нужно подбирать м/с и по типу и по быстродействию + накладывать констрейны таймквестом, если нет - то просто понизьте частоту клока и всё станет на место.
--------------------
Настоящее чревато будущим.
|
|
|
|
|
Nov 27 2007, 09:22
|
Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592

|
Цитата(Tran @ Nov 27 2007, 00:44)  Вы моделируете работу узла на частоте примерно 200 МГц. Если лействительно нужна такая частота, то нужно подбирать м/с и по типу и по быстродействию + накладывать констрейны таймквестом, если нет - то просто понизьте частоту клока и всё станет на место. Понизил частоту, тайминги стали значително лучше, но некоторое смещение на 6-м переходе осталось. Не в таком объеме конечно... Цитата(vetal @ Nov 27 2007, 00:57)  Это нормальное явление. Смотрите значения сигналов на триггерах, а не на выводах микросхемы прошедших километровые пути.
Вас интересует значение сигнала на триггерах или на выходе? Если на выходе - поставьте буферный регистр на выходе сдвигателя и квартус вам их разместит в элементах ввода/вывода микросхемы. Меня интересует наличие сигнала на выходе. Я не совсем понял, как это сделать. Разве выход уже не является регистром? Как описать еще дополнительный буферный регистр?
|
|
|
|
|
Nov 27 2007, 10:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(andrew_b @ Nov 27 2007, 16:22)  Поствить регистр между счётчиком и буфером. Прописать в assignments FAST_OUTPUT_REGISTER на эти выходы, тогда этот дополнительный регистр ляжет в блоки выода-вывода, и времянка на выходах будет хорошая, поскольку путь от триггера до пина минимально возможный. Точнее будет, наверное, сказать, разброс задержек от выходных триггеров до пинов минимально возможный, т.к. именно разброс определяет насколько выходные сигналы "разъезжаются".
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Nov 27 2007, 10:34
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872

|
Цитата(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 битах. У вас же бегущая единица и то под вопросом. Может измените алгоритм? Или я чтото не понимаю..
|
|
|
|
|
Nov 27 2007, 10:45
|
Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592

|
Цитата(Camelot @ Nov 27 2007, 14:34)  Я вот подумал, в результате написанного кода, что может синтезнуться? Значение 255 никогда не будет в каунтере, так как это все 1 в 8 битах. У вас же бегущая единица и то под вопросом. Может измените алгоритм? Или я чтото не понимаю.. Да, я согласен с вами. Во-первых, там должно быть не 255, а 256. Во-вторых, т.к. разрядов 10, то сравнивать нужно не с 256, а с 512. Спасибо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|