Jump to content

    

Art55555

Участник*
  • Content Count

    266
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Art55555

  • Rank
    Местный

Recent Profile Visitors

1917 profile views
  1. Да, сделал так. Данные реагируют, гуляют, как на тестовой паттерне, так и на реальном сигнале. А вот DCO стоит намерво(( "А" и всё.
  2. Система LTC2195 и Артикс. Раньше работало всё на IDDR-ах и смещённой фазе PLL. Время от времени возникали проблемы с задержкой, подбиралось руками и всё работало дальше. Назрел момент автоматической настройки всех задержек для нормальной работы системы. Идём по классической схеме - Перевод в необходимый режим выдачи данных. АЦП в режим Test Pattern, подстройка бит, проверка стабильности выдаваемых значений. Редактирование форматов и т.д. Переход в обычный режим. В результате сигнал "плохой", выбросы, явное несоответствие ожиданиям. Решил проверить связку IDELAYЕ2-ISERDES по линии DCO. На выходе вижу постоянную картину - А(1010). Подача каманды на IDELAYЕ2 даёт результат на 1 такт(( потом возвращает значение А (это после десереализации). Понимаю, что сдвиг IDELAYЕ2 должен работать по схеме A-шум-5-шум-А... Этого не происходит. Кто имел подобный опыт? ---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 11:13:56 07/15/2020 -- Design Name: -- Module Name: ltc_2195_v2 - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Library UNISIM; use UNISIM.vcomponents.all; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity ltc_2195_v2 is port ( out1a_p : in std_logic; -- такт с АЦП1 + out1a_n : in std_logic; -- такт с АЦП1 - out1b_p : in std_logic; -- такт с АЦП2 + out1b_n : in std_logic; -- такт с АЦП2 - out1c_p : in std_logic; -- такт с АЦП1 + out1c_n : in std_logic; -- такт с АЦП1 - out1d_p : in std_logic; -- такт с АЦП2 + out1d_n : in std_logic; -- такт с АЦП2 - out2a_p : in std_logic; -- такт с АЦП1 + out2a_n : in std_logic; -- такт с АЦП1 - out2b_p : in std_logic; -- такт с АЦП2 + out2b_n : in std_logic; -- такт с АЦП2 - out2c_p : in std_logic; -- такт с АЦП1 + out2c_n : in std_logic; -- такт с АЦП1 - out2d_p : in std_logic; -- такт с АЦП2 + out2d_n : in std_logic; -- такт с АЦП2 - FR_p : in std_logic; -- такт с АЦП2 + FR_n : in std_logic; -- такт с АЦП2 - DCO_p : in std_logic; -- такт с АЦП2 + DCO_n : in std_logic; -- такт с АЦП2 - reset: in std_logic; clk: in std_logic; clk_in_2x: in std_logic; clk125: out std_logic; data_all_obr1 : out std_logic_vector(15 downto 0); data_all_obr2 : out std_logic_vector(15 downto 0); aclk_div_out : out std_logic; aclk_div2_out : out std_logic; calib_in_dco: in std_logic; calib_in_data: in std_logic; dco_pattern_reverse : in std_logic; calibration_detection: out std_logic; calib_data_done : out std_logic; calib_dco_done : out std_logic; test_in : in std_logic_vector(15 downto 0); test0 : out std_logic_vector(15 downto 0); test1 : out std_logic_vector(15 downto 0); test2 : out std_logic_vector(15 downto 0); test3 : out std_logic_vector(15 downto 0); test4 : out std_logic_vector(15 downto 0); test5 : out std_logic_vector(15 downto 0) ); end ltc_2195_v2; architecture Behavioral of ltc_2195_v2 is component icon_ddr PORT ( CONTROL0 : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0); CONTROL1 : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0)); end component; component vio_ddr2 PORT ( CONTROL : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0); -- CLK : IN STD_LOGIC; ASYNC_OUT : OUT STD_LOGIC_VECTOR(24 DOWNTO 0)); -- SYNC_OUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); end component; component ila_ddr PORT ( CONTROL : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0); CLK : IN STD_LOGIC; TRIG0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); TRIG1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); TRIG2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); TRIG3 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); TRIG4 : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ); end component; type bit1 is array (0 to 7) of std_logic; type bit8 is array (0 to 7) of std_logic_vector(7 downto 0); type bit16 is array (0 to 7) of std_logic_vector(15 downto 0); type bit18 is array (0 to 7) of std_logic_vector(17 downto 0); signal TRIG0 : STD_LOGIC_VECTOR(31 DOWNTO 0); signal TRIG1 : STD_LOGIC_VECTOR(31 DOWNTO 0); signal TRIG2 : STD_LOGIC_VECTOR(31 DOWNTO 0); signal TRIG3 : STD_LOGIC_VECTOR(7 DOWNTO 0); signal TRIG4 : STD_LOGIC_VECTOR(7 DOWNTO 0); signal control0,control1 : STD_LOGIC_VECTOR(35 DOWNTO 0); signal contro20,contro21 : STD_LOGIC_VECTOR(35 DOWNTO 0); signal ASYNC_OUT : STD_LOGIC_VECTOR(24 DOWNTO 0); signal start_vio : std_logic:='0'; --signal vio: std_logic_vector(7 downto 0):=x"00"; signal indicator: std_logic_vector(7 downto 0):=x"00"; signal aclk,d_aclk: std_logic; signal adcidlyctrlrdy: std_logic; signal intclkctrldlyrst : std_logic:='0'; signal aclk_main : std_logic:='0'; signal set_idelay_dco1 : std_logic:='0'; signal IntBitClkRst : std_logic:='0'; ------------- signal bitslip_data,bitslip_data2 : bit1; signal set_idelay_data : bit1; constant Low : std_logic := '0'; signal LowNibble : std_logic_vector(4 downto 0) := "00000"; constant High : std_logic := '1'; signal aclk_div :std_logic:='0'; signal aclk_div2 :std_logic:='0'; signal dco_calib_out,dco_calib_out_t : std_logic_vector(7 downto 0) := (others => '0'); signal dco_calib_out2,dco_calib_out_t2 : std_logic_vector(7 downto 0) := (others => '0'); signal bitslip_dco1 :std_logic:='0'; signal d_adc,d_adc2 : bit1; signal d_adc_d,d_adc_d2 : bit1; signal dat_x,dat_x2,fco_x : bit8; signal dat_x_finish,dat_x_finish2 : bit8; signal pattern,pattern2 : bit8; signal bitslip_data_all : std_logic:='0'; type state_type5 is (S0,S1,S2,S3,S4); signal STATE: state_type5; signal DCO :std_logic:='0'; signal DCO_fb :std_logic:='0'; signal clk2x :std_logic:='0'; signal cnt : std_logic_vector(7 downto 0) := (others => '0'); signal cnt_16 : std_logic_vector(17 downto 0) := (others => '0'); begin aclk_div_out<=aclk_div; IBUFGDS_inst2 : 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 => "SSTL18_II") port map ( O => aclk, -- Clock buffer output I => DCO_p, -- Diff_p clock buffer input (connect directly to top-level port) IB => DCO_N -- 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", -- DELAY_SRC => "both", CINVCTRL_SEL => "FALSE", IDELAY_TYPE => "VARIABLE",--"VAR_LOAD_PIPE",--"VARIABLE", IDELAY_VALUE => 16, PIPE_SEL => "FALSE" ) port map ( DATAIN => '0',--, IDATAIN => aclk, DATAOUT => d_aclk, C => aclk_div, --clk,--aclk_div, --200 MHz CE => set_idelay_dco1, --'1',-- INC => '1', LD => IntClkCtrlDlyRst, -- '0',--IntClkCtrlDlyRst, --идет с VIO CNTVALUEIN => LowNibble, --идет с VIO CNTVALUEOUT => open, REGRST => IntClkCtrlDlyRst,--'0',--'0',-- CINVCTRL => '0', LDPIPEEN => '0' ); bufio_adc: BUFIO port map ( i => d_aclk, o => aclk_main ); --FB BUFR_ins1 : BUFR generic map ( BUFR_DIVIDE => "2", -- 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 => reset, -- 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_in_2x, RST => reset, RDY => AdcIdlyCtrlRdy); xISERDES1113: ISERDESE2 generic map ( SERDES_MODE => "MASTER", INTERFACE_TYPE => "NETWORKING", IOBDELAY => "Both",--"IBUF",-- DATA_RATE => "DDR", DATA_WIDTH => 4, 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 => open,--dco_calib_out(4), Q6 => open,--dco_calib_out(5), Q7 => open,--dco_calib_out(6), Q8 => open,--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',-- aclk,-- DDLY =>'0', --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 => IntBitClkRst, --rst(i), Reset,-- --- NOT USED BITSLIP => bitslip_dco1,--'1', --'0', -- bitslip operation------------------- OCLK => '0', -- high-speed clock OCLKB => '0', -- inverted clock DYNCLKSEL => '0', DYNCLKDIVSEL => '0', CLKDIVP => '0', OFB => '0' -- feedback path ); process (aclk_div) begin if(aclk_div'event and aclk_div='1')then dco_calib_out_t <= dco_calib_out; trig0(7 downto 0)<= dat_x_finish(0); trig1(7 downto 0)<= dat_x_finish(1); trig2(7 downto 0)<= dat_x_finish(2); trig3(7 downto 0)<= dat_x_finish(3); -- trig4(7 downto 0)<= dat_x_finish(0);--dat_x_finish(4); trig4( 0)<= set_idelay_dco1; end if; end process; process (aclk_div) begin if (rising_edge(aclk_div)) then cnt_16<=cnt_16+1; case (STATE) is when S0 => if dco_calib_out_t=x"0A" then STATE<=S1;set_idelay_dco1<='1'; cnt_16<= (others => '0'); end if;--cnt<=cnt+1; when S1 => -- STATE<=S2; set_idelay_dco1<='0'; when S2 => if cnt_16(17)='1' then STATE<=S3; end if;-- when S3 => if dco_calib_out_t=x"05" then STATE<=S4; else STATE<=S0; end if; when S4 => when others =>null; end case; end if; end process; -- trig0(7 downto 0)<=dco_calib_out_t; process (aclk_div) begin if(aclk_div'event and aclk_div='1')then -- test0 <= dat_x_finish(0)(3 downto 0)&dat_x_finish(1)(3 downto 0)&dat_x_finish(2)(3 downto 0)&dat_x_finish(3)(3 downto 0); -- test1 (3 downto 0)<= dat_x_finish(4)(3 downto 0); -- test2 (3 downto 0)<= dco_calib_out(3 downto 0); -- test3 (3 downto 0)<= ; -- test4 (3 downto 0)<= test0(7 downto 0)<= dat_x_finish(0); test1(7 downto 0)<= dat_x_finish(1); test2(7 downto 0)<= dat_x_finish(2); -- test3(7 downto 0)<= dat_x_finish(3);--dat_x_finish(3); test3( 0)<= set_idelay_dco1;--dat_x_finish(3); -- test4(7 downto 0)<= dat_x_finish(4);--dat_x_finish(3); test4(7 downto 0)<= dco_calib_out_t;--dat_x_finish(4); -- test4(7 downto 0)<= cnt; end if; end process; -------------------------------------------------------- ibuf_2a: ibufds generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards ) port map (i => out2a_p, iB => out2a_n, o => d_adc(0)); ibuf_2b: ibufds generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards ) port map (i => out2b_p, iB => out2b_n, o => d_adc(1)); ibuf_2c: ibufds generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards ) port map (i => out2c_p, iB => out2c_n, o => d_adc(2)); ibuf_2d: ibufds generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards ) port map (i => out2d_p, iB => out2d_n, o => d_adc(3)); ibuf_FR: ibufds generic map ( DIFF_TERM => TRUE, -- Differential Termination IBUF_LOW_PWR => TRUE -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards ) port map (i => FR_p, iB => FR_n, o => d_adc(4)); gADC_IN2113: for i in 0 to 4 generate -- xIDELAY: IDELAYE2 -- generic map ( -- SIGNAL_PATTERN => "DATA", -- REFCLK_FREQUENCY => 200.0, -- HIGH_PERFORMANCE_MODE => "TRUE", -- --FINEDELAY => "BYPASS", -- DELAY_SRC => "IDATAIN", -- CINVCTRL_SEL => "FALSE", -- IDELAY_TYPE => "VARIABLE",--"VAR_LOAD_PIPE",--"VARIABLE", -- IDELAY_VALUE => 16, -- PIPE_SEL => "FALSE" -- ) -- port map ( -- DATAIN => '0',--, -- IDATAIN => d_adc(i), -- DATAOUT => d_adc_d(i), -- C => clk,--aclk_div, --200 MHz -- CE => set_idelay_data(i), -- INC => '1', -- LD => '1',--LD, --идет с VIO -- CNTVALUEIN => "00011",--LowNibble, --идет с VIO -- CNTVALUEOUT => open, -- REGRST => IntClkCtrlDlyRst,--'0',--'0',-- -- CINVCTRL => '0', -- LDPIPEEN => '0' -- ); xISERDES1112: ISERDESE2 generic map ( SERDES_MODE => "MASTER", INTERFACE_TYPE => "NETWORKING", IOBDELAY => "IBUF", ---"NONE", --"IBUF", "Both",--"IFD", DATA_RATE => "DDR", DATA_WIDTH => 4, 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 => dat_x(i)(0), Q2 => dat_x(i)(1), Q3 => dat_x(i)(2), Q4 => dat_x(i)(3), Q5 => open,--dat_x(i)(4), Q6 => open,--dat_x(i)(5), Q7 => open,--dat_x(i)(6), Q8 => open,--dat_x(i)(7), -- Unregistered output O => open, --ser_dat(ii), -- Carry out for bit expansion SHIFTOUT1 => open, SHIFTOUT2 => open, -- Serial data in from PAD or IODELAY D => '0',--d_adc_d(i),--'0', DDLY => d_adc(i),-- '0',-- d_adc_d(i),--'0',--d_adc_d(i), -- 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 => '1', -- Reset RST => Reset,--IntBitClkRst, --rst(i), --- NOT USED BITSLIP => bitslip_data(i),--bitslip_data_all,--'0', -- OCLK => '0', -- high-speed clock OCLKB => '0', -- inverted clock DYNCLKSEL => '0', DYNCLKDIVSEL => '0', CLKDIVP => '0', OFB => '0' -- feedback path ); process( aclk_div ) begin if(aclk_div'event and aclk_div='1') then dat_x_finish(i)<=dat_x(i)(7 downto 0); end if; end process; end generate; process( clk_in_2x ) begin if(clk_in_2x'event and clk_in_2x='1') then cnt<=cnt+1; end if; end process; -- set_idelay_dco1<=test_in(0); bitslip_data(0) <=test_in(1 ); bitslip_data(1) <=test_in(2 ); bitslip_data(2) <=test_in(3 ); bitslip_data(3) <=test_in(4 ); -- set_idelay_data(0) <=test_in(2 ); -- set_idelay_data(1) <=test_in(4 ); -- set_idelay_data(2) <=test_in(6 ); -- set_idelay_data(3) <=test_in(8 ); -- bitslip_data(4) <=test_in(9 ); -- set_idelay_data(4) <=test_in(10); end Behavioral;
  3. К сожалению, иногда не получается динамически подстроить фазу по причине того, что test pattern всего один, изменения нет. Только постоянное число можно задать, убедиться, что вся последовательность бит принимается корректно. Но это постоянное число. При выходе из тестового режима часто происходят сбои.
  4. Есть генератор Si570. При включении он настроен на стартовую частоту. Всё по даташиту делаю, всё перестраивается, ок. Но иногда мне надо ещё раз перестроиться, бывает так, что "прошивка" не знает свою частоту Fout (текущую). Поэтому необходимо сброситься на заводские настройки, после чего перестроиться на требуемую. Не получается, бывает сбрасывает, бывает, перекидывает на какую-ту левую частоту. Кто-нибудь встречался с этим?
  5. DATAOUT => d_aclk, C => aclk_div, --200 MHz CE => set_idelay_dco1, INC => '1', LD  => IntClkCtrlDlyRst, --идет с VIO CNTVALUEIN => LowNibble, --идет с VIO CNTVALUEOUT => open, REGRST => IntClkCtrlDlyRst,--'0',--'0',-- CINVCTRL => '0', LDPIPEEN => '0' ); bufio_adc: BUF port map ( i => d_aclk, o => aclk_main ); --FB BUFR_ins1 : BUFR generic map ( BUFR_DIVIDE => "8", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8" -- SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES" ) есть она)
  6. Буду признателен, если скинете. Конечно, хочется в этой проблеме разобраться, но может в отличиях и родится истина))
  7. Kintex 7, приём данных с АЦП. Использовал традиционную схему - защёлкивание DCO, сдвиг IODELAY-ем, восстановление правильной последовательности 0 и 1 (смотрю ISERDESE2, делаю bitslip, играюсь задержкой). После получения стабильной последовательности, с данной задержкой (при переводе АЦП в тестовый режим) кабибруются остальные линии. Данная схема работала хорошо в ISE. На данный момент: 1) система ругается на d_aclk () на этапе битгена. [DRC RTSTAT-5] Partial antennas: 3 net(s) have a partial antenna. The problem bus(es) and/or net(s) are ad_9653_0/d_aclk, ad_9653_1/d_aclk, and ad_9653_2/d_aclk. 2) когда открываешь Схематик, не вижу инверсии (точнее, вижу, но она никуда не идёт - сигнала n_aclk_main) Есть идеи, как это можно побороть? Констрейнты прописаны. 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 => DCO_P, -- Diff_p clock buffer input (connect directly to top-level port) IB => DCO_n -- Diff_n clock buffer input (connect directly to top-level port) ); x_IDELAYCTRL : IDELAYCTRL port map (REFCLK => clk, RST => reset, RDY => AdcIdlyCtrlRdy); 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 => "VARIABLE",--"VAR_LOAD_PIPE",--"VARIABLE", IDELAY_VALUE => 16, PIPE_SEL => "FALSE" ) port map ( DATAIN => '0',--, IDATAIN => aclk, DATAOUT => d_aclk, C => aclk_div, --200 MHz CE => set_idelay_dco1, INC => '1', LD => IntClkCtrlDlyRst, --идет с VIO CNTVALUEIN => LowNibble, --идет с VIO CNTVALUEOUT => open, REGRST => IntClkCtrlDlyRst,--'0',--'0',-- CINVCTRL => '0', LDPIPEEN => '0' ); bufio_adc: BUF port map ( i => d_aclk, o => aclk_main ); --FB BUFR_ins1 : BUFR generic map ( BUFR_DIVIDE => "8", -- 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 => reset, -- 1-bit input: Active high, asynchronous clear (Divided modes only) I => aclk_main -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect ); xISERDES1113: ISERDESE2 generic map ( SERDES_MODE => "MASTER", INTERFACE_TYPE => "NETWORKING", IOBDELAY => "Both",--"IBUF",-- 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 => n_aclk_main, -- inverted clock CLKDIV => aclk_div,-- divided clock -- Clock enable CE1 => '1', CE2 => '0', -- Reset RST => IntBitClkRst, --rst(i), --- NOT USED BITSLIP => bitslip_dco1,--'0', -- bitslip operation------------------- OCLK => '0', -- high-speed clock OCLKB => '0', -- inverted clock DYNCLKSEL => '0', DYNCLKDIVSEL => '0', CLKDIVP => '0', OFB => '0' -- feedback path ); n_aclk_main<=not aclk_main; calib_dco: Calibrator_idelay_bitslip PORT MAP ( reset =>reset,--rst_dat, clk => clk, CLKDIV => aclk_div, start_calib => calib_in_dco,--start_calib, data_in => dco_calib_out_t, pattern => pattern_dco, pattern2 => pattern_dco, set_idelay => set_idelay_dco1, bitslip => bitslip_dco1,-- open, calib_done => calib_done_dco );
  8. 937 получается подходит под мои задачи. Спасибо. Правда, у них нет дифференциальных выходов и ещё надо глянуть характеристики выходного сигнала - подойдут ли они по требованиям АЦП
  9. Имеется один источник такта на плате. Необходимо из него получать 3 разные тактовые частоты, не имеющие единой "кратности", но формироваться они должны все именно от одной частоты, которая заходит на плату. Далее необходимо будет коммутировать их на каждое из 3-х ацп. Кто-нибудь встречался с подобной задачей?
  10. Получилось поставить линк, но теперь что-то данные плохие идут. I have AD9697, Kintex 7 and AD9528 for clocking. AD9528 works with SI570 (100 MHz base). AD9528 gives me clocks: 1000 Mhz - for AD9697 250 Mhz - Ref CLK (for Kintex) 31.25 Mhz - SysRef (for AD9697 and Kintex). I setup AD9697: N'=16, N=14, L=4, M=1, F=1, CS=0, K=32. What I do: 0571 15 058B 03 058C 00 058D 1F 058E 10 058F 0D 0590 0F 0571 14 SYNC OK (always '1')) Next: 0551 01, 0552 02, 0553 03, 0554 04, 0555 05, 0556 06, 0557 07, 0558 08 - Test pattrern refisters/ Tests: 1) 0574 01 - Result: b5b5b5b5----b5 (127 bit) 2) 0574 04, 0574 054, 0574 06 - Link down. 3) 0573 0E Result: 0705030108060402 0705030108060402 4) 0573 01 Result: aa55aa55aa55aa55aa55aa55aa55aa55 5) 0573 02 Result: ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00 6)0573 11 Result: b54ab54ab54ab54ab54ab54ab54ab54a 7) 057321 Result: aa55aa55aa55aa55aa55aa55aa55aa55 If 0571 14 - data wrong. Ramp test - fail/
  11. Выкладываю команды. I have AD9697, Kintex 7 and AD9528 for clocking. AD9528 works with SI570 (100 MHz base). AD9528 gives me 2 clocks 1200 MHz (OUT0 and OUT 13) for ADC and FPGA. Alsow AD9528 gives m2 2 clocks 120 MHz (OUT2 and OUT 3) for ADC and FPGA for SYS_REF. Additional clk 120 MHz foe FPGA OUT1. This seems well -counters OK. All screenshots here (AD9528 parameters): https://yadi.sk/d/yStQBZxBSRFnRQ Next stage I setup AD9697: I want to setup theese parameters JESD: N'=16, N=14, L=4, M=1, F=1, CS=0, K=32. What I do: 1) PWDN hard reset '1' 2) PWDN hard reset '0'. 3) Power down via SPI ( 0002 03) (address and command) 4) Power up via SPI ( 0002 00) (address and command) 5) Soft reset 0000 81 6) JESD lind down 0571 01 7) NEXT 1228 4F 1228 0F 1222 00 1222 04 1222 00 1262 08 1262 00 8) Setup Link Parameters: 058B 03 058C 00 058D 1F 058E 10 058F 0D 0590 0F 9) JESD lind up 0571 00. SYNC low(( Скрины https://yadi.sk/d/yStQBZxBSRFnRQ
  12. Как я уже писал ранее, всё работает. Необходимо создать такт на выходе 1200 МГц на OUT 0 и на OUT 13. Судя по описанию, такую частоту эти выходы полностью поддерживаются. А вот софт от Аналога подсвечивает красным по поводу 0-го выхода, типа out of range, с 13-м всё ок. Физически не могу проверить - есть ли там частота или нет. Встречался кто с такой проблемой?
  13. Смотрите, что в итоге получается. Принял за основу следующие данные: N'=16, N=14, L=4, M=1, F=1, CS=0, K=32. Вопросы: 1) Я так и не нашёл где в Xilinx Core JESD PHY и JESD настраиваются N', N, M, CS? Регистрами они на АЦП настраиваются, а вот их ПЛИСная "вторая половина" отсутствует. 2) Последовательность у меня получается следующая (выложу по регистрово сегодня) сброс, powerdown link JESD, настройка (N'=16, N=14, L=4, M=1, F=1, CS=0, K=32.), powerup link JESD. Всё правильно? 3) Критерием того, что как минимум есть коннект, есть сигнал SYNC_N. Я правильно понимаю, что это выходной сигнал из порта rx_sync компонента JESD? На данный момент я его отправляю на OBUFDS, после чего, на АЦП? Так?