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

Zynq 7020 выход OSERDES на вход PLL?

В 07.07.2023 в 15:12, Beby сказал:

Странно, зачем использовать 2 пина, когда должно быть достаточно 1 CC пина ?

Вот пример на VHDL, компилируемый ISE 14.7 для XC7Z010-1CLG400:

library ieee;
use ieee.std_logic_1164.all;

library unisim;
use unisim.vcomponents.all;


entity IO_Test is port (
	IN_CLK_1:	in		std_logic;
	IO_CLK_2:	inout	std_logic;
	OUT_Q:		out		std_logic );
end entity;


architecture Tushka of IO_Test is
	signal	CLK_1_UB:	std_logic;
	signal	CLK_1:		std_logic;
	signal	CLK_1_Out:	std_logic;
	
	signal	CLK_2_UB:	std_logic;
	signal	CLK_2:		std_logic;
	
	signal	Q:			std_logic := '0';
	
begin
	CLK_1_IBUFG: component IBUFG port map ( I => IN_CLK_1,     O => CLK_1_UB );
	CLK_1_BUFG:  component  BUFG port map ( I =>    CLK_1_UB,  O => CLK_1    );
	
	CLK_1_ODDR: component ODDR port map (
		D1 => '0',  D2 => '1',  Q => CLK_1_Out, CE => '1',  C  => CLK_1
	);
	
	CLK_1_OBUF:  component OBUF  port map ( I =>    CLK_1_Out,  O => IO_CLK_2    );
	CLK_2_IBUFG: component IBUFG port map ( I => IO_CLK_2,      O =>    CLK_2_UB );
	CLK_2_BUFG:  component  BUFG port map ( I =>    CLK_2_UB,   O =>    CLK_2    );
	
	
	process( CLK_2 ) begin
		if rising_edge(CLK_2) then
			Q <= not(Q);
		end if;
	end process;
	
	Q_OBUF: component OBUF port map ( I => Q,  O => OUT_Q );
	
end architecture;

 

А если попробовать полноценный oserdes и завести CLK_2 на вход pll?

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


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

2 hours ago, sonycman said:

А если попробовать полноценный oserdes и завести CLK_2 на вход pll?

 

library ieee;
use ieee.std_logic_1164.all;

library unisim;
use unisim.vcomponents.all;


entity IO_Test is port (
	IN_CLK_1:	in		std_logic;
	IO_CLK_2:	inout	std_logic;
	OUT_Q:		out		std_logic );
end entity;



architecture Tushka of IO_Test is
	signal	CLK_1_UB:	std_logic;
	signal	CLK_1:		std_logic;
	signal	CLK_1_Out:	std_logic;
	
	signal	CLK_2_UB:	std_logic;
	signal	CLK_2:		std_logic;
	
	signal	PLL_FB:		std_logic;
	signal	PLL_CLK:	std_logic;
	signal	PLL_CLK_UB:	std_logic;
	
	signal	Q:			std_logic := '0';
	
begin
	CLK_1_IBUFG: component IBUFG port map ( I => IN_CLK_1,     O => CLK_1_UB );
	CLK_1_BUFG:  component  BUFG port map ( I =>    CLK_1_UB,  O => CLK_1    );
	
--	CLK_1_ODDR: component ODDR port map (
--		D1 => '0',  D2 => '1',  Q => CLK_1_Out, CE => '1',  C  => CLK_1
--	);
	
	CLK_1_OSERDESE: component OSERDESE2 generic map (
		DATA_RATE_OQ => "DDR",   -- DDR, SDR
		DATA_RATE_TQ => "DDR",   -- DDR, BUF, SDR
		DATA_WIDTH => 4,         -- Parallel data width (2-8,10,14)
		INIT_OQ => '0',          -- Initial value of OQ output (1'b0,1'b1)
		INIT_TQ => '0',          -- Initial value of TQ output (1'b0,1'b1)
		SERDES_MODE => "MASTER", -- MASTER, SLAVE
		SRVAL_OQ => '0',         -- OQ output value when SR is used (1'b0,1'b1)
		SRVAL_TQ => '0',         -- TQ output value when SR is used (1'b0,1'b1)
		TBYTE_CTL => "FALSE",    -- Enable tristate byte operation (FALSE, TRUE)
		TBYTE_SRC => "FALSE",    -- Tristate byte source (FALSE, TRUE)
		TRISTATE_WIDTH => 4      -- 3-state converter width (1,4)
	) port map (
		OQ => CLK_1_Out,         -- 1-bit output: Data path output
		OFB => open,             -- 1-bit output: Feedback path for data
	-- SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
		SHIFTOUT1 => open,
		SHIFTOUT2 => open,
		TBYTEOUT  => open,     -- 1-bit output: Byte group tristate
		TFB => open,           -- 1-bit output: 3-state control
		TQ => open,            -- 1-bit output: 3-state control
		CLK    => CLK_1,       -- 1-bit input: High speed clock
		CLKDIV => CLK_1,       -- 1-bit input: Divided clock
	-- D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
		D1 => '0',
		D2 => '1',
		D3 => '0',
		D4 => '1',
		D5 => '0',
		D6 => '1',
		D7 => '0',
		D8 => '1',
		
		OCE => '1',             -- 1-bit input: Output data clock enable
		RST => '0',             -- 1-bit input: Reset
	-- SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
		SHIFTIN1 => '0',
		SHIFTIN2 => '0',
	-- T1 - T4: 1-bit (each) input: Parallel 3-state inputs
		T1 => '0',
		T2 => '0',
		T3 => '0',
		T4 => '0',
		TBYTEIN => '0',     -- 1-bit input: Byte group tristate
		TCE => '0'          -- 1-bit input: 3-state clock enable
	);
	
	
	
	
	CLK_1_OBUF:  component OBUF  port map ( I =>    CLK_1_Out,  O => IO_CLK_2    );
	CLK_2_IBUFG: component IBUFG port map ( I => IO_CLK_2,      O =>    CLK_2_UB );
	CLK_2_BUFG:  component  BUFG port map ( I =>    CLK_2_UB,   O =>    CLK_2    );
	
	
	CLK_2_PLL: component PLLE2_BASE generic map (
		BANDWIDTH => "OPTIMIZED",  -- OPTIMIZED, HIGH, LOW
		CLKFBOUT_MULT  => 10,      -- Multiply value for all CLKOUT, (2-64)
		CLKFBOUT_PHASE => 0.0,     -- Phase offset in degrees of CLKFB, (-360.000-360.000).
		CLKIN1_PERIOD  => 10.0,    -- Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).
		REF_JITTER1    => 0.0,     -- Reference input jitter in UI, (0.000-0.999).
		STARTUP_WAIT   => "FALSE", -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
		
		DIVCLK_DIVIDE  => 1,       -- Master division value, (1-56)
	-- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
		CLKOUT0_DIVIDE => 10,
		CLKOUT1_DIVIDE => 1,
		CLKOUT2_DIVIDE => 1,
		CLKOUT3_DIVIDE => 1,
		CLKOUT4_DIVIDE => 1,
		CLKOUT5_DIVIDE => 1,
	-- CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for each CLKOUT (0.001-0.999).
		CLKOUT0_DUTY_CYCLE => 0.5,
		CLKOUT1_DUTY_CYCLE => 0.5,
		CLKOUT2_DUTY_CYCLE => 0.5,
		CLKOUT3_DUTY_CYCLE => 0.5,
		CLKOUT4_DUTY_CYCLE => 0.5,
		CLKOUT5_DUTY_CYCLE => 0.5,
	-- CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for each CLKOUT (-360.000-360.000).
		CLKOUT0_PHASE => 0.0,
		CLKOUT1_PHASE => 0.0,
		CLKOUT2_PHASE => 0.0,
		CLKOUT3_PHASE => 0.0,
		CLKOUT4_PHASE => 0.0,
		CLKOUT5_PHASE => 0.0
	) port map (
		CLKIN1 => CLK_2,     -- 1-bit input: Input clock
		
		CLKFBOUT => PLL_FB,  -- 1-bit output: Feedback clock
		CLKFBIN  => PLL_FB,  -- 1-bit input: Feedback clock
	-- Clock Outputs: 1-bit (each) output: User configurable clock outputs
		CLKOUT0 =>PLL_CLK_UB,   -- 1-bit output: CLKOUT0
		CLKOUT1 => open,   -- 1-bit output: CLKOUT1
		CLKOUT2 => open,   -- 1-bit output: CLKOUT2
		CLKOUT3 => open,   -- 1-bit output: CLKOUT3
		CLKOUT4 => open,   -- 1-bit output: CLKOUT4
		CLKOUT5 => open,   -- 1-bit output: CLKOUT5
		
	-- Control & Status Ports
		PWRDWN => '0',     -- 1-bit input: Power-down
		RST    => '0',     -- 1-bit input: Reset
		LOCKED => open     -- 1-bit output: LOCK
	);
	
	CLK_3_BUFG: component BUFG port map ( I => PLL_CLK_UB,   O => PLL_CLK );
	
	
	process( PLL_CLK ) begin
		if rising_edge(PLL_CLK) then
			Q <= not(Q);
		end if;
	end process;
	
	
	Q_OBUF: component OBUF port map ( I => Q,  O => OUT_Q );
	
