Conversión de VHDL al diagrama de bloques de sysgen

2

Hice mi propia placa personalizada que contiene un oscilador de reloj para conducir un FPGA. Escribí un código VHDL. El script simplemente redirige una entrada de 10 bits (SIGIN) a la salida de 10 bits (SIGOUT) en el flanco ascendente del reloj interno CLK10, que se deriva del reloj de entrada global (CLK160) ), genera un CLK160 / 8 y ejecuta una lógica asíncrona:

entity testMod is
   Port(    CLK160   : IN  STD_LOGIC;
            IN1      : IN  STD_LOGIC;
            IN2      : IN  STD_LOGIC;
            IN3      : IN  STD_LOGIC;
            OUT3     : OUT STD_LOGIC;   
            SIGIN    : IN  STD_LOGIC_VECTOR(9 DOWNTO 0);
            OUT20    : OUT STD_LOGIC;
            SAMP_CLK : OUT STD_LOGIC;
            SIGOUT   : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) := (OTHERS => '0'));
   end testMod;

architecture Behavioral of testMod is
   component CLK_DIV8  is   port (CLKIN : in STD_LOGIC; CLKDV : out STD_LOGIC );end component;
   component CLK_DIV16 is   port (CLKIN : in STD_LOGIC; CLKDV : out STD_LOGIC );end component;
   SIGNAL    CLK10  : STD_LOGIC := '0';
   SIGNAL    CLK20  : STD_LOGIC := '0';

begin
U1: CLK_DIV8  port map(CLKIN => CLK160,CLKDV => CLK20);
U2: CLK_DIV16 port map(CLKIN => CLK160,CLKDV => CLK10);

OUT20    <= CLK20;                                      -- 20MHz output clock
SAMP_CLK <= IN1 AND IN2 AND CLK10;                      -- asynchronous AND
OUT3     <= IN3;                                        -- direct asynchronous in-out

CLK_PROC: PROCESS(CLK10)
BEGIN
    IF RISING_EDGE(CLK10) THEN  SIGOUT <= SIGIN;        -- re-route on the rising edge
    ELSE NULL;
    END IF;
END PROCESS CLK_PROC;   
end Behavioral;

Ahora, deseo reproducir este código en Xilinx System Generator usando diagramas de bloques. Sin embargo, después de leer UG640 , todavía no puedo averiguar cómo traducir correctamente un código tan simple:

¿Podría alguien sugerir el enfoque de cómo traducir este código en los diagramas de bloques? Tal vez un enlace a un tutorial completo? También se agradecería responder cualquiera de las siguientes preguntas :

  1. ¿Cómo puedo obtener acceso al reloj maestro para poder obtener mi CLK20 y CLK10?
  2. ¿Cómo hacer que SIGIN < = SIGOUT solo en el flanco ascendente del CLK10?
  3. ¿Cómo generar simplemente una derivada del reloj del sistema (OUT20 < = CLK20)?
  4. ¿Cómo pasar la señal de entrada directamente a la salida independientemente del reloj del sistema (OUT3 < = IN3)?
  5. ¿Por qué cuando genero HDL Netlist usando el generador del sistema obtengo un archivo de origen de más de 400 líneas y algunos archivos de origen adicionales en lugar de la escritura manual del código fuente que es de aproximadamente 20 líneas y no otros archivos de origen?
pregunta Nazar

1 respuesta

1

Está bien, parece que he encontrado algo que podrías usar. Podría crear múltiples dominios de reloj, cada uno con una frecuencia diferente para crear sus relojes. Cómo puede hacer esto se explica aquí a partir de la página 290. Básicamente, usted crea un subsistema con su propio token de sysgen. Lamentablemente, no puedo probar esto, pero debería poder obtener la señal de su reloj con bastante facilidad. Simplemente invierta la salida de un registro de un bit y conéctelo a su entrada. Esto debería hacer que oscile cada vez que el sistema se active. Simplemente sintonice la frecuencia del subsistema para que la oscilación resultante coincida con lo que desea tener.

He estado mirando a mi alrededor, pero realmente no parece que xilinx sysgen admita actualizaciones de última generación. Tendrás que encontrar algún tipo de solución para eso.

Aparte de eso, sysgen no permite ninguna acción asíncrona, y siento que es bastante limitado. Uno de mis profesores dijo que realmente no es una herramienta óptima, su único beneficio es que es bastante fácil e intuitivo trabajar con él.

    
respondido por el Tom

Lea otras preguntas en las etiquetas