Lmx2315 3 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба Уважаемые, объясните в двух словах про метастабильность - если я ищу фронт у импульса через такую конструкцию: reg [3:0] front1; always @(posedge clk) front1<={front1[1:0],start} if (front1==3'b011) ....... и на длительность импульса приходится минимум 4 такта клоковой частоты, мне же нечего боятся метастабильности? з.ы. прошу прощения за оффтопик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба А одного триггера не хватит? :rolleyes: Как перекинулся в 1, так, значит, был положительный импульс. Если на входе не было 1, выход триггера никогда не полезет в 1. А, если хотите длительность в 1 такт, тогда - да, как у вас - правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба 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) ....... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 3 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба Так делать нельзя! ..спасибо! з.ы. Открыт для других мнений или таких - же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба 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]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 3 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба ..спасибо за целебные советы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Не забудьте про один подводный камень - always @(posedge clk) front1<={front1[2:0],start} Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046: Все auto inferring опции синтезатора можно включать и выключать. И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Все auto inferring опции синтезатора можно включать и выключать.Это слишком сильное решение :rolleyes: И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю. Правильно, но их надо не забыть задать :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Это слишком сильное решение :rolleyes: Обычное решение. Нельзя все отдавать на откуп индийским программистам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба ..примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает :smile3046: Поясните пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Поясните пожалуйста. SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может. ISE/Vivado/Quartus обожают их пихать по поводу и без. Простой способ борьбы добавление асинхронного сброса (и то не всегда, симплифай умеет обоходить это) или атрибуты синтеза Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может. ISE/Vivado/Quartus обожают их пихать по поводу и без. Простой способ борьбы добавление асинхронного сброса (и то не всегда, симплифай умеет обоходить это) или атрибуты синтеза Спасибо. Думал, там схема как-нибудь по-хитрому перестраивается. Однако. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 17 июня, 2015 Опубликовано 17 июня, 2015 · Жалоба SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может.Хм... никогда не задумывался об этой тонкости. А где про это почитать (что бороться не может)? Чисто абстрактные логические рассуждения, не привязанные к SRL: если SRL - это память, а ведь память же это триггеры, а триггеры борются с метастабильностью. Почему SRL не борется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 17 июня, 2015 Опубликовано 17 июня, 2015 · Жалоба если SRL - это память, а ведь память же это триггеры, а триггеры борются с метастабильностью. Почему SRL не борется?Потому что триггеры тогда борются с метастабильностью, когда они включены в цепочку в количестве более одного. В SRL (как и в памяти вообще) цепочки из триггеров нет - грубо говоря он там один. Точнее их много, но включены они параллельно, а не последовательно :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться