ModelSim es un simulador muy usado y con muchas posibilidades. Aunque es de pago, la empresa Altera nos ofrece una versión gratuita. Se trata de ModelSim Altera Starter Edition, y es el simulador por defecto en su software Quartus II y Quartus Prime. Vamos a utilizar un ejemplo muy sencillo en VHDL para ver cómo se realiza una simulación con ModelSim.
En concreto vamos a simular el funcionamiento de un circuito combinacional bastante conocido: un multiplexor 2 a 1 de un bit.
El funcionamiento es el siguiente: la salida Z tomara el valor de la entrada A si S=0 y el valor de la entrada B si S=1. El código VHDL para modelar este comportamiento es el siguiente.
library IEEE; use IEEE.STD_LOGIC_1164.ALL;Para introducir este código en ModelSim, lo iniciamos y seleccionamos el menú File>New>Proyect... En esta ventana indicamos el nombre y la ubicación del proyecto.entity mux_2to1 is Port ( s : in STD_LOGIC; a : in STD_LOGIC; b : in STD_LOGIC; z : out STD_LOGIC); end mux_2to1;
architecture behavioral of mux_2to1 is begin z <= a when (s = '1') else b; end behavioral;
Al pulsar OK se abre una nueva ventana donde seleccionaremos Create New File. Si ya tenemos escrito el código VHDL (o Verilog) y queremos cargarlo desde un archivo externo, podemos seleccionar Add Existing File. Escribimos el nombre del fichero (por ejemplo mux_2to1) y pulsamos OK. Cerramos también la ventana anterior, ya que no vamos a añadir nuevos archivos.
En la ventana de proyecto que se acaba de abrir veremos que aparece nuestro archivo mux_2to1.vhd con una interrogación al lado (eso quiere decir que aun no se ha compilado el código). Pulsamos doble click sobre el archivo y se abrirá una ventana de edición, donde podemos escribir nuestro código VHDL.
Además del código VHDL vamos a necesitar un testbench. Un testbench no es más que la definición de los estados que van a ir tomado las señales a lo largo del tiempo, es decir, describe el comportamiento de las señales de entrada del circuito a partir de las cuales, el simulador inferirá las salidas. El código del testbench para el multiplexor es el siguiente.
library IEEE; use IEEE.STD_LOGIC_1164.ALL;entity test is end entity test;
architecture testbench of test is signal a1, b1, s1, z1 : STD_LOGIC := '0'; begin a1 <= not a1 after 50 ns; b1 <= not b1 after 100 ns; s1 <= not s1 after 50 ns; conec: entity work.mux_2to1(behavioral) port map (s1,a1,b1,z1); end architecture testbench;
Podemos crear un archivo nuevo con el código del testbench pulsando el menú File>New>Source>VHDL, o más cómodamente, lo añadimos a continuación del código anterior. Finalmente pulsamos el menú Compile>Compile All. Si todo va bien, la interrogación se cambiará por un símbolo de OK de color verde.
Estamos listos para comenzar la simulación, así que pulsamos el menú Simulate>Start Simulation. En la ventana siguiente seleccionamos nuestro testbench y ajustamos la resolución a nuestro gusto (en este caso 10ns).
Tras pulsar OK se abre la ventana de objetos y la de procesos. Desde la ventana de objetos podemos seleccionar qué señales queremos monitorirar, pero antes, seleccionamos la pestaña Wave que está bajo el editor de texto, y simplemente arrastramos a esta ventana las señales que queramos monitorizar (también podemos pulsar con el botón derecho del ratón sobre la señal y seleccionar Add Wave). Una vez añadidas las señales, podemos lanzar la simulación de dos formas:
- A través del menú Simulate>Run, y seleccionando Run 100 para simular 100ms de tiempo o Run All si queremos que simule mucho más tiempo.
- Usar la barra de herramientas que permite especificar el tiempo exacto que dura la simulación
Tras la ejecución de la simulación, podremos examinar la salida desde la pestaña Wave y movernos con las barras de scroll al lugar que queramos examinar.







Comentarios
Publicar un comentario