Jump to content

    
Sign in to follow this  
Art55555

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

Recommended Posts

Что сделано.

1. Заменил тип на VAR_LOAD

2. Подал такт clk_200 с PLL, образованный из начальной 100 МГц путём умножения.

3. Занулил СЕ, INC.

 

Чего добились:

1. Наконец-то начал реагировать выход ISERDESE2.

 

Чего не добились:

"ЧИстых" 55 и АА, которые были раньше.

 

НАблюдения:

После старта платы перевожу в режим 21 регистр значение 30.

После этого видим "грязный" выход - 55. Теперь чистым он никогда не бывает. Дальше я играюсь сигналом CNTVALUEIN=> dco_delay (подаю с VIO) от 00 до 1F. От 55 мы потихоньку переходим к FF-F7 и уже к значению 1D получаем стабильный FF на выходе. Причём, если я прибаляю 1, т.е. на 1E - выход портится (FF-F7 вперемешку), прибавляю ещё 1 (1F) и опять вижу стабильный FF на выходе.

Т.е явного окна (плохо - умеренно- хорошо-умеренно-плохо) я ни вижу.

Также бывает, что при определённых значениях задержки вообще перестаёт работать Chipscope, который тактируется по aclk_div.

И ещё явный косяк с частотами, мне кажется. Сейчас проверяю зависимость между aclk_div и clk_200.

Текущий код ниже.

 

 

 

 

 

 

 

 

 

x_dco0 : IBUFDS

generic map (

DIFF_TERM => TRUE, -- Differential Termination

IBUF_LOW_PWR => FALSE, -- 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 => clk_200, --200 MHz

CE => '0',

INC => '0',

LD => ld_dco_delay, --идет с VIO

CNTVALUEIN => dco_delay, --идет с VIO

CNTVALUEOUT => open,

 

REGRST => not AdcIdlyCtrlRdy,--'0',--

CINVCTRL => '0',

LDPIPEEN => '0'

);

 

bufio_adc: bufg port map ( i => d_aclk, o => aclk_main ); --FB

bufio_adc200: bufg port map ( i => clk_200i, o => clk_200 ); --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 when rising_edge(aclk_div);

Edited by Art55555

Share this post


Link to post
Share on other sites

Для Chipscope может быть пробовать aclk_div пропустить через bufg.

 

Какая частота дискретизации АЦП?

Как сделана трассировка платы Выравнены ли по длине диф. сигналы клоков и данных?

 

Можно пробовать еще ISERDESE2 перевести в режим SDR. Тогда на выходе будем иметь "0..0" или "1..1"

взависимости от кода задержки.

В этом xapp'e производится подстройка к переднему фронту клока,

что означает установка клока в центр (середину) принимаемых данных.

Share this post


Link to post
Share on other sites

Наблюдения следующие.

 

Если ставим BUFR divide=4, то работает корректно только в режиме 21-40

0x40 16-bit 1× DDR one-lane, wordwise 8 × fS Figure 7 (р.38 из datasheet на АЦП). Калибруется, выхожу на стабильные значения FF или АА.

 

если же в стандартном режиме 21-30 (0x30 16-bit 1× DDR two-lane, bytewise 4 × fS Figure 3 (default setting)) , то никаких 55 мы не видим. То 00, то 80, то каша.

Что-то явно с тактированием или пониманием тактирования.

 

Да, я сделал 2 счётчика. Один через PLL подал 100 на вход, получил 200 на выоде, счётчик по нему.

Второй по aclk_div.

 

Так вот, счётчик по aclk_div (при BUFR divide=4 идёт в 2 раза быстрее цлк-шного)...

В режиме 21-40 -одинаковая скорость.

 

Share this post


Link to post
Share on other sites

 

Можно пробовать еще ISERDESE2 перевести в режим SDR.

 

 

Какая частота дискретизации АЦП?

Как сделана трассировка платы Выравнены ли по длине диф. сигналы клоков и данных?

 

Если частота дискретизации относительно низкая может способ не работает. Просто не хватать величины задержки.

Нужно указать полные условия.

 

 

Share this post


Link to post
Share on other sites

А мне интересно, вы результаты DRC в Вивадо смотрите? Все ваши варианты кода должны были вызывать предупреждения DRC, в последнем варианте тоже есть серьёзная ошибка.

Share this post


Link to post
Share on other sites
А мне интересно, вы результаты DRC в Вивадо смотрите? Все ваши варианты кода должны были вызывать предупреждения DRC, в последнем варианте тоже есть серьёзная ошибка.

 

Unsupported clocking topology used for ISERDESE2

<xISERDES111>. This can result in corrupted data. The CLK / CLKDIV pins

should be driven by the same source through the same buffer type or by a

BUFIO / BUFR combination in order to have a proper phase relationship. Please

refer to the Select I/O User Guide for supported clocking topologies of the

chosen INTERFACE_TYPE mode.

 

 

Вы про это?

 

Share this post


Link to post
Share on other sites
Да, именно про это.

 

Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда?

 

 

Edited by Art55555

Share this post


Link to post
Share on other sites
Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда?

 

Это исправил. Но данные по-прежнему некрасивые(

Share this post


Link to post
Share on other sites

Нужно вернуться к проверке частоты 200Мнц. Подозрения, что она правильно формируется на PLL.

Понять и проверить частоты (клоки) АЦП и др входные, поскольку их надо будет точно описать в констрейн файле.

Все должно стыковаться.

Share this post


Link to post
Share on other sites

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

Всё работает, но есть одна проблема. 

При включении на "холодную" (плата долго не работала) калибруется ОЧЕНЬ долго (минуту и более), но всегда в итоге всё хорошо, сигнал выдаётся такой, какой и должен быть. 

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

Кто-нибудь встречал такой эффект?

Есть идеи в чём может быть проблема?

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