Un circuito digital implementa una función booleana mediante compuertas lógicas conectadas con cables. Cada compuerta es una función discreta elemental; al combinarlas se construyen calculadoras, memorias y procesadores.
Los temas anteriores estudiaron funciones booleanas de forma abstracta: tablas de verdad, álgebra y leyes de simplificación. En hardware, esas funciones se materializan como **circuitos digitales** que procesan señales eléctricas con dos niveles estables: bajo (0) y alto (1).
Cada circuito combinacional define una función discreta f : Bⁿ → Bᵐ: varias entradas binarias producen una o más salidas binarias, sin memoria interna del estado previo.
Las **compuertas** son los bloques elementales. Cada una implementa una operación booleana básica:
| Compuerta | Símbolo lógico | Función |
|---|---|---|
| NOT | ¬p | Invierte la entrada |
| AND | p ∧ q | 1 solo si ambas entradas son 1 |
| OR | p ∨ q | 1 si al menos una entrada es 1 |
| XOR | p ⊕ q | 1 si las entradas son distintas |
| NAND | ¬(p ∧ q) | Negación de AND (completa universalmente) |
Con NOT, AND y OR (o solo NAND) puede construirse cualquier función booleana de n variables.
Para implementar una función booleana como circuito:
Semisumador (half adder): suma dos bits sin acarreo de entrada. Produce suma (S) y acarreo (C):
El semisumador es un ejemplo de función discreta con **dos salidas** definida sobre B² → B². Combinando varios sumadores se construye la aritmética entera del procesador.
Selecciona un circuito, asigna valores a las entradas p y q, y observa cómo las señales recorren las compuertas hasta las salidas. Los nodos en verde representan señal alta (1) y en rojo señal baja (0).
Un circuito combinacional puede simularse en software modelando cada compuerta como una función y propagando señales de entrada a salida.
const AND = (a, b) => a && b;
const OR = (a, b) => a || b;
const NOT = (a) => !a;
const XOR = (a, b) => Boolean(a) !== Boolean(b);
// Circuito: f(p,q) = p AND (NOT q)
function circuitoEjemplo(p, q) {
const nq = NOT(q);
return AND(p, nq);
}
// Semisumador: dos salidas [suma, acarreo]
function semisumador(p, q) {
return [XOR(p, q), AND(p, q)];
}
console.log("p AND (NOT q) con p=1,q=0:", circuitoEjemplo(true, false));
// p AND (NOT q) con p=1,q=0: true
console.log("Semisumador p=1,q=1:", semisumador(true, true));
// Semisumador p=1,q=1: [false, true] → S=0, C=1
// Tabla de verdad del semisumador
for (const p of [0, 1]) {
for (const q of [0, 1]) {
const [s, c] = semisumador(!!p, !!q);
console.log(`p=${p} q=${q} → S=${+s} C=${+c}`);
}
}
Los circuitos digitales son la materialización física de las funciones booleanas. Desde una compuerta AND hasta un microprocesador, la lógica discreta gobierna el procesamiento de información en hardware.
Con esto cerramos el bloque de lógica booleana y circuitos. En el próximo tema abordaremos las **aplicaciones de relaciones discretas en programación**, integrando conjuntos, relaciones, funciones y lógica en problemas prácticos de desarrollo de software.