Electrónica Digital · Tema 17

Diseño combinacional

El método completo: spec → tabla → minterms → puertas → mesa. Con un ejemplo que no simplifica.

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

1 spec clara →2 tabla 2^N →3 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

4 mínimo →5 chips →6 verificar todo
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

Revisión previa a Vcc.
ÍtemVerificar
Vcc/GND14/7 en cada chip, 100 nF pegado
FlotantesToda entrada a algo (AND→1, OR→0)
SalidasNinguna peleando con otra (sin cortos)
TablaAnotada 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

  1. 1
    Spec = requerimiento.

    Escrito antes de codificar: “exactamente dos” sin ambigüedad.

  2. 2
    Tabla = tests.

    8 casos exhaustivos: coverage 100 % antes de soldar.

  3. 3
    Simplificar = 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.

LABORATORIO 17

Diseñador

Exact-2 · A=1 B=1 C=0 → 1

Esperado (tabla)1
Circuito (mínimo)1
Puertas3 AND-3 + OR-3
EstadoIguales ✓

Exact-2 1,1,0: tabla 1, circuito 1.

Preguntas para explorar

  1. Exact-2 con 1,1,1: ¿esperado? ¿Circuito? ¿Por qué 0?
  2. Pasá a mayoría con 1,1,1 y a paridad con 1,1,1. ¿Valores? ¿Qué distingue cada spec?
  3. ¿Qué spec usa menos puertas? ¿Cuál es irreducible?
Ver respuestas sugeridas
  1. 0 y 0: tres no es “exactamente dos”. La spec manda, no la intuición.
  2. Mayoría 1 (≥2), paridad 1 (3 impares): misma fila, tres decisiones distintas.
  3. 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.