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

 
 
> timing in Vivado
cerg19
сообщение Oct 8 2015, 19:38
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



Всем привет.
Возникла такая проблема. На virtex7 реализован жирный мультиплексор 16 высокоскоростных потоков в один. Идея в том, что по 16 каналам валяться 64 битные слова с частотой 312МГц. Валяться они пакетами и скважность этих пакетов плавает со временем. Выходной поток имеет такую же пропускную способность(64 бит слова, 312МГц). Чтобы не потерять данные, пока в выходной поток пишем данные с одного канала, данные с других каналов пишутся в fifo. Каждый канал имеет своё собственное fifo размерностью 16384x64. Реализован алгоритм постепенного чтения из каждого фифо в определённой очереди, чтобы ни одно фифо не успело переполниться. Фифо получились большие и места этот мультиплексор занимает очень много.

В итоге всё работает и ничего не теряется, но возникла проблема.
Компиляция производится при помощи vivado 2014 и из раза в раз получается разный результат по таймингам. То их нет, то получаются большие тайминги(до 0.5нс). Причём мультиплексор давно написан и никаких изменений в нём не делается. Ему отведён отдельный регион на кристале где ему разводится и другой логики от других модулей там нет. Из сборки к сборке он не меняется.

Я бы понял если бы тайминги были всегда, но компилятору всёже периодически удаётся его нормально развести.

Может кто-нибудь посоветует как с этим бороться. Можно ли зафиксировать как-то результат разводки мультиплексора, или сказать компилятору разводить его пока не будет ошибок по таймингам?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
Vascom
сообщение Oct 8 2015, 19:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Попробуй Vivado 2015.3, текущий. У старых версий Vivado вообще куча проблем существует.
Go to the top of the page
 
+Quote Post
cerg19
сообщение Oct 8 2015, 19:43
Сообщение #3


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

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



Цитата(Vascom @ Oct 8 2015, 22:41) *
Попробуй Vivado 2015.3, текущий. У старых версий Vivado вообще куча проблем существует.


нет возможности, только 2014.4
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Oct 9 2015, 08:52
Сообщение #4


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

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Каждое ФИФО гвоздями приколотите.
Go to the top of the page
 
+Quote Post
gotcha
сообщение Oct 9 2015, 09:01
Сообщение #5


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

Группа: Свой
Сообщений: 115
Регистрация: 19-03-06
Пользователь №: 15 389



Должны быть констрейнты на эти тайминги.
Go to the top of the page
 
+Quote Post
Vascom
сообщение Oct 9 2015, 09:02
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Вообще, через Floorplan можно залочить любой элемент.
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 11 2015, 08:28
Сообщение #7


Местный
***

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



После удачной разводки выгрузите размещение компонент вашего мультиплексора в файл констрейнтов (xdc) и затем используйте этот файл при дальнейших сборках вашего проекта.
Go to the top of the page
 
+Quote Post
cerg19
сообщение Oct 13 2015, 08:20
Сообщение #8


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

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



FIFO и до этого были приколочены, обложил констрейнами 2/3 всех сигналов в мультиплексоре и он стал почти всегда собираться без таймингов.
Цитата
После удачной разводки выгрузите размещение компонент вашего мультиплексора в файл констрейнтов (xdc) и затем используйте этот файл при дальнейших сборках вашего проекта.

Подскажите пожалуйста как это сделать в vivado?
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 13 2015, 12:36
Сообщение #9


Местный
***

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



Посмотрите на Vivado XDC Macros

Цитата(cerg19 @ Oct 13 2015, 11:20) *
обложил констрейнами 2/3 всех сигналов в мультиплексоре и он стал почти всегда собираться без таймингов.


По хорошему все сигналы должны подпадать под констрейнты.
Go to the top of the page
 
+Quote Post
cerg19
сообщение Oct 13 2015, 19:52
Сообщение #10


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

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



Ну все сигналы тактируются от одного клока, на который есть констрейн. По моей логише это должно автоматически накладывать констрейн на распространение сигналов между регистрами, тактируемые этим клоком. Но вивадо почемуто на них забивает. Частично помогает явное указане set_max_delay в констрейнах на интересуемый сигнал, который собирается с таймингами. Так же немного улучшило ситуацию директива NoTimingRelaxation для route. Ситуация улучшилась, но всёже иногда тайминги вылезают. Неужто на все сигналы мультиплексора необходимо явно указывать set_max_delay?
Go to the top of the page
 
+Quote Post
Vascom
сообщение Oct 14 2015, 03:58
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Посмотри отчёты о таймингах, какие клоки вивадо видит. Обычно все работает автоматом, и дополнительно требуется задавать лишь клоки, идущие на выходные пины.
Go to the top of the page
 
+Quote Post
cerg19
сообщение Oct 16 2015, 11:42
Сообщение #12


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

Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978



Собственно вот какие я выводы сделал. Я не знаю как точно там сделано в вивадо, но при работе с большими проетами(заполненность плис больше 70%) и при довольно больших частотах(больше 200МГц) с разводкой всё плохо. Похоже при процессе рутинга естественно некоторые констрейны не совпадают и вивадо начинает пытаться их исправить переставляя местами регистры и луты, как я понял перестановке подвергаются и те регистры с которыми всё было ок. И вот она исправляет тайминг одного сигнала, но при этом часто портит другого, и всё повторяется. На какомто этапе она всёже останавляивается и иногда с таймингами на некоторых сигналах. Выход из положения это использование OOC. Суть в том что вы компилите и разводите большие и критически важные блоки отдельно. при этом вивадо пытается срутить только его и ей это удаётся(если нет, то переписывай код). Полученный dcp файл потом используется как black box в большом проекте. Этот файл содержит ваш модуль без таймингов и при компиляции большого проекта он не будет его рутить я просто возьмёт из dcp файла, где описано какие элементы и какие луты куда класть. BINGO!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:05
Рейтинг@Mail.ru


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