maxics 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Для начала Вам необходимо прочитать о 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Вам сначала необходимо зафиксировать фазу частоты в Spartan. Для этого надо, чтобы частота там прошла через DCM. То, что это добавит джиттер - уже неважно, потому что мы хлопаем оцифрованные данные. Далее, эта частота придет в Virtex-4 c некоторым смещением к данным. Вам надо это смещение засечь осцилографом. И затем на это смещение подвинуть клок, либо с помощью DCM в Spartan, либо использовав в Virtex еще одну DCM. Статически клок сдвинуть в DCM можно при ее создании в Coregen. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maxics 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба Если я хочу сдвинуть только один бит, например 6-й. В UCF эту строчку нужно прописать? NET "ADC_IN<5>" OFFSET = IN "2 ns" VALID "10 ns" BEFORE "clk" RISING; Изменено 31 октября, 2011 пользователем maxics Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Genn 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Если я хочу сдвинуть только один бит, например 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)". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться