|
Внутренний сигнал FPGA с большой нагрузкой, Как это корректно реализуется? |
|
|
|
Jun 27 2007, 06:25
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
1. Если один и тот же внутренний сигнал используется во многих логических узлах, т.е. имеет большую (многочисленную и разветвленную) нагрузку, то стоит ли самому заботиться о том, чтобы этот сигнал разгрузить, делая, например, каскады буферных повторителей (или вводя вспомогательные сигналы), или система проектирования сама выполняет это за нас? 2. Есть ли особенности по этой части для систем MAX+plus II, Quartus II и Xilinx ISE? Понятно, что чипы имеют глобальные входы, но речь не о них, а о простых внутренних сигналах. Просто просматривая документацию, не встречал ни разу каких либо соображений по этому вопросу. Спасибо за ответ.
|
|
|
|
|
 |
Ответов
|
Jun 27 2007, 10:14
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(DSIoffe @ Jun 27 2007, 12:36)  Во-во, пожалуйста, я давно хотел понять: что можно получить из такого констрейна? А заодно и вообще из информации о разветвлённости выходного сигнала какой-либо ячейки? А входного? Что такое "разветвленность входного сигнала" и зачем она нужна?. Про выходной я расскажу. Пример из живого проекта. ПЛИС - Спартан-3. Синтез - Synplify. Ставим fanout_limit = 100. В логе появляются строчки: pin:Q inst:map_frame_descr_gen.dmmisccnt[1] of UNILIB.FDCPE(PRIM) - loads: 102, segments 2, replicating source pin:Q inst:map_frame_descr_gen.dmmisccnt[2] of UNILIB.FDCPE(PRIM) - loads: 105, segments 2, replicating source Added 2 Registers via replication Увеличиваем fanout_limit do 200, и ничего подобного нет. Но в этом месте это не критично. Критично оказалось в другом. Тот же проект. Есть интерфейс с DSP TI320C6416 по EMIF. Интерфейс синхронный, 100 МГц. Шина данных -- 32 разряда, шина адреса -- 20 разрядов. В FPGA реализовано несколько десятков регистров с режимом доступа "чтение/запись", некоторые -- "только чтение", многие из регистров 32-разрядные. Сами понимаете, мультиплексор, объединяющий все регистры в выходную шину данных, получается неслабый. Поэтому он сделан multi-cycle. Задан констрейн от начала этого multi-cycle-пути (clock enable -- выход триггера) до его конца (другой clock enable -- выход другого триггера). Но поскольку конечная точка -- это несколько сотен триггеров (нескольско сотен --- это больше, чем установленный fanout), то синтезатор размножил триггер, формирующий clock enable для конечной точки и, естественно, дал этому новому триггеру какое-то заранее неизвестное имя. Раз имя другое, то констрейн на этот сигнал не распространяется. Получается, что часть мультиплексора обконстрейнена, часть нет. В результате тайминги не сходятся. То, что легко укладывается в 2 такта частоты EMIF (20 нс), par пытается уложить в один (10 нс) и у него не получается. Увеличиваем fanout до такого значения, чтобы покрывался весь мультиплексор, и все со свистом разводится.
|
|
|
|
|
Jun 27 2007, 10:44
|

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

|
Цитата(andrew_b @ Jun 27 2007, 17:14)  Пример из живого проекта. ПЛИС - Спартан-3. Синтез - Synplify. Ставим fanout_limit = 100. В логе появляются строчки:
pin:Q inst:map_frame_descr_gen.dmmisccnt[1] of UNILIB.FDCPE(PRIM) - loads: 102, segments 2, replicating source pin:Q inst:map_frame_descr_gen.dmmisccnt[2] of UNILIB.FDCPE(PRIM) - loads: 105, segments 2, replicating source Added 2 Registers via replication
Увеличиваем fanout_limit do 200, и ничего подобного нет. Но в этом месте это не критично. Критично оказалось в другом. На что влияет констрейн понятно. Не понятно, зачем было вообще его задавать? Без него фанаут чему равен? Вроде, если не задан, то не ограничен. Цитата(andrew_b @ Jun 27 2007, 17:14)  синтезатор размножил триггер, формирующий clock enable для конечной точки и, естественно, дал этому новому триггеру какое-то заранее неизвестное имя. Раз имя другое, то констрейн на этот сигнал не распространяется. Получается, что часть мультиплексора обконстрейнена, часть нет. В результате тайминги не сходятся. То, что легко укладывается в 2 такта частоты EMIF (20 нс), par пытается уложить в один (10 нс) и у него не получается. Увеличиваем fanout до такого значения, чтобы покрывался весь мультиплексор, и все со свистом разводится. Вот и вопрос - зачем задавать было фанаут? Без него бы сразу все развелось. Или в чем тут подводный камень?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jun 27 2007, 13:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(dxp @ Jun 27 2007, 13:44)  На что влияет констрейн понятно. Не понятно, зачем было вообще его задавать? Без него фанаут чему равен? Вроде, если не задан, то не ограничен. В Synplify он всегда чему-то равен. По умолчанию -- 100. В XST для Сапртан-3 -- 200 (upd: даже 500). В Квартусе -- не помню, может, и не ограничено. Цитата Не очень понял пример с "clock enable" В аттаче... Немного утрировано, но я думаю, идея понятна. Верхняя картинка -- это как написано. Нижняя -- то, что получалось после синтеза с недостаточным fanout. После увеличения fanout после синтеза стало как на первой картинке. Цитата использование всяческих "clock enable" является порочной практикой изначально (gated clock) Не понял. Какой-такой gated clock?
|
|
|
|
Сообщений в этой теме
Волощенко Внутренний сигнал FPGA с большой нагрузкой Jun 27 2007, 06:25 dxp Цитата(Волощенко @ Jun 27 2007, 13:25) 1.... Jun 27 2007, 07:12 andrew_b Цитата(dxp @ Jun 27 2007, 10:12) о коэффи... Jun 27 2007, 07:16 Волощенко Спасибо за ответы!
Цитата(dxp @ Jun 27 20... Jun 27 2007, 07:54  dxp Цитата(Волощенко @ Jun 27 2007, 14:54) Ес... Jun 27 2007, 08:59 LeonY max_fanout часто нужен, особенно на устройствах Ac... Jun 27 2007, 12:33 dxp Цитата(LeonY @ Jun 27 2007, 19:33) max_fa... Jun 27 2007, 13:04 RKOB Значениеe MAX_FANOUT (default):
= 100 для Virtex, ... Jun 27 2007, 13:14 LeonY ЦитатаПро пережигаемые речь не идет. Речь об FPGA,... Jun 27 2007, 14:12 des00 думаю что к рассматриваемому примеру max_fanout пр... Jun 28 2007, 03:27 TailWind Самостоятельно можно размножать триггер с которого... Jun 28 2007, 06:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|