реклама на сайте
подробности

 
 
> Вопрос по Verilog., Описал сдвиговый регистр, тайминги не лезут ни в какие ворота.
Alexander V. Sto...
сообщение Nov 26 2007, 19:12
Сообщение #1





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
DASM
сообщение Nov 26 2007, 19:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Давноо было дело, забыл наверно я, но Вы пробовали ставить неблокирующее присваиваивание вместо count = count << 1;
написать count <= count << 1; ?
PS если Вам нужен 8 битный регистр то вроде ж так - reg [8:0] count; иначе я не понимаю смысла строки (count == 255)
Хотя я ее все равно не понимаю smile.gif Сдвиги то до 128 только дойдут
Go to the top of the page
 
+Quote Post
Doka
сообщение Nov 26 2007, 19:51
Сообщение #3


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



судя по дрожанию времянок, я сильно сомневаюсь, что это "чисто поведенческое" моделирование.
попробуйте режим моделирования без "задержек" (behavioral/functional)


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
Alexander V. Sto...
сообщение Nov 26 2007, 19:59
Сообщение #4





Группа: Новичок
Сообщений: 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)
Хотя я ее все равно не понимаю smile.gif Сдвиги то до 128 только дойдут


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

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

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


А подскажите, где в Quartus это указать?
Go to the top of the page
 
+Quote Post
Tran
сообщение Nov 26 2007, 20:44
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 21-06-04
Пользователь №: 70



Вы моделируете работу узла на частоте примерно 200 МГц. Если лействительно нужна такая частота, то нужно подбирать м/с и по типу и по быстродействию + накладывать констрейны таймквестом, если нет - то просто понизьте частоту клока и всё станет на место.


--------------------
Настоящее чревато будущим.
Go to the top of the page
 
+Quote Post
vetal
сообщение Nov 26 2007, 20:57
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



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

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

Вас интересует значение сигнала на триггерах или на выходе? Если на выходе - поставьте буферный регистр на выходе сдвигателя и квартус вам их разместит в элементах ввода/вывода микросхемы.
Go to the top of the page
 
+Quote Post
Alexander V. Sto...
сообщение Nov 27 2007, 09:22
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592



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


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


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

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


Меня интересует наличие сигнала на выходе. Я не совсем понял, как это сделать. Разве выход уже не является регистром? Как описать еще дополнительный буферный регистр?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Nov 27 2007, 10:22
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



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

Цитата
Как описать еще дополнительный буферный регистр?
Поставить регистр между счётчиком и буфером. Прописать в assignments FAST_OUTPUT_REGISTER на эти выходы, тогда этот дополнительный регистр ляжет в блоки выода-вывода, и времянка на выходах будет хорошая, поскольку путь от триггера до пина минимально возможный.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 27 2007, 10:26
Сообщение #9


Adept
******

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



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

Точнее будет, наверное, сказать, разброс задержек от выходных триггеров до пинов минимально возможный, т.к. именно разброс определяет насколько выходные сигналы "разъезжаются".


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Camelot
сообщение Nov 27 2007, 10:34
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 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 битах. У вас же бегущая единица и то под вопросом. Может измените алгоритм? Или я чтото не понимаю..
Go to the top of the page
 
+Quote Post
Alexander V. Sto...
сообщение Nov 27 2007, 10:45
Сообщение #11





Группа: Новичок
Сообщений: 4
Регистрация: 22-11-07
Пользователь №: 32 592



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


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

Спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 20:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016