sonycman 0 7 июля, 2023 Опубликовано 7 июля, 2023 · Жалоба В 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 7 июля, 2023 Опубликовано 7 июля, 2023 · Жалоба 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 9 июля, 2023 Опубликовано 9 июля, 2023 · Жалоба Beby Благодарю за помощь, собралось, когда PLL инстанциировал как у Вас, в исходнике, а не через блок-дизайн. Дальше пришлось пин, через который генерируется клок, повесить на свободно висящий пин чипа, иначе 250МГц уже не схватывается входным буфером. Всё заработало, 576р @27МГц монитор подхватил как родные! С 32 битным счётчиком такой генератор позволит мне подгонять частоту с отклонением менее наносекунды от кадра к кадру! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Работает без проблем с часотой до 29 МГц, выше PLL не лочится и нормального клока на ее выходе нет. Получается,, входной пин не берет частоту выше 232 МГц (29 * 8)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Тогда попробуем уточняющие вопросы: 1. Описать подробно: чем и как питается AUX ? 2. Что ещё (кроме VCCaux) питается этой же цепью ? 3. Какие настройки IO-ног для заворота тактовой используете ? (Std, Drive, Slew, LowPower, Pull-Up/Down/Keeker и т.п.) 4. Можете ли использовать какой-либо дифференциальный стандарт (например, LVDS) ? 5. Что ещё расположено в том же банке, в котором используется заворот тактовой ? 6. Как у вас с фазовыми шумами в этом завороте (в спецификацию на PLL укладываетесь) ? Это из того, что по-быстрому приходит в голову. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 5 августа, 2023 Опубликовано 5 августа, 2023 · Жалоба В 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. Вот схема питания: Настройка пина: LVTTL, FAST, 8ma. Можно попробовать настройку с бОльшим током... Дифф. стандарт тоже пока не пробовал, надо глянуть в эту сторону. В этом-же банке работает VGA выход на 28.5 МГц, который можно выключить, в принципе. По поводу фазового шума, думаю, вся эта идея не укладывается в спецификацию. В настройке PLL джиттер выставил по максимуму - 1 нс. Какой он там по факту - не скажу, но вероятнее всего поболее будет. Есть ещё идея уменьшить разрядность oserdes с 8-ми до 6-ти бит, то есть снизить коэфф. умножения до 6-ти, чтобы уменьшить входную частоту PLL. Но джиттер в этом случае только вырастет, мне кажется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 7 августа, 2023 Опубликовано 7 августа, 2023 · Жалоба Чертовщина творится. Убрал схему VGA выхода - PLL стала стабильно выдавать 32 МГц, выше пока не пробовал. До этого выше 29 МГц не поднималось. Что изменилось в разводке - если раньше в моей схеме был один MMCM и одна PLL в одном CMT блоке, то теперь вивадо развёл их по разным CMT, на разных сторонах чипа. Плюс раньше вивадо в цепи заворота тактовой между IOBUF и входом PLL вставлял BUFG, то теперь его нет. Больше вроде ничего не поменялось. Как объяснить повышение частоты PLL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fingertouch 2 8 августа, 2023 Опубликовано 8 августа, 2023 · Жалоба 14 часов назад, sonycman сказал: Как объяснить повышение частоты PLL? Что-то ощутимо дёргало питание aux? У нас подобные проблемы с PLL были в прошлой жизни. Beby не даст соврать. Но лучше проверьте. Залочьте тактовую по тем местам, где она легла сейчас, и добавьте вывод. Если частота упадёт - то всё очевидно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться