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

 
 
 
Reply to this topicStart new topic
> Тайминги для "чайников". Концептуальный вопрос.
phantom
сообщение May 5 2017, 18:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 317
Регистрация: 13-05-05
Пользователь №: 4 986



Доброго времени суток!

Начал пробовать работать с Verilog-ом, (Xilinx Spartan-3,XC3s50A, ISE 14.7 ) ну и первоначальная "радость простоты" разбилась об суровую реальность невозможности обеспечения тайминга всех сигналов. Получаю сообщения ошибки вида: Пример
Мануалы, к которым отсылает система, имеют примеры в виде схем, а не языка. Поэтому, "что делать" понятно только в сильно общем виде. Посему имею вопросы:
1) есть ли стандартные паттерны проектирования по верилогу, которые обеспечивают отсутсвие тайминговых проблем внутри ФПЖА (читал например, что лучше делать 2 16-разрядные счетчики чем 1 32-разрядный и т.д.)
2) Может быть лучше сразу делать систему в виде схемы, безо всяких Verilog-ов?
3) Играет ли в таймингах роль компоновка программы в модули - все ли равно для трассировки, делать один большой модуль, или собирать его из множества маленьких субмодулей?
4) Как лучше писать программу - с точки зрения программиста (не особо обращая внимание на то, какая схема получится) или схемотехника (разбивать на модули - дешифраторы, счетчики и тд)?

Спасибо.


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
Maksim
сообщение May 5 2017, 20:00
Сообщение #2


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

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



Скорее всего хотите получить большую частоту. Выложите код и ucf файл.


--------------------
qwerty
Go to the top of the page
 
+Quote Post
yes
сообщение May 5 2017, 20:28
Сообщение #3


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

Группа: Свой
Сообщений: 1 935
Регистрация: 23-12-04
Пользователь №: 1 640



тайминги - это физическая сущность этого мира (задержка прохождения сигнала через транзисторы и провода внутри ПЛИС), в отличие от "идеальных программ".
то есть независимо от того, нарисована схема или написан код на верилоге, тайминги будут одинаковые.

есть вероятность, что в коде новичок опишет какую-то фигню - чтобы проверить себя, нужно посмотреть нетлист (netlist) - это схема, как ее понял транслятор из кода в схему. я не помню уже где в ISE-овском project navigator-е просмотрщик нетлиста - что-то типа меню-tools

компоновка никак не влияет на тайминги, влияет как много комбинационной логики в описании (коде или схеме) расположено между регистрами, естественно путь этот через логику может проходить по многим листам схемы/модулям верилога и быть, например, короче (быстрее) чем в маленькой части схемы или одной строчке кода

компоновка кода (с точки зрения программиста, писателя верилога, просто человека) должна быть такая, что отдельную сущность (функцию, процедуру, блок внутри модуля и т.д.) можно было бы достаточно просто охватить взглядом и понять - ну то есть в один экран могут уложиться мастера, четко понимающие, что получится в конце, только начиная писать, но 3 экрана по-любому уже максимум, даже для новичка sm.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 5 2017, 20:40
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



1) Практически нет. Есть общее правило хотите поднять частоту увеличивайте число ступеней конвейера. Если ваша схема без лишних движений в частоту не ложится с генеральским запасом, то придется вам хорошо над ней подумать, общих рецептов не будет, такие схемы эксклюзив.
2) Хуже на порядки, схематик как инструмент на порядок неудобнее.. Если уж хочется схему городить в элементах, то и их можно описать верилогом. Это будет управляемо, читаемо и понимаемо. Плюс есть бонусы см. 4 пункт. Рисовать схему - это точно шаг назад
3) Конечно разбиение программы на модули играет роль в тайминге, но только пока вы не поставите галочку не сохранять иерархию. После этого синтезатор разбирет весь проект и собирет заново, максимально занимаясь оптимизацией. Модули в этом режиме нужны лишь для читаемости и понятности кода. В больших и сложных проектах иногда фиксируют удачные разводки модулей, но это проекты не для спартана.
4) Большая часть форума считает что надо думать и описывать схемами. Однако это уже не актуально. Авторы синтезаторов уже открыто пишут описывайте задачу максимально абстрактно, это даст нам больше маневра для оптимизации. Так что вам надо описывать суть, и задавать режимы синтезатора, он умеет выбирать баланс между площадью и скоростью.
Один момент надо уточнить. Нельзя описывать суть бездумно.
К примеру если ставить программисткое if(Counter >= 10), это хуже чем if(Coutner == 10), и хуже чем если бы он считал от 10 до нуля и сравнение было бы if(Coutner == 0). Это очень просто объяснить, Проверка на >= покрывает больше вариантов и потому разделить их на лож и истину сложнее чем проверка на константу, а константа сложнее чем проверка на просто 0.
Если вы делаете one hot вектор, то проверять надо my_vector[i] == 1'b1, а не my_vector == (1 << i). Потому что во втором случае проверяется не только что i бит равен единице, но что и остальные равны нулю.

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

И да. не используйте циклы как циклыsm.gif
Go to the top of the page
 
+Quote Post
phantom
сообщение May 6 2017, 06:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 317
Регистрация: 13-05-05
Пользователь №: 4 986



Эх, нет в жизни совершенства sm.gif Спасибо за ответы!
Хотя, думаю для "быстрого старта" было бы полезно обобщить короткие концептуальные рекомендации от "гуру" (типа "не используйте циклы как циклы") в виде "N заповедей плисовода" sm.gif


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
andrew_b
сообщение May 6 2017, 10:48
Сообщение #6


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

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



Цитата(Golikov A. @ May 5 2017, 23:40) *
константа сложнее чем проверка на просто 0.
Чем ноль отличается от любого другого числа? Сравнение что с нулём, что с константой делается в лутах, а там всё равно, какое число использовать.
Go to the top of the page
 
+Quote Post
Zig
сообщение May 6 2017, 11:48
Сообщение #7


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

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



Цитата(andrew_b @ May 6 2017, 13:48) *
Чем ноль отличается от любого другого числа? Сравнение что с нулём, что с константой делается в лутах, а там всё равно, какое число использовать.

При сравнении с нулем может бить использована логика ускоренного переноса.
Go to the top of the page
 
+Quote Post
Timmy
сообщение May 6 2017, 14:05
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 809
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Zig @ May 6 2017, 14:48) *
При сравнении с нулем может бить использована логика ускоренного переноса.

А если сравнивать с нулём знаковое число, при условиях x>=0 и x<0 будет проверяться только знаковый бит.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 6 2017, 14:29
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



Еще сравнение с 0 выгоднее когда один счетчик несколько раз используют с разными константами. Константы разные, а схема проверки одна.

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 6 2017, 15:26
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(Zig @ May 6 2017, 15:48) *
При сравнении с нулем может бить использована логика ускоренного переноса.

А можно чуть подробнее про это ? Сколько я не проверял, но у меня по скорости, что вычитающий счетчик с проверкой на 0, что суммирующий счетчик с проверкой на константу были одинаковы. Но оценивал я по теоретической максимальной частоте которую выдает Timequest.
Поэтому пока я не обнаружил никакого преимущества вычитающих счетчиков, кроме этого случая:
Цитата
Еще сравнение с 0 выгоднее когда один счетчик несколько раз используют с разными константами. Константы разные, а схема проверки одна.
Go to the top of the page
 
+Quote Post
Zig
сообщение May 6 2017, 17:32
Сообщение #11


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

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



Цитата(Flip-fl0p @ May 6 2017, 18:26) *
А можно чуть подробнее про это ?

Немного не корректно выразился.

В счетчиках (в Spartan-3 это точно UG331 Chapter 9) используется дерево ускоренного переноса, что в счетчиках вверх, что вниз.

Если делается счетчик на неполные 2^n, то на его выходе придется ставить компаратор на сравнение с границей счета Nmax, который будет сбрасывать счетчик.

Но гораздо проще (для таймингов), если используется выход логики ускоренного переноса (все нули для счетчика вниз или все единицы для счетчика вверх) для установки счетчика в состояние 2^n-Nmax для счетчика вверх, и Nmax для счетчика вниз.
В этом случае из схемы сброса исчезает компаратор, что улучшает тайминги.

Правда не во всех схемах возможно применение такого перевернутого счетчика.
Наиболее часто я его применяю при получении стробов деленной частоты. Как заметил Golikov A это позволяет изменять их период загружая счетчик в разные начальные значения.

В случае когда нужен счет от 0 до Nmax лучше поставить компаратор на Nmax-1, его выход задержать на такт и использовать для сброса счетчика в 0, тем самым уменьшить число уровней логики.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 6 2017, 17:51
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



В рамках fpga, когда логика ложится в ЛУТ, наверное, правильно сказали выше разницы в скорости сравнения константы и нуля нет, кроме случая нескольких констант, где усложнится схема выбором с какой из констант сравнивать.

Схема быстрого переноса все равно работает с выходами лута, которому все равно что на входе 0 или константа. Так что, думаю тут разницы не нарыть.


А понял. Бит переноса при переполнении счетчика. То есть заряжать счетчик не в 0, а в остаток счета и когда он досчитает ловить признак переполнения. Интересно.... Ну это фактически как анализировать знаковый бит при счете вниз.
Go to the top of the page
 
+Quote Post
phantom
сообщение May 9 2017, 18:24
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 317
Регистрация: 13-05-05
Пользователь №: 4 986



В продолжение таймингов. Можно ли видеть задержки на временных диаграммах про симулировании? Что для этого нужно сделать ?


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
iosifk
сообщение May 9 2017, 19:00
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 3 573
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(phantom @ May 9 2017, 21:24) *
В продолжение таймингов. Можно ли видеть задержки на временных диаграммах про симулировании? Что для этого нужно сделать ?

Добавить к исходникам sdf файл, который получается при размещении проекта. Вот только смысла в этом почти никакого нет. Вы что тысячи сигналов глазами проверять будете? С учетом оптимизации, когда треть сигналов исчезнет, зато другая треть автоматически добавится....


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 10 2017, 06:38
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



В любом случае это все равно будет модель. Для конкретной температуры и питания.
Можно в готовой ПЛИС поглядеть что вышло через сигнал тап или чипскоп опять же в конкретной температуре и на конкретном питании, но как правильно сказали знание это мало что дает, разве что доказывает что это не магия, а просто схемаsm.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd August 2017 - 11:49
Рейтинг@Mail.ru


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