Jump to content

    

Recommended Posts

Всем добрый день.

Объясните неучу как использовать компонент IODELAYE1. Читаю вроде все понятно. Подключаю выдает ошибки.

Задача:

Есть пользовательский вход плис (пусть будет "А") который необходимо задержать и выдать на дальнейшую обработку в плис (пусть будет линия "B") и далее на выход плис. Куда что нужно подключить и какие параметры задать?

Вариант 1 - задержка фиксированная.

Вариант 2 задержка изменяемая. Значение задержки храниться в регистре (Например RG1(4 downto 0)) который я могу менять из пользовательской программы.

Реальный пример: получаю данные из АЦП которые необходимо задержать относительно тактов.

Используется Virtex6.

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

Я так понимаю что в отчете я должен увидеть результат об используемой задержке?

Куда что подключать и какие задать параметры элемента IODELAYE1 ?

Всем откликнувшимся заранее большое спасибо.

 

IODELAYE1_inst : IODELAYE1

generic map (

CINVCTRL_SEL => FALSE, -- Enable dynamic clock inversion ("TRUE"/"FALSE")

DELAY_SRC => "I", -- Delay input ("I", "CLKIN", "DATAIN", "IO", "O")

HIGH_PERFORMANCE_MODE => TRUE, -- Reduced jitter ("TRUE"), Reduced power ("FALSE")

IDELAY_TYPE => "DEFAULT", -- "DEFAULT", "FIXED", "VARIABLE", or "VAR_LOADABLE"

IDELAY_VALUE => 0, -- Input delay tap setting (0-32)

ODELAY_TYPE => "FIXED", -- "FIXED", "VARIABLE", or "VAR_LOADABLE"

ODELAY_VALUE => 0, -- Output delay tap setting (0-32)

REFCLK_FREQUENCY => 200.0, -- IDELAYCTRL clock input frequency in MHz

SIGNAL_PATTERN => "DATA" -- "DATA" or "CLOCK" input signal

)

port map (

CNTVALUEOUT => CNTVALUEOUT, -- 5-bit output - Counter value for monitoring purpose

DATAOUT => DATAOUT, -- 1-bit output - Delayed data output

C => C, -- 1-bit input - Clock input

CE => CE, -- 1-bit input - Active high enable increment/decrement function

CINVCTRL => CINVCTRL, -- 1-bit input - Dynamically inverts the Clock © polarity

CLKIN => CLKIN, -- 1-bit input - Clock Access into the IODELAY

CNTVALUEIN => CNTVALUEIN, -- 5-bit input - Counter value for loadable counter application

DATAIN => DATAIN, -- 1-bit input - Internal delay data

IDATAIN => IDATAIN, -- 1-bit input - Delay data input

INC => INC, -- 1-bit input - Increment / Decrement tap delay

ODATAIN => ODATAIN, -- 1-bit input - Data input for the output datapath from the device

RST => RST, -- 1-bit input - Active high, synchronous reset, resets delay chain to IDELAY_VALUE/

-- ODELAY_VALUE tap. If no value is specified, the default is 0.

T => T -- 1-bit input - 3-state input control. Tie high for input-only or internal delay or

-- tie low for output only.

);

 

Share this post


Link to post
Share on other sites
И 200 МГц не забыть подвести к нему.

Что значит установлен? В ПЛИС он есть - использую виртекс6.

Ошибку сообщу, но в понедельник.

 

А компонент IDELAYCTRL установлен? Без него IODELAYE1 пользоваться нельзя.

Ну и текст ошибки хорошо бы привести.

 

Что такое IDELAYCTRL ? И что значит установлен? Давайте подробней плиз ? Может скинете простой пример? Свои пожелания об задержке я высказал ранее.

Share this post


Link to post
Share on other sites

Если интересно, что зачем и почему, почитайте UG361.

Если нет, установите в топовом модуле один компонент:

IDELAYCTRL_inst : IDELAYCTRL
port map (
    RDY => idelay_valid, -- выход сигнал готовности
    REFCLK => clk_200mhz, -- вход клок 200 МГц
    RST =>rst -- вход сброс
    );

Edited by Artemius_tv

Share this post


Link to post
Share on other sites
Если интересно, что зачем и почему, почитайте UG361.

Если нет, установите в топовом модуле один компонент:

IDELAYCTRL_inst : IDELAYCTRL
port map (
    RDY => idelay_valid, -- выход сигнал готовности
    REFCLK => clk_200mhz, -- вход клок 200 МГц
    RST =>rst -- вход сброс
    );

 

Я этот документ читал и читаю, но если все понял, то не задавал бы таких вопросов. Может расскажите вкратце.

Share this post


Link to post
Share on other sites

Разбираться с IDELAYCTRL особого смысла нет, у него нет настроек, он просто должен быть, если используются IODELAYE1 или подобные. На каждый регион пинов с управляемой задержкой приходится по одному IDELAYCTRL, котрый занимается калибровкой задержек. Для этого ему нужен тактовый сигнал 200МГц.

Можно самому установить компоненты IDELAYCTRL для каждого региона, где используется управляемая задержка, прописав вручную LOC, а можно только один IDELAYCTRL без указания LOC, тогда ISE автоматически задействует нужные.

Если его вообще не установить, то проект с использованием IODELAYE1 не соберется, ISE выдаст ошибку.

 

Share this post


Link to post
Share on other sites
Разбираться с IDELAYCTRL особого смысла нет, у него нет настроек, он просто должен быть, если используются IODELAYE1 или подобные. На каждый регион пинов с управляемой задержкой приходится по одному IDELAYCTRL, котрый занимается калибровкой задержек. Для этого ему нужен тактовый сигнал 200МГц.

Можно самому установить компоненты IDELAYCTRL для каждого региона, где используется управляемая задержка, прописав вручную LOC, а можно только один IDELAYCTRL без указания LOC, тогда ISE автоматически задействует нужные.

Если его вообще не установить, то проект с использованием IODELAYE1 не соберется, ISE выдаст ошибку.

 

Вот достойный ответ. Спасибо. Завтра пойду снова экспериментировать. А что выход idelayctrl готовности никуда подключать не нужно если я этот выход не использую?

Share this post


Link to post
Share on other sites

Если не используете, то и не подключайте. Я у себя не подключаю.

Кстати, в UG361 это явно написано: "implementation tools allow RDY to be unconnected/ignored".

 

Share this post


Link to post
Share on other sites
Если не используете, то и не подключайте. Я у себя не подключаю.

Кстати, в UG361 это явно написано: "implementation tools allow RDY to be unconnected/ignored".

 

Вроде бы у меня все получилось. Последнее уточнение:

вход clkin использую если хочу задержать тактовый сигнал со спец буферов ? Это правильно?

Если я устанавливаю фиксированную задержку, то мне вход "с" ненужен. Это правильно?

Если задержка динамические изменяется, то на вход "с" подаю такт. Любой частоты?

На вход CNTVALUEIN(4 :0) значение задержки.

Я результат установленный задержек смотрел в FPGA'editor. Там они устанавливаются, а вот в отчете pinout пишет iob Delay = none. Почему?

Share this post


Link to post
Share on other sites
вход clkin использую если хочу задержать тактовый сигнал со спец буферов ? Это правильно?

Да

Если я устанавливаю фиксированную задержку, то мне вход "с" ненужен. Это правильно?

Да.

Если задержка динамические изменяется, то на вход "с" подаю такт. Любой частоты?

Что-то я тоже не нашел ничего в документации. Только совет подавать клок, от которого затактирован задерживаемый сигнал.

 

 

Share this post


Link to post
Share on other sites
Вот достойный ответ. Спасибо. Завтра пойду снова экспериментировать. А что выход idelayctrl готовности никуда подключать не нужно если я этот выход не использую?

 

выход готовности можно использовать в проекте. если готовности нет - не стартовать какие то процессы. но в основном он висит в воздухе и все :)

 

зы

когда то делал контроллер, по включению питания автоматом выравнивающий данные от ацп. Правда у меня уже был свой контроллер SPI... В общем по включению питания из РОМки вычитываются команды, настраивающие АЦП на тестовый режим, через SPI контроллер вдавливаются в АЦП, который начаинает выдавать на шину данных тестовую последовательность. Эти данные приходят на ИОДЕЛЕИ, собираются через ИСЕРДЕСЫ и сравниваются с заданной эталонной константой. если не соответствует - наращиваем ТАП по данным и опять сравниваем. Когда добегаем до ТАП по данным =32, наращиваем ТАП по клоку, обнуляем ТАП по данным и опять же сравниваем. И так прогоняем ТАПы по данным-клоку до тех пор, пока не будет устойчивое совпадение данных с эталонной константой, либо пока ТАПы не закончатся. В этом случае генерим эррор - подстройка не может быть завершена.

 

Устойчивое совпадение - равенство принимаемых данных и эталонной константы в течение 8-12 ТАПов. Это обеспечивает защиту от "дрожания" фронтов. На моей рабочей частоте 8 ТАПов для запаса было достаточно. Механизм следующий - как только есть первое совпадение константы с данными, мы запоминаем текущий ТАП, запускаем счетчик "валидных ТАПов" и параллельно с этим вычисляем значение "первый валидный ТАП"+4. Продолжаем наращивать ТАПы и сравнивать. Как только счетчик валидных равен 8 - генерим сигнал "подстройка завершена" и записываем в ИОДЕЛЕИ по данным (синхра и так останется на текущем значении).

 

Если цикл подстройки завершен - вычитываем из РОМки команды, настраивающие АЦП на штатный режим и задавливаем их через контроллер SPI.

 

Модуль параметризируемый, с возможностью подключение нескольких АЦП. В этом случае они настраиваются последовательно, один за другим

Share this post


Link to post
Share on other sites
зы

когда то делал контроллер, по включению питания автоматом выравнивающий данные от ацп. Правда у меня уже был свой контроллер SPI... В общем по включению питания из РОМки вычитываются команды, настраивающие АЦП на тестовый режим, через SPI контроллер вдавливаются в АЦП, который начаинает выдавать на шину данных тестовую последовательность. Эти данные приходят на ИОДЕЛЕИ, собираются через ИСЕРДЕСЫ и сравниваются с заданной эталонной константой. если не соответствует - наращиваем ТАП по данным и опять сравниваем. Когда добегаем до ТАП по данным =32, наращиваем ТАП по клоку, обнуляем ТАП по данным и опять же сравниваем. И так прогоняем ТАПы по данным-клоку до тех пор, пока не будет устойчивое совпадение данных с эталонной константой, либо пока ТАПы не закончатся. В этом случае генерим эррор - подстройка не может быть завершена.

 

Офигеть - тут отдельная задача по настройке задержек. А ведь с оцифрованными данными нужно еще что-то делать, ну там демодулировать, отфильтровать и т.д. А до этого можно и не дойти - зарыться в настройке АЦП.

Я в таких случаях до сих пор колдую с простой инверсией клока. Иногда бывает очень геморройно.

 

Да

 

Да.

 

Что-то я тоже не нашел ничего в документации. Только совет подавать клок, от которого затактирован задерживаемый сигнал.

 

А что более правильно задерживать: параллельную шину с данными или клок? Мне представляется что клок, он же все-таки один а не целая шина. Или я не прав?

Share this post


Link to post
Share on other sites

Если setup не сходится, то клок, если hold, то данные. У каждого пина свой элемент задержки, который только с ним можно использовать, значит экономить их смысла нет.

 

 

Share this post


Link to post
Share on other sites
Офигеть - тут отдельная задача по настройке задержек. А ведь с оцифрованными данными нужно еще что-то делать, ну там демодулировать, отфильтровать и т.д. А до этого можно и не дойти - зарыться в настройке АЦП.

Я в таких случаях до сих пор колдую с простой инверсией клока. Иногда бывает очень геморройно.

 

поставили задачу автоматизировать процесс )). чтобы потом вокруг каждой отдельно взятой платы не скакать с осцилом вручную подбирая задержки (темболее если данные идут от 3 АЦП, как у нас). в теории вроде получилось. на стенде тоже. что будет в серии - пока неизвестно

зы

а по сравнению с вычислителем (обрабатывающим оцифрованые данные) и его управлением - мой блочок как блоха на собаке :)

 

А что более правильно задерживать: параллельную шину с данными или клок? Мне представляется что клок, он же все-таки один а не целая шина. Или я не прав?

 

конечно более оптимально рулить клоком, но нет гарантии что там хватит 32 тапов на то чтобы одним клоком получить устойчивый прием на шине. по-хорошему бы ровнять каждый отдельно взятый пин данных - чтобы уж наверняка все сделать. но тогда алгоритм подстройки будет писец каким сложным...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this