|
|
  |
Знатоки FPGA, подскажите, проблеммы сонхронизации |
|
|
|
Feb 1 2007, 13:29
|

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

|
Цитата(sazh @ Feb 1 2007, 13:11)  Тем что выход первого триггера используется в дальнейшей логике. В классическом синхронизаторе из двух триггеров, предназначенном для борьбы с метастабильностью, выход первого триггера подключают исключительно к входу второго. //////////////////////////// Наверно имеет смысл при этом добавить - при приеме данных. Приведенная выше схема под названием синхронный одновибратор давно уже имеено в таком виде озвучена у Тицце и Шенка. Идея в том что эта схема обычно используется для преобразования именно клока, который сопровождает данные. Gate clk - в enable clk. И если данные, сопровождаемые gate клоком укладываются хотя бы в два периода глобального клока, то уже без разницы, как воспримет второй триггер метастобильность первого. Данные уверенно будут приняты или в первом такте или во втором. Да и от частоты клока очень многое зависит. В свое время забавно было читать, как два теоретика рассуждали о том , что лучше принимать данные на частоте 20 мГц чем на 40. И их мало интересовало, есть ли у пользователя такие частоты. Спасибо, но это добавлять было не нужно. Титце с Шенком ничего не пишут про метастабильность, о которой написал я. Действительно, эффекты метастабильности критичны именно для высокочастотных схем, работающих вблизи технологического предела. Если схема работает на частотах, гораздо меньше предельных - то небольшое увеличение времени установления на выходе первого триггера, действительно, не будет для нее существенным, и можно обычно безопасно использовать синхронизатор не из двух, а из одного триггера. Как в обсуждаемой схеме. С другой стороны, то, что используется синхронизатор из двух последовательно включенных триггеров, а не скажем, из пяти, связано только с отношением постоянной времени в законе распределения вероятности для метастабильности к периоду клока. Но вроде бы для применяемых технологий одного такта на предельной частоте клока вполне достаточно для надежного установления логического уровня.
--------------------
Пишите в личку.
|
|
|
|
|
Feb 1 2007, 13:39
|

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

|
Цитата(Alex_vod @ Feb 1 2007, 13:25)  Я согласен с Вашими замечаниями... В этом вопросе так глубоко не копал (распределение вероятности, экспонента,метастабильность.... сложные вопросы) Приведённая мной схема очень проста , но в большенстве случаев работает. Тогда может вы подскажите другое решение. Что лучше использовать при приёме данных? Какую схему используете вы? Я стараюсь не работать с асинхронными шинами. Если же приходилось - старался ставить синхронизатор из двух последовательно включенных триггеров. Мне хватало. Если бы не хватило - копал бы в сторону синхронизатора с одним триггером с соответсвующими констрейнтами на выход первого триггера. Но это гораздо сложнее - чтобы доказать работоспособность такой схемы вблизи жестких ограничений - нужно провести измерения параметров метастабильности по методикам, изложенным в аппнотах производителей кристаллов, и все равно, оставались бы сомнения по поводу зависимости этих параметров, например, от температуры. Так что если не хочется об этом задумываться проще ставить два триггера. В Вашей схеме в качестве синхронизатора используется именно один триггер.
--------------------
Пишите в личку.
|
|
|
|
|
Feb 1 2007, 13:52
|
Знающий
   
Группа: Админы
Сообщений: 689
Регистрация: 24-06-04
Из: South Africa
Пользователь №: 164

