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

 
 
> Проблема передачи данных от одной FPGA к другой, Constraints для двух FPGA на плате
Rok
сообщение Jun 29 2006, 10:28
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



Всем добрый день.

Ситуация следующая. Есть плата на ней стоит два чипа Virtex-II.
Делаю проект, разбиваю его на 2 части. Т.е. одна часть для первой микрухи, вторая часть - для второй.
Программирую PROM.
Начинаю проверку. Вижу, что данные от второй микрухи не приходят.
Делаю для второй микрухи проект в Identify. Там все прекрасно видно, что данные на выходе 2-го чипа есть.
А на входе первой, в том-же Identify, одни нули. Ладно думаю ...

Сделал новый проект все блоки объединил на один чип. Все прекрасно работает.
Но чип забит под завязку, что не очень хорошо для меня.
Ну и потом, раньше с таким не сталкивался. Нужно бы разобраться cranky.gif
Т.е. нужно как-то применить timing constraints к обоим чипам, но сразу,наверное, как-то измерить задержку надо бы...
В общем одни мысли ... glare.gif
Ну и вот счас нарыл в доках OFFSET (constraint) и TRACE (утилита для timing analysis) - читаю...

Прошу совета, люди добрые ... help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3.14
сообщение Jul 3 2006, 18:50
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Итак, предположим Ваш автомат: регистр(ы) - комбинаторная логика - регистр(ы). Теперь Вы решили разнести комбинаторку по двум кристаллам. До перетосовки содержимого Вам было достаточно указать только констрейн PERIOD (OFFSET конечно то же надо, но ...), чтоб знать будет устройство работать или нет. Теперь Вы имеете регистр - комбинаторка - пин - линия - пин - комбинаторка - регистр. Если частота работы не большая (зависит конечно от "ширины" комбинаторки), то можно ничего и не затягивать констрейнами и все будет нормально функционировать, но вот с ростом частоты (так же и с ростом заполнения кристалла, если запас по задержкам был не большой) возникнут проблемы. Т.е. теперь жизненно необходимо законстрейнить пути от/до пинов до/от регистров (читаем про OFFSET и MAXDELAY). Предположим Вы успешно указали требуемые констрейны, но вот сюрприз, PAR думает с полчаса а потом говорит что не может их выполнить. Тогда остается одно - вставлять дополнительные регистры которые сократят до минимума пути от/до пинов, например: регистр - комбинаторка - регистр - пин - линия - пин - регистр - комбинаторка - регистр. Получается, теперь данные на выходе задержаны на 2 такта которые и надо учесть в своей архитектуре. Далее, увеличиваем частоту, опять не выполняется путь от/до пина, разбираемся, оказывается выходные/входные регистры раскиданы по кристаллу чем и вызваны длинные пути, теперь нужно использовать IOB=TRUE, так же задержка на выходном буфере зависит от настройки его макс. тока и скорости переключения (сразу включать максимум не стоит по соображениям согласованности в линиях). Так же важно как входит тактовый во второй кристалл (надеюсь в кристалле для него используете глобальную линию), идеальный вариант заводить его через DLL/DCM т.к. это позволит компенсировать задержку пин - глобальная линия, в противном случае надо прибавлять эту задержку к задержке на распространении.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Rok
сообщение Jul 6 2006, 09:07
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



Цитата(3.14 @ Jul 4 2006, 03:50) *
Итак, предположим Ваш автомат: регистр(ы) - комбинаторная логика - регистр(ы). Теперь Вы решили разнести комбинаторку по двум кристаллам. До перетосовки содержимого Вам было достаточно указать только констрейн PERIOD (OFFSET конечно то же надо, но ...), чтоб знать будет устройство работать или нет. Теперь Вы имеете регистр - комбинаторка - пин - линия - пин - комбинаторка - регистр. Если частота работы не большая (зависит конечно от "ширины" комбинаторки), то можно ничего и не затягивать констрейнами и все будет нормально функционировать
т.е. такая ситуация возможна:
регистр - комбинаторка - пин - линия - пин - комбинаторка - регистр
в смысле на небольших частотах должна работать, так?
Цитата(3.14 @ Jul 4 2006, 03:50) *
но вот с ростом частоты (так же и с ростом заполнения кристалла, если запас по задержкам был не большой) возникнут проблемы. Т.е. теперь жизненно необходимо законстрейнить пути от/до пинов до/от регистров (читаем про OFFSET и MAXDELAY).
Пока читаем мат. часть smile3046.gif
Цитата(3.14 @ Jul 4 2006, 03:50) *
Предположим Вы успешно указали требуемые констрейны, но вот сюрприз, PAR думает с полчаса а потом говорит что не может их выполнить. Тогда остается одно - вставлять дополнительные регистры которые сократят до минимума пути от/до пинов, например: регистр - комбинаторка - регистр - пин - линия - пин - регистр - комбинаторка - регистр. Получается, теперь данные на выходе задержаны на 2 такта которые и надо учесть в своей архитектуре.
А обязательно ли вставлять их (регистры) только в RTL, или можно их вставить на этапе после ситеза? Может FPGA Editor поможет?
Чего то я тут сморозил, надо же не только их вставить, но учесть эти 2 клока, не так ли ?
Цитата(3.14 @ Jul 4 2006, 03:50) *
Далее, увеличиваем частоту, опять не выполняется путь от/до пина, разбираемся, оказывается выходные/входные регистры раскиданы по кристаллу чем и вызваны длинные пути, теперь нужно использовать IOB=TRUE, так же задержка на выходном буфере зависит от настройки его макс. тока и скорости переключения (сразу включать максимум не стоит по соображениям согласованности в линиях).

Ну я проверил в FPGA Editor - регистры входных цепей частично внутри IOB, но также есть некоторые вне IOB. Регистры выходых цепей, причем все, располагаются вне IOB.
Так почему только xilinx это по умолчанию не делает ? Тут же логически понятно, что это экономит ресурсы кристалла и задержка соответственно уменьшается.
Цитата(3.14 @ Jul 4 2006, 03:50) *
Так же важно как входит тактовый во второй кристалл (надеюсь в кристалле для него используете глобальную линию)
да, линии для всех клоков глобальные
Цитата(3.14 @ Jul 4 2006, 03:50) *
идеальный вариант заводить его через DLL/DCM т.к. это позволит компенсировать задержку пин - глобальная линия, в противном случае надо прибавлять эту задержку к задержке на распространении.
У меня клок заведен следующим образом:
external clok to 1st FPGA -> DCM -> global pin (1st FPGA) -> линия -> global pin (2nd FPGA) -> register
т.е. вы предлагаете поставить DCM между global clock и регистрами во 2-й FPGA ?
Go to the top of the page
 
+Quote Post



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

 


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


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