Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: осторожно: метастабильность!
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
irum4
Прибор с кристаллом XC2S30. Загрузка кристалла 99% (хотя добавление или убирание кода не влияет на эту цифру).Одна часть работает на частоте 50 МГц. Из них формируется 1МГц на которой работает вторая часть схемы. На 1МГц работает автомат состояний, который в зависимости от разводки кристалла ЗБОИТ blink.gif , т.е. может заходить в промежуточное состояние и после этого соответсвенно нужна его инициализация. Переделка схемы на работу всего кристалла на 50 МГц, приводит к тем же результатам! Также наблюдаются збои некоторых регистров, причем самопроизвольно, без привязки ко времени и процессам excl.gif
Всякое видел, но такое впервые. Правда надо сказать, что разводка земель не ахти, но кондюки распаяны на каждую ногу, как положено.
Какие будут мысли, рекомендации. Понятно, что плату нужно переразводить, но что-то мне подсказывает, что собака не там зарыта. ninja.gif
des00
Цитата(irum4 @ Oct 24 2005, 05:15)
Прибор с кристаллом XC2S30. Загрузка кристалла 99% (хотя добавление или убирание кода не влияет на эту цифру).Одна часть работает на частоте 50 МГц. Из них формируется 1МГц на которой работает вторая часть схемы. На 1МГц работает автомат состояний, который в зависимости от разводки кристалла ЗБОИТ blink.gif , т.е. может заходить в промежуточное состояние и после этого соответсвенно нужна его инициализация. Переделка схемы на работу всего кристалла на 50 МГц, приводит к тем же результатам! Также наблюдаются збои некоторых регистров, причем самопроизвольно, без привязки ко времени и процессам excl.gif
Всякое видел, но такое впервые. Правда надо сказать, что разводка земель не ахти, но кондюки распаяны на каждую ногу, как положено.
Какие будут мысли, рекомендации. Понятно, что плату нужно переразводить, но что-то мне подсказывает, что собака не там зарыта. ninja.gif
*


хммм, не совсем конечно понятно, но ИМХО
1. Если сбоит КА, то тут может сбоить :
1.1 некорректная логика функции переходов (неправильн описан автомат).
1.2 асинхронные выходы КА --- метастаильные входы ---- автомат улетает куда ему вздумаеться, если не корректно написан.
1.3. неучтенны тайминги
2. Насчет регистров смотреть нужно:
2.1 некорректно сделан переход из одного клок домена в другой.
2.2 Гонки сигналов --- некорректно прописанна нектороая логика
3. Неправильные тайминги.
4. Ваши "косяки" с DCM (если вы его пользуете).
5. Плату переразводить рано еще, проштудировать отчеты синтезатора и проверить код, "потыкаться" чипскопом (если место есть)

Удачи
irum4
Цитата(des00 @ Oct 24 2005, 13:25)
хммм, не совсем конечно понятно, но ИМХО
1. Если сбоит КА, то тут может сбоить :
1.1 некорректная логика функции переходов (неправильн описан автомат).
1.2 асинхронные выходы КА --- метастаильные входы ---- автомат улетает куда ему вздумаеться, если не корректно написан.
1.3. неучтенны тайминги
2. Насчет регистров смотреть нужно:
2.1 некорректно сделан переход из одного клок домена в другой.
2.2 Гонки сигналов --- некорректно прописанна нектороая логика
3. Неправильные тайминги.
4. Ваши "косяки" с DCM (если вы его пользуете).
5. Плату переразводить рано еще, проштудировать отчеты синтезатора и проверить код, "потыкаться" чипскопом (если место есть)

Удачи
*

KA - работает синхронно с тактом 1 МГц, соответственно ассинхронных выходов нет, и какие там тайминги на 1 МГц.
Для регистров тайминги указаны и выполняются. DCM не использую.
Переход из одного клок домена в другой через блочную память - запись побитно на 1МГц, чтение из другого порта - на 50 МГц(сбоят типа адреса чтения этой памяти). Процессы записи и чтения асинхронны.
С чипскоупом в напряг - места нет.
Спасибо.
line
Цитата(irum4 @ Oct 24 2005, 13:15)
Прибор с кристаллом XC2S30. Загрузка кристалла 99% (хотя добавление или убирание кода не влияет на эту цифру).Одна часть работает на частоте 50 МГц. Из них формируется 1МГц на которой работает вторая часть схемы. На 1МГц работает автомат состояний, который в зависимости от разводки кристалла ЗБОИТ blink.gif

