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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Элементы задержки в DLL от Xilinx
Костян
сообщение Mar 28 2008, 10:19
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Мучает любопытство : что есть физически элементы задержки в DLL Xilinx ? В документации Xilinx ни слова о их структуре не говорит (или плохо искал smile.gif )
Каждый отдельный элемент постоянной или переменной величины?

Расмотрим эти элементы задержки в DCM. В документации рисуют Delay1 , Delay2 .. Delay N . Чему равно это N?
Почему дискрет сдвига фазы равен 1/256 (1,4 градуса) ? Получается N=255 ? Тогда почему она постоянная для разных частот ? Каждый элемент задержки переменной величины ?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Mar 28 2008, 10:52
Сообщение #2


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

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



Поставьте MicroWave Office, там в примерах есть похожие структуры.
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Mar 28 2008, 13:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(Костян @ Mar 28 2008, 13:19) *
Мучает любопытство : что есть физически элементы задержки в DLL Xilinx ? В документации Xilinx ни слова о их структуре не говорит (или плохо искал smile.gif )
Каждый отдельный элемент постоянной или переменной величины?

Расмотрим эти элементы задержки в DCM. В документации рисуют Delay1 , Delay2 .. Delay N . Чему равно это N?
Почему дискрет сдвига фазы равен 1/256 (1,4 градуса) ? Получается N=255 ? Тогда почему она постоянная для разных частот ? Каждый элемент задержки переменной величины ?


В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку. Во четвертом виртексе, например, задержка меняется с шагом минимум 5 ps в быстром режиме. Элемент задержки, о котором вы говорили (DelayN) состоит как раз из таких буферов. Т.е. сама линия задержки состоит из кучи маленьких подстраиваемых задержекю. Это стандартная схема, задержка от частоты не зависит, а вот сдвиг фазы как раз зависит от частоты, т.е. зависит от того какой у вас входной сигнал.

Посмотрите DS302 у Xilinx на странице 41 характеристики Fine Phase Shifting и Delay Lines, думаю тогда все поймете.


--------------------
Go to the top of the page
 
+Quote Post
Ender
сообщение Mar 29 2008, 15:57
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 5-11-07
Пользователь №: 32 072



Цитата(dm.pogrebnoy @ Mar 28 2008, 16:24) *
В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку. Во четвертом виртексе, например, задержка меняется с шагом минимум 5 ps в быстром режиме. Элемент задержки, о котором вы говорили (DelayN) состоит как раз из таких буферов. Т.е. сама линия задержки состоит из кучи маленьких подстраиваемых задержекю. Это стандартная схема, задержка от частоты не зависит, а вот сдвиг фазы как раз зависит от частоты, т.е. зависит от того какой у вас входной сигнал.

Посмотрите DS302 у Xilinx на странице 41 характеристики Fine Phase Shifting и Delay Lines, думаю тогда все поймете.


Вопрос - возможно ли использовать самому такую структуру задержки? Напрямую пытался выстраивать, давно еще, последовательность из буферов, из инверторов, из лутов.... Задержка фиксированная получается для любой длины последовательности, этот гад ИСЕ все оптимизирует) Как корректно реализовать? До сих пор приходится делать, если требуется задержка для подстройки, на быстродействующих сдвиговых регистрах с тактированием)


--------------------
I have nothing... Because only my dreams. And i put my dreams under your feet.
Tread softly.. because you tread on my dreams.
W. Yeats.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Mar 29 2008, 19:18
Сообщение #5


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



http://en.wikipedia.org/wiki/Delay-locked_loop
Go to the top of the page
 
+Quote Post
avesat
сообщение Mar 29 2008, 19:44
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 14-08-05
Из: Украина
Пользователь №: 7 621



DLL или DCM это так называемые hard core, добраться к ним можно через примитивы, и использовать только те настройки, которые у них есть.


--------------------
"Мы будем играть, пока не треснут наши гитары, и все те, кто любит рок - я отдаю вам честь!" AC/DC
Go to the top of the page
 
+Quote Post
Ender
сообщение Mar 29 2008, 20:43
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 5-11-07
Пользователь №: 32 072



Цитата(avesat @ Mar 29 2008, 22:44) *
DLL или DCM это так называемые hard core, добраться к ним можно через примитивы, и использовать только те настройки, которые у них есть.


Я не о DCM спрашивал, а о том, как корректно сделать задержку не на базе сдвиговых регистров.


--------------------
I have nothing... Because only my dreams. And i put my dreams under your feet.
Tread softly.. because you tread on my dreams.
W. Yeats.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Mar 29 2008, 21:03
Сообщение #8


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



можете использовать
кварцевые, ртутные, коаксиальные, полупроводниковые ЛЗ

всё это отдельные, внешние устройства. внутри ПЛИС Зайлинкс доступных пользователю элементов с нормированной (например, в диапазоне рабочих температур) задержкой нет.

Вероятно, имело бы смысл переработать Ваш модуль с тем, чтобы потребности в элементах задержки не возникало.

Успехов.
Go to the top of the page
 
+Quote Post
avesat
сообщение Mar 29 2008, 21:06
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 14-08-05
Из: Украина
Пользователь №: 7 621



Ну так и делайте на синхронных регистрах или счетчиках, если вам нужны асинхронные элементы задержки то таких примитивов нет.


