[an error occurred while processing this directive]
Подробнее про асинхронность (+)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено SM 16 июня 2003 г. 22:38
В ответ на: Just Say NO to Asynchronous Design! отправлено Eugenius 16 июня 2003 г. 20:31

Хочу добавить. Все сказанное верно, НО! Бывает (редко, но все же бывает) никак не обойтись без чего-либо асинхронного. В этом случае, особенно если сигнал формируется логической операцией из тактовой частоты и какого либо другого сигнала (например мультиплексор тактовой частоты, или формирование сигнала записи для асинхронного ОЗУ) надо обязательно четко себе представить соотношение времянок, и, если надо, задержать один из сигналов при помощи вставления в исходник примитивов из технологической библиотеки. В либах ASIC'ов для этого сущемствуют специальные элементы с нормированной задержкой. В условиях FPGA сложнее. Для альтеры в качестве этого выступает LCELL, CASCADE, EXP, и т.п. Для хилинха не знаю.

Вот два примера (в конце) - первый будет глючить, второй - нет.

В первом получается так, что в зависимости от того, как развелось, сигнал (!clock) будет приходить в большинстве случаев разводки раньше сигнала с выхода my_reg. Как результат - в момент переключения my_reg с 1 в 0 будет на выходе глитч, с длительностью, зависящей от маппера, рутера, и прочей фазы луны.
Во втором случае - задержка сигнала (!clock) цепочкой из 4-х буферов будет точно больше, чем время установления сигнала на выходе регистра. Следовательно и глитча не будет. Если рассчитать длину линии задержки так, что-бы при любом расположении на кристалле требуемая времянка выполнялась, или (если позволяет синтезатор-роутер) законстрейнить эти пути и по min_delay, и по max_delay, то глюков, вызванных на таких "сопливых" участках глитчами не будет при любом рероутинге.

-----------------
my_reg:dff;

my_reg.clk = clock;

asyn_out = (!clock) & my_reg;
-----------------
asyn_out = LCELL(LCELL(LCELL(LCELL(!clock)))) & my_reg;


ЗЫ
Число LCELL'ов 4 я взял от фонаря, ничего не считая. На самом деле их может быть и меньше, и больше :-)

ЗЗЫ
Естественно вставлять технологические ячейки можно не только в AHDL. В верилоге этим тоже пользуюсь, если надо. Про VHDL не знаю.

ЗЗЗЫ
Вот для асиков можно сгенерить SDF для любой заданной рабочей температуры и напряжения питания. А для FPGA с этим как? Как раз для вычисления необходимых задержек это очень помогло бы.


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru