реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Closed TopicStart new topic
> Работа с синхросигналами, нужна помощь.
Михаил_K
сообщение Mar 4 2009, 05:47
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Добрый день. Вопрос в следующем. Работаю с Virtex5. Есть два канала данных, и два синхросигнала SCLK и SCLKx2, где SCLKx2 - частота в два раза больше чем у SCLK. Оба синхросигнала получаются с DLL и соотвественно синхронны и, если можно так сказать "синфазны". В схеме есть места, где данные передаются с триггера тактируемого SCLK на триггер, тактируемый SCLKx2 и наоборот. Тут вроде проблем нету. Но оба канала данных обрабатываются либо параллельно, на SCLK, либо последовательно, на SLCKx2. И тут появляется огромное желание сигнал SCLK использовать еще и как логический, т.е. заводить его на Ce триггера или управлять при помощи него мультиплексором. Но чувствую, что можно нарваться. Кто-нить встречал и может дать ссылку на доку, желательно Xilinx-кую, где написано, можно так делать или нет?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 4 2009, 07:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 4 2009, 07:32
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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, тогда можно применить такую схему.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 4 2009, 07:48
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Михаил_K @ Mar 4 2009, 10:32) *
А уж если DCM будет заниматься подстройкой в процессе работы (чем она и занимается), и фаза SCLK будет то опережать, то от SCLKx2 (ессно, на величину указанную в спецификации)
Вы же сами написали:
Цитата
В схеме есть места, где данные передаются с триггера тактируемого SCLK на триггер, тактируемый SCLKx2 и наоборот. Тут вроде проблем нету.
Вы не находите некоторое противоречие?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 4 2009, 07:53
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Делать так можно, но есть способ, при котором клок не выходит за пределы специально для него сделанных сетей и все части микросхемы и среды разработки используются по назначению.
Смысл заключается в том, чтобы сделать регистр, который бы инвертировался на каждом такте быстрого клока. Тогда он будет менять свой уровень как и медленный клок. Чтобы фаза этого регистра имела связь с фазой медленного клока, нужно начинать инвертировать с привязкой к медленному клоку. Для этого нужен еще один регистр сброса.
Констрейны в этом случае записываются проще и соблюдать их легче.

Убедитесь в надежном соблюдении setup time.

Код
signal reg_phase_res, reg_phase : std_logic;

...


process (Reset, SCLK)
begin
  if (Reset='1') then
    reg_phase_res <= '1';
  elsif (rising_edge(SCLK)) then
    reg_phase_res <= '0';
  end if;
end process;

process (SCLKx2)
begin
  if (rising_edge(SCLKx2)) then
    if (reg_phase_res='1') then
      reg_phase <= '1';
    else
      reg_phase <= not reg_phase;
    end if;
  end if;
end process;

-- пример использования
process(SCLKx2)
begin
  if (rising_edge(SCLKx2)) then
    if (reg_phase == '1') then -- заменено if (SCLK=='1') then
       ....
    else
       ....
    end if;
  end if;
end process;
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 4 2009, 08:18
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(andrew_b @ Mar 4 2009, 10:48) *
Вы не находите некоторое противоречие?


Нет. Потому-что данные с триггера выходят с задержкой. И задержка эта, вместе с линиями коммутаций такова, что имеющийся разброс фаз на DCM не приводит к сбою в работе схемы.

Цитата(Shtirlits @ Mar 4 2009, 10:53) *
Делать так можно, но есть способ, при котором клок не выходит за пределы специально для него сделанных сетей и все части микросхемы и среды разработки используются по назначению.
Смысл заключается в том, чтобы сделать регистр, который бы инвертировался на каждом такте быстрого клока. Тогда он будет менять свой уровень как и медленный клок. Чтобы фаза этого регистра имела связь с фазой медленного клока, нужно начинать инвертировать с привязкой к медленному клоку. Для этого нужен еще один регистр сброса.
Констрейны в этом случае записываются проще и соблюдать их легче.

Спасибо, от этом я думал. Здесь один недостаток - этот сигнал придется дополнительно таскать по всему кристаллу, и у отдельных узлов делать вход для этого сигнала. Этакое неудобство, но видимо обойти его не удастся. rolleyes.gif

Правда для совпадения фазы я все-таки по другому сделал. Через триггер, как было предложено выше, только на вход D подал клок с выхода DCM, сдвинутого на 270 градусов. smile.gif
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 4 2009, 08:23
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Михаил_K @ Mar 4 2009, 11:18) *
Правда для совпадения фазы я все-таки по другому сделал. Через триггер, как было предложено выше, только на вход D подал клок с выхода DCM, сдвинутого на 270 градусов. smile.gif
Фазы Clk1x и Clk2x будут совпадать только на выходе DCМ. Как только вы их протянете через тактовые буферы, появится сдвиг.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 4 2009, 08:37
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(andrew_b @ Mar 4 2009, 11:23) *
Фазы Clk1x и Clk2x будут совпадать только на выходе DCМ. Как только вы их протянете через тактовые буферы, появится сдвиг.

Откуда?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 4 2009, 09:02
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Цитата(Михаил_K @ Mar 4 2009, 11:18) *
Здесь один недостаток - этот сигнал придется дополнительно таскать по всему кристаллу, и у отдельных узлов делать вход для этого сигнала. Этакое неудобство, но видимо обойти его не удастся.

Во-первых, это неудобство нечто по сравнению с муками отладки схемы с нарушениями тайминогов.
Во-вторых, если в каждый блок приходят оба клока и reset, то можно в кажом блоке сделать по экземпляру схемки из двух регистров. А там либо place-and-route их объединит или просто не станет дублировать.

А еще скажите, какого порядка частота, 500MHz, 50MHz ?
На 50MHz еще как-то можно говорить, что разные клоки на выходе чего-то у FPGA синхронных, а на 500MHz от такой фразы как-то не по себе.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 4 2009, 09:05
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Михаил_K @ Mar 4 2009, 11:37) *
Откуда?
Оттуда, что путь от DCM до буферов разный. Просимулируйте дизайн с реальными задержками и посмотрите на свои клоки.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Mar 4 2009, 09:10
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Я при возникновении похожих задач (хлопать быстрым клоком медленный синфазный) делал так: падающим быстрого хлопал медленный. Так как, если их нарастающие синфазны, то во время падающего быстрого у медленного всегда полка.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 4 2009, 09:27
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 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 микрон? Да вы на кристалл-то посмотрите.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 4 2009, 09:32
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Цитата(DmitryR @ Mar 4 2009, 12:10) *
Я при возникновении похожих задач (хлопать быстрым клоком медленный синфазный) делал так: падающим быстрого хлопал медленный. Так как, если их нарастающие синфазны, то во время падающего быстрого у медленного всегда полка.

Без констрейнов так делать нельзя.

Вот возьмите проект, где вы так делали и тщательно сделайте следующее:
1) в FPGA editor (если это xilinx) проследите сеть медленного клока, где и как он соединяется с входом регистра, который на быстром клоке
2) в анализаторе таймингов посмотрите, какое время распространения клока получилось после того, как вы его подключили к входу данных
3) ужаснитесь содеянному

Такие номера проходят на частотах в десятки раз ниже максимальных частот устройства, когда что ни делай, все равно временем распространения сигнала можно пренебречь.
Так делать можно, но очень полезно понимать что делаешь и избегать советовать другим, если не известна частота.
Ведь время прохождения медленного клока от выхода DCM до входа данных регистра с быстрым клоком может быть сопоставимо с периодом быстрого клока и уж точно даже близко не похоже на время прохождения от выхода DCM до синхровхода регистра.

Подключение клока к входам данных затрудяет работу.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 4 2009, 09:32
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(DmitryR @ Mar 4 2009, 12:10) *
Я при возникновении похожих задач (хлопать быстрым клоком медленный синфазный) делал так: падающим быстрого хлопал медленный. Так как, если их нарастающие синфазны, то во время падающего быстрого у медленного всегда полка.


Не очень здорово. Т.к. сразу в два раза уменьшаем setup для всех потребителей этого сигнала. Т.е. в моем случае вместо 5 нс, получаем 2.5 (без учета задержек на триггере и линиях связи). Если бы у меня было 10 и 20 МГц - я бы так и сделал. А тут я влетаю в эквивалентную частоту в 400 МГц.

Хотя... Если поставить два триггера последовательно, срабатывающих по разным фронтам.... Надо подумать.
Go to the top of the page
 
+Quote Post
petrov
сообщение Mar 4 2009, 09:39
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



А почему нельзя использовать глобальный SCLKx2, а там где требуется работа на вдвое низкой частоте cформировать соответствующий глобальный enable.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016