Teoría

Usando Xilinx ISE Simulator

Figura 8: Resultado de la simulación.

Esta pequeña guía detalla los pasos necesarios para realizar una simulación con ISim (o Xilinx ISE Simulator) para la versión 13.4 del software Xilinx ISE Design Suite.

1. Inicia Project Navigator

Para este tutorial, se asume que crearemos un divisor de frecuencia. Primero que nada, inicia el programa Project Navigator, disponible en Inicio > Todos los programas > Xilinx ISE Design Suite 13.4 > ISE Design Tools > Project Navigator.

2. Crea un nuevo proyecto

En la ventana del navegador de proyectos, ve a File > New Project. Introduce un nombre para el proyecto y una descripción y presiona Next. En la ventana de Project Settings es necesario ajustar los parámetros para el FPGA en cuestión. Para los propósitos de este tutorial, se establecen los valores para una tarjeta Basys2 (figura 1).

Es importante asegurarnos de que el simulador es ISim (VHDL / Verilog).

Figura 1: Propiedades del proyecto.

Figura 1: Propiedades del proyecto.

3. Agrega una nueva fuente

Creamos la fuente del divisor de frecuencia, mostrada en el listado 1.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity clk200Hz is
    Port (
        entrada: in  STD_LOGIC;
        reset  : in  STD_LOGIC;
        salida : out STD_LOGIC
    );
end clk200Hz;
 
architecture Behavioral of clk200Hz is
    signal temporal: STD_LOGIC;
    signal contador: integer range 0 to 124999 := 0;
begin
    divisor_frecuencia: process (reset, entrada) begin
        if (reset = '1') then
            temporal <= '0';
            contador <= 0;
        elsif rising_edge(entrada) then
            if (contador = 124999) then
                temporal <= NOT(temporal);
                contador <= 0;
            else
                contador <= contador+1;
            end if;
        end if;
    end process;
     
    salida <= temporal;
end Behavioral;
Figura 2: Insertando un módulo VHDL.

Figura 2: Insertando un módulo VHDL.

4. Sintetiza el componente

Se realiza la síntesis del diseño para verificar que la sintaxis es correcta. Para esto, es necesario realizar tres acciones (mostrado en la figura 3):

  1. Seleccionar la vista de implementación.
  2. Elegir el módulo a ser sintetizado.
  3. Seleccionar la opción Synthetize – XST.
Figura 3: Realizando la síntesis.

Figura 3: Realizando la síntesis.

5. Crea el banco de pruebas

Tras terminar la síntesis de manera satisfactoria, agregamos un nuevo banco de pruebas VHDL (figura 4) con el código del listado 2.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 
ENTITY clk200Hz_tb IS
END clk200Hz_tb;
 
ARCHITECTURE behavior OF clk200Hz_tb IS
    COMPONENT clk200Hz
    PORT(
        entrada : IN  std_logic;
        reset   : IN  std_logic;
        salida  : OUT std_logic
    );
    END COMPONENT;
 
    -- Entradas
    signal entrada : std_logic := '0';
    signal reset   : std_logic := '0';
    -- Salidas
    signal salida  : std_logic;
    constant entrada_t : time := 20 ns; 
BEGIN
    -- Instancia de la unidad bajo prueba.
    uut: clk200Hz PORT MAP (
        entrada => entrada,
        reset   => reset,
        salida  => salida
    );
 
    -- Definición del reloj.
    entrada_process :process
        begin
        entrada <= '0';
        wait for entrada_t / 2;
        entrada <= '1';
        wait for entrada_t / 2;
    end process;
 
    -- Procesamiento de estímulos.
    estimulos: process
    begin
        reset <= '1'; -- Condiciones iniciales.
        wait for 100 ns;
        reset <= '0'; -- ¡A trabajar!
        wait;
    end process;
END;
Figura 4: Insertando un banco de pruebas.

Figura 4: Insertando un banco de pruebas.

6. Simula el comportamiento

Para realizar la simulación del banco de pruebas recién desarrollado, es necesario:

  1. Seleccionar la vista de Simulation.
  2. Elegir el banco de pruebas a ser simulado.
  3. Seleecionar la opción Simulate Behavioral Model.
Figura 5: Eligiendo el modo de simulación.

Figura 5: Eligiendo el modo de simulación.

7. Modifica los propiedades

Si realizaste la simulación del divisor de frecuencia siguiendo todos los pasos anteriores, lo más probable es que no hayas obtenido la señal de salida. La razón es simple: la simulación abarcó un total de 1000 ns pero el nuevo reloj necesita de un periodo de 5 ms para poder ser observado.

Para modificar el tiempo, es necesario dar click con el botón derecho del ratón sobre Simulate Behavioral Model (véase figura 5). Esto nos mostrará una nueva pantalla (figura 6) que nos permite modificar el tiempo de la simulación.

Figura 6: Modificando las propiedades de simulación.

Figura 6: Modificando las propiedades de simulación.

Modificamos el tiempo de 1000 ns a 100 ms y volvemos a simular. El resultado se muestra en la figura 7.

Figura 7: Resultado de la simulación.

Figura 7: Resultado de la simulación.

8. Repetir

Algunas veces es necesario cambiar los estímulos del banco de pruebas o modificar el tiempo de la simulación. En cualquier caso, sólo es necesario cerrar la ventana de la simulación actual, si alguna se encuentra abierta, y volver a ejecutar el proceso de simulación para ver reflejados los nuevos cambios.

En caso de dudas, favor de comentar :).

You Might Also Like

2 Comentarios

  • Responder
    SERGIO LEAL PEREZ
    marzo 25, 2015 at 5:11 pm

    Disculpa, quiero simular un contador… un simple contador…
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.NUMERIC_STD.ALL;

    entity Contador is
    Generic (width:POSITIVE:=8);
    Port ( CLK : IN STD_LOGIC;
    RESET : IN STD_LOGIC;
    ENAMBLE : IN STD_LOGIC;
    SALIDA : OUT STD_LOGIC_VECTOR (WIDTH-1 downto 0));
    end Contador;

    architecture Behavioral of Contador is SIGNAL cnt : UNSIGNED(width-1 DOWNTO 0); begin
    pSeq : process (CLK, RESET)
    begin if RESET = ‘1’ then
    cnt ‘0’);
    elsif (CLK’event and CLK=’1′) then
    if enamble = ‘1’ then
    cnt <= cnt + 1;
    end if;
    end if;
    end process;
    SALIDA <= std_logic_vector(cnt);
    end Behavioral;

    supuesamente ese contador ya cuenta con reset y ensamblado, y no tiene error de syntax… entonces en el emulador que pasa que le forzo el relog y las constantes… que le hago a mis valores Salida y cnt para que empiecen a funcionar??? a mi me marcan ROJO y con XXXXXXXX

    Alguna idea???

    • Responder
      Carlos Ramos
      marzo 27, 2015 at 10:45 pm

      Sergio, ¿cuentas con el archivo de simulación? Saludos.

    Deja tu comentario