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

 
 
 
Reply to this topicStart new topic
> Внутренний сигнал FPGA с большой нагрузкой, Как это корректно реализуется?
Волощенко
сообщение Jun 27 2007, 06:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



1. Если один и тот же внутренний сигнал используется во многих логических узлах, т.е. имеет большую (многочисленную и разветвленную) нагрузку, то стоит ли самому заботиться о том, чтобы этот сигнал разгрузить, делая, например, каскады буферных повторителей (или вводя вспомогательные сигналы), или система проектирования сама выполняет это за нас?
2. Есть ли особенности по этой части для систем MAX+plus II, Quartus II и Xilinx ISE?
Понятно, что чипы имеют глобальные входы, но речь не о них, а о простых внутренних сигналах. Просто просматривая документацию, не встречал ни разу каких либо соображений по этому вопросу.
Спасибо за ответ.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 27 2007, 07:12
Сообщение #2


Adept
******

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



Цитата(Волощенко @ Jun 27 2007, 13:25) *
1. Если один и тот же внутренний сигнал используется во многих логических узлах, т.е. имеет большую (многочисленную и разветвленную) нагрузку, то стоит ли самому заботиться о том, чтобы этот сигнал разгрузить, делая, например, каскады буферных повторителей (или вводя вспомогательные сигналы), или система проектирования сама выполняет это за нас?

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


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


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

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



Цитата(dxp @ Jun 27 2007, 10:12) *
о коэффициентах разветвления на выходе логики заботиться не нужно.

Я бы не сказал, что совсем не нужно. Иногда бывает, что и нужно...

Констрейн в синтезаторе max_fanout.
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jun 27 2007, 07:54
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Спасибо за ответы!
Цитата(dxp @ Jun 27 2007, 10:12) *
Т.ч. о коэффициентах разветвления на выходе логики заботиться не нужно.
Если этот сигнал очень большой частоты, или используется как тактирующий для синхронного конечного автомата (FSM), то при большом коэффициенте разветвления на выходе, без буферов не обойтись. Да еще надо, чтобы на синхро-входы регистров и триггеров (фронт - спад) эти одноименные сигналы приходили одновременно, иначе иногда возможны нежелательные гонки.
1. Указывают ли в документации на FPGA максимально допустимый коэффициент разветвления на выходе для внутренних сигналов?
2. Следит ли система сама и подсчитывает ли этот коэффициент после компиляции? Где можно найти рапорт об этом? Или все решается констрейном по максимальному наперед заложенному значению этого коэффициента?
3. Есть ли ссылки, в части этого коэффициента, на конкретные документы?
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 27 2007, 08:59
Сообщение #5


Adept
******

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



Цитата(Волощенко @ Jun 27 2007, 14:54) *
Если этот сигнал очень большой частоты, или используется как тактирующий для синхронного конечного автомата (FSM), то при большом коэффициенте разветвления на выходе, без буферов не обойтись. Да еще надо, чтобы на синхро-входы регистров и триггеров (фронт - спад) эти одноименные сигналы приходили одновременно, иначе иногда возможны нежелательные гонки.

Если сигнал используется для тактирования, то в FPGA он должен быть глобальным тактовым. Там все эти требования выполняются - и буфра есть, и перекосы минимальны.

Цитата(andrew_b @ Jun 27 2007, 14:16) *
Я бы не сказал, что совсем не нужно. Иногда бывает, что и нужно...

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


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


Дима
*****

Группа: Свой
Сообщений: 1 683
Регистрация: 15-12-04
Из: Санкт-Петербург
Пользователь №: 1 486



Цитата
Констрейн в синтезаторе max_fanout

Во-во, пожалуйста, я давно хотел понять: что можно получить из такого констрейна? А заодно и вообще из информации о разветвлённости выходного сигнала какой-либо ячейки? А входного?


--------------------
© CОПЫРИГХТ: Дмитрий Иоффе, Советский Союз.
Приглашаю посмотреть: http://muradowa.spb.ru/ и http://www.drtata.narod.ru/index.html
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 27 2007, 10:14
Сообщение #7


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

