|
Синхронизатор, Две тактовые, единичные импульсы |
|
|
|
 |
Ответов
(1 - 82)
|
Apr 7 2011, 13:33
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(AlphaMil @ Apr 7 2011, 17:19)  Гуру, подскажите, как правильно сделать: есть одиночный импульс синхронный 100МГц, он должен породить одиночный импульс на 50МГц. Весь проект нет смысла переводить на повышенную частоту. На рисунке 8 в статье разгадка А это базовый синхронизатор оттуда. CODE library IEEE; use IEEE.STD_LOGIC_1164.all; entity syn is port( clk : in STD_LOGIC; in_level : in STD_LOGIC; reset : in STD_LOGIC; imp : out STD_LOGIC ); end syn; architecture syn_body of syn is signal qqq : STD_LOGIC; signal ddd : STD_LOGIC; begin tg: process (clk) begin if clk'event and clk = '1' then if reset='1' then qqq <= '0'; ddd <= '0'; else qqq <= ddd; ddd <= in_level; end if; end if; end process; imp <= ddd xor qqq; end syn_body;
На входе in_level любая смена уровня порождает импульс привязанный к другой частоте. На элементе xor (для этого in_level ) сделаете смену уровня на обратный по вновь поступающему импульсу.... В конце рабочего дня бдительность потерял. Тут просто Т-триггер(делитель)! Усталость... Извините!
Сообщение отредактировал Мур - Apr 7 2011, 16:23
|
|
|
|
|
Apr 7 2011, 17:36
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Kuzmi4 @ Apr 7 2011, 21:02)  2 Мур Если взглянуть внимательнее ваш HDL модуль вообще один клок имеет  А если мне не изменяет маразм то минимальная комплектация модуля от SM: 1 тригер на clkA, 3 тригера на clkB и 1 лут Вы не внимательны. HDL фрагмент только выходная часть базового синхронизатора. Вход(Т-триггер) на другой частоте. Его тут нет. А что его тут писать,-один триггер на входе? Ещё раз - Рис 8.
|
|
|
|
|
Apr 9 2011, 11:23
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Kuzmi4 @ Apr 9 2011, 14:44)  2 Мур посмотрел статейку и рисунок - слямзено с EDN, July 24, 2003. Но суть в другом - не будет эта реализация работать для произвольных клоковых доменов. Там есчё handshake логику нужно добавлять  чтоб честно работало... Имхо, для произвольных доменов будет. Там единственное условие, что частота запускающих импульсов в первом домене должна быть не больше, чем тактовая в принимающем.
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 9 2011, 11:39
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Kuzmi4 @ Apr 9 2011, 15:32)  Вот вот..  Ну, с хендшейком в этом случае оно тоже может не работать. Либо из двух импульсов на входе получится один на выходе, либо придется Ack тянуть в генератор. А дальше зависит от исходной задачи. Можно там задержать генерацию импульса или нет )
Сообщение отредактировал Ethereal - Apr 9 2011, 11:40
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 9 2011, 12:44
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Kuzmi4 @ Apr 9 2011, 15:50)  2 Ethereal я собственно это к чему, бывали дизайны в которых клоковый домен А мог работать как на большей так и на меньшей скорости чем домен Б (задавалось конфигом). В таких случаях лучше иметь универсальную схему, которая будет передавать 1clk импульс из А в Б. Если это про тактовые, то дизайн работает при clkA<clbB, при clkA>clkB, при clkA=clkB. 1 1clk импульс передается в любую сторону.
Сообщение отредактировал Ethereal - Apr 9 2011, 13:04
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
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 второго триггера, он может попасть в метастабильность. И через комбинационную схему эта метастабильность попадает непосредственно на выход, несмотря на то, что там есть еще и третий триггер. То есть триггера три, но из них нет ни одной полноценной пары-синхронизатора. Я уже предложил добавить на вход вашего сдвигового регистра еще один триггер, чтобы породить там стандартный синхронизатор. Чтобы безопасно передать импульс от быстрого к медленному синхронному с ним клоку можно обойтись двумя триггерами. И без использования асинхронных входов триггеров, что всегда чревато проблемами.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 20:17
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Oldring @ Apr 11 2011, 00:01)  Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно. Хотелось узнать причину использования вами такой конструкции. Не поймет. Квартусовский, например, на такие конструкции ругается.
Сообщение отредактировал Ethereal - Apr 10 2011, 20:23
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 10 2011, 20:21
|

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

