¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos del diseño digital

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de máquina virtual11 min de lectura10 comandos

Un chip se describe antes de construirlo

El chip de un teléfono tiene miles de millones de interruptores. Nadie los dibuja uno por uno. Un ingeniero escribe el circuito como texto, en un lenguaje de descripción de hardware, y un programa ejecuta ese texto para ver qué haría el chip mucho antes de fabricarlo.

Al terminar esta lección

Nota

Puedo simular un circuito pequeño escrito en Verilog y leer la tabla y la forma de onda que produce.

Palabras clave

  • Módulo: un circuito, con entradas y salidas.
  • Banco de pruebas: un módulo que maneja otro y muestra lo que sale.
  • Reloj: una señal que sube y baja a un ritmo constante.
  • Forma de onda: cómo cambian las señales a medida que pasa el tiempo.
  • Simulación: ejecutar la descripción en un ordenador.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿Cuánto es 1 + 1 en binario? 2. ¿Qué da una puerta AND con dos 1? 3. ¿Qué es un bit? Necesitarás la primera respuesta enseguida.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de arriba de esta lección. Este laboratorio es una máquina Ubuntu entera solo para ti, así que tarda un poco más en arrancar que un contenedor. Cada botón Ejecutar escribe su comando en el terminal de la máquina, uno tras otro en la misma sesión. Si uno dice que la máquina todavía está arrancando, espera unos segundos y púlsalo de nuevo. Para verlos, o para escribir los tuyos, pulsa Abrir el terminal en la barra.

Un circuito es un texto corto

Tus archivos están en la carpeta hdl. El primer comando entra en ella y el siguiente muestra half_adder.v. Un semisumador suma dos bits. Es un solo módulo con dos entradas, a y b, y dos salidas. sum es a ^ b, que es XOR, y carry es a & b, que es AND.

Comando
cd hdl

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
cat half_adder.v

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un banco de pruebas lo ejecuta y muestra la tabla

La herramienta es Icarus Verilog. iverilog compila el circuito y su banco de pruebas en un solo programa y no muestra nada si todo va bien. vvp ejecuta ese programa. El banco de pruebas prueba las cuatro entradas y muestra una tabla de verdad: la fila 1 1 da carry 1 y sum 0, que es 10 en binario, así que 1 + 1 = 2.

Comando
iverilog -o /tmp/half half_adder.v half_adder_tb.v

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
vvp /tmp/half

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Qué entradas ponen carry a 1? Respuesta: solo a = 1 y b = 1, la fila en la que la suma no cabe en un bit.

Un error frecuente

Advertencia

Mucha gente cree que un archivo Verilog se ejecuta línea por línea, como un script de Python. No es así. Un módulo describe piezas que existen todas a la vez, y una línea assign es un cable que siempre sigue a sus entradas. Léelo como un dibujo, no como una lista de pasos.

Un reloj y una forma de onda

counter.v es un contador de 4 bits: q sube de uno en uno cada vez que clk sube, y rst lo pone a 0. Su banco de pruebas crea un reloj y guarda todas las señales en un archivo VCD, out/counter.vcd. El segundo Ejecutar muestra q tras 112 unidades de tiempo: 10. El tercero convierte el archivo en texto, una fila por señal y una columna por cada 5 unidades de tiempo. # es 1 y _ es 0. q se queda en 0 mientras rst está alto, y luego sube de uno en uno cada vez que sube clk. dut.q es la misma señal dentro del contador.

Comando
iverilog -o /tmp/counter counter.v counter_tb.v

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
vvp /tmp/counter

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
vcd2txt out/counter.vcd 5

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Cuántas veces subió clk mientras q pasaba de 0 a 10? Respuesta: diez, una por cada paso de la cuenta.

El mismo circuito en VHDL

VHDL es el otro lenguaje habitual. GHDL lo ejecuta en tres pasos. ghdl -a analiza los archivos y los comprueba. ghdl -e elabora el banco de pruebas, lo que construye un programa. ghdl -r lo ejecuta, y el banco de pruebas informa de las cuatro filas de la misma tabla de verdad: a, b, carry y sum.

Comando
ghdl -a half_adder.vhd half_adder_tb.vhd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
ghdl -e half_adder_tb

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
ghdl -r half_adder_tb

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprobación final

Consejo

Responde sin volver atrás. 1. ¿Qué hace un banco de pruebas? 2. ¿Qué hace vvp? 3. ¿Cuáles son los tres pasos de GHDL? 4. ¿Qué muestra cuándo cambia una señal? Respuestas: maneja un módulo y muestra lo que sale; ejecuta la simulación compilada; analizar, elaborar, ejecutar; una forma de onda. Ahora abre el README.md de tu carpeta personal con cat ~/README.md: tú escribes el sumador completo y el contador.

Para el profesorado

Consejo

Esta lección es un pequeño ejemplo de una lección que se trabaja en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada alumno. Se trabaja en un laboratorio de VM: cada alumno tiene su propia máquina Ubuntu con los simuladores instalados, y un botón Ejecutar escribe en su terminal y muestra lo que se imprimió. Puntos clave: 1. Un módulo es un circuito con entradas y salidas. 2. Un banco de pruebas lo maneja y muestra la tabla de verdad. 3. Un reloj hace que un circuito cambie paso a paso, y una forma de onda lo muestra. Error frecuente: leer Verilog como pasos en orden. Material: el laboratorio y un navegador. Consejo: antes del vvp, pida a la clase que prediga las cuatro filas. El propio laboratorio tiene una comprobación que califica tres diseños con bancos de pruebas ocultos. Copie la lección en su propio módulo para cambiarla, o construya una desde cero con el menú Laboratorio del constructor de lecciones.

Sobre este laboratorio y su código: Laboratorio de Diseño digital: Verilog, VHDL y yosys en una VM Ubuntu privada

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.