Ir al contenido principal

Simulación de circuitos digitales con ModelSim

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.

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;

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;

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.

Nuevo proyecto ModelSim

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.

VHDL compilado ModelSim

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).

ModelSim-Start Simulation

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
barra-ejecucion-modelsim

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.

simulación modelsim

Comentarios

Entradas populares de este blog

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.

Ingeniería inversa de un parche de Microsoft Windows

A estas alturas ya hemos asumido que la seguridad total en Internet es, cuanto menos, un mito. Ningún software está libre de vulnerabilidades, y por mucha auditoría, test de intrusión o pruebas de fuzzing que nos empeñemos en hacer, ninguna metodología puede demostrar sin lugar a dudas que un software es 100% seguro. Ante este panorama, hay dos tendencias mayoritarias a la hora de hacer públicas las vulnerabilidades. Por un lado, están los que piensan que cuando se descubre un fallo ha de hacerse público de forma inmediata. En este escenario, la publicación de una vulnerabilidad es el pistoletazo de salida para una carrera entre el desarrollador para sacar el parche y los "malos" para lograr explotarla. Esta política es conocida como full disclosure . Por otro lado, tenemos a los siguen una política responsible disclosure , que abogan por mantener la vulnerabilidad en secreto hasta la salida del parche por parte del desarrollador. Sin entrar en cuestiones filosóficas que no...

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad...