01 · Punto de partida
Exactamente dos de tres
Votación calificada: Y = 1 si hay exactamente dos votos (ni uno, ni tres). Σm(3,5,6) sin pares adyacentes: la forma directa es la mínima. El método igual aplica, paso a paso.
- ¿Cuáles son los 6 pasos?
- ¿Cómo se escribe una spec sin huecos?
- ¿Cuándo la simplificación no achica?
- ¿Cómo se verifica sin osciloscopio?
02 · Pasos 1–3
Spec, tabla, minterms
- Spec
- Entradas con nombre, salida con nombre, cada caso borde escrito: “¿111 vale? No: son tres, no dos.” Sin huecos.
- Tabla
- 8 filas para 3 vars, orden binario: exactamente-dos marca m3, m5, m6. Verificar con el cliente (vos).
- Minterms
- Σm(3,5,6): la firma. Buscar vecinos: 3^5=6, 3^6=5, 5^6=3 (2 bits cada par): sin adyacencias.
03 · Pasos 4–6
Mínimo, chips, mesa
- Mínimo
- Sin pares no hay poda: F = ~A·B·C + A·~B·C + A·B·~C (3 AND-3 + 1 OR-3 + 3 NOT). A veces directa es mínima.
- Chips
- AND-3 no hay en HC básico (HC11 triple sí): 1 HC11 + 1 HC4075(OR-3)… o 3 NAND×? Con dedicados: 2 chips + NOTs.
- Mesa
- Recorrer las 8 filas con botones y anotar: 8/8 o no anda. Son 3 minutos que ahorran 3 horas.
04 · Checklist
Antes de energizar
| Ítem | Verificar |
|---|---|
| Vcc/GND | 14/7 en cada chip, 100 nF pegado |
| Flotantes | Toda entrada a algo (AND→1, OR→0) |
| Salidas | Ninguna peleando con otra (sin cortos) |
| Tabla | Anotada en papel antes de cablear |
05 · Método en código
Pipeline spec→puertas
De la lambda a los minterms, y verificación del mínimo propuesto.
Python en tu navegador. Escribí tu spec y que salgan los minterms.
def disenar(spec, n=3):
mins = [i for i in range(2**n)
if spec(*[(i >> (n-1-k)) & 1 for k in range(n)])]
print(f"Σm({', '.join(map(str, mins))})")
return mins
exact2 = disenar(lambda a, b, c: (a + b + c) == 2)
mayoria = disenar(lambda a, b, c: (a + b + c) >= 2)
Exactamente-dos → Σm(3, 5, 6). Mayoría → Σm(3, 5, 6, 7). ¿Qué da “al menos uno”?
Probar el mínimo
def check(orig_mins, prop, n=3):
ok = all(((i in orig_mins) == prop(*[(i >> (n-1-k)) & 1 for k in range(n)])) for i in range(2**n))
print("minimo valido" if ok else "MAL")
return ok
check(exact2, lambda a, b, c: ((not a) and b and c) or (a and (not b) and c) or (a and b and (not c)))
check(mayoria, lambda a, b, c: (a and b) or (a and c) or (b and c))
06 · Analogía programador
TDD en silicio
- 1Spec = requerimiento.
Escrito antes de codificar: “exactamente dos” sin ambigüedad.
- 2Tabla = tests.
8 casos exhaustivos: coverage 100 % antes de soldar.
- 3Simplificar = refactor.
Mismo verde, menos código. A veces el directo ya es mínimo: no refactorizar por deporte.
07 · Exploración
Laboratorio: diseñador
Tres specs y sus circuitos mínimos: mové A/B/C y compará esperado vs implementado.
Diseñador
Exact-2 · A=1 B=1 C=0 → 1
Exact-2 1,1,0: tabla 1, circuito 1.
Preguntas para explorar
- Exact-2 con 1,1,1: ¿esperado? ¿Circuito? ¿Por qué 0?
- Pasá a mayoría con 1,1,1 y a paridad con 1,1,1. ¿Valores? ¿Qué distingue cada spec?
- ¿Qué spec usa menos puertas? ¿Cuál es irreducible?
Ver respuestas sugeridas
- 0 y 0: tres no es “exactamente dos”. La spec manda, no la intuición.
- Mayoría 1 (≥2), paridad 1 (3 impares): misma fila, tres decisiones distintas.
- Paridad-3 (XORs, sin simplificar más); Exact-2 es irreducible en AND/OR (sin pares).
08 · Comprensión
Confusiones frecuentes
«Empiezo por las puertas»
Spec y tabla primero: cablear sin tabla es programar sin tests. El silicio no tiene debugger.
«Siempre se simplifica»
Exact-2 no tiene pares: la directa es mínima. Simplificar lo irreducible es perder tiempo.
«Verifico 3 filas y listo»
Las 8 o nada: el bug vive en la fila que no probaste (típicamente la 111 o la 000).
«Documento después»
La tabla en papel ANTES de cablear: después nadie anota, y el circuito queda huérfano.
09 · Práctica guiada
Ejercicios de método
Ejercicio 1: “al menos uno”
Spec, minterms y mínimo de Y = 1 si alguna entrada es 1 (3 vars). Verificá con disenar().
Ver solución razonada
Σm(1–7) = A+B+C: todo menos m0. Un OR-3 directo: 7 minterms, 1 puerta.
Ejercicio 2: detector de 101
Y = 1 solo con A=1,B=0,C=1. Minterms, mínimo, chips. ¿Simplifica?
Ver solución
Σm(5) = A·~B·C: un minterm solo no simplifica. 1 AND-3 + 1 NOT: trivial y perfecto.
Ejercicio 3: verificación total
Montá Exact-2 (o simula) y recorré las 8 filas. ¿Alguna difiere? ¿Cuál sería la más sospechosa?
Ver solución
8/8 ✓. Sospechosas: 111 (¿tres cuenta?) y 000 (¿cero cuenta?): los bordes siempre.
10 · Síntesis
Ideas para recordar
- Spec → tabla → minterms → mínimo → chips → 8/8.
- Exact-2 = Σm(3,5,6), irreducible: directa es mínima.
- Sin pares no hay poda (3^5=6: 2 bits).
- Checklist antes de Vcc; tabla en papel.
- Bordes 000/111: verificar siempre.
Método dominado. Ahora bloques que ahorran diseño: en el próximo tema, multiplexores.