end architecture;

C OSerDesE2 + PLL результат аналогичный ODDR'у (в ISE 14.7): всё благополучно упихивается в одну Clock Capable ногу (IOB + OLogic + ILogic Clock bypass).

oserdes2.thumb.gif.be4ec498bf0492a60ab68c1be39856b1.gif

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


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

Beby

Благодарю за помощь, собралось, когда PLL инстанциировал как у Вас, в исходнике, а не через блок-дизайн.

Дальше пришлось пин, через который генерируется клок, повесить на свободно висящий пин чипа, иначе 250МГц уже не схватывается входным буфером.

 

Всё заработало, 576р @27МГц монитор подхватил как родные!

С 32 битным счётчиком такой генератор позволит мне подгонять частоту с отклонением менее наносекунды от кадра к кадру!

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


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

Работает без проблем с часотой до 29 МГц, выше PLL не лочится и нормального клока на ее выходе нет.

 

Получается,, входной пин не берет частоту выше 232 МГц (29 * 8)?

 

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


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

  Тогда попробуем уточняющие вопросы:

1. Описать подробно: чем и как питается AUX ?

2. Что ещё (кроме VCCaux) питается этой же цепью ?

3. Какие настройки IO-ног для заворота тактовой используете ? (Std, Drive, Slew, LowPower, Pull-Up/Down/Keeker и т.п.)

4. Можете ли использовать какой-либо дифференциальный стандарт (например, LVDS) ?

5. Что ещё расположено в том же банке, в котором используется заворот тактовой ?

6. Как у вас с фазовыми шумами в этом завороте (в спецификацию на PLL укладываетесь) ?

 

Это из того, что по-быстрому приходит в голову.

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


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

В 04.08.2023 в 22:23, Beby сказал:

1. Описать подробно: чем и как питается AUX ?

2. Что ещё (кроме VCCaux) питается этой же цепью ?

3. Какие настройки IO-ног для заворота тактовой используете ? (Std, Drive, Slew, LowPower, Pull-Up/Down/Keeker и т.п.)

4. Можете ли использовать какой-либо дифференциальный стандарт (например, LVDS) ?

5. Что ещё расположено в том же банке, в котором используется заворот тактовой ?

6. Как у вас с фазовыми шумами в этом завороте (в спецификацию на PLL укладываетесь) ?

Плата используется такая: Z-Turn v1.

Вот схема питания:

1418952258_Z-Turnpower.thumb.png.1e00f6bf52dc78d17394531a89d2406c.png

Настройка пина: LVTTL, FAST, 8ma.

Можно попробовать настройку с бОльшим током...

Дифф. стандарт тоже пока не пробовал, надо глянуть в эту сторону.

В этом-же банке работает VGA выход на 28.5 МГц, который можно выключить, в принципе.

 

По поводу фазового шума, думаю, вся эта идея не укладывается в спецификацию.

В настройке PLL джиттер выставил по максимуму - 1 нс. Какой он там по факту - не скажу, но вероятнее всего поболее будет.

 

Есть ещё идея уменьшить разрядность oserdes с 8-ми до 6-ти бит, то есть снизить коэфф. умножения до 6-ти, чтобы уменьшить входную частоту PLL.

Но джиттер в этом случае только вырастет, мне кажется.

 

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


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

Чертовщина творится.

Убрал схему VGA выхода - PLL стала стабильно выдавать 32 МГц, выше пока не пробовал.

До этого выше 29 МГц не поднималось.

 

Что изменилось в разводке - если раньше в моей схеме был один MMCM и одна PLL в одном CMT блоке, то теперь вивадо развёл их по разным CMT, на разных сторонах чипа.

 Плюс раньше вивадо в цепи заворота тактовой между IOBUF и входом PLL вставлял BUFG, то теперь его нет.

 

Больше вроде ничего не поменялось.

Как объяснить повышение частоты PLL?

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


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

14 часов назад, sonycman сказал:

Как объяснить повышение частоты PLL?

Что-то ощутимо дёргало питание aux? У нас подобные проблемы с PLL были в прошлой жизни. Beby не даст соврать.

Но лучше проверьте. Залочьте тактовую по тем местам, где она легла сейчас, и добавьте вывод. Если частота упадёт - то всё очевидно. 

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


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

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

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

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

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

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

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

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

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

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