|
Цитата(Oldring @ Feb 1 2007, 11:53)  Цитата(LeonY @ Feb 1 2007, 12:32)  Чем же это она бесполезна??? Подобную прибабаху использую уже лет 10 именно для синхронизации асихронных сигналов (если нет требования сохранения длительности) и все прекрасно работает. Типичное применение - запись в синхронное FIFO от чего-то асинхронного или бегущего в другом clock domain. ИМХО - масса вариантов, когда очень удобно использовать... Если надо сохранить длительность (с точностью до клока) - Shift Reg, но принцип тот же самый
Тем что выход первого триггера используется в дальнейшей логике. В классическом синхронизаторе из двух триггеров, предназначенном для борьбы с метастабильностью, выход первого триггера подключают исключительно к входу второго. Идея - в любой технологии при приходе фронта асинхронного сигнала на вход триггера одновременно с приходом клока время установления логического уровня сигнала на выходе триггера может возрастать до бесконечности, но практически лишь слегка, не скажу точно за распределение вероятности - но экспонента в нем была точно. Этот эффект и называется метастабильностью. В большинстве случаев за время одного такта на выходе первого триггера устанавливается логический уровень с очень высокой вероятностью, и поэтому второй триггер его уже быстро защелкивает в пределах времени установления из даташита. Если же выход первого триггера подать на комбинаторную схему, да еще он попадет в критический путь, да еще схема работает на пределе частоты. да еще в констрейнтах ничего не сказано про увеличенное время установления - то даже небольшое связанное с метастабильностью увеличение времени установления сигнала на выходе первого триггера может стать причиной сбоев. Спасибо за пояснения, но что такое "метастабильность" и как с нею бороться я знаю последние лет 25, а может и больше. Хотя за пояснения все равно спасибо - кому-нибудь точно пригодится. Мои аргументы "за" приведенныю схему ни сном ни духом не утверждают, что она предназначена для борьбы с метастабильностью, но у нее есть свои применения. А вот Shift Reg (как Вы описали - 2-х битовый) делает как раз то, что надо.
--------------------
"В мире есть две бесконечные вещи: Вселенная и человеческая глупость. За Вселенную, впрочем, поручиться не могу". (С)
А. Эйнштейн.
|
|
|
|
|
Feb 1 2007, 14:55
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Alex_vod @ Feb 1 2007, 13:55)  Например в РLL частота умножается да 60 мегагерц. Могу ли я эту частоту подать на выход ПЛИС?? Желательно уточнить тип ПЛИС к которой отностися вопрос. Выводить можно, только надо учитывать несколько неприятных моментов: 1. В ПЛИС с которыми я работал нет "прямого" пути дял Global Clock на вход I в I/O Block, тогда имплементатор пропускает Global Clock через несколько коммутаторов, добавляя, тем самым, некоторую (в общем случае неодинаковую) транспортную задержку. Если у вас несколько выходов с этим Global Clock, то желательно довавить соответствующий Constaint (у Xilinx это Skew). 2. Видел я какой-то XAPP (найти его сейчас не смог), там была применена такая идея: Global Clock не может быстро попасть на на вход I в I/O Block, но может попасть на вход OCLK в I/O Block и быстро, и синхронно с остальными выходами. Тогда можно запитать в ПЛИС с DDR выходом этим клоком DDR коммутатор, который будет мультиплексировать две константы '1' и '0', эмулируя, тем самым, выход Global Clock. 3. При работе ФАПЧ неизбежно появляется jitter. Если PLL цифровой, то jitter может быть весьма "большим" (в десятки пикосекунд) - что для некоторых высокоточных задач - неприемлемо.
|
|
|
|
|
Feb 1 2007, 15:36
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Alex_vod @ Feb 1 2007, 13:25)  Тогда может вы подскажите другое решение. Что лучше использовать при приёме данных? Какую схему используете вы? Я для приема данных использу FIFO, в случае когда данных очень много оно организуется на двух внешних ОЗУ'шках (одну читает потребитель, и пока она полностью не прочитанна, в другую пишет источник данных), если ОЗУ надо мало, то вполне для FIFO подходит и блоки внутреннего ОЗУ. Как работают счетчики на запись/чтение данных в/из FIFO - зависит от конкретной задачи. Главное, что блок синхронизации я применяю один и тот же. Идея блока такова: Есть CLK_1 и есть некое событие, на которое надо отреагировать импульсом длинной в один такт на CLK_2. Наличие события кодируется импульсом, длинной в один такт CLK_1 на линии START. Исходник блока синхронизации (разработал сам): library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sync_clk is port ( START: in std_logic; CLK_1: in std_logic; CLK_2: in std_logic; Q: out std_logic ); end entity; architecture sync_clk_body of sync_clk is signal F1_FD0: std_logic := '0'; signal F2_FD1: std_logic := '0'; signal F2_FD2: std_logic := '0'; begin process (CLK_1, F2_FD2) begin if F2_FD2 = '1' then F1_FD0 <= '0'; elsif rising_edge(CLK_1) then if (START = '1') then F1_FD0 <= '1'; end if; end if; end process; process (CLK_2) begin if rising_edge(CLK_2) then F2_FD1 <= F1_FD0; F2_FD2 <= F2_FD1 xor F2_FD2; end if; end process; Q <= F2_FD2; end architecture; Эта схема используется в (БСС) Блоках Сетевой Синхронизации Первого и Второго "сортов" в STM (телефонии). За все время тестирований и измерений ни разу не пропустила ни одного импульса. (любой пропушенный умпульс, в данных системах, тут же отзывется плавным, но быстрым, набегом фазы на 1 такт) В БСС второго сорта схема закатана в XCR3256-7TQ144. Работает с частотами около 131.072 МГЦ (практически на предельном быстродействии XPLA3). В Spartan-2E в менее скоростной задачи, за год эксплуатации пока тоже сбоев не обнаружено.
|
|
|
|
|
Feb 1 2007, 16:06
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Alex_vod @ Feb 1 2007, 15:16)  мы имею не только плохую частоту на выходе плисс, но и все схемы тактируемые этим Global Clock ведут себя странно. С Altera не работаю, архиректуру Cyclone II не представляю. Но ловил подобный глюк в Spartan-IIE при GCLK более 200 МГц. Дело было исправлено добавлением к каждому блокировочному конденсатору 0.1 мкФ (Murata X7R) еще и 0.01 мкФ (Murata X7R). После этого все стало работать нормально. В том проекте 0.1 мкФ конденсаторы стояли на каждой ноге питания ПЛИС. В описании конденсаторов Murata для X7R обнуружил, что конденсаторы 0.1 мкФ более или менее хорошо работают на частотах до 20 МГц. Хоть у Вас частота только 60 Мгц, но все-же может быть дело с блокировочными конденсаторами (?), попробуйте - дорого не выйдет. Если вы применяете Y5V конденсаторы, то может быть поможет такая наводка: у некоторых из Y5V мы обнаруживали пъезо эффект, т.е. любой удар по плате отзывается небольшим броском напряжения - очень забавно выглядит при просмотре данных с 12-разрядного АЦП, оцифровывающего высокостабильное постоянное напряжение. Если ваше устройство работаете в условиях вибраций... то в таком случае итог будет печален. Может конечно, дело еще в чем-то...
|
|
|
|
|
Feb 1 2007, 16:06
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 20-11-05
Пользователь №: 11 121

