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

Прием данных с АЦП AD9681

В ручном режиме нужно добиться, что у вас работает установка задержки IDELAYE2

путем ее проверки на выходе.

На входе С, Клок на этом примитиве CLK(???-что за сигнал )- должен aclk_div.

Все другие управлениющие сигналы (для idelaye2 iserdese2) производЯтся синхронно с этим сигналом.

Он становится основным клоковым сигналом.

Потом проверить наличие этого сигнала. Какова его частота.

Также нужно следить за установкой аттрибута IDELAY_TYPE (fixed, variable, var_load and etc) IDELAYE2.

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


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

В ручном режиме нужно добиться, что у вас работает установка задержки IDELAYE2

путем ее проверки на выходе.

На входе С, Клок на этом примитиве CLK(???-что за сигнал )- должен aclk_div.

Все другие управлениющие сигналы (для idelaye2 iserdese2) производЯтся синхронно с этим сигналом.

Он становится основным клоковым сигналом.

Потом проверить наличие этого сигнала. Какова его частота.

Также нужно следить за установкой аттрибута IDELAY_TYPE (fixed, variable, var_load and etc) IDELAYE2.

 

С - это основной клоковый сигнал (100 МГц), в данной реализации просто стоит здесь. Заменил на aclk_div. В прошлых реализациях пробовал его. Работает также. Сейчас проверим. А по настройке IDELAY_TYPE variable подойдёт?

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


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

Подходит для INC/DEC режима. Если прямая загрузка кода задержки со входов, то режим VAR_LOAD.

Далее С- это clk у вас 100 МГЦ, надо 200 Мгц поскольку нужен для управления IDELAYCTRL.

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


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

Подходит для INC/DEC режима. Если прямая загрузка кода задержки со входов, то режим VAR_LOAD.

Далее С- это clk у вас 100 МГЦ, надо 200 Мгц поскольку нужен для управления IDELAYCTRL.

 

Поправил, ещё такой вопрос. Я првильнопонимаю, что BUFR должны делить на 8 в моём случае?

 

 

 

 

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

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


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

Не совсем.

BUFR делит на 4. Поскольку ISERDESE2 в данном случае принимает только 8 бит и в DDR режиме.

Если АЦП в DDR режиме также.

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


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

Не совсем.

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;

 

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


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

АЦП при этом какую частоту на выходе DCO выдает? FCO?

 

Пробуем IBUFDS аттрибут IBUF_LOW_PWR => FALSE,

 

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


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

 

AD9681 работает в режиме 011 = DDR two-lane, bytewise. Впрочем, смена режимов ничего не даёт.

 

Пробуем IBUFDS аттрибут IBUF_LOW_PWR => FALSE,

 

Пробую. Результат через 15 минут.

 

Пробую. Результат через 15 минут.

 

не помогло((

 

АЦП при этом какую частоту на выходе DCO выдает? FCO?

 

post-59981-1508766302_thumb.jpg

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

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


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

Атрибут оставьте в этом состоянии.

Проверяем частоту aclk_div. Какая она? Реальная ...на вашем железе.

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


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

Атрибут оставьте в этом состоянии.

Проверяем частоту aclk_div. Какая она? Реальная ...на вашем железе.

 

Атрибут оставил.

А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке.

 

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


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

Вывести его на вывод и

Промерить частоту, допустим осциллографом. Потом пронаблюдать этот сигнал стабилен или нет.

 

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


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

Вывести его на вывод и

Промерить частоту, допустим осциллографом. Потом пронаблюдать этот сигнал стабилен или нет.

 

Ладно это я посмотрю.

А настройки DDR/SDR 8 бит выход правильно заданы?

 

 

Ладно это я посмотрю.

А настройки DDR/SDR 8 бит выход правильно заданы?

 

1. Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0?

2. Сейчас мы делаем так. Принятый сигнал отправляем на IDELAYE2 для формирования. Из задержанного делаем aclk_main и aclk_div. А на вход D ISERDESE2 подаём "чистый" принятый сигнал aclk, после. Правильно ли это? Может, из "чистого" (несдвинутого) делать aclk_main и aclk_div, ими защёлкивать, а сдвинутый подавать на ISERDESE2 ?

 

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


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

Ещё одно наблюдение.

Если вывести режим ацп с 2-кратной скоростью в 21 регистр подать значение 40 (100 = DDR one-lane, wordwise), то значение выходного ISERDES2 помучается FF. На сигналы LD и CNTVALUEIN по-прежнему реакции нет, а вот, если подать '1' на СЕ, то измение есть, только 1 такт, такое ощущение, что реально не задерживается ничего. Если подать на СЕ единицы на постоянную, то видим, что FF часто сменяются FE, но если единицу убрать, то опять всё возвращается на FF.

Ситуация на том же месте в итоге((

 

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


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

Атрибут оставил.

А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке.

 

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

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

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


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

Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0?

Должно быть стабильные АА и 55 и нестабильные переходы.

 

Примитив IDELAYE2 работает в нескольких режимах. Если меняется управление, то надо менять и аттрибут IDELAY_TYPE.

Пока он нормально и стабильно не заработает- результата не будет.

И поэтому устанавливаем IDELAYE2 только в режим загрузки

(Сигналы INC и СЕ занулить) и шаг за шагом, устанавливается код задержки, проверяем его на выходе,

смотрим код что есть на выходе ISERDESE2.

Еще внимательно с сигналами сброса. Их также надо проверять и видеть.

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


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

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

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

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

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

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

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

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

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

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