2016-06-03 6 views
0

Как вы обнаруживаете синхронизацию восходящего фронта двух разных часов (разных частот) в программировании VHDL с использованием программного обеспечения Xilinx?Обнаружение синхронизации фронтального фронта двух разных часов

Существует главный тактовый сигнал частоты 31.845 МГц, а также другие часы с частотой 29.972 МГц. Таким образом, основная цель состоит в том, чтобы вызвать действие, когда есть синхронизация между нарастающими фронтами из 2 тактов. Мы попытались реализовать его с помощью флипфлопов, но мы могли бы добиться только синхронизации уровня, а не синхронизации по краю.

И мы не можем сравнивать нарастающие фронты двух разных часов в таких выражениях, как IF и WAIT в vhdl, так что об этом и речи не может быть и речи.

Мы пытаемся подсчитать импульсы с помощью счетчика. Для этого нам нужно остановить счетчик, когда имеет место согласование краев. Мы пытаемся реализовать метод под названием «Интерполяция Вернье».

  1. Первоначально мы использовали следующий код утверждения, но так как фронты 2 различных часов (clk0, CLK1) не могут сравниться в IF заявления, мы должны были бросить его.

    if(rising_edge(clk0)=rising_edge(clk1)) then wait;

  2. Затем мы попытались использовать WAIT заявления (wait until), но это не удалось.

  3. Затем мы попытались использовать триггеры и схемы задержки (D flipflop), но это привело к синхронизации уровня, а не к синхронизации по фронту.
+1

Какова ваша общая цель и каковы диапазоны частот для часов. –

+0

Существует главный тактовый генератор частоты 31.845 МГц, а другой - частота 29.972 МГц. Таким образом, основная цель состоит в том, чтобы вызвать действие, когда есть синхронизация между нарастающими фронтами из 2 тактов. Мы попытались реализовать его с помощью флипфлопов, но мы могли бы добиться только синхронизации уровня, а не синхронизации по краю. – KVK

+0

И мы не можем сравнивать нарастающие фронты двух разных часов в таких выражениях, как IF и WAIT в vhdl, так что это не может быть и речи. – KVK

ответ

0

Во-первых, я не уверен, почему вы хотели бы это сделать. То, что вы выберете, это новые часы на частоте удара между двумя часами.

Правильный способ сделать это - пробы обоих часов с использованием других часов, которые, по меньшей мере, вдвое превышают частоту наивысшего ожидаемого ввода. Вы можете генерировать эти более высокие часы, используя одну из ФАПЧ в устройстве. x2 является минимальным. Идеально использовать часы, которые намного выше, чем часы сэмплирования.

запомнить VHDL не язык, это описание синтеза реального оборудования. Итак, просто говоря, что Rising_Edge (clk1) = Rising_Edge (clk2) не делает «программные» границы обнаружения. Вся функция Rising_Edge действительно заключается в том, чтобы сообщить аппаратуре подключить сигнал clk к вводу часов триггера.

Правильное решение представляет собой образец «часов» в процессе, который синхронизируется образцовыми часами, ищите края (ребро, являющееся двумя последующими образцами, которые являются разными), тогда И результат и защелка, если потребуется.

образец кода (непроверенный, извините, нет времени прямо сейчас).

entity twoclocks is 
port (
    op : out std_logic; 
    clk1 : in std_logic; 
    clk2 : in std_logic; 
    sample_clk : in std_logic); 
end entity; 


architecture RTL of twoclocks is 

begin 

process sample(sample_clock, clk1, clk2): 
begin 
    if rising_edge(sample_clock): 
     clk1_d <= clk1; 
     clk2_d <= clk1; 
     if clk1_d != clk1 and clk2_d != clk2 then 
     op <= '1'; 
     else 
     op <= '0'; 
     end if; 
    end if; 
end process; 

end architecture; 
+0

... возможно, существует фаза смещения, которая должна быть определена;) Иначе вы были бы правы. : P Интерпретатор vernier. – JHBonarius

0

Вид нониусом интерпол вы хотите потребности быть построена с использованием очень жесткие временные ограничения, таким образом, вы, вероятно, не сделать его с помощью VHDL в одиночку. Вам нужны (многие) ограничения, связанные с устройством, на расположение ресурсов и время.

Пожалуйста, проверьте the work by A.Aloisio et al.. Алоизио и коллеги построили интерполятор вернье, используя специальные элементы задержки Xilinx.

Стандартный синтез VHDL в основном подходит для описания уровня передачи регистра. То есть синхронизированная логика.Но чтобы сравнить эти два входа, вам нужно будет пробовать их на частоте наименьшего общего кратного обеих частот. Для 31.845 МГц и 29.972 МГц это колоссальная 954.458340 МГц, что немало. Однако я видел такие скорости в логике ПЛИС. ... Но я думаю, вам может понадобиться удвоить это, из-за Найквиста. Возможно, логика FPGA теперь может обрабатывать скорость передачи 2 ГГц. Но я не уверен.

Возможно, для этого можно использовать трансивер GT, но поскольку это будет нестандартное использование такого трансивера, это может быть трудно реализовать.