|
|
  |
Синхронизатор, Две тактовые, единичные импульсы |
|
|
|
Apr 10 2011, 17:28
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(AlphaMil @ Apr 10 2011, 20:17)  Да, частоты зависимы и генерируются от одного клока. Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот. Это хорошо, что от одного генератора. Теперь остаётся уточнить, как Вы получали эти частоты: при помощи DLL ? Хорошо бы схемку (ну или HDL описание) глянуть этого места. Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met).
|
|
|
|
|
Apr 10 2011, 18:54
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 10 2011, 22:07)  Код if(in_flag) dff_a <= 1'b1; else dff_a <= 1'b0; end В Верилоге нельзя написать проще? Код dff_a <= in_flag; Кстати, не стоит бездумно доверять даже Т-Ш. Его схема расширения импульсов с двумя триггерами хороша, но первый триггер тем не менее может порождать переход dff_a с нарушением сетапа выходного триггера, соответственно второй триггер может попасть в метастабильность, о чем Т-Ш забыли упомянуть. Соответственно, чтобы избежать риска метастабильности ena_out_flag, вам нужно добавить в сдвиговый регистр на вход еще один триггер, реализовав нормальный синхронизатор.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 19:41
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Oldring @ Apr 10 2011, 22:28)  Я понял. И что, это описание приводит к необходимости писать if? Да, в верилоге есть некая неистественность при описании асинхронной установки. Но VHDL еще более неистественнен process (C, CLR) begin if (CLR = ’1’)then Q <= ’0’; elsif (C’event and C=’0’)then Q <= D; end if; Тот же if при описании асинхронной установки. И еще круче if при описании фронта клока, да еще с закрытием end if Фронт клока - это фронт клока, а не приоритетность в описании
|
|
|
|
|
Apr 10 2011, 19:47
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 10 2011, 23:41)  Да, в верилоге есть некая неистественность при описании асинхронной установки. Но VHDL еще более неистественнен process (C, CLR) begin if (CLR = ’1’)then Q <= ’0’; elsif (C’event and C=’0’)then Q <= D; end if;
Тот же if при описании асинхронной установки. И еще круче if при описании фронта клока, да еще с закрытием end if Фронт клока - это фронт клока, а не приоритетность в описании Еще раз спрощу. в вашем коде if просто копирует один сигнал в другой. Неужели он необходим чтобы синтезатор синтезировал триггер с асинхронным сбросом? в VHDL есть стандартные функции rising_edge, falling_edge, для приведения описания к "более естественному" if falling_edge( C ) then ... end if; Необходимость писать end if - это хорошо. Вы не упустили моё дополнение про ошибку в вашем коде?
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 19:51
|

Lazy
     
Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76

|
Цитата(sazh @ Apr 10 2011, 22:41)  Да, в верилоге есть некая неистественность при описании асинхронной установки. Но VHDL еще более неистественнен process (C, CLR) begin if (CLR = '1')then Q <= '0'; elsif (C'event and C='0')then Q <= D; end if;
Тот же if при описании асинхронной установки. И еще круче if при описании фронта клока, да еще с закрытием end if Фронт клока - это фронт клока, а не приоритетность в описании Ничего неестественного не вижу... если конечно Вы знаете, что c if... elsif порождаются приоритетные конструкции. Т.е. получается если активен CLR, то все равно какое значение имеет C и тригер будет установлен в 0, что и является асинхронным сбросом. А дальше, если CLR не равен 1 смотрится - произошло-ли событие на С. Все четко и прозрачно, и честно говоря не понятно, что вызывает недоумение. P.S. Кстати, end if относится ко всей конструкции if... elsif,а не только к elsif.
--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
|
|
|
|
|
Apr 10 2011, 19:57
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Victor® @ Apr 10 2011, 22:51)  Все четко и прозрачно, и честно говоря не понятно, что вызывает недоумение. Да все прозрачно. Мне все равно, на каком языке читать. Я подумал, что это наезд на верилог со стороны ярого сторонника VHDL. А это он меня оказывается в ошибке уличил. Смешно.
|
|
|
|
|
Apr 10 2011, 20:01
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 10 2011, 23:50)  Я реализовал схему из учебника. Эта схема отрабатывает импульс любой длительности в импульс длительность нужного периода. Все. С риском метастабильности на выходе. Да, посмотрел еще раз в Т-Ш, и так как эта потенциально метастабильная схема растяжения импульса из двух триггеров описана у них в пункте "синхронизация импульсов" как усовершенствование обычного двухтриггерного синхронизатора, можно прийти к выводу, что Т-Ш не "забыли упомянуть про риск метастабильности", а на самом деле его не заметили. В общем, еще раз повторю. Не стоит бездумно доверять учебникам. Цитата(sazh @ Apr 10 2011, 23:57)  Я подумал, что это наезд на верилог со стороны ярого сторонника VHDL. А это он меня оказывается в ошибке уличил. Смешно. И в ошибке тоже уличил А наезд был несерьезным. Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно. Хотелось узнать причину использования вами такой конструкции.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 20:02
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Oldring @ Apr 10 2011, 22:58)  С риском метастабильности на выходе. Да творчески я к их схеме подошел. О какой метастабильности речь идет, там 3 триггера на одном клоке сидят. Да плюс к этому клоки порождаются одним модулем. Эта ничуть не хуже уже предложенным. Вот и все. Про ошибку не понял. Пожалуста, приведите свой вариант исполнения. Я постараюсь понять.
|
|
|
|
|
Apr 10 2011, 20:08
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(sazh @ Apr 11 2011, 00:02)  Да творчески я к их схеме подошел. О какой метастабильности речь идет, там 3 триггера на одном клоке сидят. Да плюс к этому клоки порождаются одним модулем. Эта ничуть не хуже уже предложенным. Вот и все. Все три на одном клоке, и тем не менее, метастабильность из-за асинхронного входа. Асинхронный фронт входа приводит к асинхронному изменению выхода первого триггера через его вход асинхронной установки. Если это асинхронное изменение выхода первого триггера попадет в окно setup-hold второго триггера, он может попасть в метастабильность. И через комбинационную схему эта метастабильность попадает непосредственно на выход, несмотря на то, что там есть еще и третий триггер. То есть триггера три, но из них нет ни одной полноценной пары-синхронизатора. Я уже предложил добавить на вход вашего сдвигового регистра еще один триггер, чтобы породить там стандартный синхронизатор. Чтобы безопасно передать импульс от быстрого к медленному синхронному с ним клоку можно обойтись двумя триггерами. И без использования асинхронных входов триггеров, что всегда чревато проблемами.
--------------------
Пишите в личку.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|