--------------------
"Мы будем играть, пока не треснут наши гитары, и все те, кто любит рок - я отдаю вам честь!" AC/DC
Go to the top of the page
 
+Quote Post
Ender
сообщение Mar 30 2008, 05:54
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 5-11-07
Пользователь №: 32 072



Цитата
В документе на DCM имелись ввиду буферы с нормированной задержкой, выстроенные в цепочку. выход каждого буфера заводится ну мультиплексор, таким образом можно выбирать нужную задержку.

Я думаю, такая схема вполне рабочая, если используется самой Xilinx. Я спрашиваю, как ее корректно реализовать.


Цитата(avesat @ Mar 30 2008, 00:06) *
Ну так и делайте на синхронных регистрах или счетчиках, если вам нужны асинхронные элементы задержки то таких примитивов нет.

То, что нет готовых примитивов, я, вообще говоря, в курсе. Но очевидно, сделать как-то аналогично Xilinx возможно. Видимо, придется почитать исходники CoreLib.

Цитата(Fat Robot @ Mar 30 2008, 00:03) *
можете использовать
кварцевые, ртутные, коаксиальные, полупроводниковые ЛЗ

всё это отдельные, внешние устройства. внутри ПЛИС Зайлинкс доступных пользователю элементов с нормированной (например, в диапазоне рабочих температур) задержкой нет.

Вероятно, имело бы смысл переработать Ваш модуль с тем, чтобы потребности в элементах задержки не возникало.


К сожалению, переработать модуль таким образом нет возможности.


--------------------
I have nothing... Because only my dreams. And i put my dreams under your feet.
Tread softly.. because you tread on my dreams.
W. Yeats.
Go to the top of the page
 
+Quote Post
leevv
сообщение Mar 30 2008, 19:19
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 4-01-05
Пользователь №: 1 799



Цитата(Ender @ Mar 30 2008, 01:54) *
Я думаю, такая схема вполне рабочая, если используется самой Xilinx. Я спрашиваю, как ее корректно реализовать.
То, что нет готовых примитивов, я, вообще говоря, в курсе. Но очевидно, сделать как-то аналогично Xilinx возможно. Видимо, придется почитать исходники CoreLib.
К сожалению, переработать модуль таким образом нет возможности.



Есть регулируемая задержка в каждом IO - IDELAY в Virtex 4 и IDELAY,ODELAY в Virtex 5.
Каждый tap 75 ps. Всего 64 taps
Go to the top of the page
 
+Quote Post
Ender
сообщение Mar 30 2008, 20:35
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 5-11-07
Пользователь №: 32 072



Цитата(leevv @ Mar 30 2008, 23:19) *
Есть регулируемая задержка в каждом IO - IDELAY в Virtex 4 и IDELAY,ODELAY в Virtex 5.
Каждый tap 75 ps. Всего 64 taps


Да, верно. Но эти задержки, как следует из названия и даташита, применяются только к входным пинам, как написано в официальном документе: "для выравнивания потоков данных на входе ПЛИС" (вольный перевод smile.gif ). Меня же интересуют задержки внутри, в глубине самой ПЛИС.


--------------------
I have nothing... Because only my dreams. And i put my dreams under your feet.
Tread softly.. because you tread on my dreams.
W. Yeats.
Go to the top of the page
 
+Quote Post
leevv
сообщение Mar 31 2008, 00:25
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 4-01-05
Пользователь №: 1 799



Цитата(Ender @ Mar 30 2008, 16:35) *
Да, верно. Но эти задержки, как следует из названия и даташита, применяются только к входным пинам, как написано в официальном документе: "для выравнивания потоков данных на входе ПЛИС" (вольный перевод smile.gif ). Меня же интересуют задержки внутри, в глубине самой ПЛИС.

Ну заведите сигнал на неиспользуемый пин и с него же снимите.
Я думаю можно даже Bonded IO block использовать. То есть IO block у которого и вовсе нет наружнего пина. Хотя в V4,V5 не знаю точно можно ли их задействовать. В V2 можно было, но там нет IDELAY.
Go to the top of the page
 
+Quote Post
Ender
сообщение Mar 31 2008, 07:35
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 5-11-07
Пользователь №: 32 072



Цитата(leevv @ Mar 31 2008, 04:25) *
Ну заведите сигнал на неиспользуемый пин и с него же снимите.
Я думаю можно даже Bonded IO block использовать. То есть IO block у которого и вовсе нет наружнего пина. Хотя в V4,V5 не знаю точно можно ли их задействовать. В V2 можно было, но там нет IDELAY.


Спасибо, обязательно попробую как вариант!


--------------------
I have nothing... Because only my dreams. And i put my dreams under your feet.
Tread softly.. because you tread on my dreams.
W. Yeats.
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Mar 31 2008, 08:08
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(Ender @ Mar 29 2008, 19:57) *
Вопрос - возможно ли использовать самому такую структуру задержки? Напрямую пытался выстраивать, давно еще, последовательность из буферов, из инверторов, из лутов.... Задержка фиксированная получается для любой длины последовательности, этот гад ИСЕ все оптимизирует) Как корректно реализовать? До сих пор приходится делать, если требуется задержка для подстройки, на быстродействующих сдвиговых регистрах с тактированием)


В принципе можно делать задержку и на буферах. Для того что бы 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 и т.п. и только в крайних случаях прибегать к изворотам, в виде цепочки буферов.


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:20
Рейтинг@Mail.ru


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