|
Цитата(Ethereal @ Apr 11 2011, 00:17)  Не поймет. Квартусовский, например, на такие конструкции ругается. Значит, я был лучшего мнения о вашем кактусе. И про верилог я могу сказать только "фи". Описание асинхронного сброса через posedge in_flag - это экономия за счет естественности описания. В VHDL, конечно, требуются отдельно описывать списки чувствительности процесса, что иногда напрягает, но необходимо для симуляции, но сама логика с разделенными асинхронными и синхронной ветками if гораздо прозрачнее получается.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 10 2011, 20:49
|

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

|
Цитата(sazh @ Apr 11 2011, 00:25)  Приведите свой пример. Достойный ваших знаний. Вот описание этой схемы синхронизатора на VHDL. В VHDL-2008 будут доступны некоторые дополнительные упрощения, но ISE его пока что не синтезирует. Код library ieee; use ieee.numeric_bit.all;
entity in_out_flag is port( in_flag : in bit; out_clk : in bit; ena_out_flag : out bit ); end in_out_flag;
architecture Behavioral of in_out_flag is -- На S6 схема получается проще, если начальное состояние триггера с задействованной асинхронной установкой равно 1 signal shift_reg : bit_vector( 1 to 4 ) := (others => '1'); begin
process( in_flag, out_clk ) begin if rising_edge( out_clk ) then shift_reg <= shift_reg srl 1; end if; if in_flag = '1' then shift_reg( 1 ) <= '1'; end if; end process;
ena_out_flag <= shift_reg( 3 ) and not shift_reg( 4 );
end Behavioral; Пример на самом деле немного учебный, потому что в промышленном коде нужно вместо двух внутренних триггеров вставить обычный синхронизатор как отдельный компонент, тайминги в котором тщательно обконстрейнены, и прописаны у его триггеров все необходимые атрибуты, чтобы отключить оптимизацию через них логики.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 07:53
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(ViKo @ Apr 11 2011, 11:05)  А на такие (код от Oldring) - нет. Кто из нас неправ? Надеюсь, честь Quatus'а спасена?  Какая связь между кодом Oldring на VHDL и возможностью проглатывания синтезатором предложенной Oldring'ом же замены в верилоговском описании? o_O БылоКод always @(posedge C or posedge R) begin if(R) O<=1; else O<=0; end ПредложеноКод always @(posedge C or posedge R) begin O<=R; end
Сообщение отредактировал Ethereal - Apr 11 2011, 07:54
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 11 2011, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Oldring @ Apr 10 2011, 23:49)  Вот описание этой схемы синхронизатора на VHDL. Снимаю шляпу. Помню Вашу реализацию Barrel Shifters. Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик. И в этом примере Вы все поставили с ног на голову, применив сдвиг вправо. Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. А потом гадай, как другие синтезаторы к такому описанию отнесутся. Интересно, есть у Вас работники, которые в состоянии подхватить Ваши проекты.
|
|
|
|
|
Apr 11 2011, 09:06
|

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

|
Цитата(sazh @ Apr 11 2011, 12:47)  Картинка у него другая. Это не его код. Мой! Сам писал! Мамой клянусь! Цитата(sazh @ Apr 11 2011, 12:43)  Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития. (Два if в одном процессе). И опять я полез в RTL просмотрщик. Да, к сожалению "средний уровень развития" желает лучшего. Тем не менее, этот код не должен быть очень сложным для профессионального программиста, занявшегося HDL и не поленившегося прочитать стандарт языка. Люди "от железа" просто смотрят на HDL как на "описание схемы", от программирования - как на описание поведения. И, кстати, согласитесь, моё описание на VHDL проще и естественнее, когда в нём разобраться - просто сдвиговый регистр на 4 бита, у которого состояние первого регистра асинхронно устанавливается в единицу отдельным асинхронным входом. Два if - кажется, встречал такое даже в рекомендациях по стилю не помню каких тулзов.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 09:55
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(ViKo @ Apr 11 2011, 11:05)  ..Кто из нас неправ? Прямо буря в стакане воды! Вот что требовалось ...по рис 8! Код, предложенный мной в начале, описывает два выходных регистра. Первый триггер - делитель. Схема достаточно универсальна для любых частот...
Сообщение отредактировал Мур - Apr 11 2011, 09:56
|
|
|
|
|
Apr 11 2011, 10:04
|

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

|
Цитата(Мур @ Apr 11 2011, 13:55)  Схема достаточно универсальна для любых частот... Для любых связанных частот без асинхронщины между ними. Мне toggle тоже больше нравится, но обсуждалась в стакане воды именно схема из Т-Ш, растягивающая и синхронизирующая асинхронные импульсы произвольной длины, то есть без входного клока. Цитата(sazh @ Apr 11 2011, 13:58)  Я бы сказал, золотая середина. Ведь на выходе - качественный продукт, понятный каждому. До тех пор, пока указанные вами условия не начинают вступать в противоречие друг с другом, вы, безусловно, правы. Поэтому схематики более понятны для "золотой середины", чем любой HDL. Но, как как хорошо известно из истории развития программирования, по мере усложнения любой системы балланс неизбежно смещается в сторону использования более удобных языков с более продвинутой идеологией и, соответственно, более сложных в изучении.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 10:15
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Oldring @ Apr 11 2011, 14:04)  Для любых связанных частот без асинхронщины между ними. Мне toggle тоже больше нравится, но обсуждалась в стакане воды именно схема из Т-Ш, растягивающая и синхронизирующая асинхронные импульсы произвольной длины, то есть без входного клока.
До тех пор, пока указанные вами условия не начинают вступать в противоречие друг с другом, вы, безусловно, правы. Поэтому схематики более понятны для "золотой середины", чем любой HDL.
Но, как как хорошо известно из истории развития программирования, по мере усложнения любой системы балланс неизбежно смещается в сторону использования более удобных языков с более продвинутой идеологией и, соответственно, более сложных в изучении. И асинхронных тоже!(его основная функция по статье применяется для переходов между доменами и синхронизациями). На HDL три триггера описываются легко. Я в своих проектах разделяю эту схему на два фрагмента. Один я уже привёл(выходной), а второй, в большинстве своём, прячется в моих автоматах. События у меня- просто смена состоояния на противоположный!
|
|
|
|
|
Apr 11 2011, 10:41
|

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

|
Цитата(Мур @ Apr 11 2011, 14:36)  Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара? А вы не видите сами условие, когда на выходе вашей схемы появится метастабильность, которая может привести к неправильной работе логики в последующих схемах, если не хватит времени на её разрешение? А времени там может не хватить, потому что неизвестно сколько логики подключено к вашей схеме, и каковы задержки в самой этой подключенной логике. Да, можно в принципе попытаться обконстрейнить время распространения сигнала с выхода, если очень хочется, с огромной вероятностью не вписаться в тайминги вблизи максимальной частоты кристалла.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 10:44
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(Мур @ Apr 11 2011, 14:36)  Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара? Когда на фронте f2 попадется переключение входного триггера, защелкивающего инверсное состояние f1.
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 11 2011, 10:53
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Oldring @ Apr 11 2011, 14:41)  А вы не видите сами условие, когда на выходе вашей схемы появится метастабильность, которая может привести к неправильной работе логики в последующих схемах, если не хватит времени на её разрешение? А времени там может не хватить, потому что неизвестно сколько логики подключено к вашей схеме, и каковы задержки в самой этой подключенной логике. Да, можно в принципе попытаться обконстрейнить время распространения сигнала с выхода, если очень хочется, с огромной вероятностью не вписаться в тайминги вблизи максимальной частоты кристалла. Ну почему же? Даже если возникнет неопределённость при соотношении входного уровня на D-входе и фронта CLK, он уверенно поймается следующим фронтом! Триггер в любом случае в сером уровне не останется (иначе бы это не был триггер!). Мне не важен (ещё раз!) момент. Мне важен факт! Он гарантировано появится! И на выходе будет выдан одноклоковый импульс, но привязанный уже к другой опорной частоте. Что и требуется... Я постараюсь расширить варианты проблем.. Помогите!
|
|
|
|
|
Apr 11 2011, 10:55
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Oldring @ Apr 11 2011, 13:41)  может привести к неправильной работе логики в последующих схемах Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет. Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно. Важно что событие на входе будет отработано однозначно. Нет?
|
|
|
|
|
Apr 11 2011, 11:02
|

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

|
Цитата(sazh @ Apr 11 2011, 14:55)  Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет. Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно. Важно что событие на входе будет отработано однозначно. Нет? Это неопределенное состояние попадает через логику прямо на выход, как и в вашей первоначальной схеме. Соответственно, этот импульс на выходе схемы сам оказывается "нелогическим" вначале, и поэтому на него тоже распространяются требование иметь запас по времени для выхода из метастабильности. Если при этом путь прохождения этого импульсу до следующих входов окажется слишком большим, времени для выхода из метастабильности не хватит. Ситуация ничем не отличается от попытки использования в синхронизаторе только одного триггера. Теоретически обконстрейнить можно, но сложнее проконтролировать, и нужен дополнительный запас по времени за счет большего периода клока.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 12:28
|

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

|
Цитата(Мур @ Apr 11 2011, 14:02)  Страшно, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара! Вот это есть ошибка! Возможно тут такое? Про эту картинку речь идет? Пусть висит. Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности. В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае. До следующего такта. А если в следующем такте вход неопределен, то все продолжится. Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние. Это я не к тому, что схема плохая или неправильная, а к тому, что идеального в мире ничего нет. Нужно смотреть внимательно.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 11 2011, 12:54
|

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

|
Цитата(ViKo @ Apr 11 2011, 16:28)  В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае. ... Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние. Нет, в метастабильном состоянии триггер обычно бесконечно долго болтаться не может. Точнее, может, но с нулевой вероятностью. Если, конечно, там метастабильное состояние, а не паразитное стабильное, с образованием стабильного нелогического уровня, что допускают редко. Вероятность оставания в метастабильном состоянии экспоненциально уменьшается со временем. Поэтому смысл работы синхронизатора из двух триггеров - за счет короткого пути сигнала до второго триггера дать достаточное время первому триггеру для того, чтобы вероятность сохранения метастабильного состояния первого триггера к моменту переключения второго оказалась пренебрежимо малой. В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет. Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 13:27
|

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

|
Цитата(Oldring @ Apr 11 2011, 15:54)  Вероятность оставания в метастабильном состоянии экспоненциально уменьшается со временем... Конечно. Это мы обсуждали год назад  Цитата В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет. Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке. Цитата Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может. Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно. P.S. Отстаивая честь Quartus'а, скомпилировал следующий код. Код always @(posedge clkin, posedge din) if (din) dout[4] <= din; else dout[4] <= 0; Для Циклона-2 получил триггер с ADATA и ALOAD, подключенными к din, тактовым сигналом на clkin, и нулем на входе данных. Спасен!
|
|
|
|
|
Apr 11 2011, 13:38
|

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

