Перейти к содержанию
    

Сдвиг фазы такта в Virtex4

Для начала Вам необходимо прочитать о constraint'ах (см. Constraint Guide) OFFSET, IOBDELAY и IOB.

При помощи OFFSET IN можно задать необходимое соотношение между данными и clock'ом, а при компиляции среда сможет проверить выполняются ли эти соотношения или нет.

IOBDELAY определяет использование элементов задержки в IOB.

Именно для V-4 – не помню, но в ряде FPGA можно задерживать как Data, так и Clock.

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

Также помогает FPGA Editor, чтобы понять, какие ресурсы использованы и как расположены триггера (легли в IOB или нет - от этого очень сильно зависит времянка)...

Constraint IOB задаёт: укладывать триггер в IOB или нет.

 

Если не поможет, то тогда почитайте про DCM. Вроде как им можно покрутить фазу непрерывного clock'а.

 

Хочу сдвинуть входной поток данных ADC_IN относительно clk на 2 ns.

Если использовать OFFSET IN это будет выглядеть так:

 

NET "ADC_IN" OFFSET = IN "2 ns" VALID "10 ns" BEFORE "clk" RISING;

 

соответственно если, например, сдвинуть только 6-й бит потока:

 

NET "ADC_IN<5>" OFFSET = IN "2 ns" VALID "10 ns" BEFORE "clk" RISING;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам сначала необходимо зафиксировать фазу частоты в Spartan. Для этого надо, чтобы частота там прошла через DCM. То, что это добавит джиттер - уже неважно, потому что мы хлопаем оцифрованные данные. Далее, эта частота придет в Virtex-4 c некоторым смещением к данным. Вам надо это смещение засечь осцилографом. И затем на это смещение подвинуть клок, либо с помощью DCM в Spartan, либо использовав в Virtex еще одну DCM. Статически клок сдвинуть в DCM можно при ее создании в Coregen.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я хочу сдвинуть только один бит, например 6-й. В UCF эту строчку нужно прописать?

 

NET "ADC_IN<5>" OFFSET = IN "2 ns" VALID "10 ns" BEFORE "clk" RISING;

Изменено пользователем maxics

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я хочу сдвинуть только один бит, например 6-й. В UCF эту строчку нужно прописать?

 

NET "ADC_IN<5>" OFFSET = IN "2 ns" VALID "10 ns" BEFORE "clk" RISING;

 

Эта строка - всего лишь временное ограничение для транслятора, который будет просто стараться уложиться в определенный диапазон, а возможностью управлять задержками в IOB она не обладает. Найдите в каталоге XILINX файл "cgd.pdf" (очень полезный файл!) и просмотрите главу "Input Buffer Delay Value (IBUF_DELAY_VALUE)".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...