|
Работа с синхросигналами, нужна помощь. |
|
|
|
Mar 4 2009, 05:47
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Добрый день. Вопрос в следующем. Работаю с Virtex5. Есть два канала данных, и два синхросигнала SCLK и SCLKx2, где SCLKx2 - частота в два раза больше чем у SCLK. Оба синхросигнала получаются с DLL и соотвественно синхронны и, если можно так сказать "синфазны". В схеме есть места, где данные передаются с триггера тактируемого SCLK на триггер, тактируемый SCLKx2 и наоборот. Тут вроде проблем нету. Но оба канала данных обрабатываются либо параллельно, на SCLK, либо последовательно, на SLCKx2. И тут появляется огромное желание сигнал SCLK использовать еще и как логический, т.е. заводить его на Ce триггера или управлять при помощи него мультиплексором. Но чувствую, что можно нарваться. Кто-нить встречал и может дать ссылку на доку, желательно Xilinx-кую, где написано, можно так делать или нет?
|
|
|
|
|
 |
Ответов
|
Mar 4 2009, 07:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Михаил_K @ Mar 4 2009, 08:47)  Но чувствую, что можно нарваться. Кто-нить встречал и может дать ссылку на доку, желательно Xilinx-кую, где написано, можно так делать или нет? Делал я так. Но в качестве CE использовал не сам SCLK, а стробированный SCLKx2. Код process (Reset, SCLKx2) begin if (Reset = '1') then CE <= '0'; elsif (rising_edge(SCLKx2)) then CE <= SCLK; end if; end process;
|
|
|
|
|
Mar 4 2009, 07:32
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(andrew_b @ Mar 4 2009, 10:17)  Делал я так. Но в качестве CE использовал не сам SCLK, а стробированный SCLKx2. Код process (Reset, SCLKx2) begin if (Reset = '1') then CE <= '0'; elsif (rising_edge(SCLKx2)) then CE <= SCLK; end if; end process; А вот где почитать, можно ли так делать и что будет на выходе? В зависимости от того, как DCM выравнит фазы клоков, возможно два варианта соотношения фазы CE и синхросигнала SCLK. А уж если DCM будет заниматься подстройкой в процессе работы (чем она и занимается), и фаза SCLK будет то опережать, то от SCLKx2 (ессно, на величину указанную в спецификации), то возможно, что Ce вообще будет два такта иметь одинаковое значение (будет проскок). Если только задержка при входе на триггер будет больше чем возможное опережение фазы SCLK, тогда можно применить такую схему.
|
|
|
|
|
Mar 4 2009, 07:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Михаил_K @ Mar 4 2009, 10:32)  А уж если DCM будет заниматься подстройкой в процессе работы (чем она и занимается), и фаза SCLK будет то опережать, то от SCLKx2 (ессно, на величину указанную в спецификации) Вы же сами написали: Цитата В схеме есть места, где данные передаются с триггера тактируемого SCLK на триггер, тактируемый SCLKx2 и наоборот. Тут вроде проблем нету. Вы не находите некоторое противоречие?
|
|
|
|
|
Mar 4 2009, 08:18
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(andrew_b @ Mar 4 2009, 10:48)  Вы не находите некоторое противоречие? Нет. Потому-что данные с триггера выходят с задержкой. И задержка эта, вместе с линиями коммутаций такова, что имеющийся разброс фаз на DCM не приводит к сбою в работе схемы. Цитата(Shtirlits @ Mar 4 2009, 10:53)  Делать так можно, но есть способ, при котором клок не выходит за пределы специально для него сделанных сетей и все части микросхемы и среды разработки используются по назначению. Смысл заключается в том, чтобы сделать регистр, который бы инвертировался на каждом такте быстрого клока. Тогда он будет менять свой уровень как и медленный клок. Чтобы фаза этого регистра имела связь с фазой медленного клока, нужно начинать инвертировать с привязкой к медленному клоку. Для этого нужен еще один регистр сброса. Констрейны в этом случае записываются проще и соблюдать их легче. Спасибо, от этом я думал. Здесь один недостаток - этот сигнал придется дополнительно таскать по всему кристаллу, и у отдельных узлов делать вход для этого сигнала. Этакое неудобство, но видимо обойти его не удастся. Правда для совпадения фазы я все-таки по другому сделал. Через триггер, как было предложено выше, только на вход D подал клок с выхода DCM, сдвинутого на 270 градусов.
|
|
|
|
|
Mar 4 2009, 09:02
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(Михаил_K @ Mar 4 2009, 11:18)  Здесь один недостаток - этот сигнал придется дополнительно таскать по всему кристаллу, и у отдельных узлов делать вход для этого сигнала. Этакое неудобство, но видимо обойти его не удастся. Во-первых, это неудобство нечто по сравнению с муками отладки схемы с нарушениями тайминогов. Во-вторых, если в каждый блок приходят оба клока и reset, то можно в кажом блоке сделать по экземпляру схемки из двух регистров. А там либо place-and-route их объединит или просто не станет дублировать. А еще скажите, какого порядка частота, 500MHz, 50MHz ? На 50MHz еще как-то можно говорить, что разные клоки на выходе чего-то у FPGA синхронных, а на 500MHz от такой фразы как-то не по себе.
|
|
|
|
|
Mar 4 2009, 09:27
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(Shtirlits @ Mar 4 2009, 12:02)  А еще скажите, какого порядка частота, 500MHz, 50MHz ? На 50MHz еще как-то можно говорить, что разные клоки на выходе чего-то у FPGA синхронных, а на 500MHz от такой фразы как-то не по себе. 100 и 200 МГц. Цитата(andrew_b @ Mar 4 2009, 12:05)  Оттуда, что путь от DCM до буферов разный. Просимулируйте дизайн с реальными задержками и посмотрите на свои клоки. На сколько разный? На 1 микрон? Да вы на кристалл-то посмотрите.
|
|
|
|
|
Mar 4 2009, 09:52
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(petrov @ Mar 4 2009, 12:39)  А почему нельзя использовать глобальный SCLKx2, а там где требуется работа на вдвое низкой частоте cформировать соответствующий глобальный enable. Ну тут две причины. Первая и очень не маловажная. Хочется использовать уже наработанные схемы, которые не работают на CLKx2. Ну так было спроектировано. Вторая причина возникает возможно из-за моего неумения задавать ограничения, но при таком проектировании при анализе времянок не учитывается то, что глобальный еnable идет через такт. И в результате, мы должны либо всю схему сделать работоспособной на 200 МГц, либо будем получать ошибки по времянкам. Цитата(Shtirlits @ Mar 4 2009, 12:32)  1) в FPGA editor (если это xilinx) проследите сеть медленного клока, где и как он соединяется с входом регистра, который на быстром клоке 2) в анализаторе таймингов посмотрите, какое время распространения клока получилось после того, как вы его подключили к входу данных 3) ужаснитесь содеянному Посмотрел. Но честно говоря ничего страшного не увидел. Медленный клок приходит все по тем же глобальным линиям, и лишь у самого лута через коммутационную коробочку идет в лут. Также как и быстрый клок. Опасение то как-раз и вызывает то, что задержки дополнительной не будет. Была бы она хотя бы в 1 нс, можно было бы жить наверное.
|
|
|
|
|
Mar 4 2009, 10:33
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(petrov @ Mar 4 2009, 12:53)  Ошибки не страшны если вы понимаете в что они именно в той части схемы которая по енаблам на вдвое более низкой частоте работает, единственное синтезатор напрягаться будет без ограничений. Для того чтобы это понять, я должен глазками, каждый раз после очередной имплементации проходить по отчету и смотреть, где возникли ошибки, и принимать решение, можно их оставить или нет. В медленной части схемы они или нет. Да после второго раза я сам уже ошибаться буду.  Вот если кто научит, как указать синтезатору, что enable раз в два такта работает.... Вроде есть параметр FROM-TO, но он для меня все-таки пока не понятен. Да и задать его можно только у UCF файле. А для этого нужно знать имя сигнала. А оно то как раз и не всегда известно, т.к. сигнал может находиться во вложенных блоках. Цитата(sergunas @ Mar 4 2009, 13:19)  Нарваться можно "только в путь". По идеи должна быть аппаратно в самой структуре ПЛИС заложена возможность динамического мультиплексирования клоков. Речь не идет о мультиплексировании клоков. Речь идет о заведении клока на вход данных. Цитата(petrov @ Mar 4 2009, 12:53)  Не долго в наработанных схемах во все регистры добавить enable. Иногда практически невозможно. Имеющиеся узлы находятся в библиотеке и используются во множестве других прошивок. Внести изменения в эти узлы - значит изменять и все проекты, которые эти узлы используют. Иначе они больше не будут собираться. Да и я работаю в коллективе, поэтому библиотека общая. После того как туда что-то попало, изменить становится проблематично. А порождать копии тех-же блоков - порочно.
|
|
|
|
|
Mar 4 2009, 11:13
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(Михаил_K @ Mar 4 2009, 13:52)  Вот констрейны соответствующие изучить - это надо. Только вот не нашел таких  Xilinx-ISE-Documentation-Software Manuals Constraints guide ctrl+F "multi cycle path" Пример .UCF файла для приемной части hypertransport 400MHz: Код # определяю сигналы, префикс net_ чтобы самому не запутаться NET "phy/rc0" TNM_NET="net_rx_clk_0"; NET "phy/rc1" TNM_NET="net_rx_clk_1"; NET "phy/tc" TNM_NET="net_tx_clk";
# указывю их частоты и предельные сдвиги фаз, префикс ts_ чтобы выделить, что это констрейн, а не сигнал timespec "ts_rx_clk_0" = period "net_rx_clk_0" 400 MHz HIGH 50% priority 6; # без явного указания приоритета иногда не обойтись timespec "ts_rx_clk_1" = period "net_rx_clk_1" "ts_rx_clk_0" * 1 phase -1.1 ns; # следует из спецификации линки и платы timespec "ts_tx_clk" = period "net_tx_clk" "ts_rx_clk_0" * 1 phase +1.25 ns;
# собираю элементы в группы # все, что тактируется (или использует как данные) clk0, в том числе и clk1 TIMEGRP "tg_phy_rx0" = "net_rx_clk_0"; # то, что тактируется только clk1 TIMEGRP "tg_phy_rx1" = "net_rx_clk_1" except "net_rx_clk_0";
# теперь можно задать ограничения прохождения сигнала между группами TIMESPEC "ts_phy_rx"=FROM "tg_phy_rx1" TO "tg_phy_rx0" 1.25 nS priority 1; Вам нужно будет определить два клока, задать их частоты, как ts_rx_clk_0 у меня. Определить 2 группы и задать ограничения по времени между двумя группами. Отдельно описать сигнал clock enable. Если использовать DCM, то достаточно описать сигнал, который поступает на вход DCM, дальше ISE сам все поймет, как вы его там умножали, делили и сдвигали.
|
|
|
|
Сообщений в этой теме
Михаил_K Работа с синхросигналами Mar 4 2009, 05:47    andrew_b Цитата(Михаил_K @ Mar 4 2009, 11:18) Прав... Mar 4 2009, 08:23     Михаил_K Цитата(andrew_b @ Mar 4 2009, 11:23) Фазы... Mar 4 2009, 08:37      andrew_b Цитата(Михаил_K @ Mar 4 2009, 11:37) Отку... Mar 4 2009, 09:05       DmitryR Я при возникновении похожих задач (хлопать быстрым... Mar 4 2009, 09:10        Shtirlits Цитата(DmitryR @ Mar 4 2009, 12:10) Я при... Mar 4 2009, 09:32        Михаил_K Цитата(DmitryR @ Mar 4 2009, 12:10) Я при... Mar 4 2009, 09:32            petrov Цитата(Михаил_K @ Mar 4 2009, 13:52) А кт... Mar 4 2009, 11:15             Михаил_K Цитата(petrov @ Mar 4 2009, 14:15) Наскол... Mar 4 2009, 11:42              Shtirlits Цитата(Михаил_K @ Mar 4 2009, 14:42) К со... Mar 4 2009, 12:04               Михаил_K Цитата(Shtirlits @ Mar 4 2009, 15:04) Ну ... Mar 4 2009, 12:12              DmitryR Цитата(Михаил_K @ Mar 4 2009, 14:42) К со... Mar 4 2009, 12:22          sergunas Цитата(Михаил_K @ Mar 4 2009, 13:33) Речь... Mar 4 2009, 10:55           Михаил_K Цитата(sergunas @ Mar 4 2009, 13:55) Клок... Mar 4 2009, 11:01            sergunas Цитата(Михаил_K @ Mar 4 2009, 14:01) Поче... Mar 4 2009, 11:09          andrew_b Цитата(Михаил_K @ Mar 4 2009, 13:33) Вот ... Mar 4 2009, 11:02        DmitryR Цитата(Михаил_K @ Mar 4 2009, 12:52) Посм... Mar 4 2009, 11:42 Shtirlits Делать так можно, но есть способ, при котором клок... Mar 4 2009, 07:53 sergunas Цитата(Михаил_K @ Mar 4 2009, 08:47) И ту... Mar 4 2009, 10:19 Михаил_K Ну в общем ответ на свой вопрос я получил.
В лоб з... Mar 4 2009, 12:35 dvladim Цитата(Михаил_K @ Mar 4 2009, 15:35) Ну в... Mar 4 2009, 19:31  Shtirlits Цитата(dvladim @ Mar 4 2009, 22:31) Почем... Mar 4 2009, 21:42  Михаил_K Цитата(dvladim @ Mar 4 2009, 22:31) Опа, ... Mar 5 2009, 05:56
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|