|
Цитата(ViKo @ Apr 11 2011, 17:27)  Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке. Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна. Цитата(ViKo @ Apr 11 2011, 17:27)  Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно. Разумеется, но все тулзы об этом знают отлично, обеспечивая согласованность прихода к каждому триггеру данных и соответствующего клока без нарушения setup/hold в самых крайних условиях эксплуатации.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 11 2011, 16:22
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(ViKo @ Apr 11 2011, 16:28)  Про эту картинку речь идет? Пусть висит. Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности. В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае. Спасибо за науку! Для меня это новость. Серый уровень на выходе триггера возможен оказывается... тогда схема ошибочна............  А я поверил авторитету. Цитата(Oldring @ Apr 11 2011, 17:38)  Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна. Это из-за дополнительного триггера на выходе?
|
|
|
|
|
Apr 12 2011, 05:47
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(ViKo @ Apr 11 2011, 22:30)  Да, возможен. И именно в триггере. В обычной логике такое невозможно. В момент фронта тактового сигнала, если изменяется сигнал на входе данных, триггер "не знает", что ему защелкивать. И думает до-о-о-о-о-о-лго... если сигнал на входе попадает точно на порог переключения. Если не точно, то думает недо-о-олго... ОК! Я считал, что проблема для триггера на входе, а не на выходе. В моём представлении триггер не может быть в сером уровне по определению. Тогда в =моём случае= действительно возможна ситуация отсутствия или удвоенного импульса на выходе. Всё будет зависеть от трактовки серости либо элементом искл-или либо выходным триггером. А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта. Вот почему я его =за ненабностью= удалил!....(по сравнению с рис.8)-считал лишним. А он по грехам работает! Всем огромное спасибо! Усвоил качественно!
Сообщение отредактировал Мур - Apr 12 2011, 05:55
|
|
|
|
|
Apr 12 2011, 05:56
|

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

|
Цитата(Мур @ Apr 12 2011, 09:47)  А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта. Нет, не до следующего. Выход из метастабильного состояния - это вероятностный процесс. Вероятность остаться в метастабильном состоянии понижается экспоненциально с увеличением премени. Поэтому достаточно несколько десятков постоянных времени выхода из метастабильности, чтобы эта вероятность стала практически нулевой. Но тонкость в том, что если после метастабильного триггера подключен на небольшом расстоянии следующий триггер, то разница между периодом клока и временем распространения сигнала превышает эти несколько постоянных времени, по крайней мере, для триггеров в FPGA. А если там еще несколько слоёв логики, то эти разница может оказаться близка а нулю, и хоть и первый триггер вывалится из метастабильного состояния к следующему фронту клока, сигнал на входах следующих триггеров, после этих слоёв логики, еще останется нелогическим или, скорее, нестабильным, с заметно отличной от нуля вероятностью.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 12 2011, 06:12
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Oldring @ Apr 12 2011, 09:56)  Нет, не до следующего. Выход из метастабильного состояния - это вероятностный процесс. Вероятность остаться в метастабильном состоянии понижается экспоненциально с увеличением премени. Поэтому достаточно несколько десятков постоянных времени выхода из метастабильности, чтобы эта вероятность стала практически нулевой. Но тонкость в том, что если после метастабильного триггера подключен на небольшом расстоянии следующий триггер, то разница между периодом клока и временем распространения сигнала превышает эти несколько постоянных времени, по крайней мере, для триггеров в FPGA. А если там еще несколько слоёв логики, то эти разница может оказаться близка а нулю, и хоть и первый триггер вывалится из метастабильного состояния к следующему фронту клока, сигнал на входах следующих триггеров, после этих слоёв логики, еще останется нелогическим или, скорее, нестабильным, с заметно отличной от нуля вероятностью. Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости? ...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости? Призрак триггера Шмидта стоит передо мной!
|
|
|
|
|
Apr 12 2011, 06:27
|

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

|
Цитата(Мур @ Apr 12 2011, 10:12)  Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости? ...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости? Призрак триггера Шмидта стоит передо мной!  Нет, долбежка по входу не поможет - это же триггеры, они переключаются по фронту клока. Второй нужен только для того, чтобы оттянуть логику с выхода первого, дав ему времени на размышления о смысле его бытия. Поэтому, кстати, без отключения ретайминга через него, он бесполезен. Триггер Шмидта тут ничем помочь не может. Метастабильность принципиально неизбежна при перехода асинхронного сигнала в синхронный домен.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 12 2011, 06:59
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Oldring @ Apr 12 2011, 10:27)  Нет, долбежка по входу не поможет - это же триггеры, они переключаются по фронту клока. Я и имел ввиду фронт клока! Понятие =неопределённо долго= я утрировал на события нескольких фронтов клока... Цитата(Oldring @ Apr 12 2011, 10:27)  Второй нужен только для того, чтобы оттянуть логику с выхода первого, дав ему времени на размышления о смысле его бытия. Поэтому, кстати, без отключения ретайминга через него, он бесполезен. Триггер Шмидта тут ничем помочь не может. Метастабильность принципиально неизбежна при перехода асинхронного сигнала в синхронный домен. А гистерезис? Уж он-то должен решать неопределённость выхода. Положительная обратная связь всё-таки!... Цитата(Мур @ Apr 12 2011, 10:12)  А второй, получается, нужен для вероятностного вываливания первого из неопределённости? Можно считать второй триггер триггером Шмидта? Образно! 1.За ним последнее слово в оценке(в наихудшем истечении событий) состояния первого триггера. 2.Второй вариант- к следующему фронту клока первый триггер уже будет в норме гарантировано. И это повторит второй! Это черезвычайно важно для одноклоковых сигналов разрешения в синхронных проектах. Там всё строго и вариации длительности недопустимы
Сообщение отредактировал Мур - Apr 12 2011, 07:20
|
|
|
|
|
Apr 12 2011, 07:35
|

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

|
Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное. Гистерезис не поможет, потому что в этом случае просто появляется два порога восприятия сигнала как 0 или как 1 - при переходе из 0 в 1, и наоборот. Сами пороги технологически остаются примерно теми же. Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1. Но и такой сигнал должен увеличить время срабатывания триггера. Вероятность, что напряжение будет вблизи порога, мала. Следующий триггер уменьшает эту вероятнось почти до нуля.
P.S. нужно писать "триггер Шмитта"
|
|
|
|
|
Apr 12 2011, 07:44
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Мур @ Apr 7 2011, 16:33)  CODE library IEEE; use IEEE.STD_LOGIC_1164.all; entity syn is port( clk : in STD_LOGIC; in_level : in STD_LOGIC; reset : in STD_LOGIC; imp : out STD_LOGIC ); end syn; architecture syn_body of syn is signal jjj : STD_LOGIC; signal qqq : STD_LOGIC; signal ddd : STD_LOGIC; begin tg: process (clk) begin if clk'event and clk = '1' then if reset='1' then jjj <= '0'; qqq <= '0'; ddd <= '0'; else jjj <= ddd; qqq <= jjj; ddd <= in_level; end if; end if; end process; imp <= jjj xor qqq; end syn_body;
Тогда первый текст должен быть таким! Цитата(ViKo @ Apr 12 2011, 10:35)  P.S. нужно писать "триггер Шмитта" Призрак лейтенанта Штидта парил надо мной!... Посыпаю голову пеплом!
Сообщение отредактировал Мур - Apr 12 2011, 07:53
|
|
|
|
|
Apr 12 2011, 08:08
|

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

