Костян 0 28 марта, 2008 Опубликовано 28 марта, 2008 · Жалоба Мучает любопытство : что есть физически элементы задержки в DLL Xilinx ? В документации Xilinx ни слова о их структуре не говорит (или плохо искал :) ) Каждый отдельный элемент постоянной или переменной величины? Расмотрим эти элементы задержки в DCM. В документации рисуют Delay1 , Delay2 .. Delay N . Чему равно это N? Почему дискрет сдвига фазы равен 1/256 (1,4 градуса) ? Получается N=255 ? Тогда почему она постоянная для разных частот ? Каждый элемент задержки переменной величины ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 28 марта, 2008 Опубликовано 28 марта, 2008 · Жалоба Поставьте MicroWave Office, там в примерах есть похожие структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 28 марта, 2008 Опубликовано 28 марта, 2008 · Жалоба Мучает любопытство : что есть физически элементы задержки в DLL Xilinx ? В документации Xilinx ни слова о их структуре не говорит (или плохо искал :) ) Каждый отдельный элемент постоянной или переменной величины? Расмотрим эти элементы задержки в DCM. В документации рисуют Delay1 , Delay2 .. Delay N . Чему равно это N? Почему дискрет сдвига фазы равен 1/256 (1,4 градуса) ? Получается N=255 ? Тогда почему она постоянная для разных частот ? Каждый элемент задержки переменной величины ? В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку. Во четвертом виртексе, например, задержка меняется с шагом минимум 5 ps в быстром режиме. Элемент задержки, о котором вы говорили (DelayN) состоит как раз из таких буферов. Т.е. сама линия задержки состоит из кучи маленьких подстраиваемых задержекю. Это стандартная схема, задержка от частоты не зависит, а вот сдвиг фазы как раз зависит от частоты, т.е. зависит от того какой у вас входной сигнал. Посмотрите DS302 у Xilinx на странице 41 характеристики Fine Phase Shifting и Delay Lines, думаю тогда все поймете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ender 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку. Во четвертом виртексе, например, задержка меняется с шагом минимум 5 ps в быстром режиме. Элемент задержки, о котором вы говорили (DelayN) состоит как раз из таких буферов. Т.е. сама линия задержки состоит из кучи маленьких подстраиваемых задержекю. Это стандартная схема, задержка от частоты не зависит, а вот сдвиг фазы как раз зависит от частоты, т.е. зависит от того какой у вас входной сигнал. Посмотрите DS302 у Xilinx на странице 41 характеристики Fine Phase Shifting и Delay Lines, думаю тогда все поймете. Вопрос - возможно ли использовать самому такую структуру задержки? Напрямую пытался выстраивать, давно еще, последовательность из буферов, из инверторов, из лутов.... Задержка фиксированная получается для любой длины последовательности, этот гад ИСЕ все оптимизирует) Как корректно реализовать? До сих пор приходится делать, если требуется задержка для подстройки, на быстродействующих сдвиговых регистрах с тактированием) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба http://en.wikipedia.org/wiki/Delay-locked_loop Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avesat 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба DLL или DCM это так называемые hard core, добраться к ним можно через примитивы, и использовать только те настройки, которые у них есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ender 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба DLL или DCM это так называемые hard core, добраться к ним можно через примитивы, и использовать только те настройки, которые у них есть. Я не о DCM спрашивал, а о том, как корректно сделать задержку не на базе сдвиговых регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба можете использовать кварцевые, ртутные, коаксиальные, полупроводниковые ЛЗ всё это отдельные, внешние устройства. внутри ПЛИС Зайлинкс доступных пользователю элементов с нормированной (например, в диапазоне рабочих температур) задержкой нет. Вероятно, имело бы смысл переработать Ваш модуль с тем, чтобы потребности в элементах задержки не возникало. Успехов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avesat 0 29 марта, 2008 Опубликовано 29 марта, 2008 · Жалоба Ну так и делайте на синхронных регистрах или счетчиках, если вам нужны асинхронные элементы задержки то таких примитивов нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ender 0 30 марта, 2008 Опубликовано 30 марта, 2008 · Жалоба В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку. Я думаю, такая схема вполне рабочая, если используется самой Xilinx. Я спрашиваю, как ее корректно реализовать. Ну так и делайте на синхронных регистрах или счетчиках, если вам нужны асинхронные элементы задержки то таких примитивов нет. То, что нет готовых примитивов, я, вообще говоря, в курсе. Но очевидно, сделать как-то аналогично Xilinx возможно. Видимо, придется почитать исходники CoreLib. можете использовать кварцевые, ртутные, коаксиальные, полупроводниковые ЛЗ всё это отдельные, внешние устройства. внутри ПЛИС Зайлинкс доступных пользователю элементов с нормированной (например, в диапазоне рабочих температур) задержкой нет. Вероятно, имело бы смысл переработать Ваш модуль с тем, чтобы потребности в элементах задержки не возникало. К сожалению, переработать модуль таким образом нет возможности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leevv 0 30 марта, 2008 Опубликовано 30 марта, 2008 · Жалоба Я думаю, такая схема вполне рабочая, если используется самой Xilinx. Я спрашиваю, как ее корректно реализовать. То, что нет готовых примитивов, я, вообще говоря, в курсе. Но очевидно, сделать как-то аналогично Xilinx возможно. Видимо, придется почитать исходники CoreLib. К сожалению, переработать модуль таким образом нет возможности. Есть регулируемая задержка в каждом IO - IDELAY в Virtex 4 и IDELAY,ODELAY в Virtex 5. Каждый tap 75 ps. Всего 64 taps Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ender 0 30 марта, 2008 Опубликовано 30 марта, 2008 · Жалоба Есть регулируемая задержка в каждом IO - IDELAY в Virtex 4 и IDELAY,ODELAY в Virtex 5. Каждый tap 75 ps. Всего 64 taps Да, верно. Но эти задержки, как следует из названия и даташита, применяются только к входным пинам, как написано в официальном документе: "для выравнивания потоков данных на входе ПЛИС" (вольный перевод :) ). Меня же интересуют задержки внутри, в глубине самой ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leevv 0 31 марта, 2008 Опубликовано 31 марта, 2008 · Жалоба Да, верно. Но эти задержки, как следует из названия и даташита, применяются только к входным пинам, как написано в официальном документе: "для выравнивания потоков данных на входе ПЛИС" (вольный перевод :) ). Меня же интересуют задержки внутри, в глубине самой ПЛИС. Ну заведите сигнал на неиспользуемый пин и с него же снимите. Я думаю можно даже Bonded IO block использовать. То есть IO block у которого и вовсе нет наружнего пина. Хотя в V4,V5 не знаю точно можно ли их задействовать. В V2 можно было, но там нет IDELAY. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ender 0 31 марта, 2008 Опубликовано 31 марта, 2008 · Жалоба Ну заведите сигнал на неиспользуемый пин и с него же снимите. Я думаю можно даже Bonded IO block использовать. То есть IO block у которого и вовсе нет наружнего пина. Хотя в V4,V5 не знаю точно можно ли их задействовать. В V2 можно было, но там нет IDELAY. Спасибо, обязательно попробую как вариант! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 31 марта, 2008 Опубликовано 31 марта, 2008 · Жалоба Вопрос - возможно ли использовать самому такую структуру задержки? Напрямую пытался выстраивать, давно еще, последовательность из буферов, из инверторов, из лутов.... Задержка фиксированная получается для любой длины последовательности, этот гад ИСЕ все оптимизирует) Как корректно реализовать? До сих пор приходится делать, если требуется задержка для подстройки, на быстродействующих сдвиговых регистрах с тактированием) В принципе можно делать задержку и на буферах. Для того что бы ISE не оптимизировал структуру необходимо применить специальный атрибут в VHDL описнии элемента задержки. (noopt) Вот код, использующий две LUT в режиме буфера (хотя это и безразлично, потому что величина задержки не меняется от типа функиции в LUT) для задержки. Каждая LUT дает 0,17 нс задержки. Можно их выстроить в цепочку и для уверенности еще прибить гвоздями (атрибут rloc). ИМХО время задржки великовато, подходит для сигналов 250-300 Мгц и меньше. library ieee; use ieee.std_logic_1164.all; library unisim; use unisim.vcomponents.all; entity delay is port( i : in std_logic; o : out std_logic ); end delay; architecture delay of delay is attribute noopt : boolean; attribute noopt of xlut0 : label is TRUE; attribute noopt of xlut1 : label is TRUE; attribute rloc: string; attribute rloc of xlut0 : label is "X0Y0"; attribute rloc of xlut1 : label is "X0Y0"; component LUT1 -- synthesis translate_off generic ( INIT : bit_vector := X"2"); -- synthesis translate_on port ( O : out STD_ULOGIC; I0 : in STD_ULOGIC); end component; attribute INIT : string; attribute INIT of xlut0 : label is "2"; attribute INIT of xlut1 : label is "2"; signal s0, s1 : std_logic; begin xlut0: LUT1 -- synthesis translate_off generic map( INIT => x"2" ) -- режим буфера -- synthesis translate_on port map (O => s0, I0 => i); xlut1: LUT1 -- synthesis translate_off generic map( INIT => x"2" ) -- режим буфера -- synthesis translate_on port map (O => s1, I0 => s0); o<=s1; end s_delay; Но по-мойму легче для входящих сигналов (если работаете с virtex-4/5) использовать линию задержки находящюуся в IOB, для внутренних сигналов использовать констрэйнты типа MAXDELAY и MAXSKEW и т.п. и только в крайних случаях прибегать к изворотам, в виде цепочки буферов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться