¿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

Puertas lógicas y tablas de verdad

Después de esta lección: Puedo leer una tabla de verdad y escribir la puerta que la produce.

Lección de 45 min5 comandosLaboratorio de Diseño digital: Verilog, VHDL y yosys en una VM Ubuntu privada

Una alarma con dos condiciones

Una puerta lógica es un circuito muy pequeño que toma uno o dos bits y entrega otro bit según una regla fija. Con muchas puertas juntas se construye desde un reloj digital hasta un procesador.

Piensa en la alarma de un local: suena solo si la puerta está abierta y la llave no está puesta. Esa regla es una puerta. Hoy la describirás con una tabla y con una línea de código.

Al final de esta lección

Nota

Puedo leer una tabla de verdad y escribir la puerta que la produce.

Palabras clave

PalabraQué significaEjemplo
Bitun valor que es 0 o 1
Puerta lógicaun circuito que calcula un bit a partir de otrosAND
Tabla de verdadla lista de todas las entradas y la salida de cada una
ANDda 1 solo si todas las entradas valen 1
XORda 1 si las dos entradas son distintas
Móduloun circuito con entradas y salidas, escrito en Verilog

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

AND, OR y XOR combinan dos bits

Una puerta AND da 1 solo si las dos entradas valen 1. Una puerta OR da 1 si al menos una entrada vale 1. Una puerta XOR da 1 si las dos entradas son distintas.

En Verilog se escriben &, | y ^. Python usa los mismos signos con los bits, así que puedes probarlas ya.

Tabla de verdad de AND, OR y XOR

abANDORXOR
00000
01011
10011
11110

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Las tres puertas con bits sueltos

Comando
python3 -c "print(1 & 1, 1 | 0, 1 ^ 1)"

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

Una tabla de verdad sale de una regla

Se escribe una fila por cada combinación posible de las entradas. Con dos entradas hay cuatro filas, con tres hay ocho. Cada entrada nueva duplica las filas.

Para la alarma, las entradas son la puerta (1 si está abierta) y la llave (1 si está puesta). La regla es: suena si la puerta está abierta y la llave no está puesta. Esa condición de "no" se escribe ~ en Verilog.

Ejemplo: la alarma del local

Puerta abiertaLlave puestaSuena
000
010
101
110

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Verilog escribe cada puerta en una línea

Un módulo es un circuito con entradas y salidas. La palabra assign une una salida con una expresión y se comporta como un cable: la salida sigue siempre a las entradas.

No es una lista de pasos como en Python. Todas las líneas existen a la vez. Los siguientes Runs leen el semisumador que trae el laboratorio y cambian una de sus puertas en una copia.

Lee el semisumador del laboratorio

Comando
cat ~/hdl/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.

Copia el módulo cambiando XOR por OR

Comando
sed 's/a ^ b/a | b/' ~/hdl/half_adder.v > /tmp/ha_or.v

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

Compila la copia con el banco de pruebas

Comando
iverilog -o /tmp/ha_or /tmp/ha_or.v ~/hdl/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.

Mira la tabla de la copia

Comando
vvp /tmp/ha_or

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

Un error frecuente

Advertencia

Mucha gente cree que OR y XOR dan lo mismo. Solo se separan en la fila 1 y 1: OR da 1 y XOR da 0. XOR significa "uno o el otro, pero no los dos".

Para ir más lejos

Una puerta NAND es un AND con la salida invertida: da 0 solo con las entradas 1 y 1. Si cambias a ^ b por ~(a & b) en una copia, la columna sum sale 1, 1, 1, 0.

Con NAND se puede construir cualquier otra puerta. Apunta cómo harías un NOT con una sola NAND.

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 este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.