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).
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;
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):
- Seleccionar la vista de implementación.
- Elegir el módulo a ser sintetizado.
- Seleccionar la opción Synthetize – XST.
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;
6. Simula el comportamiento
Para realizar la simulación del banco de pruebas recién desarrollado, es necesario:
- Seleccionar la vista de Simulation.
- Elegir el banco de pruebas a ser simulado.
- Seleecionar la opción Simulate Behavioral Model.
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.
Modificamos el tiempo de 1000 ns a 100 ms y volvemos a simular. El resultado se muestra en la figura 7.
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 :).
2 Comentarios
SERGIO LEAL PEREZ
marzo 25, 2015 at 5:11 pmDisculpa, 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???
Carlos Ramos
marzo 27, 2015 at 10:45 pmSergio, ¿cuentas con el archivo de simulación? Saludos.