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

|
Что сделано. 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);
Сообщение отредактировал Art55555 - Oct 24 2017, 14:46
|
|
|
|
|
Oct 26 2017, 07:08
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Наблюдения следующие.
Если ставим 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 -одинаковая скорость.
|
|
|
|
|
Oct 26 2017, 07:34
|
Частый гость
 
Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739

|
Можно пробовать еще ISERDESE2 перевести в режим SDR. Цитата Какая частота дискретизации АЦП? Как сделана трассировка платы Выравнены ли по длине диф. сигналы клоков и данных? Если частота дискретизации относительно низкая может способ не работает. Просто не хватать величины задержки. Нужно указать полные условия.
|
|
|
|
|
Oct 26 2017, 14:35
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Timmy @ Oct 26 2017, 16:52)  А мне интересно, вы результаты 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. Вы про это?
|
|
|
|
|
Oct 27 2017, 12:23
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Timmy @ Oct 26 2017, 20:42)  Да, именно про это. Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда?
Сообщение отредактировал Art55555 - Oct 27 2017, 12:23
|
|
|
|
|
Nov 1 2017, 13:44
|
Частый гость
 
Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981

|
Цитата(Art55555 @ Oct 27 2017, 15:23)  Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда? Это исправил. Но данные по-прежнему некрасивые(
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|