А почему загрузка кристалла то 99%? При заполнении больше 70-80% что угодно может быть... Не попробовать ли убрать часть код и посмотреть ситуацию... А разводка платы здесь 99% ни при чем.
des00
Цитата
KA - работает синхронно с тактом 1 МГц, соответственно ассинхронных выходов нет, и какие там тайминги на 1 МГц.

я говорил про входы, а не выходы.
Тайминги на 1 МГц, а если у вас там 20 уровней логики ? и у вас могут быть проблемы со временами установки и удержания.

Цитата
Переход из одного клок домена в другой через блочную память - запись побитно на 1МГц, чтение из другого порта - на 50 МГц(сбоят типа адреса чтения этой памяти).

хммм а генераторы адресов случайно не ФСМ управляються ? какой синтезатор ?

Цитата
Процессы записи и чтения асинхронны.

хммм не есть гут

Цитата
С чипскоупом в напряг - места нет.

оттебажить по частям
pergunt
Могу еще посоветовать вывести на свободные ноги (если они конечно остались) часть сигналов управления и выходных того места что возможно сбоит и осциллографом засинхронизовавшись, посмотреть по ним - нет ли коротких "шпилек" импульсов, из-за которых может быть сбой.
irum4
Цитата(line @ Oct 24 2005, 14:20)
Цитата(irum4 @ Oct 24 2005, 13:15)
Прибор с кристаллом XC2S30. Загрузка кристалла 99% (хотя добавление или убирание кода не влияет на эту цифру).Одна часть работает на частоте 50 МГц. Из них формируется 1МГц на которой работает вторая часть схемы. На 1МГц работает автомат состояний, который в зависимости от разводки кристалла ЗБОИТ blink.gif

А почему загрузка кристалла то 99%? При заполнении больше 70-80% что угодно может быть... Не попробовать ли убрать часть код и посмотреть ситуацию... А разводка платы здесь 99% ни при чем.
*


А что может быть при 99% заполнения - времяночки, то все выполняються,которые в ucf задаю? На другой плате, где использую эту же компоненту и с заполнением 78%. Эффект тот же. sad.gif
irum4
Цитата(des00 @ Oct 24 2005, 14:34)
я говорил про входы, а не выходы.
Тайминги на 1 МГц, а если у вас там 20 уровней логики ? и у вас могут быть проблемы со временами установки и удержания.

хммм а генераторы адресов случайно не ФСМ управляються ? какой синтезатор ?

хммм не есть гут

оттебажить по частям
*

На вход приходит сигнал привязаный к 50 МГц , но конечно не синфазный с 1МГц, но это решается быстро, принимается.
Устанавливал я тайминг на 1МГц - 20 нс максимальная задержка.
Адреса збоят от компонента внешнего интерфейса, который только либо пишет в буферную память либо читает (на 50 МГц). По второму порту только запись (1 МГц).
На счет дебага и несинхронности, могу сказать, что поскольку ВСЕ збои зависят от разводки кристалла, то 1/4 вариантов разводки не збоит cranky.gif
Вот так мозги и едут... wacko.gif
Весь парадокс в том и состоит, что все зависит от разводки, збоят регистры, збоит автомат состояний, затык может произойти сразу, может через 1-5 сек.
v_mirgorodsky
Цитата(irum4 @ Oct 24 2005, 15:09)
Цитата(line @ Oct 24 2005, 14:20)
Цитата(irum4 @ Oct 24 2005, 13:15)
Прибор с кристаллом XC2S30. Загрузка кристалла 99% (хотя добавление или убирание кода не влияет на эту цифру).Одна часть работает на частоте 50 МГц. Из них формируется 1МГц на которой работает вторая часть схемы. На 1МГц работает автомат состояний, который в зависимости от разводки кристалла ЗБОИТ blink.gif

А почему загрузка кристалла то 99%? При заполнении больше 70-80% что угодно может быть... Не попробовать ли убрать часть код и посмотреть ситуацию... А разводка платы здесь 99% ни при чем.
*


А что может быть при 99% заполнения - времяночки, то все выполняються,которые в ucf задаю? На другой плате, где использую эту же компоненту и с заполнением 78%. Эффект тот же. sad.gif
*



Самая распространенная ошибка с КА - ассинхронные входы по отношению к входной тактовой частоте КА. Лечится установкой синхронных регистров на каждый управляющий вход автомата.

Автомат дополняется состоянием XYZ и из всех рабочих состояний делается переход в XYZ если не выполняются все другие легальные переходы. Таким образом проверяется логика работы автомата - если XYZ появляется в процессе работы, то есть неучтенная комбинация управляющих сигналов, приводящая к ошибке. У нас даже было специальное название для этого сигнала - "хуз" smile.gif

Использование выходов автомата для управления ассинхронными сбросами регистров или счетчиков (самая большая лажа). Автомат может работать правильно, но на сигналах будут тонкие "шпильки" импульсов, которых хватает для сброса части (!) триггеров в счетчиках или регистрах. BTW, пытаться увидеть эти шпильки осциллографом/чипскопом/самодельным регистратором абсолютно бесполезно. На пин не выйдет по причине инерционности драйвера пина, а чипскопу/самодельному регистратору необходимы setup/hold, тогда как ассинхронный сброс вполне на них среагирует.
tegumay
а как это все отпахало в Modelsim'e?
3.14
2 irum4
Тактовые на глобальных линиях?
irum4
Цитата(v_mirgorodsky @ Oct 24 2005, 16:32)
Самая распространенная ошибка с КА - ассинхронные входы по отношению к входной тактовой частоте КА. Лечится установкой синхронных регистров на каждый управляющий вход автомата.

Автомат дополняется состоянием XYZ и из всех рабочих состояний делается переход в XYZ если не выполняются все другие легальные переходы. Таким образом проверяется логика работы автомата - если XYZ появляется в процессе работы, то есть неучтенная комбинация управляющих сигналов, приводящая к ошибке. У нас даже было специальное название для этого сигнала - "хуз" smile.gif

Использование выходов автомата для управления ассинхронными сбросами регистров или счетчиков (самая большая лажа). Автомат может работать правильно, но на сигналах будут тонкие "шпильки" импульсов, которых хватает для сброса части (!) триггеров в счетчиках или регистрах. BTW, пытаться увидеть эти шпильки осциллографом/чипскопом/самодельным регистратором абсолютно бесполезно. На пин не выйдет по причине инерционности драйвера пина, а чипскопу/самодельному регистратору необходимы setup/hold, тогда как ассинхронный сброс вполне на них среагирует.
*

Такой пример. СИНХРОННЫЙ автомат имеет 6 состояний:а,б,в,г,д,е,ж. Каждому синтезатор присваивает код 000001,000010,000100,001000,010000,100000.
Входной управляющий сигнал привязан к 50МГц из которого формируется 1МГц (пробовал автомат и на 50 МГц - ничего не дало)
После запуска автомат бегает по определенным состояниям согласно алгоритму, но в какой-то момент (типа кто-то голове грохнул) автомат переходит в состояние 000000! (никаких конфликтов внутри нет). И все... стоим-с.
Асинхронными сбросами, управлением я уже давно не пользуюсь - на рассыпухе их наелся.
Бред какой-то. В какой-то момент становиться просто смешно, но потом становится очень грустно - не первый день сижу,
Цитата(tegumay @ Oct 24 2005, 16:34)
а как это все отпахало в Modelsim'e?
*

Симуляция показывает все ок.
Цитата(3.14 @ Oct 24 2005, 17:18)
2 irum4
Тактовые на глобальных линиях?
*

Конечно
pergunt
v_mirgorodsky
На счет инерционности драйвера пина - это вы "погорячились".
Все будет видно осциллографом прекрасно - надо только уметь смотреть.
Через чипскоп - действительно "шпилек" не увидите.
3.14
Цитата(irum4 @ Oct 24 2005, 17:41)
Симуляция показывает все ок.

А Ваш тестбенч имитирует метастабильность?
Еще, извините за недоверчивость smile.gif, 1МГц точно разведен на глобальную линию?
3.14
Еще, можете показать отчет PAR?
v_mirgorodsky
Цитата(irum4 @ Oct 24 2005, 16:41)
Такой пример. СИНХРОННЫЙ автомат имеет 6 состояний:а,б,в,г,д,е,ж. Каждому синтезатор присваивает код 000001,000010,000100,001000,010000,100000.
Входной управляющий сигнал привязан к 50МГц из которого формируется 1МГц (пробовал автомат и на 50 МГц - ничего не дало)
После запуска автомат бегает по определенным состояниям согласно алгоритму, но в какой-то момент (типа кто-то голове грохнул) автомат переходит в состояние 000000! (никаких конфликтов внутри нет). И все... стоим-с.
Асинхронными сбросами, управлением я уже давно не пользуюсь - на рассыпухе их наелся. Бред какой-то. В какой-то момент становиться просто смешно, но потом становится очень грустно - не первый день сижу,
*


Чудес в электронике не бывает sad.gif Один из триггеров успевает сброситься, а второй просто не успевает установиться. Можно попробовать упростить логику автомата и проверять его по частям. Кстати, если входной ассинхронный сигнал идет на два или более синхронизирующих триггера параллельно, то можно получить аналогичный еффект.

У нас похожее поведение было с ассинхронными сигналами на машину. Полечилось установкой триггеров на все источники и отладкой логики КА. Больше без конкретной схемы и описания сказать будет сложно cranky.gif
irum4
w00t.gif w00t.gif w00t.gif w00t.gif w00t.gif
Заработало. Всем спасибо cheers.gif . Всему виной преславутая метастабильность
Теперь все выстроилось в четкую линию. Делитель с 50 МГц до 1 МГц я делал на счетчике (последний разряд на BUFG). Входной асинхронный сигнал стробированный 50 МГцами поступал на вход КА, поскольку задержка с выхода счетчика делителя до BUFG и задержка сигнала от тригера стробирования входного сигнала зависили от разводки, то в некоторых случаях фронты входного сигнала КА и такта 1МГц совпадали и вышибали мой КА в состояни 0, причем непрогнозируемо.
Поставил тригер на вхоной сигнал, тактируемый 1МГц, вместо 50 и все полетело, как миленькое. tongue.gif
М-да такую засаду чипскоупом не выловиш, а крышка точно чуть не съехала. biggrin.gif
Заодно нарыл ссылочку на счет метастабильности http://www.platan.ru/shem/pdf/st13-14.pdf
Цитата(v_mirgorodsky @ Oct 24 2005, 19:42)
Чудес в электронике не бывает

P.S. Мой шеф когда-то говорил также
des00
Цитата(irum4 @ Oct 25 2005, 08:40)
Заработало. Всем спасибо cheers.gif . Всему виной преславутая метастабильность


Поздравляю, cheers.gif
я же вам сразу про это грил wink.gif
Doka
Цитата(3.14 @ Oct 24 2005, 18:27) *
А Ваш тестбенч имитирует метастабильность?


детский вопрос: а разве симулятором (кроме spice-симулятора) вообще можно проверить метастабильность??? (вернее то, верно ли она отрабатывается вашей схемой синхронизатора клоковых доменов)

я так понимаю все эти схемы рекомендованных синхронизаторов предполагают, что априори работают "как надо" и тем самым исключают необходимость моделирования корректной отработки метастабильности.
DmitryR
Цитата(Doka @ Jan 10 2008, 16:20) *
детский вопрос: а разве симулятором (кроме spice-симулятора) вообще можно проверить метастабильность???

Запросто: нормальные модели триггеров выдают на выходе X, когда нарушается setup/hold.
Doka
Цитата(DmitryR @ Jan 10 2008, 18:34) *
Запросто: нормальные модели триггеров выдают на выходе X, когда нарушается setup/hold.

у меня практический интерес в этом вопросе: что мне делать с этим Х, если я хочу промоделировать правильность работы собственной схемы синхронизатора клоковых доменов (а точнее передачи данных) при возникновении нарушения времён setup/hold?
DmitryR
Цитата(Doka @ Jan 10 2008, 22:00) *
у меня практический интерес в этом вопросе: что мне делать с этим Х, если я хочу промоделировать правильность работы собственной схемы синхронизатора клоковых доменов (а точнее передачи данных) при возникновении нарушения времён setup/hold?

Как что делать, исправлять схему. Если Х прошел - значит синхронизатор работает неверно. Правильно работающий синхронизатор должен обеспечивать захват в принимающем домене только тогда, когда данные в передающем домене установились и ожидают захвата.
Kopart
Цитата(DmitryR @ Jan 11 2008, 13:27) *
Как что делать, исправлять схему. Если Х прошел - значит синхронизатор работает неверно. Правильно работающий синхронизатор должен обеспечивать захват в принимающем домене только тогда, когда данные в передающем домене установились и ожидают захвата.

А как проверить - как схема будет себя вести при нарушении условий??
Верификация бывает и полная..
DmitryR
Цитата(NiOS @ Jan 11 2008, 14:38) *
А как проверить - как схема будет себя вести при нарушении условий??
Верификация бывает и полная..

