Перейти к содержанию
    

Метастабильность по входу CE для FF Xilinx

Уважаемые, объясните в двух словах про метастабильность - если я ищу фронт у импульса через такую конструкцию:

reg [3:0] front1;
always @(posedge clk) front1<={front1[1:0],start}
if (front1==3'b011) .......

и на длительность импульса приходится минимум 4 такта клоковой частоты, мне же нечего боятся метастабильности?

з.ы.

прошу прощения за оффтопик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А одного триггера не хватит? :rolleyes: Как перекинулся в 1, так, значит, был положительный импульс. Если на входе не было 1, выход триггера никогда не полезет в 1.

А, если хотите длительность в 1 такт, тогда - да, как у вас - правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

reg [3:0] front1;
always @(posedge clk) front1<={front1[1:0],start}
if (front1==3'b011) .......

Так делать нельзя!

У вас front1[0] как раз и будет время от времени находится в метастабильном состоянии. Но это не самое плохое - самое плохое то, что вы непонятный уровень нулевого бита используете в логике. А это конец гарантированно.

Нужно сделать так:

reg [3:0] front1;
always @(posedge clk) front1<={front1[2:0],start}
if (front1[3:1]==3'b011) .......

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так делать нельзя!

..спасибо!

з.ы.

Открыт для других мнений или таких - же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

reg [3:0] front1;

always @(posedge clk) front1<={front1[1:0],start}

IF-ы выкиньте.

 

В двух словах:

разряд 0 сдвигового регистра- наибольшая вероятность метастабильности, использовать нельзя

разряд 1 - вероятность меньше, в обычных применениях можно использовать, в высоконадежных - нет.

разряд 2 - веротяность метастабильности еще меньше. в высоконадежных системах использовать можно.

разряд 3 и далее - вероятность метастабильности почти 0. Но если копать теорию, то по тереме Марино метастабильность будет присутсовать всегда, хоть тысячу разрядов поставьте в сдвиговый регистр.

 

Будем исходить из того, что у вас обычная система. Следовательно, используйте разряды 1,2.. и т.д.

Фронт, про который вы спрашивали:

 

assign rise = front1[1] & ~front1[2];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не забудьте про один подводный камень -

always @(posedge clk) front1<={front1[2:0],start}

Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046:

Все auto inferring опции синтезатора можно включать и выключать. И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все auto inferring опции синтезатора можно включать и выключать.
Это слишком сильное решение :rolleyes:

И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю.

Правильно, но их надо не забыть задать :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это слишком сильное решение :rolleyes:

Обычное решение. Нельзя все отдавать на откуп индийским программистам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046:

Поясните пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поясните пожалуйста.

SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может. ISE/Vivado/Quartus обожают их пихать по поводу и без. Простой способ борьбы добавление асинхронного сброса (и то не всегда, симплифай умеет обоходить это) или атрибуты синтеза

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может. ISE/Vivado/Quartus обожают их пихать по поводу и без. Простой способ борьбы добавление асинхронного сброса (и то не всегда, симплифай умеет обоходить это) или атрибуты синтеза

Спасибо.

Думал, там схема как-нибудь по-хитрому перестраивается. Однако.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может.
Хм... никогда не задумывался об этой тонкости. А где про это почитать (что бороться не может)? Чисто абстрактные логические рассуждения, не привязанные к SRL: если SRL - это память, а ведь память же это триггеры, а триггеры борются с метастабильностью. Почему SRL не борется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если SRL - это память, а ведь память же это триггеры, а триггеры борются с метастабильностью. Почему SRL не борется?
Потому что триггеры тогда борются с метастабильностью, когда они включены в цепочку в количестве более одного. В SRL (как и в памяти вообще) цепочки из триггеров нет - грубо говоря он там один. Точнее их много, но включены они параллельно, а не последовательно :rolleyes:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...