Группа: Свой
Сообщений: 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 до такого значения, чтобы покрывался весь мультиплексор, и все со свистом разводится.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 27 2007, 10:44
Сообщение #8


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 до такого значения, чтобы покрывался весь мультиплексор, и все со свистом разводится.

Вот и вопрос - зачем задавать было фанаут? Без него бы сразу все развелось. Или в чем тут подводный камень?


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


Знающий
****

Группа: Админы
Сообщений: 689
Регистрация: 24-06-04
Из: South Africa
Пользователь №: 164



max_fanout часто нужен, особенно на устройствах Actel (antifuse) - там никаких коммутаторов-мультиплексоров нет и в помине (проволочки - fuse). В эпоху схемных дизайнов и хилых устройств с 1 - 2 глобальными цепями приходилось за буферированием следить вручную. Теперича эта проблема отходит на задний план, т.к. устройства стали побогаче и редко кто чего делает как схему, а умный синтезатор за этим сам следит. Не очень понял пример с
"clock enable". Тут есть пара-другая вопросов. Например такой: использование всяческих "clock enable" является порочной практикой изначально (gated clock), поэтому отстаньте от бедного синтезатора - он не умеет ХОРОШО упихивать ПЛОХИЕ проекты. Не воспринимайте, пожалуйста, это как личный выпад, сам иногда использую такие штуки (например, когда места на кристале не хватает и хоть застрелись), но делать это надо сознательно и очень осторожно, а лучше не делать.


--------------------
"В мире есть две бесконечные вещи: Вселенная и человеческая глупость. За Вселенную, впрочем, поручиться не могу". (С)

А. Эйнштейн.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 27 2007, 13:04
Сообщение #10


Adept
******

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



Цитата(LeonY @ Jun 27 2007, 19:33) *
max_fanout часто нужен, особенно на устройствах Actel (antifuse) - там никаких коммутаторов-мультиплексоров нет и в помине (проволочки - fuse). В эпоху схемных дизайнов и хилых устройств с 1 - 2 глобальными цепями приходилось за буферированием следить вручную. Теперича эта проблема отходит на задний план, т.к. устройства стали побогаче и редко кто чего делает как схему, а умный синтезатор за этим сам следит.

Про пережигаемые речь не идет. Речь об FPGA, в которой вся схема межсоединений строится на мультиплексорах, а мультиплексор сам по себе какой-никакой буфер.

Цитата(LeonY @ Jun 27 2007, 19:33) *
Не очень понял пример с
"clock enable". Тут есть пара-другая вопросов. Например такой: использование всяческих "clock enable" является порочной практикой изначально (gated clock), поэтому отстаньте от бедного синтезатора - он не умеет ХОРОШО упихивать ПЛОХИЕ проекты. Не воспринимайте, пожалуйста, это как личный выпад, сам иногда использую такие штуки (например, когда места на кристале не хватает и хоть застрелись), но делать это надо сознательно и очень осторожно, а лучше не делать.

То есть как? Вот такой простой и валидный код:
Код
reg a;
reg enable;
reg result;
always @(posedge clk) begin
    if(enable) result <= a;
end

порождает clock enable. Что тут ненормального или ПЛОХОГО? И как вообще без clock enable реализовать такую функциональность?

Что касается мультициклов, то и это тоже, насколько мне известно, не является плохим подходом - если часть дизайна не может и не должна работать на самой высокой тактовой, но при этом не хочется делать разные клоковые домены, то обконстрейнить мультициклами - самое оно. В чем криминал?


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


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

Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422



Значениеe MAX_FANOUT (default):
= 100 для Virtex, Virtex-E, Spartan-II, Spartan-IIE;
= 500 для Spartan-3, Virtex-II, Virtex-II Pro, Virtex-II Pro X, Virtex-4;
= 100000 для Virtex-5 (из xst.pdf).