А симулятор бывает и Spice, как справедливо уже тут замечали. Но не требуется на самом деле ни то, ни другое: когда система работает неправильно - обычно всем все равно, как именно неправильно она работает.
Kopart
Цитата(DmitryR @ Jan 11 2008, 15:00) *
А симулятор бывает и Spice, как справедливо уже тут замечали. Но не требуется на самом деле ни то, ни другое: когда система работает неправильно - обычно всем все равно, как именно неправильно она работает.

Хе. Проверяется именно, что в НЕПРАВИЛНЫх условиях схема работает ПРАВИЛЬНО.
Это разговор уже дальше уйдет в тестовое покрытие функционала...
makc
Цитата(Doka @ Jan 10 2008, 22:00) *
у меня практический интерес в этом вопросе: что мне делать с этим Х, если я хочу промоделировать правильность работы собственной схемы синхронизатора клоковых доменов (а точнее передачи данных) при возникновении нарушения времён setup/hold?


Нужно, чтобы для первого триггера в цепочке синхронизатора в симуляторе была отключена проверка нарушения времён setup/hold. Либо, нужно отключить для синхронизатора трансляцию состояния X через триггеры синхронизатора, чтобы обеспечить подобие его правильной работы в реальных условиях.
dvladim
Цитата(makc @ Jan 11 2008, 19:50) *
Нужно, чтобы для первого триггера в цепочке синхронизатора в симуляторе была отключена проверка нарушения времён setup/hold. Либо, нужно отключить для синхронизатора трансляцию состояния X через триггеры синхронизатора, чтобы обеспечить подобие его правильной работы в реальных условиях.

А для эмуляции метастабильности можно описать триггер так:
при нарушении setup/hold выход переходит в X, а затем в D. Где D - 0 или 1 произвольно. При любых значениях должно работать нормально.
Длительность X - длительности метастабильного состояния. (можно взять 1/2 или 3/4 периода)
Doka
Цитата(den_realan @ Jan 13 2008, 00:02) *
А для эмуляции метастабильности можно описать триггер так:
при нарушении setup/hold выход переходит в X, а затем в D. Где D - 0 или 1 произвольно. При любых значениях должно работать нормально.
Длительность X - длительности метастабильного состояния. (можно взять 1/2 или 3/4 периода)

да это уже более-менее похоже. спасибо.
Tiro
Спасибо, познавательно.
DmitryR
Цитата(den_realan @ Jan 13 2008, 00:02) *
А для эмуляции метастабильности можно описать триггер так:
при нарушении setup/hold выход переходит в X, а затем в D. Где D - 0 или 1 произвольно. При любых значениях должно работать нормально.
Длительность X - длительности метастабильного состояния. (можно взять 1/2 или 3/4 периода)

Это самоуспокоение какое-то. Триггер НЕ ДОЛЖЕН попадать в метастабильное состояние. Поэтому и ставится там X на весь период.
Потом, если вы сделаете случайное выпадение в валидное состояние через пол-периода - то будете ошибку искать вечность. Так делаете в симуляторе ChaseX на любом развалившемся выходе - и он вас приводит в то место и время, когда у элемента входы валидны, а выход - X. А так будете ручками все, ручками, а postPAR модели ох как велики. Я уж не говорю про случаи, когда случайные ошибки будут друг друга компенсировать.
Vadim
Цитата(DmitryR @ Jan 14 2008, 10:45) *
Это самоуспокоение какое-то. Триггер НЕ ДОЛЖЕН попадать в метастабильное состояние.

Я извиняюсь, а куда ДОЛЖЕН попадать триггер, если время клокового перехода и время изменения данных совпадут? 07.gif
Kopart
Цитата(DmitryR @ Jan 14 2008, 10:45) *
Это самоуспокоение какое-то. Триггер НЕ ДОЛЖЕН попадать в метастабильное состояние.

В "физическом" мире может набежать задержка, что изменение на входе D тригерра произойдет одновременно с фронтом тактовой. И что - делаем растарт? smile.gif

Первопричина статистически возможна - соответственно требуется устранять последствия. А как - только с помощью адекватной модели метастабильности!
sazh
Цитата(NiOS @ Jan 14 2008, 11:40) *
В "физическом" мире может набежать задержка, что изменение на входе D тригерра произойдет одновременно с фронтом тактовой. И что - делаем растарт? smile.gif


