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

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

Объясните неучу как использовать компонент 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.

);

 

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


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

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

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

 

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


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

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

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

И 200 МГц не забыть подвести к нему.

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


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

И 200 МГц не забыть подвести к нему.

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

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

 

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

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

 

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

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


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

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

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

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

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

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


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

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

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

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

 

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

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


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

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

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

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

 

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


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

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

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

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

 

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

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


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

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

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

 

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


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

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

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

 

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

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

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

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

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

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

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


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

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

Да

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

Да.

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

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

 

 

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


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

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

 

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

 

зы

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

 

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

 

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

 

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

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


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

зы

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

 

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

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

 

Да

 

Да.

 

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

 

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

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


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

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

 

 

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


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

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

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

 

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

зы

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

 

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

 

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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