Значение параметра Max Fanout устанавливает максимально допустимое количество ветвлений цепей в процессе синтеза. Наличие цепей с большим количеством ветвлений создает проблемы в процессе их трассировки.
Для исключения возникновения таких проблем с помощью параметра Max Fanout задается предельное значение, ограничивающее количество разветвлений результирующих цепей. Средства синтеза могут сократить количество разветвлений за счет дублирования соответствующих регистров и вентилей, а также за счет установки дополнительных буферов. (отсюда: http://www.compitech.ru/html.cgi/arhiv/02_03/stat_132.htm)
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 27 2007, 13:25
Сообщение #12


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

Группа: Свой
Сообщений: 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?
Прикрепленные файлы
Прикрепленный файл  multi_cycle.pdf ( 24.31 килобайт ) Кол-во скачиваний: 267
 
Go to the top of the page
 
+Quote Post
LeonY
сообщение Jun 27 2007, 14:12
Сообщение #13


Знающий
****

Группа: Админы
Сообщений: 689
Регистрация: 24-06-04
Из: South Africa
Пользователь №: 164



Цитата
Про пережигаемые речь не идет. Речь об FPGA, в которой вся схема межсоединений строится на мультиплексорах, а мультиплексор сам по себе какой-никакой буфер.
А где это сказано у автора темы, там нет ни слова про технологию, про мультиплексоры.

Ну а по сути:

В приведенном коде нет никакого криминала, правда нет и clock enable. Есть сигнал Enable, а это есть 2 большие разницы. Не случайно во всяких там MegaWizard-ах это специально подчеркивается. Так в HDL Designer можно создать счетчик с Clk_En или с Count_Enable. Симуляцию все это будет проходить почти одинаково (разница будет в поведении синхронных Load - Set - Reset), а вот в синтезе начнутся жалобы на Gated Clock, если использовалась первая опция (Сам нарвался пару лет назад и долго не мог понять в чем дело).

Малтициклы и прочая экзотика по-моему не имеет прямого отношения к заданому вопросу о fanout, это скорее относится к pipe lines, max clock, latency и т.д. Далее следует цитата из Wikipedia: "Fanout is a measure of the ability of a logic gate output, implemented electronically, to drive a number of inputs of other logic gates of the same type"


Цитата(andrew_b @ Jun 27 2007, 15:25) *
В Synplify он всегда чему-то равен. По умолчанию -- 100. В XST для Сапртан-3 -- 200 (upd: даже 500). В Квартусе -- не помню, может, и не ограничено.

Зависит от производителя/семейства/технологии. Например для Actel Antifuse (старый) - 10, Flash - 16.
Цитата
В аттаче... Немного утрировано, но я думаю, идея понятна. Верхняя картинка -- это как написано. Нижняя -- то, что получалось после синтеза с недостаточным fanout. После увеличения fanout после синтеза стало как на первой картинке.

Посмотрел. Не слишком понятно откуда взялся Clock enable 3. Если это точная копия Clock enable 2, то нафига все эти игры - поставил Buffer, а лучше 2 и имеешь Clock enable 2.1 и Clock enable 2.2. Увы работоспособность в этом случае на предельных частотах не гарантирована

Цитата
Не понял. Какой-такой gated clock?

Может это вопрос терминологии, но терминология точно плохая - см. про 2 большие разницы biggrin.gif


--------------------
"В мире есть две бесконечные вещи: Вселенная и человеческая глупость. За Вселенную, впрочем, поручиться не могу". (С)

А. Эйнштейн.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 28 2007, 03:27
Сообщение #14


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



думаю что к рассматриваемому примеру max_fanout притянут зауши.
на лицо баг симплифая с назначением констрейнов цепям.

у синтезатора есть времянка, и он пытаеться ее автоматически вытянуть, в том числе за счет расщипления цепей с больщим fan-out.


--------------------
Go to the top of the page
 
+Quote Post
TailWind
сообщение Jun 28 2007, 06:50
Сообщение #15


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

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



Самостоятельно можно размножать триггер с которого идёт этот сигнал!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:37
Рейтинг@Mail.ru


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