|
Цитата(ViKo @ Apr 12 2011, 11:35)  Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное. Нет. Так как сигнал асинхронный, он может прийти в самый неподходящий момент, именно перед тем фронтом клока, который защелкивает сигнал, далее используемой логикой внутри. Цитата(ViKo @ Apr 12 2011, 11:35)  Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1. Если внутри нелогической зоны нет плато, то это всё не имеет никакого значения.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 12 2011, 09:39
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Oldring @ Apr 12 2011, 12:22)  Почти....У механического маятника бывает трение покоя, приводящее к появлению на самом верху глобального максимума энергии небольшого локального минимума, приводящего к появлению там немного устойчивого состояния. Поэтому механический маятник может в принципе там находиться бесконечно долго, тем более, если его ось со временем заржавеет. В случае электронных триггеров всё обычно проще. Спасибо! Мне понравилось -> =появления там немного устойчивого состояния= В электронных триггерах =ось не ржавеет=, и активная зона, вроде массы механического маятника, способна балансировать случайным образом, пока какой-либо фактор не преобладает. ...Помнится, в таком сотоянии возрастает потребление элементов(нет отсечки или насыщения). Это я к тому, что за метастабильные состояния наказывают повышением потребления. Хоть и не значительным. В былые времена дефектные триггеры выгорали от сквозного тока...
Сообщение отредактировал Мур - Apr 12 2011, 10:09
|
|
|
|
|
Apr 12 2011, 17:18
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Boris_TS @ Apr 10 2011, 21:28)  Цитата(AlphaMil @ Apr 10 2011, 21:17)  Да, частоты зависимы и генерируются от одного клока. Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот. Это хорошо, что от одного генератора. Теперь остаётся уточнить, как Вы получали эти частоты: при помощи DLL ? Хорошо бы схемку (ну или HDL описание) глянуть этого места. Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met). Т.к. схематика/описания схемы генерирующей clock 100М и 50М от автора не последовало, то предположу, что он сделал это место "правильно". Тогда для пересаживания импульса, длинной от 1 до 2 периодов CLK_100M на частоту 50М (получится импульс длинной в один период), достаточно такой схемы:
ISE разведёт сигнал A с ограничениями как для 100М, и обратная связь (цепь Event_50M) со второго триггера на первый тоже будет разведена с ограничением как для 100М. Цепь Event_50M ко всем остальным синхронным элементам домена Clk_50M будет разведена с ограничениями как для 50М. Ну вот, как-то так примитивно всё получается,.. если схема генерирующая clock’и сделана правильно.
|
|
|
|
|
Apr 18 2011, 13:07
|

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

|
Хочу вернуться к рис.8 (см. сообщение №58). Возник у меня вопрос о целесообразности мультиплексора в "желтой" части схемы. И подумал я, почему его не заменить на схему И - один вход - Data, другой /Q с триггера. Что делает мультиплексор в "желтой" части. Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем. Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация. Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу. Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0. При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково. "Развод" какой-то!?
|
|
|
|
|
Apr 18 2011, 14:25
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(ViKo @ Apr 18 2011, 17:07)  Что делает мультиплексор в "желтой" части. Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем. Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация. Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу. Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0. При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково. "Развод" какой-то!?  Там синхронизатор, передающий 1clk импульсы, поэтому "длинная" 1 на входе может быть, только если мы хотим передать много-много импульсов, идущих друг за другом. А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется. Выходной сигнал будет передан во второй домен, где смена состояния будет отловлена по xor. А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде: Код always @(posedge clkA) Out<=(En)?~Out:Out;
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Apr 19 2011, 14:18
|

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

|
Присмотрелся внимательнее к рисунку. Да, есть в нем смысл. Был неправ. 1. Короткие импульсы 1 на Data захватываются защелкой, затем триггер фиксирует это состояние. И находится в нем долго, до следующего импульса на Data. По этому импульсу защелкивается 0, и дальше триггер... Таким образом, состояние триггера по каждому импульсу на Data изменяется на противоположное. Стоящий после него синхронизатор с исключающим или на конце вылавливает каждое изменение приходящего "желтого" триггера сигнала, формируя импульс в один свой такт по фронту, и по срезу. Так "восстанавливается" удвоенная частота импульсов Data. 2. Если на Data импульс достаточно длительный, так, что в него попадает один фронт Clock1, или в короткий импульс попал фронт Clock1, "желтый" триггер сформирует импульс в один такт. Который может не словиться "синими" триггерами. А если словится, сформируются два подряд идущих импульса. Нехорошо. 3. Если на Data импулься длинный, "желтый" триггер будет генерировать то 0, то 1. Аналогичный сигнал появится на выходе синхронизатора. Тоже не хорошо. Особо нужно посмотреть, когда импульс на Data равен периоду Clock1. В этом случае выход триггера переключается одновременно со срезом Data. Вот она - потенциальная возможность для метастабильного состояния защелки-мультиплексора. Если защелкнется новое состояние триггера - сформируется одиночный импульс (вариант 2). Если сохранится старое - все нормально (вариант 1). Но, так как при "защелкивании" сигнал с триггера проходит по мультиплексору дважды, сначала по цепи для входа 1, потом по цепи для входа 0, то он гарантированно "защелкнет" старое состояние триггера. Триггер начнет формировать длинный импульс (вариант 1). Примерно так.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|