¿Cómo enrutar un reloj LVDS desde la entrada FPGA a la salida?

3

Utilizando VHDL, ¿cómo es posible recibir un par de señales LVDS (por ejemplo, un reloj externo) en el FPGA y enrutarlas a otros pares de pines para que salgan, sin ninguna modificación?

He intentado IBUFDS y OBUFDS con una señal intermedia de terminación única, pero todo lo que obtengo en la salida es un flanco ascendente, no un reloj. También intenté poner ODDR en el medio pero obtuve lo mismo.

Estoy usando FPGA de la serie 7 de Xilinx (en Zynq) y tiene pines LVDS. El código VHDL y el archivo de restricción son así:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VComponents.all;

entity fanout is
  Port ( CLK_IN_P  : in  STD_LOGIC;
         CLK_IN_N  : in  STD_LOGIC;
         CLK_OUT_P : out STD_LOGIC;
         CLK_OUT_N : out STD_LOGIC;
         LD0       : out STD_LOGIC);
end Fanout;

architecture data_flow of fanout is
  signal clk_lvcmos : STD_LOGIC;
begin

  -- LVDS input to internal single
  CLK_IBUFDS : IBUFDS
  generic map(
    IOSTANDARD => "DEFAULT"
  )
  port map(
    I  => CLK_IN_P,
    IB => CLK_IN_N,
    O  => clk_lvcmos
  );

  -- Internal single to LVDS output  
  CLK_OBUFDS : OBUFDS
  generic map(
    IOSTANDARD => "DEFAULT"
  )
  port map(
    O  => CLK_OUT_P,
    OB => CLK_OUT_N,
    I  => clk_lvcmos
  );

end data_flow;

y el archivo UCF es:

# Input clock differential pair
NET CLK_IN_N LOC = C20  | IOSTANDARD=LVDS_25 | DIFF_TERM = TRUE;  # "FMC-LA18_CC_N"
NET CLK_IN_P LOC = D20  | IOSTANDARD=LVDS_25 | DIFF_TERM = TRUE;  # "FMC-LA18_CC_P"

# Output clock differential pair
NET CLK_OUT_N    LOC = G21  | IOSTANDARD=LVDS_25;  # "FMC-LA20_N"
NET CLK_OUT_P    LOC = G20  | IOSTANDARD=LVDS_25;  # "FMC-LA20_P"
    
pregunta dahma

2 respuestas

3

No puede describir correctamente un receptor o transmisor LVDS en VHDL. Las interfaces LVDS tienen requisitos eléctricos que normalmente no se pueden cumplir con el simple uso de pines de entrada y salida digitales simples. Su FPGA necesita tener macrocélulas de entrada y salida dedicadas para esas funciones y usted solo las instanciará. Exactamente cómo se hace eso depende del FPGA exacto y del conjunto de herramientas que esté utilizando. Dentro del FPGA, solo hay una señal que vendría del receptor LVDS y una señal que iría al transmisor LVDS.

    
respondido por el Joe Hass
2

Lo que debes hacer es agregar un búfer IBUFDS y conectar tu señal a ese par.

  

IBUFDS es un búfer de entrada que admite baja tensión, diferencial   señalización. En IBUFDS, se representa una señal de interfaz de nivel de diseño   como dos puertos distintos (I y IB), uno considerado el "maestro" y el   otro el "esclavo". El amo y el esclavo son fases opuestas de la   misma señal lógica (por ejemplo, MYNET y MYNETB).

-- IBUFDS: Differential Input Buffer
--
-- The current version of the Xilinx HDL Libraries Guide
IBUFDS_inst : IBUFDS
-- Edit the following generic to specify the I/O standard for this port.
generic map (
IOSTANDARD => "LVDS_25")
port map (
          O => O, -- Clock buffer output
          I => I, -- Diff_p clock buffer input (connect to top-level port)
          IB => IB -- Diff_n clock buffer input (connect directly to top-level port)
);

++ ACTUALIZACIÓN Los IO del archivo UCF de Zedboard tienen las siguientes señales:

NET FMC-LA18_CC_N LOC = C20  | IOSTANDARD=LVCMOS18;  # "FMC-LA18_CC_N"
NET FMC-LA18_CC_P LOC = D20  | IOSTANDARD=LVCMOS18;  # "FMC-LA18_CC_P"
NET FMC-LA20_N    LOC = G21  | IOSTANDARD=LVCMOS18;  # "FMC-LA20_N"
NET FMC-LA20_P    LOC = G20  | IOSTANDARD=LVCMOS18;  # "FMC-LA20_P"

Por lo tanto, tus estándares IO están equivocados. Tal vez si cambias eso, lo haces funcionar.

    
respondido por el FarhadA

Lea otras preguntas en las etiquetas

Comentarios Recientes

Si el hardware de entrada del reloj ya tiene frecuencia (ya presente) desde el IC de la puerta FPGA, entonces es sencillo construir un reloj para esos dispositivos fuera de una frecuencia NPN. Esto también es cierto para los componentes analógicos. Los dispositivos analógicos pueden tener un valor de retención FFT 0x80000, capacitancia de reloj MLL, etc. y, por ejemplo en dispositivos ATmega32U4M u otros dispositivos de consumo, existe la posibilidad de que dentro de unos pocos pasos de la conversión minorista... Lees verder