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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Метастабильность по входу CE для FF Xilinx, Есть? Нету?
Lmx2315
сообщение Jun 15 2015, 07:36
Сообщение #16


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Уважаемые, объясните в двух словах про метастабильность - если я ищу фронт у импульса через такую конструкцию:
CODE
reg [3:0] front1;
always @(posedge clk) front1<={front1[1:0],start}
if (front1==3'b011) .......

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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2015, 07:48
Сообщение #17


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А одного триггера не хватит? rolleyes.gif Как перекинулся в 1, так, значит, был положительный импульс. Если на входе не было 1, выход триггера никогда не полезет в 1.
А, если хотите длительность в 1 такт, тогда - да, как у вас - правильно.
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 15 2015, 08:47
Сообщение #18


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

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Цитата
Код
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) .......
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jun 15 2015, 08:55
Сообщение #19


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



QUOTE (TRILLER @ Jun 15 2015, 12:47) *
Так делать нельзя!

..спасибо!
з.ы.
Открыт для других мнений или таких - же.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Shivers
сообщение Jun 15 2015, 19:20
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Цитата(Lmx2315 @ Jun 15 2015, 11:36) *
[code]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];
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jun 16 2015, 07:36
Сообщение #21


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..спасибо за целебные советы!


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 16 2015, 10:54
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Не забудьте про один подводный камень -
Код
always @(posedge clk) front1<={front1[2:0],start}

Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает smile3046.gif
Go to the top of the page
 
+Quote Post
Shivers
сообщение Jun 16 2015, 11:05
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Цитата(XVR @ Jun 16 2015, 13:54) *
Если вы в этой конструкции не будете потом использовать front[1:0], а возьмете front[2] и далее, то синтезатор вполне может свернуть начальные биты в примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает smile3046.gif

Все auto inferring опции синтезатора можно включать и выключать. И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 16 2015, 11:09
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Shivers @ Jun 16 2015, 14:05) *
Все auto inferring опции синтезатора можно включать и выключать.
Это слишком сильное решение rolleyes.gif
Цитата
И потом, при правильных констрейнтах CDC такой ситуации не случится, думаю.

Правильно, но их надо не забыть задать laughing.gif
Go to the top of the page
 
+Quote Post
Shivers
сообщение Jun 16 2015, 11:15
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Цитата(XVR @ Jun 16 2015, 14:09) *
Это слишком сильное решение rolleyes.gif

Обычное решение. Нельзя все отдавать на откуп индийским программистам.
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 16 2015, 11:57
Сообщение #26


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

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Цитата(XVR @ Jun 16 2015, 13:54) *
..примитив сдвигового регистра (SLR16), а он в качестве CDC синхронизатора не работает smile3046.gif

Поясните пожалуйста.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 16 2015, 12:02
Сообщение #27


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

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



Цитата(TRILLER @ Jun 16 2015, 19:57) *
Поясните пожалуйста.

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


--------------------
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 16 2015, 14:55
Сообщение #28


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

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Цитата(des00 @ Jun 16 2015, 15:02) *
SRL16 и ее аналоги это память с генераторами адреса, бороться с метастабильностью не может. ISE/Vivado/Quartus обожают их пихать по поводу и без. Простой способ борьбы добавление асинхронного сброса (и то не всегда, симплифай умеет обоходить это) или атрибуты синтеза

Спасибо.
Думал, там схема как-нибудь по-хитрому перестраивается. Однако.
Go to the top of the page
 
+Quote Post
Krys
сообщение Jun 17 2015, 06:28
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



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


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 17 2015, 10:42
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

Go to the top of the page
 
+Quote Post

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

 


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


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