|
Цитата(Oldring @ Feb 1 2007, 15:27)  Цитата(Alex_vod @ Feb 1 2007, 15:16)  мы имею не только плохую частоту на выходе плисс, но и все схемы тактируемые этим Global Clock ведут себя странно.
Если все тактируемые схемы ведут себя странно - то дело скорее всего в разводке рлаты... Есть такой термин - Signal Integrity. Обратите на него пристальное внимание - для клоков он особенно критичен. спасибо , сейчас бегло просмотрел в quartusii_handbook, штука интересная. Раньше об этом не знал. Вечерком попробую разобраться что к чему.
|
|
|
|
|
Feb 2 2007, 03:39
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 4-01-05
Пользователь №: 1 799

|
Цитата(Boris_TS @ Feb 1 2007, 07:36)  Цитата(Alex_vod @ Feb 1 2007, 13:25)  Тогда может вы подскажите другое решение. Что лучше использовать при приёме данных? Какую схему используете вы?
Я для приема данных использу FIFO, в случае когда данных очень много оно организуется на двух внешних ОЗУ'шках (одну читает потребитель, и пока она полностью не прочитанна, в другую пишет источник данных), если ОЗУ надо мало, то вполне для FIFO подходит и блоки внутреннего ОЗУ. Как работают счетчики на запись/чтение данных в/из FIFO - зависит от конкретной задачи. Главное, что блок синхронизации я применяю один и тот же. Идея блока такова: Есть CLK_1 и есть некое событие, на которое надо отреагировать импульсом длинной в один такт на CLK_2. Наличие события кодируется импульсом, длинной в один такт CLK_1 на линии START. Исходник блока синхронизации (разработал сам): library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sync_clk is port ( START: in std_logic; CLK_1: in std_logic; CLK_2: in std_logic; Q: out std_logic ); end entity; architecture sync_clk_body of sync_clk is signal F1_FD0: std_logic := '0'; signal F2_FD1: std_logic := '0'; signal F2_FD2: std_logic := '0'; begin process (CLK_1, F2_FD2) begin if F2_FD2 = '1' then F1_FD0 <= '0'; elsif rising_edge(CLK_1) then if (START = '1') then F1_FD0 <= '1'; end if; end if; end process; process (CLK_2) begin if rising_edge(CLK_2) then F2_FD1 <= F1_FD0; F2_FD2 <= F2_FD1 xor F2_FD2; end if; end process; Q <= F2_FD2; end architecture; Эта схема используется в (БСС) Блоках Сетевой Синхронизации Первого и Второго "сортов" в STM (телефонии). За все время тестирований и измерений ни разу не пропустила ни одного импульса. (любой пропушенный умпульс, в данных системах, тут же отзывется плавным, но быстрым, набегом фазы на 1 такт) В БСС второго сорта схема закатана в XCR3256-7TQ144. Работает с частотами около 131.072 МГЦ (практически на предельном быстродействии XPLA3). В Spartan-2E в менее скоростной задачи, за год эксплуатации пока тоже сбоев не обнаружено. Moget Ja ne sovsem ponimaju no pochemu XOR vo vtorom processe? Po moemu u Vas F2_FD2 moget zalipnut' v edinice. Ne proshe li tak? process (CLK_2) begin if rising_edge(CLK_2) then F2_FD1 <= F1_FD0; F2_FD2 <= '0'; if F2_FD1='1' then F2_FD2<='1'; end if; end if; end process;
|
|
|
|
|
Feb 2 2007, 09:33
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
А XOR потому, что: Цитата Есть CLK_1 и есть некое событие, на которое надо отреагировать импульсом длинной в один такт на CLK_2. Как вы должны догадываться, эта выложенная схема, далеко не первая, а результат последовательной оптимизации ряда схем, в т.ч. гибрида схемы leevv(#29) + что-то вроде Alex_vod(#2) - 4 триггера, время реакции не менее 3T CLK2, время релаксации не менее 4T CLK2, по моему в моей схеме с этим получше, а? Насколько я изучил ПЛИС, логика в них работает как фильтр нижних частот, т.е. ее конечное быстродействие несколько ниже, чем у триггера. А при метостабильном состоянии у триггера на выходе достаточно высокочастотные колебания, которые в чистом виде через логику пройти не могут. Но это пол дела. В добавок в моей схеме, у триггера F2_FD1 заложено время на выход из метастабильного режима = 1T CLK2 - (Troutes delay + Txor delay). Если для вас этого мало - модифицируйте схему под свои нужды. Но все-таки: Цитата Эта схема используется в (БСС) Блоках Сетевой Синхронизации Первого и Второго "сортов" в STM (телефонии). За ВСЕ ВРЕМЯ ТЕСТИРОВАНИЙ и измерений ни разу не пропустила ни одного импульса. (любой пропушенный умпульс, в данных системах, тут же отзывется плавным, но быстрым, набегом фазы на 1 такт) В БСС второго сорта схема закатана в XCR3256-7TQ144. Работает с частотами около 131.072 МГЦ (практически на предельном быстродействии XPLA3). В Spartan-2E в менее скоростной задачи, за год эксплуатации пока тоже сбоев не обнаружено. А время тестирования БСС это не 2 минуты и не час. БСС-1 только в захват застоты входит несколько чавов, а затем его еще и тестируют, как он "фильтрует" эту захваченную частоту, со своей-то постоянной времени. Если бы эта схема глючила в ПЛИС, то это было бы видно - уж поверьте. Тем более зависнуть!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|