Или кристалл на более быстрый меняем, или конвейер внедряем.
DmitryR
Цитата(Vadim @ Jan 14 2008, 11:37) *
Я извиняюсь, а куда ДОЛЖЕН попадать триггер, если время клокового перехода и время изменения данных совпадут? 07.gif

Этого можно вообще в большинстве случаев полностью избежать, грамотно сделав схему clock enable принимающего триггера так, что он при нестабильных данных на входе не будет щелкать. В остальных случаях этому триггеру запрещается переходить в X - в Xilinx например в таких случаях при нарушении setup/hold он не изменяет состояния. Но повторяю, наличие таких триггеров (или если он сваливается в случайное состояние) очень затрудняет поиск ошибки. Даже если он сделал X на пол-периода и следующий уровень это ошибочно щелкнул - вы можете не увидеть этой ошибки на выходах устройства (сделается этот X and 0 где-то и пропадет). А просматривать весь нетлист на предмет проскакивания там X - мало удовольствия.
Kopart
Цитата(DmitryR @ Jan 15 2008, 07:55) *
А просматривать весь нетлист на предмет проскакивания там X - мало удовольствия.

А автоматический тестбенч?!
А просто напечатать строчку в файл или рабочую область со временем, когда он равнялся "X"?!

Это намного проще и НАДЕЖНЕЕ, чем предугадать ВСЕ возможные ситуации. И опыт тут ТОЛЬКО статистически уменьшит вероятность такой ситуации (сделать схему, которая не попадает в такие ситуации).
arexol
Цитата(irum4 @ Oct 24 2005, 18:41) *
Такой пример. СИНХРОННЫЙ автомат имеет 6 состояний:а,б,в,г,д,е,ж. Каждому синтезатор присваивает код 000001,000010,000100,001000,010000,100000.
Входной управляющий сигнал привязан к 50МГц из которого формируется 1МГц (пробовал автомат и на 50 МГц - ничего не дало)
После запуска автомат бегает по определенным состояниям согласно алгоритму, но в какой-то момент (типа кто-то голове грохнул) автомат переходит в состояние 000000! (никаких конфликтов внутри нет). И все... стоим-с.
Асинхронными сбросами, управлением я уже давно не пользуюсь - на рассыпухе их наелся.
Бред какой-то. В какой-то момент становиться просто смешно, но потом становится очень грустно - не первый день сижу,

Симуляция показывает все ок.

Конечно


Может не в тему так как я на Альтере делаю
но была та же проблема - (я так и не разобрался в причинах её возникновения )
у меня автомат зависал на состоянии с безусловным переходом!!!

как я с бубном только не танцевал - и случайно "полечил" так сказать
поставил опцию для синтезатора чтоб не передокодировал состояния автомата
т.е если вершина 0101 то она не будет 0000100 при синтезе, а именно 0101
после чего зависания прекратились.

Сам понимаю как это выглядит ......
Но тем не менее блин заработало.
Причём такая лажа именно на одном проекте - до этого проекта я даже не предпологал что такое может быть.
Vadim
Цитата(DmitryR @ Jan 15 2008, 07:55) *
Этого можно вообще в большинстве случаев полностью избежать, грамотно сделав схему clock enable принимающего триггера так, что он при нестабильных данных на входе не будет щелкать.

Чего избежать? Одновременного прихода клока и данных, когда заранее известно, что данные расположены в другом клоковом домене? 07.gif Наладив телепатическую связь между FPGA и источником входных данных?
dvladim
Цитата
Vadim
Чего избежать? Одновременного прихода клока и данных, когда заранее известно, что данные расположены в другом клоковом домене? Наладив телепатическую связь между FPGA и источником входных данных?

Такое можно пропробовать сделать на элементах с разной задержкой и xor, но это бессмысленно. Избавимся от метастабильности по данным, но получим по clken.
Поясню, пример: вход триггера = 0, выход = 1, передний фронт клока возникает одновременно с переходом clken в активное состояние (или неактивное). Вот тут-то и появится метастабильность.

Важно понять, что при согласовании 2х доменов с неизвестной фазой, метастабильность будет хоть на 1 триггере. И в любом случае придется делать что-то вроде "запрос/ответ" при передаче данных. От того куда метастабильный триггер перебросится зависит КОГДА данные будут получены.

В прошлом посте я показал пример описания триггера. Надо добавить, что этим описанием нужно заменить в нетлисте только те триггеры, на которых метастабильность допускается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.