|
Знатоки FPGA, подскажите, проблеммы сонхронизации |
|
|
|
Jan 30 2007, 20:08
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 8-05-06
Пользователь №: 16 880

|
Доброго всем времени суток До настоящего момента работал только с CPLD, особых проблем не было. Но для текущего проекта ресурсов CPLD не хватает Проект -офисная миниАТС,- в FPGA (подошла acex1k), коммутационная матрица, синхронный порт, тональные генераторы и много чего другого. Наблюдаю следующую картину-отлаживаю один узел, другой, берусь за третий отлаживаю,- начинает сбоить первый, вношу какие -то изменения в один узел- почему влияет на второй, и так замкнутый круг. Это что, нормальная ситуация с FPGA? Или я что-то не так делаю?
|
|
|
|
|
 |
Ответов
|
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 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 только в захват застоты входит несколько чавов, а затем его еще и тестируют, как он "фильтрует" эту захваченную частоту, со своей-то постоянной времени. Если бы эта схема глючила в ПЛИС, то это было бы видно - уж поверьте. Тем более зависнуть!
|
|
|
|
|
Feb 2 2007, 10:17
|

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

|
Цитата(Boris_TS @ Feb 2 2007, 09:33)  Насколько я изучил ПЛИС, логика в них работает как фильтр нижних частот, т.е. ее конечное быстродействие несколько ниже, чем у триггера. А при метостабильном состоянии у триггера на выходе достаточно высокочастотные колебания, которые в чистом виде через логику пройти не могут. Но это пол дела.
В добавок в моей схеме, у триггера F2_FD1 заложено время на выход из метастабильного режима = 1T CLK2 - (Troutes delay + Txor delay). Если для вас этого мало - модифицируйте схему под свои нужды. Не обращая внимание на результаты -тестирования (каждый программист знает, что никакое тестирование не находит всех ошибок) должен заметить, что схема представляется вполне работоспособной. Более того, по устойчивости к метастабильности она не сильно хуже обычной схемы их двух последовательных триггеров - время задержки в логике перед триггером мало по сравнению со временем разводки. При нормальной работе логики эта схема не может залипнуть - но если есть сомнения, XOR можно наменить на "D1 and not D2". И еще мысль. Учитывая, что в современных FPGA время разводки часто превышает все остальное - имеет смысл в синхронизаторах жестко констрейнить время распространения сигнала с выхода первого триггера на вход второго, чтобы его не развели через весь кристалл по диагонали.
--------------------
Пишите в личку.
|
|
|
|
|
Feb 2 2007, 10:45
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(Oldring @ Feb 2 2007, 10:17)  При нормальной работе логики эта схема не может залипнуть - но если есть сомнения, XOR можно наменить на "D1 and not D2". XOR использовался в XPLA3 (там он аппаратный XOR с своими специфическими свойствами). Цитата(Oldring @ Feb 2 2007, 10:17)  И еще мысль. Учитывая, что в современных FPGA время разводки часто превышает все остальное - имеет смысл в синхронизаторах жестко констрейнить время распространения сигнала с выхода первого триггера на вход второго, чтобы его не развели через весь кристалл по диагонали. biggrin.gif А в FPGA (Spartan-IIE) я плотно обкладываю RLOC'ом все узлы и схемы синхронизыции (строки с RLOC я вырезал из предоставленного исходника, чтобы не загромождать код). Цитата(Oldring @ Feb 2 2007, 10:17)  Не обращая внимание на результаты -тестирования (каждый программист знает, что никакое тестирование не находит всех ошибок) Ну я не программист... Без эксперимента (т.е. по теоретическим выкладкам) я не могу сказать будет ли какая-либо метастабильная схема работать на "больших" частотах в ПЛИС - поэтому без экспериментов - никуда (только ведь эксперименты разные бывают...)
|
|
|
|
Сообщений в этой теме
Kazap Знатоки FPGA, подскажите Jan 30 2007, 20:08 papasha Временные ограничения установлены? Jan 30 2007, 22:28 Самурай Цитата(Kazap @ Jan 30 2007, 20:08) Доброг... Jan 30 2007, 22:40 chan Посмотрите в сторону Cyclone, по цене дешевле и ес... Jan 30 2007, 22:41 ybd Бывало такое при использовании более 70% ресурсов ... Jan 30 2007, 22:57 dmivs Уточните, какой тип FPGA вы используете - вам отве... Jan 30 2007, 23:16 maior Общие рекомендации:
1. Синхронный дизайн. Если ест... Jan 31 2007, 01:30 Kazap Большое спасибо за подсказки. Дествительно, в диз... Jan 31 2007, 08:30 Alex_vod В своё время многие проблеммы с синхронизацией реш... Jan 31 2007, 17:03 EugeneS Цитата(Alex_vod @ Jan 31 2007, 18:03) В с... Feb 1 2007, 00:04  LeonY Цитата(EugeneS @ Jan 31 2007, 23:04) Цита... Feb 1 2007, 12:32   Oldring Цитата(LeonY @ Feb 1 2007, 12:32) Чем же ... Feb 1 2007, 12:53    LeonY Цитата(Oldring @ Feb 1 2007, 11:53) Цитат... Feb 1 2007, 13:52     Oldring Цитата(LeonY @ Feb 1 2007, 13:52) Спасибо... Feb 1 2007, 13:59 Alex_vod "то не синхронизация, а rise detection. При п... Feb 1 2007, 11:18 sazh Тем что выход первого триггера используется в даль... Feb 1 2007, 13:11 Oldring Цитата(sazh @ Feb 1 2007, 13:11) Тем что ... Feb 1 2007, 13:29 Oldring Цитата(Alex_vod @ Feb 1 2007, 13:25) Я со... Feb 1 2007, 13:39 Alex_vod Раз уж тема о проблеммах синхронизации, хотелось б... Feb 1 2007, 13:55 Oldring Цитата(Alex_vod @ Feb 1 2007, 13:55) Раз ... Feb 1 2007, 14:02 Boris_TS Цитата(Alex_vod @ Feb 1 2007, 13:55) Напр... Feb 1 2007, 14:55 sazh Если набрать слово метастабильность в конференции,... Feb 1 2007, 13:59 Alex_vod Да действительно , не конкретный вопрос я задал ..... Feb 1 2007, 15:16 Oldring Цитата(Alex_vod @ Feb 1 2007, 15:16) мы и... Feb 1 2007, 15:27  Alex_vod Цитата(Oldring @ Feb 1 2007, 15:27) Цитат... Feb 1 2007, 16:06 Boris_TS Цитата(Alex_vod @ Feb 1 2007, 15:16) мы и... Feb 1 2007, 16:06 sazh XOR использовался в XPLA3 (там он аппаратный XOR с... Feb 2 2007, 10:58 Oldring Цитата(sazh @ Feb 2 2007, 10:58) Что инте... Feb 2 2007, 11:13 sazh To Oldring.
//////////////////////////////////////... Feb 2 2007, 11:25 Oldring Цитата(sazh @ Feb 2 2007, 11:25) To Oldri... Feb 2 2007, 11:27 sazh Я на триггерах не экономлю. (В реальности уже давн... Feb 2 2007, 11:34 Oldring Цитата(sazh @ Feb 2 2007, 11:34) Я на три... Feb 2 2007, 11:40 sazh Ничего если я замечу, что чтение njgbrf не заменяе... Feb 2 2007, 11:45 Oldring Цитата(sazh @ Feb 2 2007, 11:45) Ничего е... Feb 2 2007, 11:51 Alex_vod Я пока пишу в AHDL и только собираюсь переходить н... Feb 2 2007, 11:50 Boris_TS Цитата(Alex_vod @ Feb 2 2007, 11:50) Вы б... Feb 2 2007, 14:40 sazh Функционально можно заменить. Что касается текста,... Feb 2 2007, 12:07 Oldring Цитата(sazh @ Feb 2 2007, 12:07) Функцион... Feb 2 2007, 12:12 sazh Недавно фильм Павлв Лунгина посмотрел. Остров назы... Feb 2 2007, 12:56 Oldring Цитата(sazh @ Feb 2 2007, 12:56) Недавно ... Feb 2 2007, 13:01 sazh Приношу свои извинения. Feb 2 2007, 13:17 Alex_vod А нарисовать можно, то о чём вы спорите.
У меня ка... Feb 2 2007, 13:31 Oldring Цитата(Alex_vod @ Feb 2 2007, 13:31) А на... Feb 2 2007, 14:13 Alex_vod Спасибо Boris_TS за схемку
Конечно же Вы правы, ка... Feb 2 2007, 15:00 sazh To Boris_TS
//////////////////////////////////////... Feb 2 2007, 15:15 Boris_TS Цитата(sazh @ Feb 2 2007, 15:15) А как Ва... Feb 3 2007, 09:55  Oldring Цитата(Boris_TS @ Feb 3 2007, 09:55) Озна... Feb 3 2007, 13:51 sazh Что касется xor, я был неправ. Про CPLD слишком по... Feb 3 2007, 14:33 cyclop Схемы Титце-Шенка (Т-Ц) и Boris_TS (В) различны. С... Feb 4 2007, 17:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|