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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Bit | un valor que es 0 o 1 | |
| Puerta lógica | un circuito que calcula un bit a partir de otros | AND |
| Tabla de verdad | la lista de todas las entradas y la salida de cada una | |
| AND | da 1 solo si todas las entradas valen 1 | |
| XOR | da 1 si las dos entradas son distintas | |
| Módulo | un 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
| a | b | AND | OR | XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Las tres puertas con bits sueltos
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 abierta | Llave puesta | Suena |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
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
cat ~/hdl/half_adder.vSe 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
sed 's/a ^ b/a | b/' ~/hdl/half_adder.v > /tmp/ha_or.vSe 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
iverilog -o /tmp/ha_or /tmp/ha_or.v ~/hdl/half_adder_tb.vSe 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
vvp /tmp/ha_orSe 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.