Koluchiy 0 8 сентября, 2010 Опубликовано 8 сентября, 2010 · Жалоба Здравствуйте, господа. Простенький вопрос. Есть два клоковых домена, частоты никак между собой не связаны, но известно, что F1 примерно = 1.1*F2 . Из домена F2 надо передать в домен F1 несколько сигналов (2..8), каждый из которых представляет из себя одиночный импульс (длительность импульса = 1 такту F2). Известно, что длительность паузы между импульсами в одном сигнале очень большая (несколько тысяч тактов F2). В разных сигналах импульсы могут приходить с задержкой в не меньше, чем 4 такта F2. В домене F1 надо получить те же импульсы, но синхронизированные по F1. Задержка между приходом импульса в домене F2 и уходом импульса, синхронизированного в F1 в несколько тактов - допустима. Собственно, как такую вот вещь можно сделать максимально правильно - т.е. с использованием небольших ресурсов и с гарантией от метастабильности? Xilinx, Virtex-5... Всем заранее спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 8 сентября, 2010 Опубликовано 8 сентября, 2010 · Жалоба Кажись вот это http://electronix.ru/forum/index.php?s=&am...st&p=534843 то что вам нужно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 9 сентября, 2010 Опубликовано 9 сентября, 2010 · Жалоба Поставить стандартное FIFO на 2..8 бит минимальной глубины (на LUT), писать только если один из битов ненулевой. С учетом соотношения тактовых частот доменов и пауз между импульсами в нем никогда не будет более одного слова. Это будет не самое (мягко говоря) оптимальное по площади решение, однако самое быстрое и беспроблемное: всю логику пересечения домена вам сделает тысячу раз проверенная мегафункция. А раз у вас Virtex-5 - то порядок потраченных ресурсов вас вряд ли озаботит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 9 сентября, 2010 Опубликовано 9 сентября, 2010 · Жалоба Ну если передавать надо не на каждом такте, то можно так signal buf : std_logic_vector(1 downto 0):="00"; ..... process(clk) begin if clk'event and clk='1' then buf(0) <= input; buf(1) <= buf(0); if (buf="01")then output <= '1'; end if; end if; end process; где clk - клок на который нужно пересадить Ваш импульс. input - входной импульс, output - импульс на частоте clk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 сентября, 2010 Опубликовано 9 сентября, 2010 · Жалоба удалил плохой код, написал новый. Оцените. module CC(input bit clkrc, dattr, output bit datrc); bit ff1, ff2; always @(posedge dattr, posedge datrc) if(datrc) ff1 = 0; else ff1 = 1; always @(posedge clkrc) begin ff2 <= ff1; datrc <= ff2 & ff1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться