Anton1990 0 30 октября, 2015 Опубликовано 30 октября, 2015 · Жалоба Всем добрый день. Объясните неучу как использовать компонент 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. ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 31 октября, 2015 Опубликовано 31 октября, 2015 · Жалоба А компонент IDELAYCTRL установлен? Без него IODELAYE1 пользоваться нельзя. Ну и текст ошибки хорошо бы привести. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 31 октября, 2015 Опубликовано 31 октября, 2015 · Жалоба А компонент IDELAYCTRL установлен? Без него IODELAYE1 пользоваться нельзя. Ну и текст ошибки хорошо бы привести. И 200 МГц не забыть подвести к нему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 · Жалоба И 200 МГц не забыть подвести к нему. Что значит установлен? В ПЛИС он есть - использую виртекс6. Ошибку сообщу, но в понедельник. А компонент IDELAYCTRL установлен? Без него IODELAYE1 пользоваться нельзя. Ну и текст ошибки хорошо бы привести. Что такое IDELAYCTRL ? И что значит установлен? Давайте подробней плиз ? Может скинете простой пример? Свои пожелания об задержке я высказал ранее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 (изменено) · Жалоба Если интересно, что зачем и почему, почитайте UG361. Если нет, установите в топовом модуле один компонент: IDELAYCTRL_inst : IDELAYCTRL port map ( RDY => idelay_valid, -- выход сигнал готовности REFCLK => clk_200mhz, -- вход клок 200 МГц RST =>rst -- вход сброс ); Изменено 1 ноября, 2015 пользователем Artemius_tv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 · Жалоба Если интересно, что зачем и почему, почитайте UG361. Если нет, установите в топовом модуле один компонент: IDELAYCTRL_inst : IDELAYCTRL port map ( RDY => idelay_valid, -- выход сигнал готовности REFCLK => clk_200mhz, -- вход клок 200 МГц RST =>rst -- вход сброс ); Я этот документ читал и читаю, но если все понял, то не задавал бы таких вопросов. Может расскажите вкратце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 · Жалоба Разбираться с IDELAYCTRL особого смысла нет, у него нет настроек, он просто должен быть, если используются IODELAYE1 или подобные. На каждый регион пинов с управляемой задержкой приходится по одному IDELAYCTRL, котрый занимается калибровкой задержек. Для этого ему нужен тактовый сигнал 200МГц. Можно самому установить компоненты IDELAYCTRL для каждого региона, где используется управляемая задержка, прописав вручную LOC, а можно только один IDELAYCTRL без указания LOC, тогда ISE автоматически задействует нужные. Если его вообще не установить, то проект с использованием IODELAYE1 не соберется, ISE выдаст ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 · Жалоба Разбираться с IDELAYCTRL особого смысла нет, у него нет настроек, он просто должен быть, если используются IODELAYE1 или подобные. На каждый регион пинов с управляемой задержкой приходится по одному IDELAYCTRL, котрый занимается калибровкой задержек. Для этого ему нужен тактовый сигнал 200МГц. Можно самому установить компоненты IDELAYCTRL для каждого региона, где используется управляемая задержка, прописав вручную LOC, а можно только один IDELAYCTRL без указания LOC, тогда ISE автоматически задействует нужные. Если его вообще не установить, то проект с использованием IODELAYE1 не соберется, ISE выдаст ошибку. Вот достойный ответ. Спасибо. Завтра пойду снова экспериментировать. А что выход idelayctrl готовности никуда подключать не нужно если я этот выход не использую? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 1 ноября, 2015 Опубликовано 1 ноября, 2015 · Жалоба Если не используете, то и не подключайте. Я у себя не подключаю. Кстати, в UG361 это явно написано: "implementation tools allow RDY to be unconnected/ignored". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 2 ноября, 2015 Опубликовано 2 ноября, 2015 · Жалоба Если не используете, то и не подключайте. Я у себя не подключаю. Кстати, в UG361 это явно написано: "implementation tools allow RDY to be unconnected/ignored". Вроде бы у меня все получилось. Последнее уточнение: вход clkin использую если хочу задержать тактовый сигнал со спец буферов ? Это правильно? Если я устанавливаю фиксированную задержку, то мне вход "с" ненужен. Это правильно? Если задержка динамические изменяется, то на вход "с" подаю такт. Любой частоты? На вход CNTVALUEIN(4 :0) значение задержки. Я результат установленный задержек смотрел в FPGA'editor. Там они устанавливаются, а вот в отчете pinout пишет iob Delay = none. Почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 2 ноября, 2015 Опубликовано 2 ноября, 2015 · Жалоба вход clkin использую если хочу задержать тактовый сигнал со спец буферов ? Это правильно? Да Если я устанавливаю фиксированную задержку, то мне вход "с" ненужен. Это правильно? Да. Если задержка динамические изменяется, то на вход "с" подаю такт. Любой частоты? Что-то я тоже не нашел ничего в документации. Только совет подавать клок, от которого затактирован задерживаемый сигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 3 ноября, 2015 Опубликовано 3 ноября, 2015 · Жалоба Вот достойный ответ. Спасибо. Завтра пойду снова экспериментировать. А что выход idelayctrl готовности никуда подключать не нужно если я этот выход не использую? выход готовности можно использовать в проекте. если готовности нет - не стартовать какие то процессы. но в основном он висит в воздухе и все :) зы когда то делал контроллер, по включению питания автоматом выравнивающий данные от ацп. Правда у меня уже был свой контроллер SPI... В общем по включению питания из РОМки вычитываются команды, настраивающие АЦП на тестовый режим, через SPI контроллер вдавливаются в АЦП, который начаинает выдавать на шину данных тестовую последовательность. Эти данные приходят на ИОДЕЛЕИ, собираются через ИСЕРДЕСЫ и сравниваются с заданной эталонной константой. если не соответствует - наращиваем ТАП по данным и опять сравниваем. Когда добегаем до ТАП по данным =32, наращиваем ТАП по клоку, обнуляем ТАП по данным и опять же сравниваем. И так прогоняем ТАПы по данным-клоку до тех пор, пока не будет устойчивое совпадение данных с эталонной константой, либо пока ТАПы не закончатся. В этом случае генерим эррор - подстройка не может быть завершена. Устойчивое совпадение - равенство принимаемых данных и эталонной константы в течение 8-12 ТАПов. Это обеспечивает защиту от "дрожания" фронтов. На моей рабочей частоте 8 ТАПов для запаса было достаточно. Механизм следующий - как только есть первое совпадение константы с данными, мы запоминаем текущий ТАП, запускаем счетчик "валидных ТАПов" и параллельно с этим вычисляем значение "первый валидный ТАП"+4. Продолжаем наращивать ТАПы и сравнивать. Как только счетчик валидных равен 8 - генерим сигнал "подстройка завершена" и записываем в ИОДЕЛЕИ по данным (синхра и так останется на текущем значении). Если цикл подстройки завершен - вычитываем из РОМки команды, настраивающие АЦП на штатный режим и задавливаем их через контроллер SPI. Модуль параметризируемый, с возможностью подключение нескольких АЦП. В этом случае они настраиваются последовательно, один за другим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 3 ноября, 2015 Опубликовано 3 ноября, 2015 · Жалоба зы когда то делал контроллер, по включению питания автоматом выравнивающий данные от ацп. Правда у меня уже был свой контроллер SPI... В общем по включению питания из РОМки вычитываются команды, настраивающие АЦП на тестовый режим, через SPI контроллер вдавливаются в АЦП, который начаинает выдавать на шину данных тестовую последовательность. Эти данные приходят на ИОДЕЛЕИ, собираются через ИСЕРДЕСЫ и сравниваются с заданной эталонной константой. если не соответствует - наращиваем ТАП по данным и опять сравниваем. Когда добегаем до ТАП по данным =32, наращиваем ТАП по клоку, обнуляем ТАП по данным и опять же сравниваем. И так прогоняем ТАПы по данным-клоку до тех пор, пока не будет устойчивое совпадение данных с эталонной константой, либо пока ТАПы не закончатся. В этом случае генерим эррор - подстройка не может быть завершена. Офигеть - тут отдельная задача по настройке задержек. А ведь с оцифрованными данными нужно еще что-то делать, ну там демодулировать, отфильтровать и т.д. А до этого можно и не дойти - зарыться в настройке АЦП. Я в таких случаях до сих пор колдую с простой инверсией клока. Иногда бывает очень геморройно. Да Да. Что-то я тоже не нашел ничего в документации. Только совет подавать клок, от которого затактирован задерживаемый сигнал. А что более правильно задерживать: параллельную шину с данными или клок? Мне представляется что клок, он же все-таки один а не целая шина. Или я не прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 4 ноября, 2015 Опубликовано 4 ноября, 2015 · Жалоба Если setup не сходится, то клок, если hold, то данные. У каждого пина свой элемент задержки, который только с ним можно использовать, значит экономить их смысла нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 5 ноября, 2015 Опубликовано 5 ноября, 2015 · Жалоба Офигеть - тут отдельная задача по настройке задержек. А ведь с оцифрованными данными нужно еще что-то делать, ну там демодулировать, отфильтровать и т.д. А до этого можно и не дойти - зарыться в настройке АЦП. Я в таких случаях до сих пор колдую с простой инверсией клока. Иногда бывает очень геморройно. поставили задачу автоматизировать процесс )). чтобы потом вокруг каждой отдельно взятой платы не скакать с осцилом вручную подбирая задержки (темболее если данные идут от 3 АЦП, как у нас). в теории вроде получилось. на стенде тоже. что будет в серии - пока неизвестно зы а по сравнению с вычислителем (обрабатывающим оцифрованые данные) и его управлением - мой блочок как блоха на собаке :) А что более правильно задерживать: параллельную шину с данными или клок? Мне представляется что клок, он же все-таки один а не целая шина. Или я не прав? конечно более оптимально рулить клоком, но нет гарантии что там хватит 32 тапов на то чтобы одним клоком получить устойчивый прием на шине. по-хорошему бы ровнять каждый отдельно взятый пин данных - чтобы уж наверняка все сделать. но тогда алгоритм подстройки будет писец каким сложным... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться