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

 
 
 
Reply to this topicStart new topic
> Как правильно передать информацию из одного клокового домена в другой?, То есть не неправильно
Koluchiy
сообщение Sep 8 2010, 13:43
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Здравствуйте, господа.

Простенький вопрос.

Есть два клоковых домена, частоты никак между собой не связаны, но известно, что F1 примерно = 1.1*F2 .

Из домена F2 надо передать в домен F1 несколько сигналов (2..8), каждый из которых представляет из себя одиночный импульс (длительность импульса = 1 такту F2).
Известно, что длительность паузы между импульсами в одном сигнале очень большая (несколько тысяч тактов F2).
В разных сигналах импульсы могут приходить с задержкой в не меньше, чем 4 такта F2.

В домене F1 надо получить те же импульсы, но синхронизированные по F1.
Задержка между приходом импульса в домене F2 и уходом импульса, синхронизированного в F1 в несколько тактов - допустима.

Собственно, как такую вот вещь можно сделать максимально правильно - т.е. с использованием небольших ресурсов и с гарантией от метастабильности?

Xilinx, Virtex-5...

Всем заранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 8 2010, 13:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Кажись вот это
http://electronix.ru/forum/index.php?s=&am...st&p=534843
то что вам нужно
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Sep 9 2010, 04:49
Сообщение #3


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

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



Поставить стандартное FIFO на 2..8 бит минимальной глубины (на LUT), писать только если один из битов ненулевой. С учетом соотношения тактовых частот доменов и пауз между импульсами в нем никогда не будет более одного слова. Это будет не самое (мягко говоря) оптимальное по площади решение, однако самое быстрое и беспроблемное: всю логику пересечения домена вам сделает тысячу раз проверенная мегафункция. А раз у вас Virtex-5 - то порядок потраченных ресурсов вас вряд ли озаботит.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Sep 9 2010, 09:15
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Ну если передавать надо не на каждом такте, то можно так
Код
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
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 9 2010, 11:46
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



удалил плохой код, написал новый. Оцените.
Код
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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:13
Рейтинг@Mail.ru


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