|
|
  |
Прием данных с АЦП AD9681 |
|
|
|
Oct 20 2017, 07:14
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Алга @ Oct 20 2017, 09:38)  В ручном режиме нужно добиться, что у вас работает установка задержки IDELAYE2 путем ее проверки на выходе. На входе С, Клок на этом примитиве CLK(???-что за сигнал )- должен aclk_div. Все другие управлениющие сигналы (для idelaye2 iserdese2) производЯтся синхронно с этим сигналом. Он становится основным клоковым сигналом. Потом проверить наличие этого сигнала. Какова его частота. Также нужно следить за установкой аттрибута IDELAY_TYPE (fixed, variable, var_load and etc) IDELAYE2. С - это основной клоковый сигнал (100 МГц), в данной реализации просто стоит здесь. Заменил на aclk_div. В прошлых реализациях пробовал его. Работает также. Сейчас проверим. А по настройке IDELAY_TYPE variable подойдёт?
|
|
|
|
|
Oct 23 2017, 09:19
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Алга @ Oct 20 2017, 11:29)  Подходит для INC/DEC режима. Если прямая загрузка кода задержки со входов, то режим VAR_LOAD. Далее С- это clk у вас 100 МГЦ, надо 200 Мгц поскольку нужен для управления IDELAYCTRL. Поправил, ещё такой вопрос. Я првильнопонимаю, что BUFR должны делить на 8 в моём случае?
Сообщение отредактировал Art55555 - Oct 23 2017, 09:31
|
|
|
|
|
Oct 23 2017, 12:22
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Алга @ Oct 23 2017, 14:30)  Не совсем. BUFR делит на 4. Поскольку ISERDESE2 в данном случае принимает только 8 бит и в DDR режиме. Если АЦП в DDR режиме также. В итоге получается вот что. Результат - всё тот же АА на выходе.. какое бы значение я бы не задавал. Сигнал dco_calib_out_t должен отправляться на вход калибровочной машины. И там всегда АА. x_dco0 : IBUFDS generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards IOSTANDARD => "LVDS_25") port map ( O => aclk, -- Clock buffer output I => dco1p, -- Diff_p clock buffer input (connect directly to top-level port) IB => dco1n -- Diff_n clock buffer input (connect directly to top-level port) ); xIDELAY: IDELAYE2 generic map ( SIGNAL_PATTERN => "CLOCK", REFCLK_FREQUENCY => 200.0, HIGH_PERFORMANCE_MODE => "TRUE", --FINEDELAY => "BYPASS", DELAY_SRC => "IDATAIN", CINVCTRL_SEL => "FALSE", IDELAY_TYPE => "VAR_LOAD",--"VARIABLE", IDELAY_VALUE => 0, PIPE_SEL => "FALSE" ) port map ( DATAIN => '0',--, IDATAIN => aclk, DATAOUT => d_aclk, C => aclk_div, CE => set_idelay_dco, INC => '1', LD => ld_dco_delay, CNTVALUEIN => dco_delay, CNTVALUEOUT => open, REGRST => not AdcIdlyCtrlRdy, CINVCTRL => '0', LDPIPEEN => '0' ); bufio_adc: buf port map ( i => d_aclk, o => aclk_main ); --FB BUFR_ins1 : BUFR generic map ( BUFR_DIVIDE => "4", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8" SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES" ) port map ( O => aclk_div, -- 1-bit output: Clock output port CE => '1', -- 1-bit input: Active high, clock enable (Divided modes only) CLR => '0', -- 1-bit input: Active high, asynchronous clear (Divided modes only) I => d_aclk -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect ); x_IDELAYCTRL : IDELAYCTRL port map (REFCLK => clk, RST => reset, RDY => AdcIdlyCtrlRdy); xISERDES111: ISERDESE2 generic map ( SERDES_MODE => "MASTER", INTERFACE_TYPE => "NETWORKING", IOBDELAY => "Both", DATA_RATE => "DDR", DATA_WIDTH => 8, DYN_CLKDIV_INV_EN => "FALSE", DYN_CLK_INV_EN => "FALSE", NUM_CE => 1, OFB_USED => "FALSE", INIT_Q1 => '0', INIT_Q2 => '0', INIT_Q3 => '0', INIT_Q4 => '0', SRVAL_Q1 => '0', SRVAL_Q2 => '0', SRVAL_Q3 => '0', SRVAL_Q4 => '0' ) port map ( -- Registered outputs Q1 => dco_calib_out(0), Q2 => dco_calib_out(1), Q3 => dco_calib_out(2), Q4 => dco_calib_out(3), Q5 => dco_calib_out(4), Q6 => dco_calib_out(5), Q7 => dco_calib_out(6), Q8 => dco_calib_out(7), -- Unregistered output O => open,--IntBitClk, --ser_dat(ii), -- Carry out for bit expansion SHIFTOUT1 => open, SHIFTOUT2 => open, -- Serial data in from PAD or IODELAY D => aclk,--'0', DDLY => '0', --d_aclk,--d_aclk, -- Carry in for bit expansion SHIFTIN1 => '0', SHIFTIN2 => '0', -- Clock signals CLK => aclk_main,-- high-speed clock CLKB => not aclk_main, -- inverted clock CLKDIV => aclk_div,-- divided clock -- Clock enable CE1 => '1', CE2 => '0', -- Reset RST => reset, --rst(i), --- NOT USED BITSLIP => '0', -- bitslip operation------------------- OCLK => '0', -- high-speed clock OCLKB => '0', -- inverted clock DYNCLKSEL => '0', DYNCLKDIVSEL => '0', CLKDIVP => '0', OFB => '0' -- feedback path ); dco_calib_out_t<=dco_calib_out;
|
|
|
|
|
Oct 23 2017, 13:45
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
AD9681 работает в режиме 011 = DDR two-lane, bytewise. Впрочем, смена режимов ничего не даёт. Пробуем IBUFDS аттрибут IBUF_LOW_PWR => FALSE,[/quote] Пробую. Результат через 15 минут. Цитата(Art55555 @ Oct 23 2017, 17:33)  Пробую. Результат через 15 минут. не помогло(( [quote name='Алга' date='Oct 23 2017, 16:36' post='1525596'] АЦП при этом какую частоту на выходе DCO выдает? FCO?
Сообщение отредактировал Art55555 - Oct 23 2017, 13:45
|
|
|
|
|
Oct 23 2017, 13:55
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Алга @ Oct 23 2017, 17:46)  Атрибут оставьте в этом состоянии. Проверяем частоту aclk_div. Какая она? Реальная ...на вашем железе. Атрибут оставил. А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке.
|
|
|
|
|
Oct 23 2017, 14:45
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Алга @ Oct 23 2017, 18:02)  Вывести его на вывод и Промерить частоту, допустим осциллографом. Потом пронаблюдать этот сигнал стабилен или нет. Ладно это я посмотрю. А настройки DDR/SDR 8 бит выход правильно заданы? Цитата(Art55555 @ Oct 23 2017, 18:19)  Ладно это я посмотрю. А настройки DDR/SDR 8 бит выход правильно заданы? 1. Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0? 2. Сейчас мы делаем так. Принятый сигнал отправляем на IDELAYE2 для формирования. Из задержанного делаем aclk_main и aclk_div. А на вход D ISERDESE2 подаём "чистый" принятый сигнал aclk, после. Правильно ли это? Может, из "чистого" (несдвинутого) делать aclk_main и aclk_div, ими защёлкивать, а сдвинутый подавать на ISERDESE2 ?
|
|
|
|
|
Oct 23 2017, 15:52
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Ещё одно наблюдение. Если вывести режим ацп с 2-кратной скоростью в 21 регистр подать значение 40 (100 = DDR one-lane, wordwise), то значение выходного ISERDES2 помучается FF. На сигналы LD и CNTVALUEIN по-прежнему реакции нет, а вот, если подать '1' на СЕ, то измение есть, только 1 такт, такое ощущение, что реально не задерживается ничего. Если подать на СЕ единицы на постоянную, то видим, что FF часто сменяются FE, но если единицу убрать, то опять всё возвращается на FF. Ситуация на том же месте в итоге((
|
|
|
|
|
Oct 23 2017, 16:21
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(Art55555 @ Oct 23 2017, 16:55)  Атрибут оставил. А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке. Способ ненадежный - сделать делитель на этой частоте, формирующий моргание диодиком раз в секунду. Оцениваем глазами. При относительно большой погрешности все сразу станет видно. Способ надежный, но чуть более трудоемкий - параллельно запускаем пару счетчиков. Один на частоте, которую заведомо знаем и уверены в ней, второй - на частоте, которая нас интересует. Зная значения счетчиков и одной из частот, легко находим вторую.
|
|
|
|
|
Oct 23 2017, 16:29
|
Частый гость
 
Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739

|
Цитата Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0? Должно быть стабильные АА и 55 и нестабильные переходы. Примитив IDELAYE2 работает в нескольких режимах. Если меняется управление, то надо менять и аттрибут IDELAY_TYPE. Пока он нормально и стабильно не заработает- результата не будет. И поэтому устанавливаем IDELAYE2 только в режим загрузки (Сигналы INC и СЕ занулить) и шаг за шагом, устанавливается код задержки, проверяем его на выходе, смотрим код что есть на выходе ISERDESE2. Еще внимательно с сигналами сброса. Их также надо проверять и видеть.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|