100% encontró este documento útil (4 votos)
2K vistas484 páginas

Principios de Diseño Digital

Principios de Diseño Digital-Uned - Daniel D. Gajski - Por JMLocke

Cargado por

Valentina Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (4 votos)
2K vistas484 páginas

Principios de Diseño Digital

Principios de Diseño Digital-Uned - Daniel D. Gajski - Por JMLocke

Cargado por

Valentina Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

IG

I
CONSULTORES EDITORIALES:

SEBASTIÁN DORMIDO BENCOMO


Departamento de Informática y Automática .
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA

LUIS JOYANES AGUlLAR


Departamento de Lenguajes, Sistemas Informáticos e Ingeniero del Software
UNIVERSIDAD PONTIF1CIA DE SALAMANCA en Madrid
ELcCT-IJ\Cr 2'iS(

Principios
de diseño digital

Daniel D. Gajski

Traducción:
Carlos García Puntonet
Julio Ortega Lopera
Francisco José Pelayo Valle
Beatriz Prieto Campos
Departamento de Electrónica y Tecnología de Computadores
Universidad de Granada

Coordinación de la traducción:
Alberto Prieto Espinosa
Catedrático de Arquitectura y Tecnología de Computadores
Universidad de Granada

Revisión técnica:
Mateo Valero Cortés
Antonio González Colás
Departamento de Arquitectura y Tecnología de Computadores
Universidad Politécnica de CataluM

" PRENTICE HALL


Madrid' Upper Saddle River' Londres' México' Nueva Dellii • Rio de Janeiro
Santafé de Bogotá· Singapur • Sydney • Tokio' Toronto
/ DalOS de calalogación bibliográfica

DANIEL D. GAJSKI
Principios de diseño digital
PRENTICE HALL mERlA. Madrid, 1997

ISBN: 84-8322-004-0
MATERlA:
Infonnática 631

Fonnato 195 x 250 Páginas 488

DANIEL D. GAJSKI
Principios de diseño digital

No está permitida la reproducción total o parcial de esta obra


ni su trasmisión o tratamiento por cuaJquier medio o método
sin autorización escrita de la EditoriaJ

DERECHOS RESERVADOS
© 1997 respecto a la primera edición en español por:
PRENTICE HALL Intemational (UK) Ltd.
Campus 400, Maylands Avenue
Hemel Hempstead
Hertfordsbire, HP2 7EZ
Simon & Scbuster Intemational Group

ISBN: 84-83~2-004-0
Depósito Legal: TO-1409-1998
l.' reimpresión: 1998
Traducido de:
PRINCIPLES OF DIGITAL DESIGN
PRENTICE HALL, !NC. - Simon & Schuster Intemational Group
A Viacom Company
Copyrigbt © MCMXCVII
ISBN: 0-13-301 144-5

Edición en español:
Editor: Andrés Otero
Diseño de cubierta: DIGRAF
Composición: REPROGRÁFICAS MALPE, S.A.
Impreso por: GRAFlLLES (Grupo Fuproin)

IMPRESO EN ESPAÑA - PRINTED !N SPAIN

Esle libro ha sido impreso con papel y tinw ecológicas


Este libro está dedicado a mi esposa


ANA
por su paciencia y su apoyo incondicional
tanto en los momentos fáciles como en los difíciles .
durante este proyecto.

I
Contenido

PRÓLOGO XllJ

AGRADECIMIENTOS XIX

1. INTRODUCCiÓN 2

1.1. Representaciones del diseño 4


1.2. Niveles de abstracción 10
1.3. Proceso de diseño 12
1.3.1. Especificaciones del diseño 12
1.3.2. Desarrollo de una biblioteca de componentes 13
1.3.3. Síntesis del diseño 14
1.3.4. Análisis del diseño 14
1.3.5. Documentación 15
1.3.6. Fabricación 16
1.4. Herramientas CAD 16
1.4.1. Captura y modelado del diseño 16
1.4.2. Herramientas de síntesis 17
1.4.3. Verificación y simulación 18
1.4.4. Diseño físico 19
1.4.5. Test 19
1.5. Proceso típico de diseño 20
1.6. Organización del libro 21
1.7. Resumen del capítulo 23
1.8. Lecturas adicionales 24


vili Principios de diseño digital

!.9. Problemas 25

2. TIPOS DE DATOS Y REPRESENTACIONES 28

2.1. Sistemas numéricos posicionales 30


~.2 . Números hexadecimales y octales 31
2.3. Conversiones entre sistemas numéricos 33
2.4. Suma y resta de números binarios 36
2.5. Representación de números negativos 39
2.5.!. Representación en signo y magnitud 39
2.5.2. Sistema numérico en complemento 41
2.6. Suma y resta en complemento a dos 43
2.6.l. Reglas para sumar 44
2.6.2. Reglas para restar 45
2.7. Multiplicación binaria 47
2.8. División binaria 50
2.9. Números en coma flotante 51
2.10. Códigos binarios para números decimales 54
2.1!. Códigos de caracteres 56
2.12. Códigos para detección y corrección de errores 57
2.12.1. Códigos de detección de errores 59
2.12.2. Códigos de corrección de errores 61
2.13 . Códigos Harnming 62
2.14. Resumen del capítulo 65
2.15. Lecturas adicionales 66
2.16. Problemas 67

3. ÁLGEBRA BOOLEANA Y DISEÑO L6GICO 70

3.!. Propiedades algebraicas 72


3.2. Deftnición axiomática del álgebra booleana 73
3.3. Teoremas básicos del álgebra booleana 76
3.4. Funciones booleanas 79
3.4.1. Complemento de una función 80
3.4.2. Manipulaciones algebraicas 81
3.5. Formas canónicas 83
3.6. Formas normalizadas 89
3.7. Otras operaciones lógicas 92
3.8. Puertas lógicas digitales 94
3.9. Ampliación a varias entradas y varios operadores 99
3.10. Implementaciones de puertas 103
3.10.1. Niveles lógicos 104
3.10.2. Márgenes de ruido 105
Contenido ix

3.10.3. Conectividad de salida 107


3.10.4. Disipación de potencia 109
3.1 0.5. Retardo de propagación 109
3.10.6. Familias lógicas bipolares 111
3.10.7. Familias lógicas MOS 114
3.11. Tecnología VLSI 117
3.12. Resumen del capítulo 125
3.13. Lecturas adicionales 126
3. 14. Problemas 127

4. SIMPLIFICACiÓN DE FUNCIONES BOOLEANAS 130

4.1. Representación con mapas 133


4.2. Método de simplificación con mapas 143
4.3. Condiciones de indiferencia 147
4.4. Método de tabulación 150
4.4.1. Generación de implicantes primos 150
4.4.2. Generación de la cobertura mínima 153
4.5. Traslación a la tecnología de arrays de puertas 157
4.6. Traslación a la tecnología de bibliotecas específicas 166
4.7. Diseño libre de riesgos 170
4.8. Resumen del capítulo 174
4.9. Lecturas adicionales 175
4.10. Problemas 175

5. COMPONENTES COMBINACIONALES 178

5.1. Sumadores con acarreo en cascada 180


5.2. Sumadores con acarreo anticipado 182
5.3. Sumadores/restadores 187
5.4. Unidad lógica 188
5.5. Unidad aritmético- lógica 189
5.6. Decodificadores 193
5.7. Selectores 195
5.8. Buses 199
5.9. Codificadores de prioridad 200
5.10. Comparadores de magnitud 203
5.11. Rotadores y desplazadores 206
5.12. Memorias de sólo lectura 209
5.13. Arrays lógicos programables 212
5.14. Resumen del capítulo 214
5.15. Lecturas adicionales 216
5.16. Problemas 216
,
x Principios de diseño digital

6. LÓGICA SECUENCIAL 220

6.1. Latch SR 223


6.2. Latch SR sincronizado 226
6.3. Latch D sincronizado 227
6.4. Biestables 229
6.5. Tipos de biestables 235
6.6. Análisis lógico secuencial 240
6.7. Modelo de máquina de estados finitos 247
6.8. Síntesis lógica secuencial 249
6.9 . . Reproducción del modelo FSM 252
6.10. Minimización de estados 254
6.11. Codificación de estados 258
6.1 2. Elección de los elementos de memoria 265
6.13. Optimización y temporización 268
6.14. Resumen del capítulo 270
6.15. Lecturas adicionales 271
6.16. Problemas 271

7. COMPONENTES DE MEMORIZACiÓN 276

7.1. Registros 278


7.2. Registros de desplazamiento 281
7.3. Contadores 283
7.4. Contador BCD 286
7.5. Contador asíncrono 287
7.6. Bancos de registros 290
7.7. Memorias de acceso aleatorio 293
7.8. Pilas de inserción/extracción 302
7.9. Colas primero en entrar, primero en salir 306
7.10. Caminos de datos sencillos 311
7.11. Caminos de datos generales 318
7.12. Diseño de la unidad de control 322
7.13. Resumen del capítulo 324
7.14. Lecturas adicionales 325
7.1 5. Problemas 325

8. DISEÑO DE TRANSFERENCIA ENTRE REGISTROS 328

8.1. Modelo de diseño 330


8.2. Definición FSMD 332
8.3. Esquema de la máquina algorítmica de estados 338
8.4. Esquema de síntesis ASM 346
Contenido xi

8.5. Compartición de registro (asociación de variables) 353


8.6. Compartición de la unidad funcional (asociación de operadores) 361
8.7. Compartición de bus (asociación de conexiones) 370
8.8. Asociación de registros 373
8.9. Encadenamiento y multiciclo 376
8.10. Segmentación de la unidad funcional 379
8.11. Segmentación del camino de datos 382
8.12. Segmentación de control 386
8.13. Planificación 389
8.14. Resumen del capítulo 399
8.15. Lecturas adicionales 400
8.16. Problemas 400

9. DISEÑO DEL PROCESADOR 404

9.1. Conjuntos de instrucciones 407


9.2. Modos de direccionamiento 412
9.3. Diseño del procesador 416
9.4. Diseño del conjunto de instrucciones 417
9.5. Diseño CISC 421
9.6. Conjunto reducido de instrucciones 430
9.7. Diseño RISC 434
9.8. Avance de datos 438
9.9. Predicción de saltos 442
9.10. Resumen del capítulo 446
9.11. Lecturas adicionales 446
9.12. Problemas 447

APÉNDICE: EXPER IMENTOS DE LABORATOR IO 449

íNDICE 461
,

Prólogo

Situación actual del diseño digital

Con 'los avances de la tecnología VLSI, se pueden fabricar microchips que con-
tienen cada uno varios millones de transistores. Como el diseño a mano de estos
microchips es casi imposible, ha surgido la industria CAD para proporcionar
herramientas software con objeto de diseñar estos complejos microchips. Por con-
siguiente, la mayoría de las técnicas de diseño digital que se enseñaban, están
ahora encapsuladas en herramientas CAD, y en la actualidad los diseñadores pue-
den concentrarse en el proceso de diseño global, como un todo, desde la defini-
ción del producto hasta su fabricación . Por todo esto, los diseñadores tienen que
dominar varias técnicas de análisis de requisitos, especificaciones de reproduc-
ción, modelado del diseño, co-diseño softwarelhardware, síntesis del microchip,
verificación, simulación, y tests. En este sentido, se ha introducido la noción de
diseño experto, dando un vuelco desde un conocimiento exhaustivo de las posi-
bles técnicas de diseño, hacia el conocimiento de los principios, y la capacidad de
usar herramientas CAD para explorar las diversas alternativas de diseño y técni-
cas de implementación.

Objetivos del texto

Principios de diseño. Este libro está concebido para proporcionar una compren-
sión detallada de los principios fundamentales del diseño sin exigir a los estu-
diantes la memorización de muchos detalles tecnológicos potencialmente confu-
sos. Hemos conseguido esta simplificación introduciendo bibliotecas de compo-

xili
xiv Principios de diseño digital

nentes genéricos que reflejan restricciones prácticas de diseño, tales como coste y
retardo. Esta biblioteca genérica se usa para explicar todos los conceptos que se
presentan y para implementar todos los ejemplos que están resueltos en el texto.
Proceso de diseño. Tomado como un todo, este libro está estructurado en
torno al proceso de diseño global en vez de dirigirse particulannente a las técni-
cas de diseño relevantes dentro de una fase concreta del mismo. Por esta razón,
explicamos el proceso de diseño digital tanto al principio como a lo largo del
libro, enfatizando el papel de cada tarea dentro del contexto de los amplios pro-
cesos de diseño.
Relación entre teoría y práctica. Desgraciadamente, muchos textos sobre
diseño digital tienden a destacar los principios básicos, o, inversamente, a discu-
tir con gran detalle teorías que raramente se usan. Para contrarrestar estas defi-
ciencias se ha planificado este libro de forma que desde el principio haya una rela-
ción clara entre los principios y el diseño práctico. Los fundamentos teóricos se
introducen sólo cuando ayudan a simplificar ciertas explicaciones o técnicas de
diseño.
Ejemplos detallados. En cada Capítulo se presentan varios ejemplos claros
que muestran cada paso del proceso de diseño. Creemos que los ejemplos deta-
llados son la mejor forma de aprendizaje, ya que los estudiantes pueden deducir
todos los pasos del diseño, evaluar las alternativas y cuestionarse las razones que
hay tras todas las decisiones. Los estudiantes también prefieren ejemplos detalla-
dos a lo largo del texto, ya que a través de ellos pueden comprender fácilmente el
significado de los nuevos conceptos. De esta manera, se evitan los errores en la
definición de conceptos que se encuentran frecuentemente en los ejemplos trivia-
les; sin embargo, los ejemplos detallados dejan al estudiante combinar los con-
ceptos del proceso de diseño y deducir por qué y cómo ir de un paso a otro del
diseño.
Diseño de transferencia entre registros. Además de los fines generales indi-
cados, el libro tiene una meta más específica, el aprendizaje de la metodología de
diseño, más allá de los niveles secuencial y lógico, abordando las técnicas de dise-
ño de transferencia entre registros como método general de diseño y también de
procesadores y microchips de aplicación específica. La finalidad de la exposición
del diseño de transferencia entre registros, es mostrar el vínculo perdido entre el
diseño lógico y secuencial, que se ve en el primer año de diseño de computadores
y la organización de computadores, usualmente contemplada en un segundo curso
de diseño de computadores. Esta materia se omite en mucho libros de texto,
dejando al estudiante que adivine cómo se usan los sumadores, contadores y
memorias en el diseño de los procesadores y otros microchips.

Temas destacados

Proceso moderno de diseño. En el primer capítulo se introduce la disciplina de


diseño de sistemas, definiendo el proceso de diseño y sus tareas principales. Este
capítulo sirve como hase de exposiciones posteriores más detalladas así como
Prólogo xv

para proporcionar un esquema de la organización de todo el libro. También se dis-


cute la tecnología de un diseño moderno y las herramientas CAD que facilitan su
uso. Se presenta una breve visión del proceso de fabricación y se discute la rela-
ción entre diseño y fabricación. El objetivo del Capítulo 1 es motivar al estudian-
te a comprender el diseño de sistemas dándole una visión amplia del papel de la
ciencia del diseño en el mundo real.
Números binarios y representaciones de datos_ En el Capítulo 2 se presen-
tan modelos de datos usados por los sistemas digitales. Como es crucial una repre-
sentación binaria inteligible para comprender cómo funcionan los sistemas digi-
tales, se explican minuciosamente los números binarios (tanto en punto flotante
como fijo) así como varios algoritmos para implementar operaciones aritméticas,
que se usarán en capítulos posteriores. También se explican varios tipos de mode-
los de datos y cómo usarlos eficientemente.
Impacto lie la tecnología VLSI. Las técnicas de diseño siempre deben poder
adaptarse a ciertos compromisos entre los requisitos de un sistema dado y la tec-
nología disponible para su implementación. Por esta razón se introducen muy
pronto los principios y restricciones de la tecnología VLSI y se discute en casi
cada capítulo su impacto sobre varias técnicas de diseño. Sin embargo, este libro
no requiere un conocimiento de electrónica, ni trata de circuitos eléctricos. En su
lugar, se usan componentes que representan operadores aritméticos y booleanos
estándar así como estructuras de datos tanto sencillas como complejas. El libro no
utiliza bibliotecas de componentes concretas como TTL o bibliotecas CMOS
comercialmente disponibles, porque el libro se ha escrito bajo la suposición de
que comprender los principios de varios componentes y conocer cómo usarlos es
más importante que saber los nombres exactos y tipos de encapsulados de todos
los circuitos comercialmente disponibles. Por este motivo se usan componentes
genéricos independientes de cualquier tecnología patentada.
Enfoque actual del diseño lógico y secuenciaL Las bibliotecas de diseño
actuales intentan ser pequeñas para simplificar tanto su mantenimiento como los
algoritmos de diseño y las herramientas CAD. A través de este libro, se usa una
sencilla biblioteca de puertas y se construyen todos los componentes de alto nivel
que se necesitan a partir de esta biblioteca básica. Los Capítulos 5 y 7, por ejem-
plo, introducen todos los componentes secuenciales y combinacionales que se
necesitan para el diseño de procesadores y circuitos integrados de aplicación
específica. Al mismo tiempo, creo que el hecho de que existan herramientas CAD
adecuadas, no debe hacer pasar por alto que estas también pueden aliviar a los
diseñadores de la necesidad de tratar con técnicas de optimización manual com-
plejas. Por esta razón, se enfatizan los fines básicos y principios de optimización
y se muestra el proceso de diseño moderno.
Enfoque formal al diseño de transferencia entre registros. En el pasado,
las técnicas de diseño por encima del nivel de síntesis secuencial se han conside-
rado un arte y han ocupado muy poco espacio en los textos de diseño. Para cubrir
este hueco, en el Capítulo 8 se introduce el concepto de máquina de estados ftni-
tos con un camino de datos. Una vez 'definido este concepto, se muestra cómo
materializar los algoritmos arbitrarios, expresados en términos de un diagrama de
xvi Principios de diseño digital

flujo O de diagramas de transferencia entre registros, en un hardware constituido


por un camino de datos y una unidad de control, formados por componentes
secuenciales y combinacionales determinados, definidos en los Capítulos 5 y 7.
Diseño del procesador. En el Capítulo 9 se muestra cómo se puede diseñar
una CPU usando el formalismo y los métodos de diseño del nivel de registros que
se introdujeron en el Capítulo 8. Además, este capítulo ofrece una introducción a
los conjuntos de instrucciones, la arquitectura del computador, y la metodología
de diseño del procesador. Para mostrar estos conceptos, en el Capítulo 9 se carac-
teriza el diseño de procesadores CISC de 16 bits y RISC de 32 bits con avance de
datos y predicción de saltos.

Características editoriales

Esquema de organización del libro. Para orientar al estudiante, se utilizan dia-


gramas de bloques típicos que resumen los ternas presentados en el libro y que
definen sus interconexiones. Cada capítulo comienza con un párrafo introducto-
rio que resume los objetivos del capítulo y los temas que cubre. Esta visión ayu-
dará al estudiante a relacionar los conceptos presentados en capítulos anteriores
con los nuevos conceptos que se van introduciendo.
Procedimientos de diseño. Cada técnica de diseño se presenta paso a paso,
resumida en forma de diagrama de flujo. El diagrama de flujo permite al estudian-
te resolver problemas de forma ordenada, así como sugerir cómo ampliar una téc-
nica determinada a nuevos problemas o a tecnologías que aparezcan en el futuro.
Ejemplos comprensibles. El libro incluye ejemplos resueltos para ilustrar
principios y procedimientos de diseño que son relevantes en ciertas aplicaciones.
En cada capítulo se utiliza un pequeño número de estos ejemplos comprensibles
para mostrar varias alternativas de diseño, guiando al lector a través de todos los
pasos necesarios del diseño, desde la definición hasta el esquema final.
Manual del profesor y transparencias para clases. Se ha desarrollado un
manual de soluciones que contiene los resultados de cada problema del fmal de
cada capítulo. El manual también incluye problemas originales para comodidad
del profesor. También se ofrecen transparencias de las clases dadas por el autor
cuando usa el libro. El manual y el conjunto de transparencias estarán disponibles
para los profesores que usen este libro como texto en sus clases.

Opciones del curso

Basándonos en su organización, este libro debería ser igualmente efectivo en dos


tipos de cursos. En un curso introductorio al diseño lógico, por ejemplo, el libro
se puede usar para enfatizar el diseño secuencial y comhinacional tradicional ,
cubierto en los estudios de ciencia e ingeniería informática tanto en Estados
Unidos como fuera. La materia para estos cursos corresponde a los Capítulos del
I al 7. Además, se incluye materia sobre diseño de transferencia entre registros,
Prólogo xvü

para sistemas de uso general y para procesadores de aplicación específica, usual-


mente cubiertos en un segundo curso de diseño digital o en un curso de introduc-
ción a la arquitectura de computadores.
En este curso, el estudiante aprendería primero los componentes básicos de
transferencia entre registros: componentes combinacionales en el Capítulo 5 y
secuenciales en el Capítulo 7. La mayor parte del curso consistiría en el aprendi-
zaje de técnicas de diseño a nivel de registro y procesos de diseño para síntesis de
procesadores específicos de aplicación arbitraria, que están en el Capítulo 8.
Finalmente, en el Capítulo 9, el estudiante aprendería el diseño de conjuntos de
instrucciones modernos y de procesadores RISC y CISC de uso general.
En cualquier caso, se sugiere complementar las clases con pFácticas en las que
los estudiantes trabajarian con problemas reales de diseño usando herramientas
CAD modernas para reproducción del diseño, modelado, simulación, verifica-
ción, síntesis, ¡análisis del tiempo, planteamientos de base, diseño físico y otros
aspectos del proceso de diseño. En nuestra experiencia, las prácticas han tenido
mucho éxito entr¡; los estudiantes, ya que les pen;nite relacionar los con¡:eptos
aprendidos, con los diseños prácticos en un entorno de trabajo real. Se describen,

para ayuda del profesor, varios montajes de laboratorio y se dan varios ejemplos
de experimentos en el Apéndice.

Daniel Gajski
Irvine, California
Agradecimientos

Primero, me gustaría agradecer a todos los estudiantes que han seguido mis cla-
ses y preguntado cientos de cuestiones, haciendo que me diera cuenta del proce-
so de aprendizaje y forzándome a experimentar con varios métodos para replan-
tear el conocimiento sobre la ciencia del diseño.
Me gustaría agradecer a Nikil Dutt, Alex Orailoglu, Fadi Kurdabi , Youn-Long
Steve Lin, y a Allen C. H. Wu, que han probado en clase una primera versión de
este libro proporcionándome muchas sugerencias útiles sobre como mejorar el
contexto y la presentación de los temas. También aprecio mucho las útiles suge-
rencias de revisores anónimos sobre el material seleccionado y la calidad de la
presentación.
Me gustaría también mostrar mi agradecimiento a las personas que me han'
ayudado en la producción del libro. Jon Kleinsmitb hizo las figuras, mecanogra-
fió y formateó el texto. Sin su paciencia y dedicación este libro nunca hubiera lle-
gado al editor. También estoy agradecido a Sarab Wilde por la edición delicada y
minuciosa del manuscrito. Gracias también a los miembros del CAD LAB que me
ayudaron con las correcciones y lecturas de prueba de la versión fmal del texto:
Tedd Hadley, Jie Gong, Hsiao-Ping Juan, Smita Bakshi, Alfred Thordarson,
David Kolson, Pradip Iba, Preeti Panda, Jianwen Zhu, Min Xu, Laurent Choura-
Id, Marie-Use Flottes, Nong Fan, Joanna Kang, Wnwei Pan, Viraphol Chaiyakul,
y Poonan Agrawal. También estoy muy agradecido a Gerry Johnson y Don
Fowley de Prentice Hall, que me convencieron de que escribir este libro sería un
reto adecuado e interesante en este momento de mi vida. Me gustaría también
agradecer a Tom Robbins, Barbara Cappucio, Irwin Zucker, y al personal de
Prentice Hall su gran profesionalidad en la producción del libro.

xix
Principios
de diseño digital •
CAP ULO

Introducción
4 Principios de diseño digital

En cualquier producto, el proceso de diseño abarca desde la manera de concebir


su funcionamiento hasta el desarrollo de un esquema de fabricación. Muchas per-
sonas están implicadas en este proceso, desempeñando cada uno una tarea espe-
cífica.
El departamento de ventas, por ejemplo, estudia las necesidades de mercado
y determina los requisitos de un nuevo producto. Los tecnólogos seleccionan la
tecnología, y los proveedores los posibles componentes, mientras un grupo de
apoyo adquiere o desarrolla herramientas software que puedan facilitar el diseño
del producto y de cada una de sus partes. Los diseñadores del producto convier-
ten los requisitos del producto en esquemas para la fabricación. Los ingenieros de
tests desarrollan estrategias de test para verificar la corrección del diseño y prue-
ban los productos fabricados por si no funcionan, mientras que los ingenieros de
fabricación desarrollan planes de construcción y producción.

1.1. REPRESENTACIONES DEL DISEÑO


En la definición del producto, en el diseño y en el proceso de fabricación, cada
persona ve el producto desde un punto de vista ligeramente diferente y necesita
información específica para realizar su trabajo. Por este motivo, cada producto, y
consecuentemente cada diseño, requiere varias representacione.s,o puntos de vista
diferentes, que difieren en el tipo de información que se desláca. Además, la
misma representación requiere a menudo distintos niveles de detalle en las distin-
tas fases del diseño o del ciclo de fabricación. Los tres tipos de representaciones
más comunes que se usan son las representaciones de comportamiento, estructu-
ral y física. "
Una representación de comportamiento o funcional ve el diseño como una
caja negra y se centra en especificar su comportamiento en función de los valores
de entrada y restricciones de tiempo. En otras palabras, una representación de
comportamiento describe el funcionamiento pero no la implementación de un
diseño dado, definiendo la respuesta de la caja negra para cualquier combinación
de valores de entrada, pero sin describir la forma de diseñar o construir la caja
negra con unos componentes dados.
Una representación estructural, por el contrario, es aquella en la que se defi-
ne la caja negra como un conjunto de componentes y sus conexiones. A diferencia
de una representación de comportamiento, se especifica la implementación del
producto sin hacer referencia explícita a su funcionamiento. En algunos casos, por
supuesto, el funcionamiento se puede deducir a partir de sus componentes interco-
nectados. Sin embargo, es difícil deducir el funcionamiento de un diseño de esta
forma y es propenso a errores, ya que las funciones de algunos componentes puede
que no se usen con todo su potencial, o pueden ser modificadas codificando las
entradas y salidas de los componentes. Además, en casos en los que el número de
componentes es muy grande, digamos unos 10.000, sería imposible descubrir su
funcionamiento, especialmente porque la tecnología de hoy permite fabricar
microchips excesivamente complejos, con varios millones de componentes.
Introducción 5

Finalmente, una representación física es aquella que especifica las caracte-


rísticas físicas de la caja negra, dando las dimensiones y situación de cada com-
ponente y las conexiones contenidas en la descripción estructural. Obsérvese que
mientras la representación estructural proporciona la conectividad del diseño,
sólamente la representación física describe las conexiones espaciales concretas
entre varios componentes. En otras palabras, la representación física se usa para
describir el diseño después de haber sido fabricado, especificando su peso, tama-
ño, disipación de calor, consumo de energía, y la posición de cada conector de
entrada o salida.

EJEMPLO 1.1 Reloj despertador


PROBLEMA

Desarrollar las representaciones ,de comportamiento, estructural y física del diseño de un


reloj despertador sencillo.
SOLUCIÓN

Un reloj despertador sencillo consta de un visualizador de cristal líquido (LCD, Liquid


Crystal Display) que visualiza los segundos, minutos y horas, y cinco conmutadores dife-
rentes para ajustar la hora (SI)' la alarma (S2)' el avance de los minutos (S3)' el avarice de la
hora (S.), y la conexión de la alarma (S, ). Cuando SI está activado (cerrado), se puede ajus·
tar el tiempo presionando S3 Ó S•. Cada vez que se pulsa S3 ó S4' el ajuste de los minutos o
la hora avanza 1 y el cambio en los minutos o la hora aparece en el visualizador del reloj.
Cuando S2 está activado, se puede ajustar la aiarma de manera similar, pulsando S3 ó S. para
avanzar los minutos o la hora. Siempre que se está ajustando la alarma, la hora y los minu-
tos aparecen en el LCD. Finalmente, cuando el conmutador S, está activado (cerrado), la
alarma está habilitada, y se genera un sonido que dura 5 segundos cuando el reloj llega al
instante de alarma.
El comportamiento de este reloj despertador se puede representar mediante tres tareas o
procesos concurrentes: reloj, ajuste, y alarma. Cada uno de estos procesos, a su vez, se
puede describir mediante un diagrama de flujo-sencillo, que consiste en cajas en forma de
pentágono para indicar preguntas y cajas rectangulares para indicar cálculos. En las Figuras
1.1 a 1.3 se muestran los diagramas de flujo que representan el comportamiento de cada uno
de estos tres procesos.
Como se puede ver en la Figura 1.1, el proceso del reloj tiene una señal de entrada, Pulso ,
y seis variables internas: Segundos, Minutos, Horas, Spantalla, Mpantalla y Hpantalla. La
señal Pulso, que se usa para contar los segundos en la alarma, dura 1 segundo, siendo 1 la
primera mitad del segundo y O el resto. Tres de las variables internas (Segundos, Minutos y
Horas) se usan para contabilizar los segundos, minutos y horas. Los Segundos y Minutos se
contabilizan en módulo 60 ( es decir, se pone a O siempre después de que la cuenta alcance
59). Las Horas se contabilizan en módulo 12, empezando por l ' y volviendo a 1 después de
llegar a 12. En funcionamiento, los Segundos se incrementan en 1 siempre que la señal Pulso
pase de O a 1, lo que se indica en el diagrama de flujo con una flecha hacia arriba, i. De
fonna similar, siempre que los Segundos alcancen O, los Minutos se incrementan en 1, y
siempre que los Minutos llegan a O, las Horas se incrementan en l .
Las otras tres variables internas (Spantalla, Mpantalla y Hpantalla) se usan para visua·
lizar los segundos, minutos y horas. Hay que destacar que cada una de estas variables de
6 Principios de diseño digital

visualización se actualizan individualmente siempre que hay un cambio en las correspon-


dientes variables de reloj (es decir, en Segulldos, Minutos y Horas).

~
~<=~~~t=>-..!s:
~ Pulso = !e. +/1I Spanudla:=:
S'g undos =Seg undos + I
Segundos
I
~
r--.!n!!!o<~~~~~>-..!s:
' " ¿Segundos - O?
!. e"11I Minutos = Minutos + I
Mpantalla :c Minutos
I
se I Horas =Horas + 1
Hpantalla '" Horas I
I
I
I

FIGURA 1.1 Representación del comportamiento del reloj despertador: proceso del reloj.

A diferencia del proceso del reloj, el proceso de ajuste (Figura 1.2) describe como ajus-
tar la hora del reloj o de la alarma, como se desee. Se usan dos variables internas adiciona-
les, Malarma y Halnnna , para almacenar los minutos y la hora de la alarma. Activando los
conmutadores S3 y 84 , se pueden incrementar los minutos y la hora de la alarma, que están
almacenados en Malamw y Halarma respectivamente. Entonces, se ajusta el tiempo correc-
to primero activando el conmutador SI Ó S2' según se quiera ajustar la hora del reloj o de la
alarma, y después se pulsan repetidamente los conmutadores S3 y S•. Obsérvese que no se
pueden accionar SI Y S2 a la vez. Obsérvese también que la hora que se ajusta accionando
S3 Ó S4 se visualiza irunediatamente en el visualizador del reloj .
El último de los tres procesos, el proceso de la alarma, (Figura 1.3), se ha diseñado para
activar la alarma poniendo la variable de salida, Pitido, a 1 en el momento en el que la hora
del reloj se iguale a la de la alarma, suponiendo que el conmutador de alarma, Ss' está acti-
vado. En otras palabras, siempre que Millutos = MalamIQ, Horas = Halarma, y Ss esté acti-
vado, Pitido tomará el valor 1.
Para una descripción del comportamiento del reloj despertador como la que acabarnos de
realizar, podría haber varias descripciones estructurales ya que una descripción del compor-
tamiento no detennm3 una estructura exacta. Sin embargo, especifica una serie de variables
internas que se pueden usar para almacenar datos y una serie de declaraciones de asignacio-
nes utilizadas para transformación de datos. A partir de esta infornJación, se pueden conver-
tir las variables en componentes de memoria y deducir los componentes aritméticos adecua-
dos para realizar las transformaciones de datos especificadas en las declaraciones de as igna-
ción. Esta conversión da lugar a la representación más obvia, aunque no óptima. que se
muestra en la Figura lA.
Obsérvese que, según la Figura lA, el reloj despertador )0 dirige el oscilador, que pro-
duce una onda senoidal con una frecuencia de un ciclo por segundo, como se ve en la Figura
1.5(a). El generador de pulsos convierte la onda senoidal en un tren de pulsos, ver Figura
Introducción 7

1.5(b), de la misma frecuencia que el seno, pero toma sólo dos valores: O y l. Esta señal,
con sólo dos valores posibles, se denomina señal digital, y a culaquier sistema que proce-
sa señales digitales se le denomina sistema digital.

Horas '" Horru + 1


Hpanta/la = Horas

FIGURA 1.2 Representación del comportamiento del reloj despertador: proceso de ajuste.

no
¿Minutos:: Mala rmn ?

no
¿ Horas = Halanna ?

no
¿Sjactivado ?

FIGURA 1.3 Representación del comportamiento del reloj despertador: proceso de alarma.
8 Principios de diseñ0 digital

FIGURA 1.4 Representación estructural del reloj despertador.

(a) Onda senoidal

1 segundo

Ol l~-----L---J......-
_ (b) Tren de pulsos

FIGURA 1.5 Generadores de ondas.

Volviendo a la Figura 1.4, puede verse que el resto de la especificación estructural del
reloj despertador contiene tres contadores, un contador de segundos, un contador de minu-
tos y un contador de horas, que contabilizan segundos. minutos y horas, y dos componen-
tes de memoria de UDa palabra, un registro de minutos y un registro de horas, usados para
almacenar el minuto y hora de alarma. El visualizador muestra los segundos, minutos y hora
tanto del reloj como de la alarma, dependiendo de la posición del conmutador Sz En el com-
Introducción 9

parador de minutos, se comparan los minutos del reloj y de la alarma. Si son iguales, el
valor 1 pasa al comparador de horas. De forma similar, el comparador de horas pone su sali-
da a 1 siempre que la hora del reloj y de la alarma sean iguales y la entrada del comparador
de minutos sea l . Suponiendo que el conmutador S, esté activado cuando la salida del com-
parador de horas se hace 1, la señal Pitido pasa a l . El generador de sonido se usa para con-
vertir el cambio de Oa 1 de la señal Pitido en un tono de 5 segundos, que controla el minial-
tavoz del reloj.
Categorizando los componentes de la representación estructural del reloj despertador, el
oscilador y el altavoz se consideran componentes analógicos, ya que su entrada y salidas
pueden tomar cualquier valor dentro de un rango dado. Por ejemplo, durante cada segundo,
el oscilador genera como salida todos los valores comprendidos entre - 1.5 y + 1.5 voltios.
El generador de pulsos es lo que denominamos un conversor analógico-digital (AID), ya
que a partir de una entrada analógica genera una salida digital. Inversamente, el generador
de sonido es un conversor digital-analógico (D/A) ya que está diseñado para convertir
señales digitales en analógicas. El resto del sistema, contenido en la zona sombreada de la
Figura 1.4, es un sistema digital bompuesto por componentes digitales. El contenido de este
libro trata exclusivamente de técnicas de diseño de sistemas digitales.
En la Figura 1.6 se muestra una representación física del reloj despertador, dando los
tamaños y posiciones de los componentes reales como se montarían en una tarjeta de cir-
cuito impreso (pCB, Printed Cicuit Board) dentro del chasis del reloj despertador. Obsér-
vese que esta PCB contiene varios microchips : el oscilador, el generador de pulsos, el gene-
rador de sonidos, y todas las partes digitales del reloj despertador. También contiene el
visualizador, los conmutadores, la caja para la batería, así como las tiras de metal que
conectan todos los componentes.

Oscilador

ConmuLador
l.l0~~~V
li n_ 1Lo . -_1 LI
- ;"""'o,
'".,ido~Ii" '"
de lYaJICC de
minutos U L . .:I ~I Conmu tador
de avance de
Horas Minutos
= = Companimcnlo
"""
d<pi'U ~~
Alarma Tiempo On Off Conmutador
de puesta en
,,-
""""d<

(a) Vista de frente (b) Tatjeta de circuito impreso

FIGURA 1.6 Representación física del reloj despertador.

Como se ha indicado en el Ejemplo 1.1 , el proceso de diseño de productos


electrónicos en general, y de sistemas digitales en particular, siempre consta de al
menos tres fases, centradas en romo a tres representaciones principales con los
siguientes objetivos :
10 Principios de diseño digital

1. Proporcionar la representación del comportamiento para definir el fun-


cionamiento del producto.
2. Convertirla en una representación estructural formada por componentes
de una biblioteca dada de componentes.
3. Producir una representación física que especifique cómo se monta y se
fabrica el producto.
Cualquier diseño digital puede pasar por estas tres fases en distintos niveles
de abstracción, como se verá en la siguiente sección.

1.2. NIVELES DE ABSTRACCiÓN


En la Sección 1.1 se describían las representaciones de comportamiento, estruc-
tural y física . En el proceso de diseño de sistemas electrónicos, cualquiera de estas
tres representaciones se puede usar en distintos niveles de abstracción o granula-
ridad, en la que los niveles se definen por el tipo de objetos que usan. En general ,
se pueden identificar cuatro tipos diferentes de objetos en un sistema electrónico:
transistores, puertas, registros y componentes del procesador. Estos niveles de
abstracción se resumen en la Tabla 1.1 . Como indica la tabla, la mayoría de los
componentes en el nivel de transistor son transistores, resistencias, y condensa-
dores, que se combinan para formar circuitos analógicos y digitales que pueden
dar una determinada funcionalidad. Esta funcionalidad normalmente se describe
mediante un conjunto de ecuaciones diferenciales o mediante algún tipo de rela-
ción corriente/tensión. La representación física de estos circuitos analógicos y
digitales, denominados celdas, está formada por componentes a nivel de transis-
tor y los cables que los conectan.
En general, una celda se define en términos del trazado del transistor, forma-
do por un conjunto de rectángulos, usualmente dibujados con diferentes colores,
que representan áreas rectangulares de las distintas capas de material de un micro-
chip.
A partir de estos trazados se generan máscaras para el proceso litográfico, que
es el primer paso a dar dentro de la fabricación de microchips. En este proceso
una máscara sirve para exponer fotográficamente ciertas áreas de la superficie de
silicio de forma que puedan ser químicamente alteradas. y crear así varias capas
de materiales distintos. Al final, la combinación adecuada de materiales crea el
efecto transistor, de forma que una corriente eléctrica puede fluir entre dos capas
de materiales diferentes siempre que se le aplique una tensión adecuada en sus
extremos.
Como se indica en la Tabla 1.1, los componentes principales del nivel de
puerta son puertas lógicas y biestables Iflip-flops) . Las puertas lógicas son cir-
cuitos especiales que realizan operaciones booleanas que son similares a conjun-
ciones tales como "o" e "y" (en inglés "or" y "and"). Un biestable es un elemen-
to de memoria básico que es capaz de almacenar un bit de información que puede
tomar uno de dos valores: O (falso, no) ó 1 (verdadero, sí). -
Introducción 11

TABLA 1.1 Representaciones del diseño y niveles de abstracción


- - --- ---- - .-- --'- ~

• - • • :. ':':'" ~ :~\, :',)1

. ~.'~ ,'! ,"


_.____ _ ___ ~_. __ ~~ ___ " ~ _~d_~ ~~ __ :.
Transistor Ecuaciones diferenciales, Transistores, Celdas analógicas y
diagramas coniente- resistencias, digitales
tensión condensadores
Puerta Ecuaciones booleanas, Puertas, biestables Módulos, unidades
máquinas de estados
finitos
Registro Algoritmos, diagramas de Sumadores, Microchips
flujo, conjuntos de comparadores,
instrucciones, FSM registros, contadores.
generalizado bancos de registro,
pilas, caminos de datos
Procesador Especificación ejecutable, Procesadores, TBljetas de circuito
programas controladores, impreso, módulos
memorias, ASIC multichip

Las puertas y los biestables son celdas digitales típicas que tienen entradas y
salidas en sus extremos. Estas celdas se pueden agrupar y situar en una superficie
de silicio para formar módulos o unidades aritméticas y de almacenamiento que
se usan como componentes básicos en el nivel de registro. Estas unidades se des-
criben según su comportamiento en términos de ecuaciones booleanas y diagra-
mas de máquinas de estados finitos (FSM, Finite State Machine).
En la Tabla 1.1 puede verse también que los componentes principales del
nivel de registro son unidades aritméticas y de almacenamiento, tales como
sumadores, comparadores, multiplicadores, contadores, registros, ficheros regis-
tro, pilas y caminos de datos. Cada uno de estos componentes registro es un
módulo o unidad que tiene unas dimensiones fijas, un tiempo de propagación fijo,
y un comportamiento determinado, fijado por sus entradas y salidas de intercone-
xión con otros módulos. Estos componentes registro se pueden montar e interco-
nectar en microchips, que se usan como componentes básicos del siguiente nivel
superior de abstracción. En, general, estos microchips se describen mediante dia-
gramas de flujo, conjuntos de instrucciones, diagramas FSM generalizados, o
tablas de estados.
El nivel más alto de abstracción presentado en la Tabla 1.1 se denomina nivel
de procesador, ya que los componentes básicos de este nivel son los procesado-
res, memorias, controladores, e interfaces, además de los "microchips a medida"
(custom microchips) denominados circuitos integrados de aplicación específica
(ASIC, Application Specific Integrated Circuits). Generalmente, uno o más de
estos componentes se colocan en una tatjeta de circuito impreso y se conectan con
tiras conductoras que están impresas en la tarjeta. En muchos casos se pueden
reducir las dimensiones de la tarjeta usando un sustrato de silicio, en vez de una
12 Principios de diseño digital

tarjeta de circuito impreso, para conectar los microchips, en cuyo caso el conjun-
to se denomina módulo multichip. El comportamiento de un sistema que está
compuesto por estos componentes se describe usualmente mediante lenguaje
natural, o una especificación ejecutable en un lenguaje de descripción hardware,
o un algoritmo o un programa escrito en un lenguaje de programación.
Durante el proceso de diseño de un sistema electrónico digital, cualquiera de
los niveles de abstracción se puede usar una o más veces, dependiendo de cuan-
tos objetivos, tecnologías, componentes, bibliotecas y alternativas de diseño
diferentes se quieran explorar. Como esta exploración se podría llevar a cabo
potencialmente de diferentes maneras, debemos escoger cuidadosamente una
metodología de diseño eficiente que determine el subconjunto adecuado de
niveles de abstracción, tareas de síntesis, el orden en que han de ser ejecutadas y
el tipo de herramientas CAD a usar durante la ejecución de cada tarea en el pro-
ceso de diseño.
La metodología más usual consiste en la construcción de una biblioteca o catá-
logo para un cierto nivel de abstracción, usando la síntesis para convertir una des-
cripción de comportamiento en otra estructural que pueda implementarse con los
componentes de esta biblioteca. En los últimos 20 años, las bibliotecas más comu-
nes han consistido en componentes a nivel de puerta, aunque recientemente las
bibliotecas de registros han ganado popularidad. En este libro también se sigue esta
metodología, definiendo primero una biblioteca a nivel de puerta que puede usarse
para construir una biblioteca a nivel de registro que se usará para la síntesis de trans-
ferencia entre registros de uso general y procesadores de aplicación específica.

1.3. PROCESO DE DISEÑO


En términos muy generales, se puede definir el proceso de diseño como la secuen-
cia de pasos que llevan desde el concepto de un producto hasta los esquemas de
fabricación que describen cómo hacer dicho producto. En la práctica, por supues-
to, este proceso está muy influenciado por el producto que se está diseñando, por
cuándo debe ser introducido en el mercado, por la tecnología particular que se usa
en su fabricación, e incluso por factores tales como la estructura organizativa de
la compañía, la experiencia del equipo de diseño, la disponibilidad de herramien-
tas CAD, y la adecuación de la financiación. En este sentido, el proceso de dise-
ño siempre varía de una empresa a otra, e incluso de un producto a otro dentro de
cada empresa. A pesar de estas variaciones, podemos, sin embargo, asumir sin
riesgos que los siguientes pasos básicos siempre están presentes, de una forma u
otra, en cada proceso de diseño.

1.3.1. Especificaciones de diseño

Una vez analizados los requisitos del mercado, el arquitecto jefe escribirá la
especificación del producto que define el funcionamiento de dicho producto y
Introducción 13

las interfaces con el entorno en que va a funcionar el producto. En muchas oca-


siones, este proceso de especificaciones incluye un diseño esquemático de la
arquitectura del producto, que usualmente se da en forma de diagrama de blo-
ques de alto nivel. En el diagrama, cada bloque tendrá una función clara que
se puede especificar con una fórmula o algoritmo matemático, o simplemente
en leguaje natural. Tal diagrama de bloques puede también especificar el tipo
y formato de los datos que se transfieren entre los bloques y puertos de entra-
da/salida.
En general, este tipo de especificaciones tiende a ser vaga en ciertos lugares,
y quizás incluso incompleta, debido a que el producto no ha sido aún diseñado y
evaluado. Esto no es necesariamente un problema, ya que la especificación sirve
fundamentalmente como punto de partida para el equipo de diseño y normalmen-
te se modifica y redefine con el avance del diseño. En la mayoría de los casos la
especificación se escribe en lenguaje natural, como españolo inglés, a pesar de
que las especificaoiones de tipo ejecutable han ganado fama ya que se pueden
verificar, analizar y sintetizar más fácilmente.

1.3.2. Desarrollo con una biblioteca de componentes

Una vez que se ha desarrollado el diagrama de bloques de alto nivel en la fase de


especificación, se debe redefinir iterativamente o descomponer en componentes
menores. La fmalidad de este proceso es asegurar que el producto no contenga
más que los componentes predefinidos en la biblioteca de componentes que se
ha caracterizado para una tecnología de fabricación concreta. En algunos casos
estas bibliotecas contienen componentes de uno o más niveles de abstracción. Por
ejemplo, no es inusual encontrar algunos componentes del nivel de registro inclui-
dos entre los componentes del nivel de puerta.
Los componentes de la biblioteca deben estar, por tanto, diseñados, probados
y completamente documentados para que los diseñadores puedan usarlos sin tener
que analizar su estructura. La información de caracterización debería incluir lo
siguiente:
1. La función de los componentes, los nombres de las entradas y salidas y su
aplicación típica
2. . Las dimensiones físicas de los componentes, la posición de sus entradas
y salidas, e información sobre su encapsulado
3. Las restricciones eléctticas, los requisitos de la fuente de alimentación,
las rangos de corriente y tensión permitidos para las entradas y salidas y
la disipación de calor
4. Las formas de onda de las tensiones de entrada y de salida, la rela-
ción en el tiempo entre ellas, y los retardos críticos entre entradas y
salidas
5. Los modelos de componentes usados por las herramientas CAD para
simulación, síntesis, diseño físico y verificación
14 Principios de diseño digital

1.3.3. Síntesis del diseño

En el proceso de diseño, la síntesis es el procedimiento mediante el cual se con-


vierte una especificación o descripción del comportamiento de un componente en
una descripción estructural usando componentes de los niveles de abstracción más
bajos que se incluyen en una biblioteca dada. En aquellos casos donde se necesi-
tan componentes que no están contenidos en esa biblioteca, se necesitaría llevar a
cabo una síntesis complementaria.
La síntesis se puede entender normalmente como un proceso de redefinición
de la descripción de comportamiento, en el que se añaden más detalles estructu-
rales en cada paso. En la práctica, esto normalmente significa que la descripción
de comportamiento se divide en varios bloques y se reescribe para reflejar el
resultado de la división. Esta nueva descripción redefinida contiene una descrip-
ción estructural de los bloques divididos y sus conexiones junto con las descrip-
ciones de comportamiento de cada bloque. Este proceso sigue hasta que cada blo-
que represente uno de los componentes de la biblioteca elegida.
Siguiendo los niveles de abstracción descritos en la Tabla 1.1 , se pueden iden-
tificar diferentes tareas de síntesis:
1. La síntesis del sistema convierte una especificación en una estructura de com-
ponentes a nivel de procesador, tales como procesadores, memorias, y ASTe.
2. La síntesis de la arquitectura convierte algoritmos, diagramas de flujo,
O conjuntos de instrucciones en componentes a nivel de registro, tales
como contadores, registros, pilas, colas, sumadores y multiplicadores.
3. La síntesis secuencial transforma la descripción de una máquina de esta-
dos [mitos en puertas y biestables.
4. La síntesis lógica transforma expresiones booleanas en componentes a
nivel de puerta.
Por debajo del nivel del puerta, las técnicas de síntesis se dividen de acuerdo
con áreas de aplicación específica, a causa de la diversidad de estilos en el dise-
ño de circuitos. Por ejemplo, se necesitan distintas técnicas para sintetizar circui-
tos para distintos dominios, tales como conversión A/D, filtrado, procesamiento
de audio, o realzado de imágenes. Es importante destacar que cada uno de los
pasos de síntesis descritos en esta subsección pueden dividirse en varios subpasos
o problemas, que se tratan a través del resto del libro.

1.3.4. Análisis del diseño


Una vez se ha sintetizado un diseño, el siguiente paso es evaluar dicho diseño,
verificando que satisface los requisitos de la especificación, o en algunos casos,
verificando que el diseño desarrollado es realmente el mejor dentro de las dis-
tintas alternativas de diseño. Cuando se evalúa un diseño, nos concentramos,
normalmente en una de entre diferente~ medidas de calidad, tales como coste,
prestaciones o testeabilidad. Una de las medidas más importante es, por ejem-
Introducción 15

plo, el coste de fabricación del producto concreto. Esta medida usualmente se


aproxima con el tamaño o medida del área, ya que el área de un microchip o de
una PCB es proporcional al coste de su fabricación. El número de conectores de
entrada y salida es otra medida importante del coste, ya que el coste de encap-
sulamiento es proporcional al número de conectores de entrada/salida.
Recientemente, el consumo de energía se ha vuelto una medida muy importan-
te debido al uso extendido de equipos portátiles como las computadoras portá-
tiles o "laptop" y los teléfonos móviles. Como el consumo de energía determi-
na el tamaño de las baterías, aquel tiene también una gran influencia en el peso
del producto.
La otra medida importante que concierne al proceso de diseño son las pres-
taciones del producto, que se pueden medir de varias formas. Las medidas
más usuales de las prestaciones son (1) el retardo entrada/salida, (2) el periodo
del reloj y (3) el tiempo necesario para que se complete la ejecución de un pro-
grama, algoritmo', diagrama de flujo o una instrucción. En general, se conside-
ra que los componentes con menos retardos, los diseños con ciclos de reloj más
cortos y los productos con menores tiempos de ejecución, tienen mejores pres-
taciones.
Finalmente, el índice de testeabilidad se define en función del número de
fallos de fabricación detectables y del número de patrones de test que se necesi-
tan para detectar todos esos fallos. Cada patrón o vector de test contiene un con-
junto de valores de entrada al que corresponde un conjunto de valores de salida
esperados para obtener un funcionamiento libre de fallos. En general, el número
de fallos potenciales es proporcional al número de patrones de test que se· necesi-
tan, que a su vez es proporcional al tiempo necesario para verificar el producto
fabricado.

1.3_5. Documentación

El paso final del proceso de diseño consiste en preparar la documentación del


microchip o sistema fabricado. Esta documentación generalmente incluye tanto
la representación física como de comportamiento del producto, pero omite las
representaciones estructurales detalladas, que se consideran información confi-
dencial del fabricante que será utilizada sólo por las divisiones de fabricación
de la empresa. La información sobre el comportamiento se da usualmente en
forma de un diagrama de bloques tosco acompañado por un diagrama de
flujo que describe el comportamiento del sistema completo o de alguna de sus
partes. Además, esta documentación sobre el comportamiento presenta proto-
colos de comunicación, y se suele dar en forma de diagramas de tiempo para
una o varias entradas y salidas. La representación física, por otra parte, contie-
ne el tamaño, la información de encapsulado y los nombres y posiciones de
todos los conectores. Finalmente, esta documentación también especifica los
rangos mínimo, normal 'f máximo de corriente, tensión, potencia, temperatura y
tiempos de retardo.
16 Principios de diseño digital

1.3.6. Fabricación
La fabricación no es realmente una parte del proceso de diseño; sin embargo, es
su meta, en el sentido de que el proceso de fabricación convierte los dibujos fma-
les del diseño en un microchip o una taIjeta de circuito impreso montando todas
las partes y conectándolas adecuadamente. Después de la fabricación, normal-
mente se llevan a cabo más tests para separar cualquier producto defectuoso de
los que son funcionalmente correctos. Este test se puede realizar a velocidad de
ejecución normal o a velocidades menores de las que se va a operar normalmen-
te. En el caso de productos de altas prestaciones, es muy difícil hacer los tests a
velocidad normal ya que los verificadores tendrían que ser mucho más rápidos
que la velocidad normal del producto que se está verificando.

1.4. HERRAMIENTAS CAD


En la Sección 1.3, vimos los pasos básicos del proceso de diseño, y en esta sec-
ción veremos brevemente las herramientas de diseño con ayuda de una computa-
dora (CAD, Computer Aided Design) que usan los diseñadores en las distintas eta-
pas del proceso de diseño. Estas herramientas CAD se pueden dividir en cinco
categorías diferentes, según la forma de usarlas en el proceso de diseño.
1. Captura y modelado
2. Síntesis
3. Verificación y simulación
4. Ubicación e interconexionado
5. Generación de tests
Estas cinco categorías corresponden grosso modo a las áreas de especializa-
ción de investigación y desarrollo de herramientas CAD.

1.4.1. Captura y modelado del diseño


Llega un momento, en todo proceso de diseño, donde se necesita transformar una
representación de comportamiento en un representación estructural compuesta
por varios elementos de una biblioteca bien caracterizada. En este momento, se
podrían especificar textualmente todos los componentes y sus interconexiones,
aunque esto puede ser un procedimiento tedioso y propenso a errores. Por otra
parte, también se puede capturar la representación estructural de forma más fácil
y precisa, usando una herramienta de captura. Básicamente, esta herramienta per-
mite al diseñador seleccionar un componente de un menú, situarlo en la pantalla,
y conectarlo a otros componentes mediante líneas que representan cables. Este
tipo de representación estructural de captura se denomina esquemática, y las
herramientas que frecuentemente se usan para su captura se conocen como herra-
mientas de captura de esquemas.
Introducción 17

Alternativamente, con un lenguaje de descripción hardware, como el están-


dar VHDL del IEEE, se puede llevar a cabo la captura de esquemas. Sin embar-
go, además de la captura de esquemas estos lenguajes de descripción hardware
también permiten capturar representaciones de comportamiento, así que se puede
describir el diseño como una combinación de su comportamiento y de su estruc-
tura. La descripción del producto a diseñar normalmente empieza con una des-
cripción del comportamiento de cada bloque con un diagrama de bloques estruc-
tural de alto nivel. A medida que el proceso de diseño progresa, cada uno de estos
comportamientos tiene que descomponerse recursivamente en una estructura de
bloques de niveles inferiores hasta que el diseño se convierta en una jerarquía de
bloques, en donde el nivel más bajo represente componentes específicos de la
biblioteca dada. Entonces, cada diseño se habrá descrito con diferentes niveles de
abstracción, conteniendo cada nivel un tipo y una cantidad de detalles diferente.
Este conjunto je~árquico de descripciones es necesario para que se puedan verifi-
car distintas propiedades del diseño y para que el diseño esté de acuerdo con las
restricciones impuestas. Además, este procedimiento simplifica la gestión del pro-
yecto de diseño, acelera la comunicación entre los diseñadores, permite una inte-
gración del diseño sencilla, reduce los errores de diseño y admite la evolución y
mantenimiento del diseño. Cada una de estas descripciones se denomina modelo
del diseño real, ya que proporciona parte de, pero no toda, la información sobre
el diseño manual. Los diseñadores, o herramientas CAD, pueden usar la informa-
ción de diseño que proporciona cada modelo para analizarla posteriormente o eva-
luar la calidad del diseño, o incluso para su síntesis posterior. El proceso de desa-
rrollo de estos modelos se denomina modelado, y la guía que proporciona ins-
trucciones para escribir los modelos incluyendo la información requerida para que
los modelos puedan ser usados por otras herramientas se denomina guía de
modelado.

1.4.2. Herramientas de síntesis


Las técnicas de síntesis se usan siempre que se necesita convertir una descripción
de comportamiento en una descripción estructural que contenga componentes de
una biblioteca dada. Por ejemplo, las herramientas de diseño lógico permiten con-
vertir expresiones booleanas en estructuras a nivel de puerta, además minimizan
el número de puertas, el retardo de propagación, o el consumo de energía. Las
herramientas de síntesis lógica son muy útiles cuando se diseñan circuitos com-
binacionales tales como operadores aritméticos, comparadores de datos, codifica-
dores, decodificadores, y lógica de control.
Las herramientas de síntesis secueucial son necesarias para sintetizar estruc-
turas que contengan elementos de memoria. Estas herramientas de síntesis están
concebidas para minimizar el número de elementos de memoria a usar en el cir-
cuito, para generar una codificación de los estados y entradas que reduzca sus cos-
tes, para minimizar el retardo entrada Isalida, y para simplificar las expresiones
booleanas que se requerirán en su implementación.
18 Principios de diseño digital

Las herramientas de síntesis de alto nivelo de comportamiento se usan para


convertir expresiones aritméticas, conjuntos de instrucciones, o descripciones
algorítmicas en estructuras a nivel de registro, en las que se minimizan tanto el
tamaño del microchip como el tiempo de ejecución. La síntesis de comporta-
miento es muy útil en el diseño de circuitos de interfaz, aceleradores de uso espe-
cífico, y algoritmos para señales digitales. Las técnicas y principios de síntesis se
describen en los Capítulos 4, 6, 8 y 9.

1.4.3. Verificación y simulación

Una vez que se ha capturado el diseño mediante una herramienta de captura de


esquemas o que se ha especificado con una descripción HDL, se necesita verifi-
car si el diseño' funciona corno se esperaba. Esto es difícil de Uevar a cabo, ya que
no conocemos la defmición del funcionamiento deseado si ésta no fue capturada
de una u otra forma . Por otra parte, lo que se puede verificar, por comparación de
la descripción estructural y de la descripción de comportamiento, es el hecho de
que su estructura se ha sintetizado correctamente. Usando computación simbóli-
ca, demostrando teoremas, o con manipulación algebraica, se puede probar que
dos representaciones diferentes del mismo diseño son iguales para todos los con-
juntos posibles de valores de entrada. Además de probar la equivalencia de repre-
sentaciones, los verificadores temporales pueden generar todos los caminos críti-
cos de una representación estructural o de comportamiento, y garantizar que
incluso los retardos más largos satisfarán los requisitos. Como los verificadores
de equivalencia deben probar la equivalencia entre dos diseños para cada con-
junto de valores de entrada, y los verificadores temporales deben probar que se
satisfacen las restricciones para cada camino de entrada/salida del diseño, ambos
consumen mucho tiempo. Por esta razón, el tipo de verificación más común es el
de simulación del diseño, en el que se prueba el diseño sólo para un conjunto
dado de valores de entrada, generando un conjunto de valores de salida a partir de
una descripción estructural, y se compara con un conjunto dado de valores de sali-
da esperados, deducidos a partir de la descripción de comportamiento.
Dada una descripción estructural compuesta por componentes de modelos
conocidos, un simulador opera de la siguiente forma. Primero calcula los valores
de salida de los componentes cuyas entradas están conectadas a los puertos de
entrada correspondientes a las entradas de estos que hayan sido facilitadas.
Después, una vez calculados dichos valores de salida, proporciona el tiempo de
propagación obtenido a partir de los modelos de los componentes concretos utili-
zados. A continuación se selecciona el siguiente conjunto de componentes, cuyos
valores de entrada se conocen ahora, y se calculan sus valores de salida a partir de
estos nuevos valores de entrada, obteniendo el tiempo de propagación igual que
antes. Este paso se repite hasta que se simule la forma de actuar de todos los com-
ponentes o hasta que no haya ningún cambio en ningún valor de salida.
Finalmente, el valor de salida generado se compara con el valor esperado y el
retardo de propagación entrada/salida con la restricción especificada del retardo.
Introducción 19

De esta forma, un simulador puede verificar la exactitud del funcionamiento y de


la temporización, aunque esta verificación sólo sea válida para un conjunto parti-
cular de datos de entrada. Por este motivo, un diseñador que usa un simulador
debe intentar desarrollar conjuntos de entradas y valores de salida esperados de
forma que se prueben todos los caminos posibles del interior del diseño. Este
desarrollo puede no ser una tarea fácil en el caso de diseños que contengan un
millón de puertas o transistores.

1.4.4. Diseño físico

Las herramientas CAD disponibles para el di seño físico son las herramientas de
ubicación (placement tools) que permiten optimizar la situación de los compo-
nentes en una tatjeta
, de circuito impreso o de las celdas y módulos en un micro-
chip. Teniendo en cuenta el tamaño, la relación de dimensiones y las posiciones
de los terminales de entrada/salida de cada componente, estas herramientas de
ubicación permiten posicionar cada componente en la representación estructural
de forma que se minimice el área ocupada por todos los componentes. Una vez
que se ha determinado la posición de cada componente, se usan las herramien-
tas de encaminamiento (roltting too/s) para determinar la posición de cada cable
que conecta dichos componentes, de forma que se reduzca al máximo la longitud
del cable, la suma de las longitudes de todos los cables, y se optimice el uso de
todas las capas de conexión en una tarjeta de circuito impreso o en un microchip.
Aplicando estas herramientas de ubicación, hay que tratar especialmente los
cables de suministro de energía, que deben poder llegar a cada componente y
suministrar corriente suficiente. Igualmente, hay que tener en cuenta los cables
que forman parte del reloj, ya que una longitud excesiva puede generar retardos
en la señal del reloj , lo que puede ser una fuente intermitente o permanente de
fallos.

1.4.5. Test

Los tests se realizan después de que el producto haya sido fabricado, con objeto
de separar las unidades correctas de las defectuosas. En general, el proceso de
verificación consiste en aplicar ciertos patrones de test a la unidad que se va a pro-
bar y comparar las salidas de dicha unidad con las respuestas esperadas de esta
unidad funcionando correctamente. Dentro de este proceso de verificación, las
herramientas CAD se usan para la generación de patrones de tests y para la deter-
minación del perfil de detección de faltas. La finalidad de las herramientas de
generación de patrones de test es ayudamos a generar el conjunto de patrones
de test que compruebe tantos caminos en el diseño como sea posible. Es muy difí-
cil , sin embargo, crear un conjunto de patrones de test que abarque todas las fal-
tas potenciales en cualquier diseño. Por este motivo, usualmente se complemen-
tan las herramientas de generación de test con herramientas para determinar el
20 Principios de diseño digital

peñIl de faltas (test grading), que nos permitan generar una lista de todas las fal-
. tas cubiertas por un conjunto particular de patrones de test.

1.5. PROCESO TíPICO DE DISEÑO


El proceso típico de diseño, tal como se hace en entornos industriales desde los
últimos 20 años, se inicia con un análisis de mercado y una definición de los
requisitos del producto. A partir de estos requisitos el arquitecto jefe planifica un
estudio de viabilidad para determinar la tecnología, la arquitectura, y las aplica-
ciones típicas del producto. En esta etapa, se desarrolla un diagrama de bloques
preliminar y se redactan las especificaciones del producto. El equipo de diseño
reconsidera este diagrama de bloques preliminar y lo refina a niVel de sistema, de
registro y finalmente a nivel de estructura de puertas. Después, esta estructura a
nivel de puerta normalmente se captura con una herramienta de captura de esque-
mas y se simula para verificar su funcionamiento y su temporización. Si en este
momento se encuentra que no se ha tenido en cuenta alguna restricción del dise-
ño o que alguna medida de calidad no es satisfactoria, deben modificarse los
requisitos del diseño, las especificaciones y la. arquitectura, y debe repetirse el
proceso completo. Una vez que se logra un resultado satisfactorio, el siguiente
paso es el diseño físico que define la ubicación e interconexionado de la estructu-
ra del diseño. En el caso de una implementación con microchips, cada compo-
nente lógico o de almacenamiento, tiene que estar trazado antes de su ubicación e
interconexionado. Finalmente, después de terminar el diseño físico, el grupo de
tests genera los patrones de test adecuados a usar durante la fabricación, escri-
biendo también la documentación sobre el producto.
En el pasado, la mayoría de estas tareas de diseño tenían que hacerse manual-
mente, ya que sólo una pequeña parte del proceso de diseño estaba automatizado. Sin
embargo, esto empezó a cambiar, con la disponibilidad de herramientas CAD para el
diseño físico, que se desarrollaron para ayudar a los diseñadores en la ubicación e
interconexionado de los componentes. Posteriormente, se desarrollaron herramientas
adicionales para la captura de esquemas a nivel de puerta y también para simulación
a nivel de puerta, que hicieron posible automatizar más el proceso de diseño.
Más recientemente, en los 90, ha avanzado significativamente la automatiza-
ción del proceso de diseño, introduciendo lenguajes de descripción hardware
estándares y herramientas de síntesis. Con los lenguajes de descripción hardware
se pueden generar ahora descripciones de comportamiento que se simulan fácil-
mente, y con las nuevas herramientas de síntesis se ha hecho mucho más fácil
pasar de una representación estructural a una de comportamiento.
Debido a este reciente desarrollo, ha surgido un nuevo proceso de diseño que
depende enormemente de la descripción del comportamiento en niveles de abs-
tracción superiores y de refinado o síntesis de la descripción del comportamiento.
Este rápido éxito de las nuevas herramientas de síntesis ha generado una deman-
da en la automatización del proceso de diseño en incluso los niveles superiores, y
eventualmente en el desarrollo de técnicas de síntesis de sistemas completos a
Introducción 21

partir de especificaciones ejecutables. En este libro seguimos este nuevo proceso


de diseño, con la excepCión de la síntesis de sistemas, que queda fuera
ce de este texto.

1.6. ORGANIZACiÓN DEL LIBRO


En este libro, nos hemos ocupado ante todo de las técnicas de que
se requieren en el diseño de computadoras. En su más extenso alcance, el diseño
de un computador podría decirse que empieza con la física del estado sólido y con
el proceso de fabricación de circuitos integrados, que determinan los tipos y pro-
piedades de los componentes electrónicos más básicos, tales como transistores,
resistencias y condensadores. Con estos componentes se pueden diseñar tanto cir-
cuitos analógico~ como digitales, siguiendo las leyes básicas de la electrónica.
Los circuitos digitales procesan señales que pueden tomar sólo un pequeño núme-
ro de valores fijos, normalmente dos, que hacen que sean muy -robustos y fáciles
de diseñar. Debido a estas dos características, todos los cálculos y el procesa-
rniento de la información se hacen con circuitos digitales.
Por otra parte, los circuitos analógicos procesan señales que pueden tomar
cualquier valor dentro de un rango dado. La mayoría de las señales que se gene-
ran o que los humanos reconocen, como texto, voz, y vídeo, son señales analógi-
cas. Como todo el procesamiento se hace digitalmente, los sisteinas electrónicos
generales deben convertir estas señales analógicas, generadas por humanos, en
señales digitales, y después realizar las operaciones, transformaciones y 'comuni-
caciones totalmente en el dorninio digital, convirtiendo los resultados en señales
analógicas con el fin de que el ser humano las utilice.
El análisis y síntesis de circuitos analógicos y digitales se presenta en cursos
introductorios en la mayoría de las irigenierías y se ha omitido en este libro. No
se reqnieren tampoco conocirnientos de electrónica o de dis.eño de circuitos para
entender el contenido de este libro. Teniendo en cuenta esto, la exploración de un
computador cornienza con puertas lógicas y biestables, que son circuitos digitales
específicos que trabajan sólo con dos valores y presentan sólo dos estados. Por
conveniencia, suponemos que nuestra biblioteca de componentes lógicos la ha
definido un hipotético fabricante de circuitos integrados. De esta forma no nece-
sitamos implicamos en la fabricación y diseño de circuitos. Esta situación se pare-
ce a lo que ocurre actualmente en la industria, en la que los fabricantes de chips
también proporcionan a sus clientes bibliotecas lógicas. Por tanto, los diseñado-
res de sistemas trabajan con bibliotecas y dan la descripción del sistema en fun-
ción de los componentes de la biblioteca, rnientras que en las fábricas de circui-
tos integrados se introduce el trazado de cada componente antes de su fabricación.
En este libro se usa una estrategia de abajo a arriba en los principios de dise-
ño digital. Como vemos en la Figura 1.7, comenzamos presentando en el Capítulo
2 el sistema de numeración binario y las representaciones de datos que se usan en
todos los sistemas digitales y productos basados en computadores. Todos los com-
ponentes de almacenamiento y aritméticos que se usan se basan en la representa-
22 Principios de diseño digital

ción binaria de números y alfabetos. Sin embargo, antes de embarcamos en el


diseño de componentes concretos, en el Capítulo 3 se introduce el fundamento
teórico del diseño digital , que se denomina álgebra de Boole. En el mismo capí-
tulo se introduce nuestra biblioteca lógica, que es básicamente una implementa-
ción de los operadores de este álgebra de Boole. En el Capítulo 4 se cubren las
técnicas de diseño lógico más básicas que se usan en la síntesis y optimización de
funciones booleanas arbitrarias. Luego, en el Capítulo 5, se emplean estas técni-
cas para construir componentes lógicos y aritméticos, incluyendo sumadores,
comparadores, selectores, codificadores y decodificadores que constituyen una
biblioteca combinacional par.a diseños de transferencia entre registros.

Tmnsistores.
~
J

8 "', Diseílode 8
Máquina de estados
fi nitos ge neralizada
F---------....) transferencia entre
registros

1
J
;

Componenles
d< '
pro••"'''''

FIGURA 1.7 Estructura del libro.


Introducción 23

En el Capítulo 6 se introduce el modelo de máquina de estados finitos, que se


necesita en el diseño de componentes de almacenamiento tales como registros,
contadores y memorias. Estos componentes de memorización se suelen denomi-
nar componentes secuenciales porque su comportamiento depende de una secuen-
cia de valores de entrada en lugar del valor exacto de la entrada actual. Además
del modelo de máquina de estados finitos, en el Capítulo 6 se introducen algunas
de las técnicas de diseño secuencial que se usan en el Capítulo 7 cuando se cons-
truyen componentes secuenciales básicos como registros, contadores, memorias,
pilas, colas y caminos de datos.
Una vez diseñadas las bibliotecas combinacionales y secuenciales, se puede
acceder al siguiente nivel de abstracción. En el Capítulo 8 se introduce el mode-
lo de máquina de estados finitos generalizada y se presentan las técnicas de dise-
ño que se usan en la síntesis de componentes del procesador, cuyo comporta-
miento se suele describir mediante algoritmos, diagramas de flujo, o programas,
o en el caso de procesadores, con conjuntos de instrucciones. Finalmente, en el
Capítulo 9 se usan estas técnicas para diseñar procesadores con conjuntos de ins-
trucciones tanto reducidos como complejos.
Los componentes de procesadores estándar y a medida, presentados en los
Capítulos 8 y 9, junto con los componentes de interfaz y con dispositivos electro-
mecánicos tales como discos, cintas y teclados, se usan en el diseño de muchos
tipos de computadoras, incluyendo computadoras personales, estaciones de traba-
jo, servidores de ficheros y controladores de comunicación. El diseño de compu-
tadoras se estudia en los cursos de arquitectura de computadoras y su contenido
se sale del alcance de este libro. Por supuesto, en el caso de computadoras el hard-
ware básico se complementaría con varias capas de programas software, inclu-
yendo ensambladores, compiladores e interfaces gráficas de usuario. Esto se estu-
dia en cursos de diseño e ingeniería del software. Las computadoras se usan en el
diseño de sistemas embebidos más complejos, adecuados para aplicaciones tales
como procesamiento de señales, mecatrónica, robótica, comunicaciones, trans-
portes, procesamiento de imágenes, instrumentación médica y multimedia entre
otras. Sin embargo, en general las técnicas y aplicaciones de sistemas embebidos
se estudia sólo en cursos de arquitectura y sistemas avanzados, cuyo contenido
queda fuera del alcance del libro.

1.7. RESUMEN DEL CAPíTULO


En este capítulo hemos introducido las representaciones básicas de diseño, cono-
cidas como representaciones de comportamiento, estructural y física . Hemos des-
crito cuatro niveles de abstracción diferentes: los niveles de transistor, puerta,
registro y procesador. También hemos explorado las relaciones entre las repre-
sentaciones de un diseño y los niveles de abstracción describiendo el proceso de
diseño de un sistema digital electrónico, comenzando por una especificación y
terminando con la fabricación del producto. Hemos descrito muy brevemente
algunos conceptos sobre herramientas CAD usadas en el proceso de diseño.
24 Principios de diseño digital

En el resto del libro estudiaremos aquellos principios y técnicas que se usan


en el diseño digital en los niveles de puerta, registro y procesador. Esto nos per-
mitirá convertir una especificación de un diseño o una descripción de su compor-
tamiento en una estructura de componentes seleccionados de una biblioteca basa-
da en las bibliotecas industriales actuales. Podríamos introducir antes el proceso
de diseño, pero previamente necesitamos conocer los principios de los sistemas
binarios y del álgebra lógica.

1.8. LECTURAS ADICIONALES


A1amasi, G. s.,
and A. Gottlieb. Highly ParaUe! Computing, 2nd ed. Redwood City, CA:
Benjarnin-Curnmings, 1994.
Una visión del procesamiento paralelo que relata aplicaciones paralelas y modelos
computacionales paralelos de software y arquitecturas.
Dasgupta, S. Computer Architecture: A Modem Symhesis, Vol. 1. New York: Wiley, 1989
Una explicación bien escrita y clara del proceso de diseño, centrándose en el nivel de
abstracción arquitectural. Es un texto avanzado, más adecuado para estudiantes con
algunos conocimientos sobre arquitectura de computadores.
Gajski, D. D., F. Vabid, S. Narayan, and 1. Gong. Specification and Design of Embedded
Systems. Englewood Cliffs, NJ: Prentice Hall, 1994.
Una introducción al problema y resolución del diseño de sistemas embebidos, hacien-
do énfasis en modelado, exploración y refinamiento del diseño.
Geiger, R. L., P.E. AlIen, and N. R. Strader. VLSI Design Techniques for Analog and Digital
Circuits. New York: MacGraw-Hill, 1990.
Una visión excelente de la teoría de circuitos analógicos y digitales y de las técnicas de
diseño, con una introducción al diseño físico y fabricación de circuitos integrados
YLSI. Requiere conocimientos básicos de electrónica.
Hayes, J. P. lntroduction to Digital Design. Reading, MA: Addison-Wesley, 1993.
Una introducción minuciosa al diseño digital, relacionando la electrónica y la lógica a
través de un conjunto de modelos sencillos y fáciles de comprender.
Hennesey, 1. L. and D . A. Patterson. Computer Architecture: A Quantitative Approach. San
Mateo, CA: Morgan Kaufmann, 1990.
Una introducción al diseño de computadoras, relacionando aplicaciones e implementa-
ciones, escrito por dos pioneros en el campo de la tecnología RJSc.
Lautber, U. lntroduction to Synthesis. Chapter 1: 'The syntbesis approach to digital system
design." Boston: Kluwer, 1992.
Una introducción muy legible sobre las representaciones y el proceso de di seño.
Maly, W. Atlas of IC Technologies: An lntroduction to VLSI Processes. Menlo Park, CA:
Benjamin-Cumrnings, 1987.
Una visión ilustrada excelente para inexpertos del proceso de fabricación .
McCluskey, E. J. Logic Design Principies. Englewood Cliffs, NJ: Prentice Hall, 1986.
Uno de los pioneros del diseño digital explica los métodos básicos del diseño digital,
con una visión muy buena sobre los problemas de test y su solución.
Introducción 25

Sapiro, S., and R. l. Smith n. Halldbook of Design Automation. Englewood Cliffs, NI:
Prentice Hall, 1986.
Un tratamiento introductorio que proporciona una descripción concisa del proceso de
diseño, sus tareas básicas y el papel de las herramientas CAD en él. Requiere algunos
conocimientos básicos de diseño digital.
Wolf, W. Modem VLSI Design: A Systems Approach. Englewood Cliffs, NI: Prentice Hall,
1994.
Un texto fácil de leer explicando los principios del diseño VLSI y cubriendo varias
fases del diseño digital, desde el trazado de máscaras a la arquitectura.

1.9. PROBLEMAS
1.1. (Representación del diseño) Describa semáforos descrito como sigue
las diferencias"entre las representacio- Cuatro semáforos están orientados en
nes de comportamiento, estructural y cuatro direcciones, identificadas por
física de un producto electrónico. las letras N, S, W y E. Cada luz sigue
la siguiente secuencia : verde (45
1.2. (Representación del diseño) Añada
segundos), naranja (15 segundos), y
una nueva característica al reloj des-
rojo (60 segundos). Además, los
pertador descrito en la Sección 1.1 de
semáforos N y S están siempre del
fonna que si se mantiene presionado
mismo color, al igual que E y W, y los
durante 4 segundos el botón de avan-
semáforos N y S nunca están en verde
ce de los minutos o las horas, el tiem-
o amarillo al mismo tiempo que los E
po comience a avanzar a la velocidad
de 1 minuto o 1 hora cada 0.1 segun-
yw.
dos. Modificar, para reflejar este 1.5. (Proceso de diseño) Describir la djfe-
cambio en las especificaciones, las rencia entre:
representaciones (a) de comporta- (a) Una especificación y una espe-
miento, (b) estructural, y (c) física. cificación ejecutable
1.3. (Representación del diseño) Añada (b) Una biblioteca a medida y una
una nueva construcción a la represen- biblioteca estándar
tación de comportamiento del reloj (e) Síntesis y refinamiento
despertador, de forma que la señal (d) Representación y abstracción
Pitido tome el valor 1 sólo 5 segun- (e) Patrones de test y medidas de
dos después de que el reloj alcance la testeabilidad
hora y minuto de la alarma. (í) Documentación y descripción
Obsérvese que en dicha descripción, HDL
la señal Pitido tendrá el valor 1
1.6. (Herramientas CAD) Describe las
durante un minuto entero (es decir,
diferencias entre :
hasta que el contador de minutos
(a) Captura de esquemas y modela-
haya avanzado 1 y el valor del conta-
do
dor de minutos deje de ser igual que
(b) Diagrama de bloques y especifi-
el valor del registro de minutos).
cación
1.4. (Representación del diseño) Haga las (e) Verificación y simulación
representaciones de comportamiento (d) Optimización y traslación (ma-
y estructural de un controlador de peado) a la tecnología
26 Principios de diseño digital

(e) Ubicación y planificación del AS IC, mientras el proceso de diseño


espacio comienza con una especificación eje-
(f) Determinación del perfil de fal- cutable y termine con la fabricación
tas y generación de patrones de de MCM.
test
1.8. (Diseño físico) Dada una estructura
1.7. (Prooeso de diseño) Definir una de seis rnicrochips. como se muestra
metodología en la que la biblioteca en la Figura P 1.8(a), ubicarlos en un
contenga procesadores. memorias, y MCM de 3 x 3 y conectar los micro-

11 ---Lt---t-~--~ '*__+ ____ ...J..... 0,


1,

(a) Representación estructural

:::r r: :::r r: l:::r l:::r =I:::I =CI =CI


I1r1 0 l 1i1 0 111 1011 11
11 1I 11 11
1 r '1 r - j i -11 -1'1 -11-11
IILJ-110lloll
-t t- -j -t l-t l-i
Ir -11 1I 1'1
-t t- -t t- -1+ -H -H -H -H
irirli-li-li-n-li
-+1--0-1+
1 r IT
QH OH
11 n
.+ 1-.+ 1- -1.+ -1'+ -1'+ -I~ -I~
1 r 1 r - j i j i -1'1 -11-11
(b) MCM

FIGURA P1.8
Introducción 27

chips usando las trayectorias de tras que las conexiones horizontales


encaminamiento sugeridas con las están en la segunda capa de metal.
líneas de puntos de la Figura Obsérvese también que cada micro-
PI.8(b). Después conectar 1" l¡, 0, y chip tiene dos puertos a cada lado y
02 a los puertos MeM. Obsérvese que no se puede reasignar cualquier
que las conexiones verticales están conexión de estos puertos a otros
en la primera capa de metal, mien- puertos.
L o

Tipos y
representaciones
de datos
M6quiDudoS
estados tloitoo
gooenIlzadoo
30 Principios de diseño digital

En este capítulo se introducen los tipos de datos más comunes que se pueden
encontrar en sistemas digitales y después se muestra cómo se pueden representar
con un código binario. Los datos que podemos encontrar en sistemas digitales se
pueden clasificar en tres categorías generales que incluyen: (1) números que se
usan en operaciones aritméticas, (2) letras del alfabeto que se usan en procesa-
miento de datos y (3) una serie de símbolos discretos para diversos usos. Estos
tres tipos de datos se representan en computadoras en un código binario, que es la
forma más natural de diseñar dichas computadoras, sencillamente porque es fácil
construir circuitos electrónicos que posean dos situaciones alternativas que se
puedan interpretar según convenga como los valores O ó I de un dígito binario.
Aunque toda la información de los sistemas digitales se representa con estos dígi-
tos binarios, siempre que esta información sea para uso humano debe reconver-
tirse en dígitos decimales y letras de alfabeto.

2.1. SISTEMAS POSICIONALES DE NUMERACiÓN


Para comprender el sistema de numeración binario usado en el diseño de compu-
tadoras, necesitamos reconocer que el sistema de numeración que usamos a dia-
rio es un sistema de numeración posicional. En_este sistema se puede represen-
tar cualquier número mediante una cadena de dígitos en la que la posición de cada
dígito tiene un peso asociado. Así, el valor de un número dado equivale a la suma
ponderada de todos sus dígitos, como por ejemplo:
1234 = I . 1000 + 2 . 100 + 3 . 10 + 4 . I
Obsérvese que en este ejemplo, cada peso es una potencia de 10 que es igual
a 10;, donde i corresponde a la posición del dígito contando desde la derecha. Un
punto decimal nos permite usar potencias de 10 tanto negativas como positivas en
la representación numérica. Por ejemplo:
1234,56 = I . 1000 + 2 . 100 + 3 . 10 + 4· I + 5 ·0, 1 + 6 . 0,01
En general, cualquier número decimal D de la forma d¡dOd_¡d_2 vale:
D = d¡ . 10¡ + do . 100 + d_¡ . 1O- ¡ + d_2 . 10- 2
Aquí a LO se le denomina base (radix) del sistema numérico. En un sistema
numérico posicional general, la base debe ser cualquier entero r, y un dígito en la
posición i tendrá entonces el peso r i Por consiguiente, podríamos describir la
forma general de un número en tal sistema como:
dm_¡d"'_2 ... d¡dO,d_¡d_2 ... d_..
donde hay m dígitos a la izquierda de la coma, conocida como coma fracciona-
ria, y n dígitos a su derecha. Obsérvese que si no hay coma fraccionaria debe-
ríamos suponer que está a la derecha del dígito que esté más a la derecha. El valor
de este número es la suma de los productos de cada dígito multiplicado por la
correspondiente potencia de la base:
Tipos y representaciones de datos 31

111 - 1
D=¿d¡.r¡
;= - 11

En un sistema numérico posicional la representación de cada número es única


una vez eliminados los posibles ceros del comienzo o del final. Obsérvese que el
dígito que está más a la izquierda se denomina en este sistema numérico dígito
más significativo (MSD, Mast Significant Digit), y el que está más a la derecha
es el dígito menos significativo (LSD, Least Significant Digit). Puesto que los
sistemas digitales usan dígitos binarios, se usa una base binaria para representar
cualquier número en un sistema digital. La forma general de tal número binario
es

y su valor equivale a
rn - l
B= ~>¡.2'
;=- n

De forma similar a la coma decimal en un número decimal, a la coma frac-


cionaria en un número binario se le denomina coma binaria. Usualmente, siem-
pre que se trabaja con números binarios u otros no decimales se usa un subíndice
para indicar la base de cada número, aunque la base suele estar suficientemente
clara por el contexto. A continuación hay algunos ejemplos de números binarios
y sus equivalentes decimales:
10101 2 = 1 . 16 + 0·8 + 1·4 + 0·2 + I . 1=2110
110101 2 = 1 ·32 + 1 . 16 + 0·8 + I ·4 + 0·2 + 1 . 1 = 53 10
10,101 2 = I ·2 + O· 1 + I ·0,5 + O . 0,25 + I · 0,125 "= 2,625 10
,1111 2 = 1 ·0,5 + 1 . 0,25 + 1 " 0,125 + I " 0,0625 = 0,9375 10

2.2. NÚMEROS OCTALES Y HEXADECIMALES


Después de la discusión sobre los sistemas numéricos posicionales, se puede reco-
nocer fácilmente la importancia de la base lO, que se usa conmunmente, y de la
base 2, que se usa en sistemas digitales para procesar números. Sin embargo, exis-
ten también dos bases adicionales que son importantes para nuestros objetivos, ya
que la base 8 y especialmente la base 16 se usan a menudo para hacer las repre-
sentaciones de números binarios más cortas, reduciendo la necesidad de cadenas
largas indescifrables.
El sistema de numeración octal usa como base el 8, mientras que el sistema
de numeración hexadecimal usa como base el 16. Como el sistema octal posee
ocho valores diferentes, se usan los dígitos del Oal 7 del sistema decimal. El sis-
tema hexadecimal , sin embargo, necesita representar 16 valores diferentes, así que
suplementa los dígitos decimales con las letras de la A a la F. En la Tabla 2.1 se
32 Principios de diseño digital

muestran los enteros binarios del O al 10001 con sus equivalentes en octal, deci-
mal y hexadecimal. Obsérvese que los dígitos octales pueden representarse con
tres dígitos binarios, mientras que los dígitos hexadecimales y decimales pueden
representarse con cuatro dígitos binarios. La Tabla 2.2 muestra los enteros bina-
rios del O al 10001 Y sus equivalentes octal, decimal y hexadecimal codificados
en octal.

TABLA 2.1 Diferentes representaciones de TABLA 2.2 Representaciones codificadas


los números del O al 21 en binario

~ . ~- '· .. ~l!-~'
·h-·~· -. '. ,", . , .'
......
.;-;..
• ~ I ::, ~.4 • • ~..

_ . , 1 - .-~

:- . ~ ... _. .~. .
o O O O ~ .~~ ;:'.- " .~- -~ : \:; . ~
1 1 1 1
10 2 2 2 o 000 0000 0000
11 3 3 3 1 001 0001 0001
100 4 4 4 10 010 0010 0010
101 5 5 5 11 011 OOIJ 0011
110 6 6 6 100 100 0100 0100
IJI 7 7 7 101 101 0101 0101
1000 10 8 8 IJO IJO 0110 OIJO
1001 IJ 9 9 111 IU 0111 Olll
1010 12 1000 00 1 000 1000 1000
10 A
1001 001001 1001 1001
10U 13 11 B
1010 001 010 00010000 1010
1100 14 12 e 1011 001011 00010001 1011
1101 15 13 o IJOO 001 100 0001 0010 IJOO
1110 16 14 E IJOI 001 101 00010011 1101
UII 17 15 F 1110 001 UO 00010100 lIJO
10000 20 16 10 IJIJ 001 111 00010101 1111
10001 21 17 11 10000 010000 00010101 00010000
10001 010 001 0001 OIJ 1 0001 0001

Es muy fácil convertir un número binario en octal. Empezando por el punto


binario y operando hacia la izquierda, sencillamente se separan los bits en grupos
de 3 y se sustituye cada grupo por el correspondiente dígito octal como se ve en
el siguiente ejemplo:
10100111002 = 001 010 011 100 = 12348
La conversión de binario a hexadecimal es igual, excepto que se toman gru-
pos de 4 bits:
10100111002 = 0010 1001 1100 = 29C'6
Obsérvese en estos ejemplos que se añaden ceros por la izquierda si hace falta
que el número total de bits sea múltiplo de 3 Ó 4.
Tipos y representaciones de datos 33

Las partes fraccionarias se pasan a octal o hexadecimal empezando en la coma


binaria y agrupando los dígitos binarios que quedan a la derecha. De nuevo tene-
mos que añadir ceros al grupo que está más a la derecha para conseguir múltiplos
de 3 ó 4 bits, como se ve en el siguiente ejemplo.

,lO111 2 = ,101 110 = ,56 8


= ,1011 1000 = ,B8 16
Convertir en sentido opuesto, de octal o decimal a binario, es también bastan-
te sencillo. Sustituimos cada dígito octal o decimal por la correspondiente cadena
binaria de 3 ó 4 bits siguiendo la Tabla 2.1. Por ejemplo:

765 8 = 111110101 2
765,432 8 = 111110101 ,1000110102
FEDI6 = 111111101101 2
FED,CBA = 111111101101,l1oo101110102

A pesar de que el sistema octal no se usa mucho hoy en día, el sistema hexa-
decimal es bastante popular, ya que se puede pasar fácilmente de o a binario, y
porque los datos normalizados de 8, 16, 32, y 64 bits se pueden expresar eficien-
temente con 2, 4, 8, y 16 dígitos hexadecimales.

2.3. CONVERSIONES ENTRE SISTEMAS NUMÉRICOS


Como regla general, no podemos pasar de la representación de un número en una
base a la representación en otra base sencillamente sustituyendo los números de
una base por los equivalentes de la otra; esto es correcto sólo cuando ambas bases
son potencias enteras del mismo número. Cuando no es este caso, se deben seguir
procedimientos de conversión más complejos que requieren operaciones aritmé-
ticas. En esta sección se muestra cómo convertir un número en cualquier base a
base lO, y viceversa, usando una aritmética en base 10.
Como se indicó en la Sección 2.1, el valor de un número en cualquier base se
puede representar mediante la fórmula
m-I
D= Ld/ (2.1)
;=- 11

donde r es la base del número, m indica el número de dígitos a la izquierda del


punto, y n indica el número de dígitos a la derecha. Entonces, el valor decimal de
un número en cualquier base se determina convirtiendo cada dígito del número en
su equivalente en base lO, y luego se aplica la fórmula usando aritmética en base
10. A continuación se muestran dos ejemplos:
12EF16 = 1.163 + 2.162 + 14.16 1 + 15 .16° = 4847 10
436,5 8 = 4 . 82 + 3 . 8 1 + 6 . 8° + 5 . 8- 1 = 286,625 10
34 Principios de diseño digital

Por otra parte, como alternativa al uso de esta fórmula, se puede seguir un sen-
cillo procedimiento para pasar números de una base a base 10 reescribiendo la
parte entera de la Ecuación (2.1) así tenemos:
(2.2)
A partir de la Ecuación (2.2) podemos idear un procedimiento iterati va que
exarrune el número desde el MSD al LSD y lo vaya acumulando a una suma deci-
mal, S. Como se muestra en la Figura 2.1, este procedimiento asigna primero O a
S, y luego en cada paso del procedimiento, comenzando por el dígito más signifi-
cativo, se multiplica S por la base r, y el siguiente dígito menos significativo (el
siguiente por la derecha) se suma al producto. Este paso se repite para cada dígi-
to hasta que se haya sumado a S el dígito menos significativo, que representa el
equivalente decimal del número en base r.
La Ecuación ,(2.2) es también un punto de corruenzo útil para convertir un
número decimal D en un número en base r. Si dividimos el número D de la
Ecuación (2.2) por r, la parte entre paréntesis de la Ecuación (2.2) representa el
cociente
Q = ( .. .((dm_¡) r + dm_2Jr .. . )r + d¡ (2.3)
mientras lo que queda es el resto
R= do

s- o
2

FIGURA 2.1 Procedimiento para pasar números en base ra números decimales.


Tipos y representaciones de datos 3S

En otras palabras, do se obtiene como el resto de una división entera de D entre r.


Más aún, como el cociente Q de la Ecuación (2.3) tiene la misma forma que el
número original, sabemos que las divisiones sucesivas por r dan dígitos sucesivos
de D de derecha a izquierda hasta que se hayan obtenido todos los dígitos de D.
En el siguiente ejemplo se ven varias aplicaciones de este procedimiento, que se
resume en la Figura 2.2.

S=D

2
;=0

Divide S entre r 3

s = cociente
di = resto

FIGURA 2.2 Procedimiento para pasar números en base r a números decimales.

EJEMPLO 2.1 Conversión binaria


PROBLEMA
Convertir (a) 179 a binario, (b) 467 a octal, y (e) 3417 a hexadecimal.
SOLUCIÓN

(a) 179 + 2 = 89 resto 1 (LSD)


89 + 2 = 44 resto I
44 +2=22 restoO
22+2=11 restoO
11 +2=5 resto I
36 Principios de diseño digital

5+2=2 resto 1
2+2=1 resto 1
1 + 2 = O resto 1 (MSD)
Por tanto, 179 10 = 10110011 2,
(b) 467 + 8 = 58 resto 3 (LSD)
58 + 8 = 7 resto 2
7 + 8 = O resto 7 (MSD)
Por tanto, 467 10 = 723 8,
(e) 3417 + 16=213 resto 9 (LSD)
213 + 16 = 13 resto 5
13 + 16 = O resto 13 (MSD)
Por tanto, 3417 10 = D59 16 •

2.4. SUMA Y RESTA DE NÚMEROS BINARIOS


Sumar y restar números binarios a mano es un procedimiento sencillo ya que se
usan ' técnicas conocidas que se aplican también a los números decimales; de
hecho, la única diferencia es que con números binarios las tablas de suma y resta
contienen sólo unos y ceros en lugar de dígitos decimales.
Como el lector sabe, se suman dos números decimales sumando un par de
dígitos a la vez, empezando por el menos significativo de cada número. Si la
suma de un par dado es mayor que 10, nos llevamos el exceso a la suma del
siguiente par de dígitos más significativos. Sumando dos números binarios,
x =XOl _l" 'xO e Y = YOl-I"'YO ' por ejemplo, se sigue básicamente el mismo proce-
dimiento, sumando los bits menos significativos, Xo e Yo, con un acarreo (carry)
inicial, Co, igual a 0, que produce el bit de acarreo de salida, CI' Y el bit de suma
so' como se indica en la Tabla 2.3 , en la que se muestra la suma, Si' y el bit de
acarreo, Ci+l' para cada posible combinación de X i' Yi' Y Ci • Se sigue este proce-
so para cada par de bits, de derecha a izquierda, y se incluye el acarreo de sali-
da de cada columna en la suma de la columna siguiente más significativa. La
suma completa se resume en la Figura 2.3. ilustramos este procedimiento en el
siguiente ejemplo.

EJEMPLO 2.2 Suma binaria

PROBLEMA
Sumar los equivalentes binarios de los números decimales 987 y 123.
SOLUCIÓN
En .la Figura 2.4 se muestran las representaciones binarias de los números 987 y 123.
Obsérvese que 123 se completa con ceros por la izquierda durante la suma.
Tipos y representaciones de datos 37

5'2 256 '28 64 32 '6 8 4 2

x O O

y O

Acarreos O

B y O O O O O O

s" s, s, s, s, Ss S, S, S, S, So

FIGURA 2.4 Ejemplo de suma binaria cuando se suman dos números binarios, x(987) e
y(123).

Primero se suman Xo = 1 e Yo ;:: 1, dando el acarreo el = 1 Y la suma


So = O, como se indie .. en el polígono punteado de la Figura 2.4. Luego, se suman x, = 1,
y, = 1 Ye, = 1, obteniéndose el acarreo e2 = 1 Yla suma s, = 1, como se ve en la zona som-
breada de la Figura 2.4. Este proceso sigue hasta que se genera slO = 1 Y el acarreo
e" = O.

La resta binaria se realiza de forma similar, restando un par de bits a la vez,


aunque se va obteniendo en cada paso un bit de adeudo (b;, borrow) en vez de
un bit de acarreo, y un bit de resta en lugar de un bit de suma. La Tabla 2.4
muestra la diferencia d; y el adeudo b;+, para todas las posibles combinaciones
de x;, y; y b;. Aparte de estas diferencias, el procedimiento para restar números
binarios que se muestra en la Figura 2.5 es el mismo que el usado en la suma
binaria: se comienza por los bits menos significativos, se generan el bit de
adeudo b, y el bit de resta do, y se sigue de derecha a izquierda hasta que se
generan el bit de adeudo más significativo, bm , Y el bit de resta más significa-
tivo, d m • J •

TABLA 2.3 Suma de dígitos binarios TABLA 2.4 Resta de dígitos binarios
.- . , -
• .~. . ' l', .' ~~f'!\.' , .
• - _ • • •- -y,,,--

O O O O O O O O O O
O O 1 O 1 O O 1 1 1
O 1 O O 1 O 1 O 1 1
O 1 1 1 O O 1 1 1 O
O O O 1 1 O O O 1
O 1 1 O 1 O 1 O O
1 O 1 O 1 1 O O O
1 1 1 1 1 1 1 1 1
38 Principios de diseño digital

;=0

FIGURA 2.3 Procedimiento para sumar dos números binarios.

; =0

FIGURA 2.5 Procedimiento para restar dos números binarios.


Tipos y representaciones de datos 39

EJEMPLO 2.3 Resta binaria


PROBLEMA

Realizar la resta binaria 987 menos 123.


SOLUCiÓN

Como en la suma, primero completamos la representación del 123 con ceros. Luego se resta
cada par de dígitos binarios empezando por los bits menos significativos y se obtienen los
resultados de acuerdo con la Tabla 2.4. La resta de Yo YXo genera el bit de resta do = O Yel
bit de adeudo b l = O, que se ilustra dentro de las Uneas punteadas de la Figura 2.6. De forma
similar, la resta de XI menos YI y b l genera dI = O Y b2 = O, como se ve en el área som-
breada de la figura . El proceso'sigue hasta que se genere d9 •

5 12 256 128 64 32 16 8 4 2
,,
x O O ,,
,,
,,
y O ,
,,r - - ---..J
Adeudos O O O O O O ,, O
,,
x+)' O O O O O ,, O
L _____

d, d, d, d, dd, d, d, d, d, do

FIGURA 2.6 Ejemplo de una resta decimal y binaria.

También se pueden desarrollar tablas de suma y resta para dígitos octales o


hexadecimales o cualquier otra base deseada; sin embargo, la mayoría de los inge-
nieros encuentra que es más fácil pasar los números a decimal, obtener los resul-
tados y luego volver a pasarlos a su forma original .

2.5. REPRESENTACiÓN DE NÚMEROS NEGATIVOS


En las secciones anteriores se ha trabajado sólo con números positivos. Los núme-
ros negati vos se pueden representar de muchas formas diferentes. Diariamente,
por ejemplo, el sistema que se usa es el sistema de signo y magnitud. Sin embar-
go, la mayoría de los ordenadores utilizan el sistema numérico complemento, para
simplificar la implementación de los circuitos aritméticos.

2.5.1. Representación en signo y magnitud

En el sistema de signo y magnitud un número está formado por dos partes, la


magnitud y el signo, que puede ser + Ó - e indica el valor positivo o negativo de
la magnitud. Como el lector sabe, se supone que el signo es "+" cuando no se
escribe ningún signo. Dentro de este sistema hay dos posibles representaciones
del cero, ."+O" y " ..{loo, y ambos tienen el mismo valor.
¡
40 Principios de diseño digital

Cuando se usa el sistema de signo y magnitud con números binarios, el signo


se representa mediante un único bit adicional: cuando este bit de signo es igual a
O suponemos que el número es positivo, mientras que un I significa un número
negativo. En general, el bit más significativo (MSB) <le la representación de un
número se usa como bit de signo, y los bits restantes indican la magnitud. Así,
+123 y - 123 se diferencian en su bit más significativo, de la siguiente forma:
01111011 2 = +123 10
1111 1011 2 = -123 10
Obsérvese que el sistema de signo y magnitud tiene el mismo número de ente-
ros positivos que de negativos. Cualquier entero en signo y magnitud con n bits
está dentro del rango que va de _(2n- 1 - 1) a +(2n-1 - 1), teniendo en cuenta que
hay dos posibles representaciones del cero.

FIGURA 2.7 Procedimiento para restar dos números binarios.


Tipos y representaciones de datos 41

Como muestra la Figura 2.7, la aritmética en signo y magnitud requiere que se


comparen tanto los signos como las magnitudes de los operandos. Supongamos,
por ejemplo, que queremos sumar dos números en signo y magnitud, DI = <SI ' mi>
y D 2 = <Si,~:> que generan el resultado D,= <Sr> m,>. Si el signo de ambos núme-
ros es el mismo, simplemente se suman sus magnitudes y el resultado hereda el
signo de los operandos. Si en cambio los signos son diferentes, hay que comparar
las magnitudes: cuando las magnitudes son iguales, el resultado es O ; cuando las
magnitudes son distintas, restamos a la magnitud mayor la más pequeña, y el resul-
tado hereda el signo de la magnitud mayor. Como se muestra en la Figura 2.7, una
resta se lleva a cabo sumando después de cambiar el signo del sustraendo.
Para llevar a cabo operaciones de multiplicación o división, todo lo que tene-
mos que hacer es multiplicar o dividir las magnitudes y hacer el resultado positi-
vo cuando ambos operandos tengan el mismo signo y negativo en caso contrario.
Cuando el resultado es cero, se pone signo positivo.
Como la multiplicación y la división se pueden llevar a cabo normalmente
mediante sumas y restas iterativas, los únicos circuitos aritméticos que necesita-
ríamos son sumadores y restadores. Por el contrario, como la suma y resta de
números en signo y magnitud requiere la comparación de signos y magnitudes, los
sumadores y restadores en signo y magnitud tienden a ser más lentos que sus aná-
logos que utilizan el sistema de numeración en complemento, ya que estos no
requieren tal comparación.

2.5.2. Sistema de numeración en complemento

El sistema de numeración en complemento se inventó para hacer sumas y restas


más rápidas y más fáciles de implementar omitiendo la necesidad de comparacio-
nes entre signos y magnitudes. En su lugar se realiza la complementación, que se
puede llevar a cabo de modo muy eficiente con números binarios. A lo largo de
este libro se utiliza el sistema de numeración en complemento normalizado, que
se describe a continuación, denominado sistema en complemento a la base.
Aunque explicamos este sistema sólo para enteros, también se puede aplicar fácil-
mente a todos los números reales utilizando la forma en punto flotante.
Como se mencionaba más arriba, cualquier entero se puede representar como
D = I:::~I d/ En esta definición suponemos que el número de dígitos es m, y si
cualquier operación fuera a generar un resultado con más de m dígitos, nos que-
daríamos sólo con los m dígitos de menor orden. En el sistema en complemento a
la base, el complemento D de un número, D, con m dígitos, se obtiene restando
ese número a 1""
(2.4)
Por ejemplo, el complemento a la base de los números de tres dígitos 987 y
123 se puede obtener restándolos a 103 = 1000. Así, el complemento a la base o
complemento a lOen este caso de 987 es 13 y el complemento a 10 de 123 es 877.
En general, cuando D es distinto de 1 y de r" - 1, esta resta en complemento a la
42 Principios de diseño digital

base genera otro número que se encuentra entre 1 y m - l . Si por el contrario D


es O, el resultado de la complementación será r"', que tiene un total de m + 1 dígi-
tos, es decir, el dígito 1 seguido de m ceros. Como guardamos sólo los m dígitos
menos significativos, el número O se representa de forma única, mediante una
cadena de m ceros.
Alternativamente, podemos obtener el complemento a la base 15, descrito en
la Ecuación (2.4), sin restar, reescribiendo la ecuación del siguiente modo:
D =r m _D=«r m -1)-D)+1 (2.5)
El número m - 1 de la Ecuación (2.5) consta de m dígitos iguales cuyos valo-
res son r - 1. Si definimos el dígito complemento como d' = (r - 1) - d, entonces

(rm - 1) - D = «r -1)(r -1) . .. (r -1) - (dm_A"_2" .do)


=« r - 1) - d m _ 1)«r -1) - d m _ 2 ) . •• « r -1) - do)
= d~ _ ld;,_ 2 ' " dó
Además, si definimos
m- I
D'= Id;
;=0

podemos reescribir la Ecuación (2.4) de la siguiente forma

D = D ' +1 (2.6)
de acuerdo con esta ecuación el complemento a la base de un número D se obtie-
ne complementando los dígitos de ese número individualmente y luego añadien-
do uno. Por ejemplo, se obtiene que el complemento a 10 de 987 es 012 + 1, es
decir, 13, y el complemento a 10 de 123 es 876 +1 , es decir, 877. En la Tabla 2.5
se incluyen los dígitos complementarios de dígitos binarios, octales, decimales y
hexadecimales.
En comparación con la representación en signo y magnitud, la ventaja del sis-
tema en complemento a la base es que los números negativos se pueden repre-
sentar sencillamente mediante el complemento 15, ya que D + 15 = O cuando guar-
damos sólo los m dígitos menos significativos. Abora vamos a ilustrar esta venta-
ja en relación con los números binarios.
El complemento a la base con números binarios se denomina complemento a
2, y la representación numérica que resulta de esta transformación se denomina
representación en complemento a 2. Con números binarios el signo se representa
con el MSB , que es O para números positivos y 1 para números negativos.
Entonces un número negativo se obtiene a partir de un número positivo comple-
mentando cada dígito binario, incluyendo el bit de signo, y luego sumando 1 (es
decir, cambiamos todos los O por 1 y los 1 por O y luego sumamos uno). El aca-
rreo resultante del MSB se descarta. Por consiguiente si estamos complementan-
do O y el acarreo del MSB se descarta obtenemos Oen complemento a 2. Entonces
podemos concluir que en el sistema en complemento a 2, O tiene una única repre-
Tipos y representaciones de datos 43

sentación y representa su propio complemento. Además, como O es un número


positivo habrá una cantidad menor de números positivos distintos de O que de
números negativos. Por tanto el rango de números representables en complemen-
to a 2 va desde _(2",-1) a +(2",-1 - 1). Por ejemplo, el rango de los números de 4
bits va desde _23 =-8 hasta 23 - l =7. En la Tabla 2.6 mostramos tanto las repre-
sentaciones en complemento a 2 como en signo y magnitud de todos los enteros
de 4 bits.

TABLA 2.5 Complementos de dígitos


<
HEXA-
DIGno BINARIO OCTAl. DECIMAl.
DECIMAl.

O I 7 9 F
I O 6 8 E
2 5 7 D
3 4 6 e
4 3 5 B
5 2 4 A
6 I 3 9
/ 7 O 2 8
8 I 7
9 O 6
A 5
B 4
e 3
D 2
E I
F O

A veces, mientras se realizan operaciones aritméticas es necesario pasar de


números de In bits a números de n bits. En estos casos primero se determina si
n > In ; si lo es, se agregan n - In ceros después del bit de signo en cada número
positivo. Por la definición de complemento, en los números negativos agregamos
n-m unos detrás del bit de signo. Como se han insertado bits que son iguales al
bit de signo, este añadido se denomina extensión del signo. Alternativamente
siempre que n < m se hace un truncamiento del signo, descartando los In - n bits
que siguen al bit de signo. Sin embargo, este número truncado es válido solamente
cuando todos los bits descartados son iguales al bit de signo.

2.6. SUMA Y RESTA EN COMPLEMENTO A 2


Como mencionamos antes, la representación en complemento a 2 se ideó para
hacer más sencilla la suma y resta de números binarios haciendo innecesario el
tratamiento aparte de los bits de signo. En otras palabras, usar este sistema nos

,
44 Principios de diseño digital

pennite sumar y restar enteros tanto con signo como sin signo con el mismo cir-
cuito lógico. Como indicaba la Tabla 2.6 se puede obtener cualquier número entre
el menor (-8) y el mayor (+7) simplemente sumando 1 al número anterior e igno-
rando cualquier acarreo producido por los bits de signo.

2.6.1. Reglas para sumar

Para sumar dos números en complemento a 2 se usan las reglas de la aritmética


binaria que mostramos en la Figura 2.3, y se ignora cualquier acarreo del bit de
signo. Mientras que el rango del sistema numérico no se supere, el resultado de
esta suma será siempre correcto incluyendo el signo. Por ejemplo, la suma de dos
números positivos da lugar al resultado positivo correcto:
0010 (+2)
+ 0100(+4)
0110 (+6)
Igualmente, sumando dos números negativos siempre se obtendrá una suma
negativa correcta mientras se ignore el acarreo del bit de signo:
1110 (-2)
+ 1100 (-4)
acarreo ignorado = l 1010 (-6)
Sin embargo, hay casos en los que una operación produce un resultado que
excede el rango del sistema numérico, dando lugar a una situación conocida como
desbordamiento (overflow) . Como norma, la suma de dos números con distinto
signo nunca produce un desbordamiento. Sin embargo cuando sumamos dos
números con el mismo signo que dan una suma mayor que el mayor número
representable, se puede obtener un resultado incorrecto, como por ejemplo el caso
de un número en complemento a 2 de 4 bits.
0100 (+4)
+ 0101 (+5)
1001 (-7)
De forma similar,
1110 (-4)
+ 1011 (-5)
acarreo ignorado = 1 0111 (+7)
Como sugieren estos ejemplos, es posible establecer una regla sencilla para
detectar si hay desbordamiento en las sumas: en efecto, un desbordamiento en la
suma ocurre siempre que el signo de la suma sea diferente a los signos de ambos
sumandos. Los diseñadores de computadores usan una regla ligeramente diferen-
te en el diseño de circuitos sumadores en complemento a 2. Si ambos operandos
Tipos y representaciones de datos 45

son positivos, hay desbordamiento siempre que haya acarreo hacia el bit de signo.
En este caso no hay acarreo del bit de signo ya que ambos signos son O. Por otra
parte, si ambos operandos son negativos, hay desbordamiento siempre que no
haya acarreo hacia el bit de signo, ya que los números negativos grandes tienen
complementos pequeños. En este caso debería haber acarreo del bit de signo. Así,
podemos definir la regla de desbordamiento de la signiente manera: Hay desbor-
damiento en la suma siempre que el acarreo que va hacia el bit de signo sea dife-
rente del acarreo que produce el bit de signo.

TABLA 2.6 Representaciones en comple-


mento a 2 y en signo y magnitud

~
~f"~:.:· I"~ . .JoÍ*-?' ;.. I '.".. ,;.~;..I .. 1
-8 1000
-7 1001 1111
-6 1010 1110
-5 10ll 1101
-4 lloo lloo
-3 llOI IOll
-2 IllO 1010
-1 llll 1001
O 0000 1000 6 0000
I 0001 0001
2 0010 0010
3 ooll 0011
4 0100 0100
5 0101 0101
6 0110 OllO
7 Olll 0111

2.6.2. Reglas para restar


Usando el procedimiento descrito en la Figura 2.5 se restan dos números en com-
plemento a dos como si fueran números binarios naturales, sin signo, en cuyo caso
las reglas para detectar desbordamiento en la resta son las mismas que las que se
usan para detectar desbordamiento en la suma. Sin embargo, la mayoría de los cir-
cuitos que restan en complemento a dos no llevan a cabo directamente la resta,
sino que niegan el (o invierten los bits del) sustraendo tomando su complemento
a dos y después lo suman al minuendo usando las reglas normales para sumar.
Afortunadamente, el tomar el complemento a dos del sustraendo y añadirlo al
minuendo se puede conseguir usando s610 un complementador de bits seguido de
un circuito sumador: el complementador complementa los bits del sustraendo,
luego el sumador suma al complemento el minuendo y adicionalmente suma 1,
46 Principios de diseño digital

para completar el complemento a dos. La suma de I se hace poniendo el acarreo


de entrada (co) del sumador a 1 en lugar de a O.
Para demostrar la diferencia entre la resta directa y la suma en complemento
a dos, consideremos la resta de dos números pequeños. Por ejemplo, podemos res-
tar +4 directamente a +2 y obtener -2:
0010 (+2)
0100 (+4)
11 00 adeudos
adeudo ignorado = 1 1110 (-2)

Alternativamente, podemos obtener el mismo resultado complementando el


sustraendo (+4) Y sumándolo al minuendo (+2):
0010 (+2)
+ 11 00 complemento a dos de (+4)
000 acarreos
1110 (-2)

Como el segundo caso de resta se realiza sumando el complemento a dos,


podemos aplicar las mismas reglas para la detección del desbordamiento ; es
decir, hay desbordamiento en la resta siempre que el signo de la diferencia sea dis-
tinto de los signos del minuendo y del sustraendo complementado. La regla del
acarreo queda igual que antes.
El lector deberfa darse cuenta dé que el número más negativo dentro del
rango, _2m- ¡ , no tendrá complemento y que calcular su complemento a dos da
lugar a un desbordamiento. Sin embargo, su complemento a dos aún se puede usar
en sumas y restas siempre que el resultado final no exceda el rango de los núme-
ros. Por ejemplo, cuando restamos -8 a -4, obtenemos el resultado correcto de +4,
aunque el complemento a dos de -8 se sale del rango:
1100 (-4)
+ 1000 complemento a dos de (- 8)
acarreo ignorado = I 0000 acarreos
0100 (+4)

En este ejemplo primero hemos obtenido el complemento de -8 invirtiendo


cada bit, y cambiando el primer bit de acarreo a 1, creando, por consiguiente, el
complemento a dos de -8. Luego, llevamos a cabo la suma binaria y desechamos
el acarreo del bit de signo.
Como los números en complemento a dos se suman y se restan siguiendo el
mismo procedimiento que el usado con números sin signo de la misma longitud,
se puede usar el mismo circuito sumador/restador para ambas operaciones, como
se ilustra en la Figura 2.8, en donde dos números binarios, B ¡ YB 2 , se suman o se
restan para obtener el resultado Br' La resta se lleva a cabo según la Figura 2.8
sumando el complemento a dos de B2 , que es igual a B' 2 + 1. Obsérvese que aun-
Tipos y representaciones de datos 47

que se puede usar el mismo circuito para números con o sin signo, se tienen que
usar reglas distintas para la detección del desbordamiento en cada caso.

2.7. MULTIPLICACiÓN BINARIA


El método más común para multiplicar dos números consiste en sumar los pro-
ductos parciales desplazados que resultan de multiplicar el multiplicando por cada
uno de los dígitos del multiplicador. Por ejemplo, cuando se multiplica 14 por 13,
se multiplica 14 x 3 y se le suma el producto 14 x 1 desplazado:
14 multiplicando
x --º- multiplicador
42 3 x multiplicando
14 1 x multiplicando
182 producto
Se puede usar el mismo método de suma y desplazamiento para obtener el
producto de dos números binarios sin signo:
1110 multiplicando (14)
x 1101 multiplicador (13)
1110
0000
lllO
10110110 producto (182)
Como se puede ver, hacer los productos desplazados en una multiplicación es
una operación trivial, ya que los únicos valores posibles de los dígitos multiplica-
dores son O y l. En otras palabras, cada producto desplazado resulta ser el multi-
plicando o una cadena de ceros.

FIGURA 2.8 Procedimiento para sumar y restar números en complemento a la base.


48 Principios de diseño digital

Muchos computadores emplean algoritmos más eficientes para realizar esta


multiplicaci6n: en lugar de obtener todos los multiplicandos desplazados y luego
sumarlos juntos de una vez, se puede sencillamente crear un producto parcial e ir
sumando los multiplicandos desplazados uno a uno. Inicialmente, este producto
parcial se pone a O. Luego, se mira el LSB del multiplicador y si es 1, se suma el
multiplicando al producto parcial; si el LSB es O, no se hace nada. Después, se
repite este paso con el bit siguiente más significativo, desplazando el multipli-
cando un bit a la izquierda, y se siguen sumando estos multiplicandos desplaza-
dos hasta que se hayan agotado todos los bits del multiplicador. Con este método
hacen falta cuatro sumas y cuatro productos parciales para multiplicar los dos
números de 4 bits, 14 y 13:

1110 multiplicando (14)


x 1101 multiplicador (13)
0000 primer producto parcial
+ 1110 multiplicando desplazado
1110 segundo producto parcial
+ 0000 ceros desplazados
01110 tercer producto parcial
+ 1110 multiplicando desplazado
1000110 cuarto producto parcial
+ 111 O multiplicando desplazado
10110111 producto (182)

En la Figura 2.9 se muestra una generalizaci6n de este procedimiento para


multiplicar un multiplicando de n bits MD por un multiplicador de ni bits MR, que
se representa mediante bm_1bm-2 ...blbO' El producto se obtiene desplazando el
multiplicando i bits a la izquierda y sumándolo al producto parcial PP siempre
que el bit multiplicador correspondiente, b;, no sea igual a cero. El desplazamien-
to de i bits a la izquierda se obtiene multiplicando el multiplicando por 2;. Como
se puede ver, PP es igual al producto final después de que hayamos considerado
el dígito más significativo bm_ l •
En general, multiplicar un número de n bits por un número de ni bits, da lugar
a un producto de n + m bits. Inicialmente, el producto parcial s6lo tiene n bits sig-
nificativos, pero gana un bit significativo cada vez que sumamos el multiplican-
do desplazado. Como el multiplicando desplazado se suma m veces, el producto
gana hasta ni bits adicionales.
Para multiplicar dos números con signo, sencillamente se multiplican sus
magnitudes, haciendo el producto positivo si los operandos tienen el mismo signo
y negativo si los signos son distintos. En el sistema de signo y magnitud esto es
muy fácil de hacer, ya que los signos y magnitudes están separados. Trabajar con
representaciones en complemento a dos es más difícil , ya que obtener la magni-
tud de un número negativo y si es necesario hacer el producto negativo, requiere
la complementaci6n, y luego sumar. Por ello, generalmente se multiplican dos
Tipos y representaciones de datos 49

números en complemento a dos usando la suma en complemento a dos con la lige-


ra modificación que explicamos a continuación.

pp=o

i: o

FIGURA 2.9 Procedimiento para multiplicar números binarios sin signo.

Como el lector recordará, hemos visto que en la multiplicación binaria de


números con signo, el número de desplazamientos del multiplicando es igua! a!
peso de los correspondientes bits multiplicadores. Por ello, como los bits en repre-
sentación en complemento a dos de un número positivo tienen el mismo peso que
los bits en un número negativo, la multiplicación en complemento a dos se puede
hacer mediante una secuencia de sumas en complemento a dos, sumando los mul-
tiplicandos desplazados como en el caso de los números sin signo. La única
excepción de este procedimiento es el bit de signo de un multiplicador negativo:
como el bit de signo tiene un peso de _2",- 1, hay que negar el (invertir los bits del)
multiplicando antes de que se le pueda sumar a! producto parcia!.
Cuando hay acarreo en la multiplicación en complemento a dos, tenemos que
recordar que hay que extender el signo antes de sumar un multiplicando despla-
zado a un producto parcial, ya que cada nuevo producto parcia! tendrá un bit
extra de precisión . Igua! que antes, ignoraremos cualquier acarreo del MSB
SO Principios de diseño digital

durante la suma. En el siguiente ejemplo se muestra la multiplicación en com-


plemento a dos.

EJEMPLO 2.4 Multiplicación binaria


PROBLEMA
Realizar la multiplicación binaria -14 por -l3.
SOLUCiÓN

lOOLO multiplicando (- 14)


x lOOll multiplicador (-l3)
000000 producto parcial ampliado
+ llOOLO multiplicando aropliado
¡ llOOLO producto parcial aropliado
+ 1l00LO multiplicando desplazado ampliado
ignorar acarreo 1I0LOllO producto parcial ampliado
+ 000000 todo ceros
lllOLOIIO producto parcial ampliado
+ 000000 todo ceros
lllLOLOlLO producto parcial ampliado
+ OOlllO multiplicando ampliado, desplazado y
negado
ignorar acarreo OOLOllOlLO producto (l82)

En este ejemplo de multiplicación hay que observar que los acarreos del MSB se han
ignorado en los productos parciales tercero y quinto, antes de la extensión del signo.
Obsérvese también que el último multiplicando desplazado fue negado antes de la suma.
Como el lector puede ver, el producto generado tiene LO bits de precisión, aunque sólo se
necesitan 9 bits para expresar 182. Para obtener una precisión de 9 bits necesitamos trun-
car el signo.

2.8. DIVISiÓN BINARIA


Como en la multiplicación, el algoritmo para la división binaria utiliza el método
desplazar-restar. En este algoritmo se resta primero el múltiplo mayor posible del
divisor para determinar el primer digito del cociente. Luego realizamos esta tarea
de nuevo con el dividendo disminuido y el divisor desplazado. Cuando dividimos
186 entre 14, por ejemplo, seleccionamos primero 14 como el múltiplo mayor de
14 menor de 18. Esta operación da 1, que ponemos como primer dígito del cocien-
te. Después seleccionamos 42 como el múltiplo mayor de 14 que sea menor que
46, lo que nos da un cociente de 13 y un resto de 4.
Tipos y representaciones de datos 51

13 cociente
14)186 dividendo
14 desplazado (divisor x 1)
46 dividendo reducido
42 desplazado (divisor x 3)
4 resto
Cuando trabajamos con números binarios utilizamos un procedimiento simi-
lar. Sin embargo, con números binarios puede haber sólo dos opciones para el
mayor múltiplo del divisor: cero y el divisor mismo. Consideremos, por ejemplo,
la división binaria de 186 entre 14:
1101 cociente (13)
1110) 10111010 dividendo (186)
1110 divisor desplazado
1001010 dividendo reducido
1110 di visor desplazado
10010 dividendo reducido
00000 divisor desplazado
10010 dividendo reducido
1110 divisor desplazado
lOO resto (4)
Como podemos ver, una división binaria es similar a una multiplicación bina-
ria, excepto en el tamaño de los operandos y el resultado, ya que un dividendo de
(n + m) bits y un divisor de n bits dan lugar a un cociente de m bits, y un resto de
11 bits. Siempre que el divisor es cero, o el cociente necesita más de m bits, puede
producirse un desbordamiento en la división.
Para dividir números con signo se dividen sus magnitudes y luego se hace el
cociente positivo si los operandos tienen el mismo signo y negativo si es distinto.
Si hay resto, este mantiene el signo del dividendo.
También se puede hacer la división directamente con números en comple-
mento a dos. Sin embargo estas técnicas, que usualmente llevan a cabo computa-
dores de altas prestaciones, están más allá del objetivo de este libro.

2.9. NÚMEROS EN COMA FLOTANTE


Hasta ahora en este capítulo hemos centrado nuestra discusión en representacio-
nes de números en coma fija, lo que supone que la coma fraccionaria tiene una
posición fija. En el caso de enteros, por ejemplo, sabemos que la coma fracciona-
ria está a la derecha del dígito menos significativo. Así podemos representar
números del O al 9999 con solo 4 dígitos decimales. Sin embargo, no podemos
representar 99000 con la misma representación incluso aunque sólo haya dos dígi-
S2 PrincipiDs de diseñD digital

tDS decimales distintDs de cerDo En este caSD decimDs que 99000 n.o está dentrD
del rangD de una representación CDn 4 dígitDs enteros.
En términDs generales, el rangD de un sistema numéricD se puede definir
CDmD el intervalD de tDdDS lDS números representables entre el mayDr y el menor.
En la representación CDn 4 dígitos, por ejemplo, el tamaño del rango es aproxi-
madamente 1()4. Desgraciadamente, muchos cálculos científicDs necesitan un
rangD mucho más ampliD que el que .ofrece este tiPD de representación en CDma
fija. Para ampliar este rangD, utilizamDs lo que se denomina números en coma
flotante, que tienen la forma
mantisa x (base y xponeme

PodemDs decir que un número en coma flotante es comD un número en CDma


fija, dadD pDr la mantisa, cuya pDsición de la CDma fracciDnaria se especifica
mediante el exponente.
Como la base de un número en puntD flDtante está implícita, SÓID la mantisa y
el expDnente han de representarse explícitamente. Por ejemplD, unD de lDS forma-
tDS flotantes para una representación de número en coma flDtante de cuatrD dígi-
tos podría usar enteros de dos dígitos entre O y 99 para el expDnente y la mantisa.
Así el número más pequeñD representable es O x 10°, mientras que el mayor
número representable es 99 x 1099 . Como el lector puede ver, el tamañD del rango
de esta representación de un número en coma flDtante de cuatrD dígitos es IO tOl ,
que es 1097 veces mayor que el tamaño de un rango en CDma fija.
Sin embargo, al mismo tiempo el mayDr tamañD de este rango en coma flotante
se ha .obtenido a costa de reducir el número de dígitDS significativDs que determina
la precisión de lDS números en CDma flDtante. En otras palabras, dentrD de un subran-
go dado hay menos números en coma flDtante que números en coma fija. CDnsi-
deremDs por ejemplD el subrango entre 1000 y 2000 en representación de cuatrD dígi-
tos. Usando números en coma fija podemDs representar 1001 números en este
subrangD, a saber, 1000, 1001, 1002, 1003, ..., 1999,2000. Por el cDntrario, usandD
númerDs en coma flotante podemDs representar sólo 11 números distintDs: 1000,
1100, 1200, 1300, ..., 1900,2000, que se representan 10 x 102, 11 X 102, 12 X 102,
13 x 102, ... , 19 x 102,20 x 102 Consecuentemente, CDmo todos lDS cDmputadores
trabajan CDn un número fijD de bits, la representación en coma flDtante siempre pre-
senta un rango mayor y menDr precisión que la representación en coma fija.
De forma más general, un númerD en CDma flDtante tiene una mantisa con
signo y un exponente, de fDrma que se pueden representar enteros pDsitivos, nega-
tivos y fracciones. ComD se muestra en la Figura [Link](a), el signo de la mantisa
va seguidD del expDnente CDn signo, y finalmente de la magnitud de la mantisa.
El exponente se suele codificar CDn un formato de CódigD en exceSD denDminado
característica, que se obtiene sumándole un sesgo al exponente. CDn este fDrma-
tD, el sesgD es ignal a la mitad del entero más grande representable en el campD
del exponente cuando se decrementa en l. 'PDr tantD,
1
sesgD =- base' -1
2
Tipos y represelltaciones de datos 53

donde s es igual al número de bits del campo del exponente. Por este motivo, este
exponente es siempre un número positivo.

Signo de la Exponente Magnitud


mantisa con signo de la mantisa

(a) Formato general

O 9 31
Característica Fracción
Signo
exceso 127 nonnaJizada

Punto binario implicado
(b) Normalización de 32 bits

O 2 63
Característica Fracción
Signo
con sesgo 1032 normalizada

Punto binario implicado


(e) Normalización de 64 bits

FIGURA 2.10 Representación en punto flotante.

Sin embargo, la mantisa normalmente es una fracción, en la que se supone que


la cQma está a la izquierda del bit más significativo . La fracción se normaliza
siempre, en el sentido de que la fracción siempre empieza con un bit distinto de
O. Como el único bit distinto de O es 1, se suele omitir frecuentemente como suce-
de en la representación en coma flotante estándar que usan los computadores de
hoy. El estándar de coma flotante de 32 bits, mostrado en la Figura [Link](b), tiene
1 bit de signo, 8 bits de característica con sesgo 127 y una fracción normalizada
de 23 bits, que en realidad tiene 24 bits, ya 'que el bit más significativo de la man-
tisa es siempre 1. De forma similar, el formato de 64 bits mostrado en la Figura
2.1O( c) consta de 1 bit de signo, 11 bits de característica con sesgo 1023 y una
parte fraccionaria de 52 bits.
La suma y resta de números en coma flotante se puede llevar a cabo de
acuerdo con las reglas algebraicas estándar. Sin embargo, como tanto la suma
como la resta requieren que los exponentes de los dos operandos sean iguales,
tenemos que igualarlos desplazando hacia la derecha la mantisa del menor ope-
rando e incrementando su exponente proporcionalmente hasta que sea igual al
exponente del número mayor. Después de este ajuste, se pueden sumar o restar
las dos mantisas y luego convertir, el resultado con el exponente común a coma
flotante .
En la realización de la suma, existe la posibilidad de que el resultado desbor-
de el campo de la mantisa, en cuyo caso se debe corregir desplazando la mantisa
un lugar a la derecha e incrementando el exponente en l. Si el exponente se des-
borda durante el incremento, se tiene que detectar este desbordamiento en coma
flotante ya que no se puede corregir. Además, en la reaHzación de la resta, hay la
54 Principios de diseño digital

posibilidad de que el resultado tenga uno O más ceros de cabecera en su mantisa,


en cuyo caso se debe normalizar desplazando la mantisa a la izquierda y decre-
mentando el exponente proporcionalmente. El desplazamiento máximo que se
puede necesitar es siempre menor que el número de bits de la mantisa. Si el expo-
nente se desborda a O durante el decremento, este desbordamiento a O también
debe detectarse.
Conceptualmente, la multiplicación de números en coma flotante es más fácil
que la suma y la resta, debido a que no es necesario alinear los exponentes. En
otras palabras, las mantisas se pueden multiplicar como si fueran enteros en coma
fija, y los exponentes sencillamente se suman. Sin embargo, si esta suma de expo-
nentes produce un desbordamiento a infinito (overflow) ( o a cero (underflow)),
se tiene que detectar el desbordamiento (a infinito o a cero) en coma flotante.
La mantisa resultante podría tener como mucho un cero de cabecera, lo que
requiere un único desplazamiento a la izquierda y la correspondiente reducción
del exponente en 1. Si el exponente desborda a cero tras esta reducción en 1, el
desbordamiento a cero en punto flotante se tiene que detectar. En cambio, si cual-
quiera de los operandos es cero, se tiene que generar un cero en coma flotante.
La división en coma flotante requiere que se dividan las mantisas y que se
reste al exponente del dividendo el exponente del divisor. Siempre que el divi-
dendo sea mayor que el divi sor, el cociente será mayor que 1, en cuyo caso hay
que desplazar la mantisa una sola posición a la derecha mientras que su exponen-
te se incrementará en l. Si el exponente se desborda (a infinito O a cero), se debe
detectar el desbordamiento (a infinito o a cero) en coma flotante. En aquellos
casos en los que el dividendo es cero, hay que generar un cero en coma flotante.
Por otra parte, si el divisor es cero, se debe detectar el desbordamiento en coma
flotante. Finalmente, si tanto el dividendo como el divisor son cero, el resultado
se identifica como número desconocido.
Para acelerar esta aritmética en coma flotante, las computadoras y las estacio-
nes de trabajo de altas prestaciones tienen aceleradores de coma flotante, que son
ASIC especiales que incorporan algoritmos rápidos para la aritmética en coma
flotante que se implementa directamente en hardware.

2.10. CÓDIGOS BINARIOS PARA NÚMEROS DECIMALES


Como las computadoras procesan y almacenan toda la información en forma de
dígitos o bits binarios, en un sistema digital un número decimal se representa con
una cadena de bits. Por ejemplo, podemos usar 4 bits para representar dígitos
decimales usando una codificación muy natural, que asigna el 0000 al dígito deci-
malO, Oool al 1, 0010 al2, y así hasta asignar ellool al 9. Entonces, el número
decimal de tres dígitos 123 se representa con la cadena de 12 bits 0001 0010 0011.
En general, cualquier conjunto de objetos se puede representar mediante una
serie de cadenas de bits en las que las diferentes combinaciones de bits represen-
tan distintos objetos. Este conjunto de combinaciones de bits se denomina códi-
go, y una cadena de bits particular dentro del conjunto se denomina palabra códi-
Tipos y representaciones de datos SS

go. La asignación de las palabras del código a los objetos se hace mediante una
expresión algebraica o una tabla. Sin embargo, el lector debería observar que
cuando la asignación se hace de forma tabular, puede no haber una explicación
lógica de cómo están relacionadas las palabras código con los objetos. Obsérvese
también que no necesariamente se tienen que usar todas las cadenas de bits como
palabras código.
Como se indicó antes, se necesitan al menos 4 bits para representar dígitos
decimales. Sin embargo, hay (: ~ ) = 16!11O!6! formas diferentes de escoger 10
palabras código específicas a partir de 16 posibles cadenas de 4 bits y lO! formas
distintas de asignar cada elección a 10 dígitos decimales. Entonces hay
l6! 10!/1O!6! = l6!/6! = 29, 059, 430, 400 códigos decimales de 4 bits diferentes.
Además, sólo unos pocos de ellos se usan actualmente, donde los más comunes
se listan en la Tabla 2.7.
El código decimal más frecuentemente usado es el código de dígitos deci-
males codificados en binario (BCD, Binary Coded Decimal), que asigna una
representación binaria sin signo de 4 bits a cada dígito entre O y 9, no usándose
las palabras del código entre 10 I O Y 1111. La conversión entre las representacio-
nes BCD y decimal se puede llevar a cabo simplemente sustituyendo 4 dígitos
BCD por cada dígito decimal y viceversa. Sin embargo, en la práctica se suelen
agrupar dos dígitos BCD en un byte de 8 bits, que por tanto puede representar
cualquier valor comprendido entre O y 99.
Los números en BCD negativos se pueden expresar de varias formas, incluyen-
do las representaciones en signo y magnitud y en complemeoto a 10. En cada una de
estas representaciones el signo se sitúa en un dígito extra. En BCD con signo y mag-
nitud, los signos + Y- se pueden representar con cualquier cadena de 4 bits, en repre-
sentació[Link] complemento a 10 el signo + se representa con 0000 y el- con 1001.

TABLA 2.7 Códigos decimales usuales

o 0000 0000 0011 0100001


I 0001 0001 0100 0100010
2 00 10 0010 0101 0100100
3 0011 0011 0110 0101000
4 0100 0100 0111 0110000
5 0101 1011 1000 1000001
6 0110 1100 1001 1000010
7 0111 1101 1010 1000100
8 1000 1110 1011 1OOJ 000
9 1001 1111 1100 1010000

La suma de dos pares de números BCD se realiza dígito a dígito, empezando


por el dígito menos significativo. La suma de dos dígitos BCD es igual que la
56 Principios de diseño digital

suma de dos números binarios sin signo de 4 bits, con una excepción: Si la suma
de estos dos dígitos BCD está entre 10 y 19, debe corregirse restando 10 y gene-
rando el acarreo adecuado para el siguiente dígito. En realidad, esto se puede rea-
lizar sencillamente sumando 6 al dígito desbordado, ya que para los números
binarios de 4 bits, sumar 6 es equivalente a restar 10. Más aún, sumar 6 produce
automáticamente el acarreo adecuado. Obsérvese que también se puede generar el
acarreo adecuado para el siguiente dígito sumando dos dígitos BCD cuya suma
sea igualo mayor que 16.
BCD es lo que denominamos un código ponderado, ya que el valor de cada
dígito decimal es igual a la suma de todos los productos de los valores binarios de
cada bit por su peso asociado. Los pesos del código BCD son 8, 4, 2 Y 1, respec-
tivamente; por esta razón, el código se denomina a veces código 8421. Alterna-
tivamente, los pesos 2, 4, 2, I se usan para generar el código 2421 que se mues-
tran en la Tabla 2.7. Este código literal se denomina autocomplementado, ya que
para todo dígito entre O y 9, se puede obtener la palabra código del complemento
a 9 complementando cada bit de la palabra código del dígito.
También mostramos otro código autocomplementado en la Tabla 2.7, el códi-
go de 3 en exceso. Este código no es un código ponderado pero se genera a par-
tir del c6cligo BCD sumando 00 11 (3 en binario) a cada palabra del código.
Los códigos decimales pueden tener también más de 4 bits. Por ejemplo, el
códígo biquinario mostrado en la Tabla 2.7 usa 7 bits. En este código el primer
bit 'de una palabra del código se usa para indicar si el digito decimal se encuentra
en el rango entre 5 y 9, mientras que el segundo bit indica el rango de Oa 4. Los
últimos 5 bits de cada palabra código se usan para seleccionar uno de cinco núme-
ros dentro del rango, en el que cada bit corresponde a un número del rango.
Como se puede ver a partir de la tabla, el código biquinario requiere 7 bits
para representar la misma cantidad de información que los otros tres códigos de
la tabla, representados con 4 bits. Sin embargo, la ventaja de este código biqui-
nario yace en su facilidad para detectar errores en un sólo bit, ya que todas las
palabras del código tienen la misma propiedad: todas tienen dos unos, uno entre
los dos bits más significativos y otro entre los cinco bits menos significativos.
Dada esta propiedad, cualquier cambio accidental de cualquier bit en cualquier
palabra código, da una palabra no codificada permitiéndonos detectar si una
palabra código es errónea. Trataremos estos tipos de códigos con más detalle en
la Sección 2.1 2.

2.11. CÓDIGOS DE CARACTERES


En general, una cadena dada de bits puede representar cualquier carácter, numé-
rico o no. Dado que la mayoría de los procesadores de datos incluyen texto, los
caracteres que se usan más frecuentemente forman parte de un alfabeto, que se
representa en el computador con una cadena de bits particular.
El c6cligo de caracteres más comúnmente usado es el ASCII (American Standard
Code for Information Interchange, c6cligo estándar americano para intercambio de
Tipos y representaciones de datos 57

información), en el que cada carácter se representa con una cadena de 7 bits. Este
código codifica 128 caracteres diferentes, incluyendo mayúsculas y minúsculas,
números, algunos signos de puntuación, y una serie de caracteres de control. Las 128
palabras de este código se muestran en la Tabla 2.8, que nos dice, por ejemplo, que
la palabra "DESIGN" se representa con las siguientes seis palabras código:
1000100 1000 lO 1" 1010011 1001001 lOOO111 1001110

TABLA 2.8 Código estándar americano para intercambio de infomnación

0000 NUL DLE SP O @ P P


0001 SOH Del 1 A Q a q
0010 STX De2 2 B R b r
0011 ETX De3 # 3 C S c s
0100 EOT De4 $ 4 D T d t
0101 ENQ NAK % 5 E U e u
OlIO ACK SYN & 6 F V f v
0111 BEL ETB 7 O W g w
1000 BS CAN 8 H X h x
1001 HT EM 9 1 Y Y
1010 LF SUB • J Z j z
1011 VT ESC + K [ k {
1100 FF FS < L \ I 1
1101 CR OS M 1 m }
1110 SO RS > N A n
1111 SI US ? O o DEL
Abreviaturas de los códigos de control:
NUL. cero; SOH, comienzo de cabecera; STX, comienzo de texto; ETX, fin del texto; EOT. fin de trans-
misión; ENQ, pregunta; ACK, reconocimiento; BEL, pitido; BS. barra espaciadora; HT, tabulador hori-
zontal; LF, avance de línea; VT, tabulador vertical; FF, avance de página; eR, retomo al inicio de la Unea;
SO, desplazar salida; SI, desplazar entrada; SP. espacio; OLE, salir del enlace de datos; OCI. control del
dispositivo 1; DC2. control del dispositivo 2; OC3 , control del dispositivo 3; DC4, control del dispositivo
4; NAK, reconocimiento negativo; SYN, sincronizar; ETB. final de transmisión de bloque; CAN, cance-
lar; EM, fin del medio; SUB , sustituir; ESe, salir; FS, separador de ficheros; GS , separador de grupo; RS ,
separador de registro; UN, separador de unielad; DEL, borrar o rebobinar.

Cada una de estas palabras del código ASCII se suele almacenar en un byte,
que incluye un bit de paridad extra que se usa para detección de errores.

2.12. CÓDIGOS PARA DETECCiÓN Y CORRECCiÓN


DE ERRORES
En un sistema digital, se puede producir un error a causa de fallos físicos perma-
nentes o temporales que se traducen en diferencias entre los datos transmitidos y
58 Principios de diseño digital

los recibidos. Por ejemplo, una radiación cósmica podría producir un fallo tem-
poral en un circuito de memoria cambiando el valor de una única celda de memo-
ria. Por otra parte, una temperatura alta en el encapsulado podría producir una
desconexión permanente de los pequeños cables del interior de un microchip.
Para detectar tales errores, necesitamos asegurar los datos con la ayuda de códi-
gos de detección de errores. Sin embargo, para comprender estos códigos de
detección de errores primero necesitamos introducir el concepto de distancia boo-
leana, lo que requiere la definición de n-cubo.

o
• • (.)

10

11

(b)

•00 0•1
101• 111•
1~4~/ (o)

/;.170~1
000• 010•
111 0 JI II

(d)

0000 0001
FIGURA 2. 11 n-cubos, con n = 1, 2, 3 Y 4.
Tipos y representaciones de datos 59

Cualquier cadena de n bits se puede visualizar como uno de los vértices de un


n-cubo binario, que es un cubo con un total de 2/1 vértices, en el que cada uno de
ellos corresponde a una cadena particular de n bits. En este cubo, dos vértices
están unidos por una arista si y sólo si las cadenas correspondientes difieren en un
solo bit. En las Figuras de la 2. 11 (a) a la (d), mostramos cuatro n-cubos, con n =
1, 2, 3, y 4, respectivamente. Los cubos mayores de n son más difíciles de visua-
lizar, aunque podrían ser útiles en nuestra explicación de los procedimientos de
codificación y minimización que se describen en el Capítulo 4.
En un n-cubo, puede haber un número de m-subcubos, con n-m bits con el
mismo valor en cada vértice, y el resto de los m bits tomando todas las 2"' com-
binaciones de los valores O y 1. Por ejemplo, en la Figura 2.11 (c), los vértices 000,
001,010,011 forman un cubo de orden 2 dentro del cubo del orden 3. A partir de
la definición anterior de subcubo, sabemos que cada subcubo se caracteriza por
los n-m bits que son iguales para cada vértice dentro de ese subcubo. Tal subcu-
bo puede especificarse por tanto con una cadena de n bits, que contiene sus n-m
valores binarios característicos y usando X en el resto de las m posiciones, para
indicar que son bits indiferentes. En otras palabras, cualquier valor binario en un
lugar de un bit indiferente, producirá cadenas que pertenecen a este m-subcubo.
En este nivel conceptual , el n-cubo es útil puesto que proporciona una interpreta-
ción geométrica del concepto de distancia, a veces denominada distancia
Hamming. La distancia entre dos vértices cualesquiera es igual al camino más
corto entre ellos, que a su vez, es igual al número de bits que tienen distintos valo-
res binarios. En otras palabras, dos vértices adyacentes cualesquiera tienen siem-
pre distancia 1. Además, dos vértices cualesquiera no adyacentes dentro de cual-
quier 2-subcubo siempre están a una distancia igual a 2. Por ejemplo, en la Figura
2.l1(c), los vértices 000 y 011 distan 2; de forma similar, los vértices 001 yOla
en el OXX-subcubo siempre distan 2. Este concepto de distancia es esencial para
la comprensión de los códigos de detección de errores .

2.12.1. Códigos de detección de errores

Cualquier código de n bits se puede considerar como un subconjunto de todas las


posibles cadenas de n bits. Las cadenas incluidas en este subconjunto particular
se denominan palabras código, mientras las cadenas que no están incluidas se
denominan palabras que no son del código. Un código se dice que es un código
de detección de errores si tiene la propiedad de que ciertos tipos de errores pue-
den transformar palabras del código en palabras que no son del código. Entonces,
suponiendo que se usan sólo palabras del código para comunicación de datos,
cualquier error introducido durante la transmisión se pondrá de manifiesto inme-
diatamente puesto que cambiará palabras del código en palabras que no son del
código. Es decir, si la cadena recibida es una palabra del código, los datos son
correctos; si no es 'una palabra del código, los datos deben ser erróneos.
Para detectar un error en un bit (es decir, detectar que se ha cambiado un
único bit de O a 1 o de l a O) es esencial que la distancia entre dos palabras cua-
60 Principios de diseño digital

lesquiera del código sea ~ 2. En otras palabras, debemos escoger palabras del
código de tal fonna que ningún par de vértices que representen palabras del códi-
go sean adyacentes en su correspondiente n-cubo. En la Figura 2.12(a), por ejem-
plo, se muestra un código de 3 bits que consta de cuatro palabras código: 000,
Oll, lOO Y 1l0. Como un error en un solo bit podría cambiar la palabra del códi-
go 100 por las palabras del código 000 y 110, este código no puede detectar erro-
res de un sólo bit. Sin embargo, si omitimos 100 del código, y añadimos 101 en
su lugar, se puede crear un código con la ventaja de detectar errores en un solo
bit. Como se muestra en la Figura 2.12(b), en este cubo un error en un solo bit
no puede transfonnar una palabra del código por otra, ya que todas la palabras
del código distan 2.
En general, para mantener la distancia 2 en un código arbitrario, es necesario
que el número de palabras del código sea igual al de las que no son del código.
Entonces, para lograr este objetivo para cualquier dato de n bits, usualmente deno-
minados bits de información, se pueden usar palabras código de (n + 1) bits aña-
diendo un bit comúnmente denominado bit de paridad. El valor de este bit de
paridad puede tomar un valor de fonna que el número de unos de la palabra del
código sea par para todas las palabras del código e impar para todas las palabras
que no sean del código, o viceversa. Cuando cada palabra válida del código de
(n + 1) bits tiene un número par de unos, el código se denomina código de pari-
dad par. Por otra parte, un código en el que el número total de unos de una pala-
bra válida del código de (n + 1) bits es impar, se denomina código de paridad
impar. En tales casos, estos códigos se denominan códigos de paridad de 1 bit
para enfatizar el hecho de que cada uno usa un único bit de paridad. Como ejem-
plo, la Figura 2.12(b) muestra un código de paridad par de n bits, que consiste en
cuatro palabras: 000, 011, 101 , 110. Como se puede ver, cada palabra del código
contiene ninguno o dos unos, mientras que cada palabra que no pertenece al códi-
go contiene uno o tres unos. Obsérvese que en este código, los dos bits más sig-
nificativos son los bits de infonnación, mientras que el bit menos significativo es
el bit de paridad. Por el contrario, también podríamos definir un código de pari-
dad impar de 3 bits como se ve en la Figura 2. 12(c). Obsérvese que este código
también contiene cuatro palabras código, aunque en este caso cada palahra del
código tendrá uno o tres unos.
Como el lector puede imaginar, estos códigos de paridad de 1 bit no pueden
detectar errores en 2 bits, ya que un cambio de dos bits cualesquiera de O a I o
de 1 a O no afecta a la paridad. Sin embargo, pueden detectarse errores que suce-
dan cuando cambien 3 bits en una palabra del código. En general, un código de
paridad de 1 bit puede detectar cambios que han ocurrido en un número impar de
bits, pero no detecta cambios que impliquen un número par de bits. Por tanto,
estos códigos de paridad de 1 bit sólo se pueden usar par detectar errores en un
solo bit. Estos códigos de paridad se usan frecuentemente en comunicaciones
locales y globales en los que se añade un bit de paridad a cada código ASCII de
7 bits.
Siempre que se reciba un byte con una paridad incorrecta, hay que retransmi-
tir el byte recibido, o a veces el mensaje entero.
Tipos y representaciones de datos 61

101 11 1
• o

100 / 110 /

f!lr---~
o o

• 0[!]11
/ 001
000 010

(a) Código usual •

10l

100 / 0 110/
1
0
111

,4 ,/ 101 lB

/~' v~
O 0- [!]

/00~01l
t!J •
000 010 000 010

(b) Código de paridad par (e) Código de paridad impar

FIGURA 2.12 Tres códigos distintos.

2.12.2. Códigos de corrección de errores


Realmente, para corregir. un error en un solo bit se necesita más de un bit de pari-
dad, ya que este único bit sólo puede indicar si una palabra del código es global-
mente correcta o incorrecta. Para obtener una información más precisa necesita-
mos log2n bits de paridad extras por cada n bits de información, y de esta forma
podremos determinar qué bit de información es el incorrecto. Una vez identifica-
do, el bit incorrecto puede corregirse cambiando su valor de O a 1 ó de 1 a O.
Para ilustrar un código de corrección de errores, supongamos que sólo se va a
transmitir un único bit de información, y que el O se va a codificar 000 y el 1, 111.
Como se ve en el cubo de orden 3 de la Figura 2.13, este código tiene una distan-
cia mínima de 3. Entonces, si se produce un error en un sólo bit durante la trans-
misión de una palabra del código, cambia esa palabra del código por una palabra
que no es del código, como en el caso que tratamos antes con los códigos de 1 bit.
En este caso, sin embargo, la palabra recibida que no es del código debería distar
1 de la palabra del código originalmente transmitida. Como se puede ver en la
Figura 2.13, si por ejemplo se transmite la palabra 000, un solo bit de error puede
cambiarla a 100,010 o 001. De esta forma, si recibimos una palabra que no está
en el código, con un uno, lo corregimos a 000. Por otro lado, si recibirnos una
palabra que no está en el código, con dos unos en ella, la corregirnos a 111.
62 Principios de diseño digital

FIGURA 2.13 Ejemplo de código corrector de errores.

Obsérvese que el código descrito anteriormente también puede detectar,


pero no corregir, casos en los que hay dos errores de un solo bit. Por ejemplo,
si se transmite 000 y se recibe 011, \01 Ó l \O, es obvio que ha ocurrido un error.
Sin embargo, no es posible corregir este error ya que no está claro si lo trans-
mitido originalmente era 000 y han cambiado dos bits, o era 111 y ha cambiado
un solo bit. Por esta razón, usaríamos este código ya sea para detectar y corre-
gir un solo bit o para detectar hasta dos errores, pero no para ambas funciones
a la vez.
Sin embargo, hay códigos que permiten simultáneamente detectar y corregir
errores, y se denominan códigos correctores de errores. En general, un código
necesita una distancia mínima de 2x + 1 para que pueda corregir hasta x errores
de un solo bit. En el sencillo ejemplo mostrado antes, x era igual a l . Por otro lado,
podríamos usar un código con una distancia mínima de 2x + Y + 1, para corregir
hasta x errores de un solo bit y detectar hasta y errores adicionales. La función de
descubrir qué palabras del código se transmitieron originalmente se denomina
decodificación, y el hardware que lleva a cabo esta función se denomina decodi-
ficador corrector de errores.

2.13. CÓDIGOS DE HAMMING


En 1950, R. W. Hamming propuso un método general para construir códigos de
corrección de errores usando una distancia mínima de 3. De acuerdo con este
método, por cada entero In, hay un código de Harnrning de (2'" - 1) bits que con-
tiene In bits de paridad y 2m - 1 - m bits de información. En este código de
Hamming, los bits de paridad están entremezclados con los bits de información
del siguiente modo: Si numeramos las posiciones de los hits desde 1 hasta 2m - 1,
los bits en la posición 2k , donde O:<> k:<> In - 1, son los bits de paridad, y los bits
de las restantes posiciones son los bits de información. Así, los bits de paridad
están siempre en las posiciones 1, 2, 4, 8, ... hasta 2m-'. En general, el valor de
cada bit de paridad se escoge de modo que el número total de unos en un grupo
específico de bits sea par, y estos grupos se escogen de modo que ningún bit de
información se cubra con la misma combinación de bits de paridad. Es esto lo que
Tipos y representaciones de datos 63

da al código su capacidad de cOrrección. Precisando más, a cada bit de paridad en


la posición 2k , su grupo de bits de información correspondiente incluye todos esos
bits en la posición cuya representación binaria tenga un 1 en la posición 2k •
Para mostrar los grupos de paridad, empezamos con el código Harnming de
7 bits mostrado en la Figura 2.14, que contiene bits de información en las posi-
ciones 7, 6, 5 Y 3, y los bits de paridad en las posiciones 4, 2, Y 1. Como indican
los cuadros sombreados, en este código cada bit se usa en el cálculo de uno o más
valores de paridad. Como 111 es la representación binaria de 7, por ejemplo, el
bit de información en la posición 7, se usa para calcular el valor de los tres bits
de paridad. Por otra parte, el bit de información en la posición 6, cuya represen-
tación binaria es 11 O, se usa sólamente para calcular el valor de los bits de pari-
dad de las posiciones 4 y 2, mientras que el bit de información de la posición 5,
se usa para calcular los valores de los bits de paridad de las posiciones 4 y l.
Finalmente, el bit de información 3 se usa para calcular el bit de paridad de las
posiciones 2 y 1. •

7 6 5 4 3 2 Posición de los bits


Grupo de paridad para
el bit de paridad 4
Grupo de paridad para
el bit de paridad 2
Grupo de paridad para
el bit de paridad 1

t t t
Bits de paridad

FIGURA 2.14 Cálculo de paridades en un código Hamming de 7 bits.

De acuerdo con estos grupos de paridad, el valor del bit de paridad de la posi-
ción 1 tiene que elegirse de modo que el número de unos en las posiciones 7, 5, 3
y 1 sea par, mientras que el valor del bit de paridad en la posición 2 hace el núme-
ro de unos par en las posiciones 7, 6, 3 Y 2, Y el valor del bit de paridad en la posi-
ción 4, hace el número de unos par en las posiciones 7, 6, 5 y 4. En la Tabla 2.9
mostramos todas las palabras código para estos códigos de Harnming de 7 bits.
Partiendo de la información de esta tabla, es fácil ver que la distancia mínima
de un código de Harnming tiene que ser 3, ya que esto significa que para otras dos
palabras cualesquiera del código tenemos que hacer al menos tres cambios de un
bit para convertir una palabra del código en otra. Podemos probar esto intuitiva-
mente, demostrando que un cambio de 1 o 2 bits sólo produce palabras que no
pertenecen al código, que no tienen valores correctos en los bits de paridad. Para
probar que un cambio de 1 bit siempre generará una palabra que no sea del códi-
go, hemos de ver que un cambio de l bit en una palabra del código afecta al
menos a un bit de paridad, ya que cada bit de una palabra del código se incluye
en al menos un grupo de paridad. De este modo, un cambio de l bit siempre debe-
ría provocar al menos un bit de paridad incorrecto.
64 Principios de diseño digital

TABLA 2.9 Palabras del código con 4 bits


de infoonación en código Ham-
ming de distancia mínima 3 y 4

0000 ()()() 0000 0000


()()() 1 011 ()()() 1 0111
0010 101 0010 1011
0011 110 0011 1100
0100 110 0100 1101
0101 101 010 1 1010
0110 011 01 \O 0110
0111 ()()() 0 111 ()()() I
I ()()() 111 1()()() 1110
1001 lOO 1001 1001
1010 010 1010 0101
1011 001 1011 0010
1100 001 1100 0011
1101 010 1101 0100
1110 100 1110 1()()()
1111 111 1111 1111

Por otra parte, un cambio de 2 bits en una palabra del código no cambia el
valor del bit de paridad si ambos bits pertenecen al mismo grupo de paridad. Sin
embargo no es posible ya que para dos posiciones cualesquiera de una palabra del
código siempre hay un grupo de paridad que no incluye ambas posiciones. En
otras palabras, como dos bits cualesquiera deben estar en distintas posiciones, sus
números binarios deben diferir en al menos un bit, así que siempre hayal menos
un grupo de paridad con un solo bit cambiado, lo cual da lugar a una palabra que
no pertenece al código con al menos un valor de paridad incorrecto. Por consi-
guiente, debemos concluir que los códigos de Harnming tienen una distancia de
tres o más.
Partiendo de esta explicación no es difícil ver cómo corregir errores de un solo
bit cuando se están recibiendo palabras código erróneas. Para corregir un error en
un bit necesitamos calcular la paridad de cada grupo de paridad. Luego añadimos
las posiciones de todos estos bits de paridad cuyos grupos tienen paridad impar.
Esta suma indicará la posición del bit erróneo. En la Figura 2.15 ilustramos este
procedimiento con un ejemplo, suponiendo que se ha transmitido la palabra códi-
go correcta 1010101, pero tiene un error en el bit 6 producido durante la transmi-
sión, cambiándose la palabra código 1010101 a la palabra que no pertenece al
código 1110101. Cuando contamos el número de unos que hay en los bits 7, 6, S
y 4 de la palabra del código recibida, encontramos que este número es impar. De
forma similar, encontramos que los bits 7, 6, 3 y 2 contienen un número impar de
Tipos y representaciones de datos 6S

unos. Por tanto sabemos que tiene que haber un error en los bits de paridad 4 y 2.
Como la suma de los números en esas posiciones es 6, sabemos que el error se ha
producido en el sexto bit.
Este código Hamming de distancia 3 se podría convertir fácilmente en un
código de distancia 4 sumando un bit de paridad más, cuyo valor se elige de
modo que el número de unos en todos los bits, incluyendo el nuevo, sea par. En
la Tabla 2.9 se muestran todas las palabras código de este código de distancia 3
modificado. Como en el caso del código de paridad par de un bit, este bit adi-
cional asegura que se puede detectar un número impar de errores en un solo bit
si se produjesen. En particular, cualquier error de tres bits es detectable con este
código.
Los códigos Hamming de distancia 3 y 4 se usan habitualmente para detec-
ción y corrección de errores en las memorias de las computadoras. Como estos
componentes de ,memoria representan la parte más importante de cualquier
computador, los códigos Hamming nos proporcionan una relación coste-efi-
ciente que mejora la fiabilidad del sistema, ya que el número de bits de paridad
usados para la corrección de memoria crece sólo logarítmicamente con el tama-
ño de palabra.

7 6 5 4 3 2 Posiciones
de los bits
Palabra código
1
IO I1 IO I1 O
I1 correcta
Posiciones
7 6 5 4 3 2 de los bits
O O
I I Palabra código
incorrecta

t
Bit
t
Paridad
t t
Paridad Paridad
incorrecto errónea errónea correcta

FIGURA 2. 15 Procedimiento de corrección para un código Hamming de distancia 3.

RESUMEN DEL CAPíTULO


En este capítulo hemos tratado los distintos tipos de datos que se usan en sistemas
digitales y el modo en que se representan de forma binaria. En concreto, hemos
descrito los tipos de datos usados en cálculo aritmético (números en punto flotan-
te y en punto fijo) y los procedimientos para llevar a cabo operaciones aritméti-
cas básicas: suma, resta, multiplicación y división. Estos procedimientos se utili-
zarán en capítulos posteriores como especificaciones iniciales en el diseño de
componentes aritméticos.
También hemos presentado distintos tipos de códigos, especialmente los códi-
gos usados para detección de errores (códigos de paridad) y corrección de errores
66 Principios de diseño digital

(códigos de Hamming). Estos códigos se utilizan siempre que se necesite trans-


mitir datos de un procesador a otro por canales ruidosos o cuando es probable que
surjan errores debidos a las condiciones inestables del entorno. Como tales códi-
gos requieren un hardware especial de codificación y decodificación, que incre-
menta el coste y disminuye las prestaciones del sistema digital, fuerzan a los dise-
ñadores que utilizan estos códigos a sustituir coste y prestaciones por seguridad
en los datos.
Este capítulo pretende ser introductorio ; lo visto aquí se volverá a analizar en
el resto del libro. En el capítulo siguiente presentamos componentes digitales
básicos así como reglas para combinar estos componentes para hacer circuitos
capaces de llevar a cabo aritmética binaria y otras funciones digitales.

2.15. LECTURAS ADICIONALES


Knuth! D. E. The Art of Computer Programming: Seminumerical Algorithms. Reading,
MA: Addison-Wesley, 1969.
Un trabajo clásico con un tratamiento en profundidad de números en punto fijo y en
punto flotante así como de los algoritmos utilizados en su manipulación.
Peterson, W. W , and E. J. Welden. Error-Correcting Codes, 2nd ed. Boston: MIT Press,
1972.
Un texto clásico con un tratamiento formal de los códigos de detección y corrección de
errores. Se recomienda sólo para lectores con inclinaciones teóricas.
Schmid, H. Decimal Computatio/!. New York: Wiley, 1974.
Una colección, un catálogo y una revista de las técnicas de cálculo BCD. Describe
cómo se implementan de varias fonnas cada una de las operaciones trascendentales y
aritméticas más comunes.
Scott, N. R. Computer Number Systems and Arithmetic. Englewood Cliffs, NJ: Prentice
Hall, 1985.
Un texto introductorio muy legible sobre sistemas de numeración y su aplicación a cir-
cuitos digitales.
Stein, M. L., and R. W. D. Munro. lntroduction to Machine Arithmetic. Reading, MA:
Addison-Wesley, 1971.
Explica los algoritmos básicos en aritmética de computadoras usando un punto de vista
matemático más que de ingeniería. Sin embargo, el lector no necesita tener muchos
conocimientos matemáticos para entender el contenido.
Sterbenz, P. H. Floating-Point Computation. Englewood Cliffs, NJ: Prentice Hall, 1974.
Un tratamiento formal del cálculo en punto flotante y del análisis de errores. Se des-
cribe lo que ocurre realmente durante la ejecución de los programas cuando se utiliza
la aritmética de punto flotante.
Wakerly, J. F. Error-Detecting Codes, Self-Checking Circuits, and Applications. New York:
North-Holland,.1978.
Una introducción excelente a distintos códigos usados en computadoras y su imple-
mentación en muchas aplicaciones prácticas.
Tipos y representaciones de datos 67

Waser, S. and M. J. Flynn. llltroductioll lO Arithmetic for Digital System Desigllers. New
York: Holt, Rinehart and Winston, 1982.
Un tratamiento más detallado de la aritmética de computadores dirigido a aquellos que
diseñan circuüos aritméticos.

2.16. PROBLEMAS
2.1. (Representación binaria) Exprese los (a) 606
siguientes números decimales en (b) 123
binario. (e) 6650
(a) 129 (d) 345,6
(b) 511
(e) 1000 2.8. (Conversión de números) Pase los
(d) 2048 siguiente números de la base dada a
las bases indicadas.
2.2. (Representación binaria). ¿cuál es el (a) El decimal 11 210 a binario, octal
número mayor que se puede repre- y base 9.
sentar con: (a) 9; (b) 10; (e) 15 ; y (d) (b) El hexadecimal 1All2, . a deci-
16 bits? mal, binario y base 7
(e) El binario 101101101 , a octal,
2.3. (Representación binaria) Liste todos
decimal, y base 12
los díg itos y sus representaciones en
(d) 12All " en base 12 a binario,
base 13.
base 6 y base 7.
2.4. (Conversión de números) Pase los
2.9. (Convers ión de números) Formule un
siguientes dígitos binarios a notación
procedimiento para pasar un número
hexadecimal .
de base 3 a base 9.
(a) 1010101010
(b) 1000000 I 2.10. (Conversión de números) Calcule el
(e) 11111111111 valordexsi23x ; 111100010, .
(d) 1001 10011 00 1
2.11. (Reglas para sum ar) Sume los
2.5. (Convers ión de números) Dé los siguientes números sin pasarlos a su
equivalentes binarios de los siguien- representación decimal.
tes números hexadecimales. (a ) Ol llO,y 11 0011 ,
(a) 123.45 (b) 98A 12 Y 234"
(b) 1000.50 (e) ABC ,. y A78 ,.
(e) [Link]
2.12. (Aritmética binaria) Evalúe las
(d) OA7,35C
siguientes expresiones usando arit-
2.6. (Conversión de números) Pase los mética binaria.
siguientes números decimales a base 6. (a) ( 101101 + 11101 )'
(a) 13 1 (b) ( 100101 + 101101 )(10010 1 -
(b) 208 101101 )
(e) 1001 (e) ( 111 0 11 + 10 10 1)/( 110111 -
(d) 5050 JOllOl )
2.7. (Conversión de números) Calcule los 2.13. (Complementar números) Calcule el
equivalentes decimales de los complemento a 10 de los siguientes
siguientes números en base 7. números decimales.
68 Principios de diseño digital

(a) 123456 (e) 1010101110111


(b) 987654 (d) 11001100110011
(e) 900900
(d) 00000o 2.20. (Algoritmos para dividir) Defina el
procedimiento y dibuje un diagrama
2.14. (Complementar números) Calcule el de flujo para dividir:
complemento a 2 de los siguientes (a) Números binarios no negati-
números binarios. vos
(a) 1010101 (b) Números binarios en comple-
(b)" 111101111 mento a dos
(e) 0000001 (e) Números binarios en signo y
(d) 100000 magnitud
(e) 00000o
2.21. (Algoritmos en punto flotante)
2.15. (Reglas para restar) Realice la resta Defina un procedimiento para (a)
tomando el complemento a 10 del sumar, (b) restar, (e) multiplicar, y (d)
sustraendo. j
dividir números en punto flotante.
(a) 3421 - 1567
(b) 1682 - 2682 2.22. (Código BCD) Represente los
(e) 1000 - I siguientes números decimales en
(d) 3003 - 2002 BCD.
(a) 13675
2.16. (Reglas para restar) Realice la resta (b) 23567
binaria tomando el complemento a 2 (e) 33441
del sustraendo. (d) 9753
(a) 101110 - 10001
(b) IllllI - 11110 2.23. (Códigos binarios) Determine el
(e) 11110 - 1001 código binario para cada uno de los
(d) 100001 - 10001 10 dígitos decimales usando códigos
ponderados de pesos 7, 4, 2, Y l.
2.17. (Aritmética BCD) Pase los siguientes
números decimales a binario, y luego 2.24. (Códigos binarios) Represente el
realice las siguientes multiplicaciones número decimal 9876 en
binarias. (a) Código 8421
(a) 15 x 16 (b) Código 2421
(b) 120 x2 1 (e) Código de 3 en exceso
(e) 17 x 13 (d) Código biquinario
(d) 21 x 100
2.25. (Códigos de detección de errores)
2.18. (Reglas para multiplicar) Realice la Haga un código de detección de erro-
multiplicación binaria con los res BCD añadiendo (a) un bit de pari-
siguientes números en complemento dad par, y (b) un bit de paridad impar
a dos. en la posición del bit menos significa-
(a) 011011 x 0011 tivo.
(b) 111101 x 0011
(e) 010101 x 1001 2.26. (Códigos de caracteres) Escriba el
(d) 111101 x 1001 título de este libro en ASCII.
2.19. (Reglas para dividir) Divida los 2.27. (Códigos de caracteres) Decodifique
siguientes números binarios. el siguiente código ASCII:
(a) 11011/1001 1000010 1001111 1010010
(b) 11111/1111 1001001 1001110 1000111
Tipos y representaciones de datos 69

2.28. (Códigos de detección de errores) 2.29. (Códigos de detección de errores)


Determine cuántos subcubos distintos ¿Cuántos errores se pueden detectar
de los siguientes tamaños habría en en un código con distancia mínima d?
cualquier n-cubo.
2.30. (Códigos de detección de errores)
(a) n- 1 Defina un código Hamming de dis-
(b) m tancia 3 con II bits de información.
L o

Algebra
booleana y
diseño lógico
Sistema binario 2
y representación
de dalos

---
~de8
0IIId00_
72 Principios de diseño digital

El éxito de la tecnología de computadoras se basa principalmente en la sencillez


de los circuitos lógicos que se diseñan y en la facilidad de su fabricación. Los cir-
cuitos digitales se componen de elementos básicos de procesamiento, denomina-
dos puertas, y elementos básicos de memorización, conocidos como biestables.
La sencillez del diseño de circuitos digitales se debe al hecbo de que las seña-
les de entrada y salida de cada puerta o biestable pueden tomar sólo dos valores,
O y 1, Y a que el cambio de los valores de las señales está regido por el álgebra
booleana. El hecho de que el álgebra booleana sea finita y más rica en propieda-
des que el álgebra corriente conduce a técnicas de optimización sencillas para la
implementación de funciones booleanas con puertas y biestables. Para presentar
las técnicas de diseño de circuitos digitales, cuyo conjunto usualmente se deno-
mina diseño lógico, tenemos que entender primero las propiedades del álgebra
booleana.

3.1. PROPIEDADES ALGEBRAICAS


El álgebra booleana se puede definir con un conjunto de elementos, un conjunto
de operaciones y una serie de axiomas que se suponen ciertos sin necesidad de
demostrarlos. En general, un conjunto de elementos se define como cualquier
colección de objetos que tengan una propiedad en común. Si S es un conjunto y x
un objeto, entonces x E S denota que x es un miembro de S, y x I!' S denota que x
no es un elemento de S. Un conjunto con un número finito de elementos se puede
determinar, listando entre dos llaves todos sus elementos. Por - ejemplo,
A = {1 , 2, 3, 4} denota el conjunto A, cuyos elementos son los números 1, 2, 3, Y
4. Un operador binario definido dentro del conjunto S es una regla que asigna a
cada par de elementos de S un único elemento que pertenece también a S.
Lo que queremos decir con el término axioma de cualquier álgebra son las
suposiciones básicas a partir de las que se pueden deducir por medio de teoremas
todas las demás propiedades del sistema. A continuación se listan los axiomas
más comúnmente usados en la definición de una estructura algebraica.
CIERRE. Un conjunto S es cerrado con respecto a un operador binario. si y sólo
si para cada x, y E S, X • Y E S. Por ejemplo, el conjunto de números naturales
N = {l, 2, 3, 4, ... } es cerrado respecto a la suma, ya que para todo a, b E N, se
puede obtener un único número e tal que a + b = e con e E N. Por otra parte, el
conjunto de los números naturales no es cerrado respecto a la resta, porque los
números negativos no pertenecen a N.
ASOCIATlVIDAD. Un operador binario. definido en un conjunto S se dice que
es asociativo si y sólo si para todo x, y, Z E S,
(x. y) • z = x • (y • z)
ELEMENTO IDENTIDAD. Se dice que un conjunto S contiene un elemento iden-
tidad con respecto a un operador binario concreto, " siempre que exista un ele-
mento e E S tal que para cada x E S,
Álgebra booleana y diseño lógico 73

Por ejemplo, O es un elemento identidad respecto a la suma en el conjunto de


los enteros
1 = { .. . , -3,-2, -1, 0,1,2, 3, .. . )
puesto que para cada x E 1,
x+O=O+x=x
CONMUTATIVIDAD. Un operador binario, . , definido en conjunto S se dice que
es conmutativo si y sólo si para todo x, y E S,

ELEMENTO INVERSO. Un conjunto S que contiene un elemento identidad e


respecto a un operador binario, ., se ruce que tiene elemento inverso si y sólo si
para cada x E S, existe un elemento y E S tal que
x.y=e
Por ejemplo, con respecto a la suma, el inverso de cada x E 1 es (-x) ya que
x + (-x) = O.
DISTRIBUTIVA. Si. y O son dos operadores binarios de un conjunto S, se ruce
que. es distributiva sobre O si para todo x, y , Z E S,
x . (y O z) = (x • y) O (x . z)

3.2. DEFINICiÓN AXIOMÁTICA DEL ÁLGEBRA BOOLEANA


En 1854, George Boole introdujo el formalismo que se usa en el tratamiento siste-
mático de la lógica, que abora se denomina álgebra booleana. En 1938, C. E. Shan-
non aplicó este álgebra particular para demostrar que las propiedades de los circui-
tos de conmutación eléctricos se podían representar con un álgebra booleana biva-
luada, que se denominó álgebra de conmutación. La definición formal de álgebra
booleana que se da a continuación fue formulada en 1904 por E. V. Huntington.
En el nivel más general, el álgebra booleana es una estructura algebraica defi-
nida sobre un conjunto de elementos B con dos operadores binarios, + y " que
satisfaceu los siguientes axiomas.

Axioma 1 (Propiedad de clausura). (a) B es cerrado respecto al operador +; (b) B tam-


bién es cerrado respecto al operador·.
Axioma 2 (Elemento identidad). (a) B tiene un elemento identidad con respecto a "
denominado 1; (b) B también tiene un elemento identidad respecto a +, denominado O.
Axioma 3 (Propiedad conmutativa). (a) B es conmutativo respecto a +; (b) B es tam-
bién conmutativo respecto a '.
Axioma 4 (Propiedad distributiva). (a) El operador' es distributivo con respecto a +;
(b) igualmente. el operador + es distributivo con respecto a '.
74 Principios de diseño digital

Axwma 5 (Elemento complementario). Para cada x E B, existe un elemento x' E B


tal que (a) x + x' = 1 Y (b) x . x' = O. El segundo elemento, x', se denomina comple-
mento dex.
AxWma 6 (Cardinalidad acotada). Hayal menos dos elementos x, y E B tales que x y. *
Corno puede verse, surgen varias diferencias cuando se compara el álgebra
booleana con un álgebra corriente. Obsérvese, por ejemplo, que:
1. En un álgebra corriente, + no es distributiva sobre '.
2. El álgebra booleana no tiene inverso respecto a + ya ·; por consiguiente,
no hay operaciones de resta ni de división en el álgebra booleana.
3. Hay complementos en el álgebra booleana pero no en el álgebra
corriente.
4. El álgebra booleana se aplica a un conjunto finito de elementos, mientras
que el álgepra corriente se aplica a un conjunto infinito de números reales.
5. La definición de Huntington del álgebra booleana no incluye la asociati-
vidad, ya que se puede derivar de los axiomas .
A pesar de estas diferencias, el álgebra booleana se parece al álgebra corrien-
te en muchos aspectos. Usando los símbolos familiares + y " por ejemplo, se faci-
lita el uso del álgebra booleana. Sin embargo, el diseñador lógico principiante
tiene que tener cuidado con no usar las reglas del álgebra corriente cuando no
deba aplicarlas.
Según esta definición, debería quedar claro que para formular un álgebra boo-
'leana, necesitamos (a) definir un conjunto de elementos B, (b) definir dos opera-
dores binarios en B y (c) verificar que el conjunto B junto con los dos operadores
satisfacen los seis axiomas de Huntington. Sin embargo, siguiendo este procedi-
miento podríamos formular varias álgebras booleanas diferentes sencillamente
porque se puede definir el conjunto B y los dos operadores de varias formas dis-
tintas. En el resto del libro trabajaremos con el álgebra booleana bivaluada defi-
nida por Shannon, es decir, un álgebra en la que el conjunto B tiene sólo dos ele-
mentos. Este álgebra booleana constituye la base de la lógica matemática, en la
que los dos elementos son "falso" y "verdadero", y del diseño lógico, en el que
esos dos elementos son O y 1.
El álgebra booleana bivaluada se define en un conjunto formado por dos
elementos, B = {O, l}, con dos operadores binarios OR (+) y ANO (-) según se
definen en las Tablas 3.1 y 3.2. Corno puede verse en estas tablas, los axiomas de
Huntington son válidos en el álgebra booleana definida anteriormente.

AxWma l. La clausura es evidente a partir de las Tablas 3.1 y 3.2, ya que el resulta-
do de cada operación es un elemento de B.
Axwma 2. Los elementos identidad de este álgebra son el O para el operador + y el l
para el operador '. A partir de las Tablas 3.1 y 3.2, por ejemplo, tenemos que
00 O+O=~yO+I=I+O=1
(b) l· 1 = 1, Y 1 . O = O . 1 = O
lo que demuestra que O y 1 son, ambos, elementos identidad.
Álgebra booleana y diseño lógico 75

TABLA 3.1 Operador AND TABLA 3.2 Operador OR

o o o O o O
O I O O I I
O O I O 1
I I I 1

Axioma 3. La ley conmutativa se deduce de la simetría en las tablas de los operadores.


Axioma 4. La distributividad de este álgebra se puede demostrar probando en ambos
sentidos de la ecuación x· (y + z) = (x'· y) + (x· z) para cada valor posible de las varia-
bles. AfIrmar la distributividad equivale a probar que para cualquier valor de las
variables binarias x, y, y z, x' (y + z) tiene el mismo valor que (x' y) + (x' z). La Tabla
3.3 lo demuestra. De forma similar, la ley distrÍbutiva de + con respecto a . se
demuestra de igual forma, como se ve en la Tabla 3.4.

TABLA 3.3 Prueba de la distributividad del operador

O O O O O O O O
O O I I O O O O
O O I O O O O
O 1 I I O O O O
I O O O O O O O
1 O I I I O 1 I
I I O I I 1 O I
I I I I I I I 1

TABLA 3.4

O O O O O O O O
O O I O O O I O
O 1 O O O 1 O O
O I I 1 1 I 1 I
1 O O O I 1 I 1
1 O 1 O 1 I 1 1
1 1 O O 1 1 1 I
1 1 1 1 1 I 1 I
76 Principios de diseño digital

Obsérvese que en el álgebra booleana bivaluada, las demostraciones se hacen


a menudo, como Jlquí, con tablas que demuestran la validez para cada valor posi-
ble de las variables.

Axioma 5. O Y I son complementos el uno del otro, ya que O + O' = O + I = I Y


I + l ' = I + O = 1; más aún, O . O' = O . I = O Y I . l' = I . 0=0.
Axioma 6. La cardinalidad del axioma se satisface, ya que este álgebra booleana biva-
*
luada tiene dos elementos distintos, I y O, con I O.

TABLA 3.5 Operador


NOT

o l
l O

Hablando en general, este álgebra booleana se establece dentro de un conjun-


to de dos elementos, 1 y 0, y dos operadores binarios, AND y OR. Sin embargo,
como el Axioma 5, establece un operador complemento, NOT (mostrado en la
Tabla 3.5), este álgebra booleana bivaluada se define en términos de tres opera-
dores: AND, OR Y NOT. Esta defmición es cómoda ya que estos tres operadores
corresponden claramente a las puertas AND, OR Y NOT que más frecuentemen-
te se usan en diseño lógico. Como mencionamos anteriormente, los ingenieros de
diseño denominan también a este álgebra booleana bivaluada álgebra de con-
mutación. Por brevedad, dejaremos de usar el adjetivo bivaluada en el resto del
libro, y nos referiremos a este álgebra sencillamente como álgebra booleana.

3.3. TEOREMAS BÁSICOS DEL ÁLGEBRA BOOLEANA


Además de los axiomas dados en la definición del álgebra booleana, también se
pueden derivar leyes adicionales, denominadas teoremas del álgebra booleana.
Estos teoremas son especialmente útiles cuando se realizan manipulaciones alge-
braicas con expresiones booleanas en el proceso de optimización de un diseño
lógico. En la Tabla 3.6 aparecen seis teoremas básicos del álgebra booleana. En
esta tabla se ha simplificado la notación omitiendo el operador AND siempre que
no lleve a confusión. Como los axiomas, estos teoremas se han listado por pare-
jas, indicando que se pueden obtener unos a partir de otros mediante el principio
de dualidad.
Como mencionamos antes, los axiomas se enuncian y no necesitan probarse.
Sin embargo, los teoremas hay que demostrarlos, ya sea a partir de los axiomas
o de otros teoremas ya demostrados. En otras palabras, hay que justificar cada
paso de la demostración con la aplicación de un axioma o de otro teorema. Como
ejemplo, demostraremos los Teoremas l(a) y I(b).
Álgebra booleana y diseño lógico 77

TABLA 3.6 Teoremas básicos de álgebra booleana

Teorema 1 (a) x+x = X


(idempotencia) (b) xx = X
Teorema 2 (a) x+) = 1
(b) x' O = O
Teorema 3 (a) yx + x = x
(absorción) (b) (y + x)x = x
Teorema 4 (x)' = x
(involución)
Teorema 5 (a) (x + y) + z = x + (y + z)
(asociatividad) (b) x(yz) = (xy)z
Teorema 6 (a) (x + y)' = xy'
(ley de De Morgan) (b) (xy), = x + y'

TEOREMA 1(a) (Idempotencia) x + x = x


DEMOSTRACIÓN:
x + x = (x + x) . 1 por la identidad [Axioma 2(b))
= (x + xlix + x') por el complemento [Axioma 5(a))
=x+xx' por la propiedad distributiva [Axioma 4(b)]
=x+O por la identidad [Axioma 5(b)]
=x por el complemento [Axioma 2(a)]

El Teorema 1(b) dual se puede obtener repitiendo la demostración del


Teorema lea), intercambiando + por ',0 por 1 y (a) por (b) en cada línea de la
demostración. Para ilustrar la dualidad, mostramos a continuación la demostra-
ción completa del Teorema [lb).

TEOREMA 1(b) (Idempotencia) x . x = x.


DEMOSTRACIÓN:
x·x=xx+l por la identidad [Axioma 2(a)]
=xx+xx' por el complemento [Axioma 5(b)]
= xix + x') por la propiedad distributiva [Axioma 4(a)]
= x· 1 por la identidad [Axioma 5(a)]
=x por el complemento [Axioma 2(b)]

Las demostraciones del resto de los teoremas de la Tabla 3.6 se proponen


como ejercicios al final del capítulo.
Como el álgebra booleana bivaluada tiene sólo dos elementos, podemos pro-
bar también la validez de estos teoremas usando tablas de verdad. Para hacer esto,
se construye una tabla de verdad para cada lado de la ecuación que representa el
teorema. Luego, se comprueban ambos miembros de la ecuación para ver si dan
resultados iguales para todas las posibles combinaciones de valores de las varia-
f
78 Principios de diseño digital

bies. Por ejemplo, en la Tabla 3.7 se demuestra el primer teorema de De Morgan :


(x + y)' = x'y'. En la base de esta tabla de verdad podemos ver que las columnas
encabezadas por (x + y)' y x'y' dan resultados idénticos para todas las combina-
ciones de valores de x e y. Entonces, abora podemos afirmar que el teorema es
cierto.
Los axiomas de Huntington dados en la Sección 3.2 y los teoremas básicos
descritos anteriormente se listan generalmente por parejas. Uno de cada pareja de
axiomas se puede obtener a partir del otro usando una propiedad importante del
álgebra booleana denominada principio de dualidad. Este principio establece
que cualquier igualdad algebraica derivada de estos axiomas será válida siempre
que los operadores OR y AND, Y los elementos identidad O y 1, se hayan inter-
cambiado. En otras palabras, el dual de cualquier igualdad algebraica se puede
obtener cambiando cada OR por AND, cada AND por OR, cada 1 por Oy cada O
por 1.

TABLA 3.7 Demostración del primer teorema de De


Morgan

o o o I I I I
o I I o I o o
I o I o o I o
I I I o o o o

El principio de dualidad es muy útil ya que podemos usarlo para probar cual-
quier declaración del álgebra booleana cuya dual sabemos que es cierta. Por ejem-
plo, la demostración completa del Teorema 1(b) que presentamos antes procede
de aplicar el principio de dualidad al Teorema l(a). Más aún, podemos usar el
principio de dualidad para probar que cada expresión booleana y su dual con las
variables complementadas son complementarias una de otra. Más concretamente,
si E(xl' x 2' ... , x n) es una expresión booleana de n variables, y Eixl' x 2' ... ,..) es
su expresión dual, entonces
E(xl' x 2' ... , x n) = Eix' l' x' 2' ..., x',,) (3.1 )
Usando esta propiedad del álgebra booleana, podemos generalizar la ley de De
Morgan dada en el Teorema 6 a más de dos variables de la siguiente forma:
(XI +x2 + ... +xn)' =x' 1x'2··· x'n (3.2)
(3.3)
Álgebra booleana y diseño lógico 79

3.4. FUNCIONES BOOLEANAS


En general las funciones se pueden definir como expresiones algebraicas forma-
das por variables, operadores, paréntesis, y el signo igual. Más concretamente, las
expresiones booleanas se forman a partir de variables y los operadores boolea-
nos AND, OR Y NOT.
Cuando calculamos los valores de las expresiones booleanas, tenemos que
seguir un orden de cálculo: a saber, (1) paréntesis, (2) NOT, (3) AND, Y (4) OR.
En otras palabras, primero hay que evaluar la expresión entre paréntesis, y si no
hay paréntesis, NOT se evalúa antes que AND, y AND antes que ORo Las varia-
bles binarias de estas expresiones pueden tomar sólo dos valores, Oy 1. Entonces,
para un valor dado de las variables, el valor de una función puede ser O ó l.
Consideremos, por ejemplo, la función booleana

F) = xy + xy'z + x'yz (3.4)

Esta función es igual a 1 si x = 1 e y = 1, ó si x = 1, Y = O Y z = 1, ó si x = O,


Y = 1, Y z = 1 ; sino, F) = O.
La expresión booleana definida por FI se puede caracterizar por tener un tér-
mino OR y tres términos AND. El primer término AND contiene dos literales,
mientras que el segundo y el tercero tienen tres literales cada uno, donde un lite-
ral indica una variable o su ·complemento. El número de términos y literales se
usa normalmente para medir la complejidad de las expresiones y frecuentemente
para medir el coste de su implementación.
El ejemplo anterior muestra cómo definir una función booleana con una
expresión algebraica. Sin embargo, cualquier función booleana se puede definir
también con una tabla de verdad, que lista el valor de la función para cada com-
binación de los valores de sus variables. Por ejemplo, en la Tabla 3.8 se definen
dos funciones booleanas de tres variables. Como evidencia la tabla, hay ocho for-
mas distintas de asignar los valores O o 1 a las tres variables. Las columnas rotu-
ladas con F) y F)' contienen el valor de la función para todas las posibles combi-
naciones de los valores de las variables. Entonces, a partir de esta tabla vemos que
F) es igual a 1 para cuatro combinaciones de los valores de las variables:

(a) x = O,Y = 1, z = 1;
(b) x = 1,y= O, z = 1;
(c) x = 1,Y = 1, z = O;
(d) x = 1, Y = 1, z = 1;
Por otra parte, para el resto de las combinaciones de los valores de las varia-
bles, F) es igual a O.
Como regla general, la tabla de verdad de cualquier función booleana de n
variables tiene 2" filas, que representan cada combinación posible de los valores
de las variables, de forma que el valor indicado en la columna función de cada fila
es el valor de la función para esa combinación particular de valores de las varia-
bles. Obsérvese que las filas de cualquier tabla se puede numerar de O a 2" - 1,
80 Principios de diseño digital

TABLA 3.8 Tabla de verdad de F, = xy + xy'z + x'yz y su


complemento P, =(x' + y')(x' + Y + z')(x + y' + z')

~;SDE,1:A8
HAllES ~u.
DE fiI:A.
O
lL

O O O O
"1
1 O O 1 O 1
2 O 1 O O 1
3 O 1 1 1 O
4 1 O O O 1
5 1 O 1 1 O
6 1 1 O 1 O
7 1 1 1 1 O

correspondiendo a los números decimales representados por los valores binarios


de las variables.

3.4.1. Complemento de una función


El complemento de cualquier función Fes F, y su valor se puede obtener inter-
cambiando los ceros por unos y los unos por ceros en el valor de F. Para deter-
minar la expresión algebraica del complemento de una función, aplicamos la
forma generalizada del teorema de De Morgan dado por las Ecuaciones (3.2) y
(3.3) tantas veces como sea necesario. Por ejemplo, la expresión algebraica de P,
se obtiene a partir de la expresión de F, como sigue:

F, = (xy + xy'z + x'yz)' por la definición de F


= (xy)'(xy'z)'(x'yz)' por el teorema de De Morgan
= (x' + y')(x' + Y + z')(x + y' + z') por el teorema de De Morgan

En este ejemplo vemos que en la expresión final de F" se han intercambiado


todos los AND y OR, todas la variables no complementadas se han complemen-
tado y todas las variables complementadas se han descomplementado.
Una forma más sencilla de obtener el complemento de una función sería usar
una dual con variables complementadas como se especificaba en la Ecuación
(3.1) . Entonces, el complemento de una expresión se puede obtener también sen-
cillamente intercambiando los operadores AND y OR Y complementando cada
literal, ya se haya definido antes como una variable no complementada o com-
plementada. Entonces, la expresión de P, obtenida directamente de la expresión
de F, dada en la Ecuación (3.4) es:
Álgebra booleana y diseño lógico 81

F' ¡ = (xy + xy'z + x'yz)'


= (x' + y')(x' + Y + z')(x + y' + z') (3.5)

3.4.2. Manipulaciones algebraicas


Además de las expresiones algebraicas descritas antes, una función booleana se
puede representar gráficamente conectando operadores AND, OR Y NOT, como
especifica la expresión algebraica que se ha usado para definir la función. Por
ejemplo, la función Fi' que se definió con la Ecuación (3 .1), podría representarse
con cinco operadores AND, dos OR y dos NOT, como se muestra en la Figura
3.I(a). Sin embargo, F'i' que se definió en la Ecuación (3.5), necesitaría cinco
operadores OR, dos AND, y tres NOT, como muestra la Figura 3.I(b). F¡ también
se podría obtener a partir de F' ¡ usando un operador NOT adicional como se ve
en la Figura 3.I(b). Obsérvese que esta segunda implementación de F requiere
dos operadores NOT más.
Este ejemplo demuestra que se puede especificar la misma función con dos o
más formas de expresiones algebraicas diferentes. Sin embargo, antes de poder
usar una expresión en lugar de la otra, tenemos que probar que estas dos expre-
siones algebraicas definen la misma función, lo que podría hacerse tanto compa-
rando las tablas de verdad como con una manipulación algebraica. En el primer
método, las dos expresiones algebraicas de n variables binarias se dice que son
iguales si y sólo si tienen los mismos valores para las 2" combinaciones posibles
de las n variables. En el segundo método, hay que transformar una de las dos
expresiones, usando los axiomas y teoremas del álgebra booleana hasta que
ambas expresiones sean idénticas. Consideremos, por ejemplo, dos de las expre-
siones algebraicas que definen la función F¡:
F¡ = xy + xy'z + x'yz (3.6)
F¡ = xy + xz + yz
Para demostrar que estas dos expresiones son iguales, podemos reducir la pri-
mera expresión a la segunda de la siguiente forma:
xy + xy'z + x'yz = xy + xyz + xy'z + x'yz por absorción
= xy + x(y + y')z + x'yz por la propiedad distributiva
= xy + xlz + x'yz por el complemento
= xy + xz + x'yz por la identidad
= xy + xyz + xz + x'yz por absorción
= xy + xz + (x + x')yz por la propiedad distributiva
= xy + xz + Iyz por el complemento
= xy + xz + yz por la identidad
Una vez que hemos probado la equivalencia de las dos expresiones, podemos
usar la más sencilla, que requiere menos operadores. A partir de la representación
gráfica o simplemente contando los operadores, podemos ver fácilmente que
82 Principios de diseño digital

xy + xz + yz necesita sólo tres operadores AND y dos OR en vez de los cinco ope-
radores AND, dos OR, y dos NOT que requería la expresión xy + xy'z + xyz.
Entonces, como la segunda expresión requiere menos operadores, nos induce a
especular que también requerirá menos hardware cuando se implemente como cir-
cuito lógico.

x x y

}-.-.r

(a) Expresión AND-OR (b) Expresión OR-AND

FIGURA 3.1 Representación gráfica de dos expresiones de F,.

Como se puede deducir del ejemplo, es una regla general que el número de ope-
radores AND y OR en una expresión sea igual al número de literales menos l. La
primera expresión, por ejemplo, tiene ocho literales y necesita cinco operadores
AND y dos OR, lo que hace un total de siete; la segunda expresión, que tiene sólo
seis literales, necesita tres operadores AND y dos OR, lo que hace un total de cinco.
Entonces, sabemos que una reducción en el número de literales será equivalente a
una reducción en el número de operadores, así que se puede disminuir el número de
operadores AND y OR reduciendo el número de literales en una expresión.
Como muestra el ejemplo visto, el número de operadores de una función boo-
leana se puede minimizar generalmente por medio de manipulación algebraica.
Aunque desgraciadamente no hemos establecido un procedimiento a seguir que
garantice un número minimo de operadores o literales en la expresión. Como
resultado, los diseñadores usualmente utilizan una técnica de tanteo (ensayo-
error), empleando los distintos axiomas, los teoremas básicos y cualquier otra
regla de manipulación que desarrollan a partir de su experienCia. En las secciones
siguientes, introduciremos una forma única para especificar funciones booleanas
y mostraremos cómo usarlas como punto de inicio para encontrar expresiones
funcionales más sencillas.
Álgebra booleana y diseño lógico 83

3.5. FORMAS CANÓNICAS


En la Sección 3.4 hemos mostrado cómo se podían defmir funciones booleanas
con tablas de verdad. En esta sección mostraremos cómo se pueden convertir estas
tablas en expresiones algebraicas. Como el lector sabe. para una función de n
variables. cada fila de la tabla de verdad representa una asignación concreta de
unos valores binarios a estas n variables. Podemos defmir una función booleana.
usualmente denominada minterm. que es igual a 1 en una sola fila de su tabla de
verdad y O en el resto de las filas . Como hay 2" filas diferentes en la tabla de ver-
dad. hay también 2" minterms para cada n variables. Cada uno de estos minterms.
denotado mi' se puede expresar como producto. o término AND. de n literales en
los que cada variable se complementa si el valor asignado es O. y no se comple-
menta si el valor es 1. Más formalmente. esto significa que cada minterm mi se
puede definir como sigue.
Sea i = b"., ... bo un número binario entre O y 2" - 1. que representa una asig-
nación de valores binarios a las n variables binarias x . tales que x . = b. para todo j
donde O 5, j 5, n - 1. En este caso un minterm de n 4ariables x"~l' x:-2 • .... xo' se
puede representar como:

mi(x"_l' .... xo) =Y"~ , ... Yo


donde para todo k tal que O 5, k 5, n-l .

si bk =1
si bk =O

TABLA 3.9 Minterms para tres variables binarias

o O O xY'z' "'o
O O I x'y'z mi
O I O x'yz' m2
O I I x'yz "'3
I O O xy'z' m,
I O I xy'z m,
I I O xyz' m.
I I I xyz m7

En la Tabla 3.9 mostrarnos todos los minterms de tres variables binarias. x. Y. z.


En general. la expresión algebraica única para cualquier función booleana se
puede obtener a partir de su tabla de verdad usando un operador OR para combi-
nar todos los minterms para los que la función vale l. Estos minterms. se deno-
minan minterms 1. y los otros minterms se denominan minterms O. Por ejemplo.
f
84 Principios de diseño digital

la expresión de la función FI de la Tabla 3.8 se podría obtener aplicando la fun-


ción OR a todos los minterms 1:
FI = m3 + m5 + m6 + ,~ =x yz + xy z + xyz
I I I
+xyZ (3.7)

TABLA 3.8 Tabla de verdad de F, = xy + xy:Z + xyz y su


complemento P, =(x' + y)(x' + Y + z')(x + y + z' )

.C e ~
ilIIf!tP IS
_lOe! D!LA

y z P,

O O O O O 1
1 O O I O 1
2 O 1 O O 1
3 O 1 1 1 O
4 1 O O O 1
5 1 O 1 1 O
6 1 1 O 1 O
7 1 1 1 I O

De forma similar, podemos obtener el complemento de F I aplicando la fun-


ción OR a todos los minterms O:
PI = mo + mi + m 2 + m4 =xy'z' + xy'z + xyZ' + xyz' (3 .8)
Estos ejemplos ilustran una propiedad importante del álgebra booleana:
Cualquier función booleana se puede expresar como suma de sus min-
terms 1.
Con la aplicación de la función OR nos referimos aquí, a una suma debido a
su parecido con la suma.
A veces, es más conveniente describir la forma de la suma de minterms con
la siguiente notación corta:
F(lista de variables) = L (lista de Índices de minterms 1)
Con esta notación, el símbolo de sumatoria L se refiere a la aplicación de OR
a los minterms cuyos Índices se incluyen entre los paréntesis. Las variables lista-
das entre los paréntesis que acompañan a la F son las mismas variables presenta-
das en el mismo orden en que estaban cuando el minterm se expresaban en tér-
minos AND. Por tarito, la forma abreviada de FI' por ejemplo, es FI(x, y, z) =
L (3, 5, 6, 7) Y para P I es PI(x, y, z) = L (0, 1,2,4).
Cualquier expresión booleana se puede transformar en suma de minterms
primero expandiendo la expresión dada en suma de términos AND. Luego, ha)
que expandir cada téirnino que no contenga todas la variables, aplicando la fun-
c ión AND al término con expresión como x + X, donde x es una de las variabl
Álgebra booleana y diseño lógico 85

que faltan . Demostraremos este procedimiento de expansión en el siguiente


ejemplo.

EJEMPLO 3.1 Expansión de una suma de minterms


PROBLEMA
Exprese la función boolean F = x + yz como suma de minterms.
SOLUCIÓN
Esta función tiene tres variables: x, y, z. Al primer término, x, le faltan dos variables, mien-
tras que al segundo término, yz, le falta una. Entonces, necesitamos expandir el primer tér·
mino aplicando la operación AND con (y + y')(z + z'), Y expandir el segundo con (x + x').
En otras palabras,
F = x + yz
= x(y + y')(z + z') + (x + x')yz
= xyz + xy'z + xyz' + xy'z' + xyz + x'yz
Después de eliminar los duplicados, de acuerdo con el Teorema 1, Y reordenando los
minterms en orden ascendente, obtenemos finalmente
F = x'yz + xy'z' + xy'z + xyz' + xyz
= m 3 + 1n4 + ms + m6 + ~
= ¿(3, 4, 5, 6, 7)

Hay también un procedimiento alternativo para obtener una expresión de


suma de minterms, que requiere convertir la expresión algebraica dada en una
tabla de verdad y luego captar los minterms de la tabla de verdad. Este procedi-
miento se muestra en el ejemplo siguiente.

EJEMPLO 3.2 Conversión a una suma de minterms


PROBLEMA
Convertir la función booleana F = x + yz en suma de minterms usando una tabla de verdad.
SOLUCIÓN
La tabla de verdad mostrada en la Tabla 3.10 se deriva directamente de la expresión alge·
braica, teniendo en cuenta que F = 1 para todas las combinaciones de los valores de las
variables para las que x = 1 ó xy = 11 . A partir de la tabla de verdad es fácil identificar los
cinco rninterms que hacen que F = 1 ; m3• m4 • ms' m6 , y 1n7 " Entonces, como antes, la suma
de minterms será

Si a un término AND de n literales se le denomina minterm, de forma similar,


a un término OR de n literales se le denomina maxterm. Igual que la definición
de minterm, un maxterm se puede definir como una función booleana que vale O
en una sola fila si su tabla de verdad vale O y en el resto de las filas 1. Cada max-
86 Principios de diseño digital

term, Mi' se puede expresar como una suma, o término OR, de n literales en la que
cada variable no estaría complementada si el valor asignado es O, y estaría com-
plementada si su valor es 1. En la Tabla 3. \1 hay una lista de ocho maxterms para
tres variables, junto con su notación simbólica. Para cualquier número de varia-
bles, los maxterms se pueden determinar de manera similar. Obsérvese que cada
maxterm es el complemento de su correspondiente minterm, y viceversa, así que
m¡' = Mi YM/ = mi

Obsérvese también que si hacemos el complemento de la expresión FI dada


en la Ecuación (3.7), obtenemos la siguiente función FI' :
(FI)' = (x'yZ + xy'z + xyz' + xyz)'
= (x + y' + z')(x' + y + z')(x' + y' + z)(x' + y' + z')
=M3M SM 6M 7
De forma simílar, complementando la expresión dada en la Ecuación (3.8),
obtenemos la siguiente función F I :
FI = (PI)'
= (x'y'Z' + x'y'z + x'yz' + xyz')'
= (x + y + z)(x + y + z')(x + y' + z)(x' + y' + z)
= M¡¡MI M-zM4

TABLA 3.10 Tabla de verdad de TABLA 3.11 Maxterms para tres variables binarias
F= x+ yz

O O O x + y+z Mo
o O O O O O I x+y+ z' MI
O O I O O I O x+y'+ z M,
O I O O O I I X+y'+Z' M,
O I I I I O O x +y +z M,
I O O I I O I x + y + z' M,
I O 1 I I I O x + /+z M.
I I O I I I I x + /+z' M7
I I I I

Considerados conjuntamente, estos ejemplos ilustran que la expresión única


algebraica de cualquier función booleana se puede obtener a partir de su tabla de
verdad usando un operador ANO para combinar todos los maxterms que hacen
que la función valga O. Estos maxterms se denominan maxterms O y son los
opuestos a los maxterms 1, para los que la función vale l. Teniendo esto en cuen-
ta, podemos expresar la segunda propiedad del álgebra booleana, como sigue:
Cualquier función booleana se puede expresar como producto de sus
maxtermsO.
Álgebra booleana y diseño lógico 87

La aplicación de AND a los maxterms se denomina producto por su parecido


a la multiplicación. Sin embargo, a menudo es más conveniente expresar el pro-
ducto de maxterms de la siguiente forma:
F(lista de variables) =I1 (lista de índices de los maxterms O)
El símbolo del producto, n, denota la aplicación de la operación AND a los
maxterms cuyos índices están contenidos entre los paréntesis. Cualquier fun-
ción booleana que se exprese como suma de minterms o como producto de max-
terms se dice que está en forma canónica. A partir de las definiciones de ambas
formas canónicas, podemos dar un procedimiento general que sería como sigue:
Para pasar de una forma canónica a otra, se intercambian los símbolos ~
y n, y se listan los números que estaban excluidos de la forma original.
Los términos que faltan se pueden encontrar fácilmente, ya que cada función !Jo<>.
leana de n variables 'tendrá 2n minterms y 2n maxterms, numerados del Oal 2n - l.
Como regla, cualquier expresión booleana de n variables binarias se puede
convertir en un producto de maxterms. Para ello, primero hay que convertir la
expresión booleana en una forma que use términos OR, lo que se hace usando la
ley distributiva, x + yz = (x + y)(x + z). En este momento, cualquier término OR
al que le falte una variable, como x, se expande aplicando la función OR con xx',
por ejemplo. Este procedimiento se clarifica con el siguiente ejemplo.

EJEMPLO 3.3 Expansión a un producto de maxterms


PROBLEMA
Obtener en fonna de producto de maxterrns la función booleana F =xy' + xz.
SOLUCIÓN
Primero, neces itamos convertir la función en productos de términos OR usando la ley dis-
tributiva así:
F = xy' + xz
= (xy' + x)(Xy' + z)
= (x + x)(y' + x)(x + z)(y' + z)
= (x + y')(x + z)(y' + z)
En este momento, a cada término OR de la expresión le falta una variable, así que aña-
dimos zt al primer término, e yy' y xX al segundo y al tercero, respectivamente. Entonces,
cada término se expande en dos maxterrns:
x + y' = x + y' + zz' = (x + y' + z)(x + y' + z')
x + z = X + z + yy' = (X + y + z)(x + y' + z)
y' + z = y' + z + xX = (x + y' + z)(x + y' + z)
Finalmente, combinando todos esos términos y eliminando aquellos que aparecen más
de una vez, obtenemos la expresión siguiente:
. F = (x + y' + z)(x + y' + z')(x + y + z)(x + y' + z)
= M,M, M 4M 6 = rr(2, 3, 4, 6)
88 Principios de diseño digital

En el Ejemplo 3.3 hemos convertido la expresión algebraica dada en un


producto de términos OR antes de expandirlo en producto de maxterms. De
forma alternativa, podernos generar primero la tabla de verdad y luego deri-
var las formas canónicas a partir de ella. El siguiente ejemplo ilustra este
enfoque.

EJEMPLO 3.4 Conversión a un producto de maxterrns


PROBLEMA

Transformar la función booleana


F = x y' + xz
a la forma de producto de maxtenns.
SOLUCIÓN
Primero, obtenemos la tabla de verdad a partir de la expresión algebraica, como mues-
tra la Tabla 3.12. Obsérvese que el valor de la función F = 1 aparece en todas las filas
en las que las variables xy = 00 ó xz = 11 . Por tanto, los minterms para la función de la
Tabla 3.12 son, mo' m" m, y m,. Entonces, la función definida como suma de minterms
es
F(x, y, z) =L(O, 1, 5, 7)
Como tiene que haber un total de ocho minterms en una función de tres variables, pode-
mos determinar ahora que los mintenns que faltan son m2, ffl 3 , m4• y ffl 6" Por consiguiente,
la función expresada en fonna de producto de maxterms sería
F(x, y, z) = TI (2, 3, 4, 6)
Obsérvese que se obtiene la misma respuesta que en el Ejemplo 3.3 en el que se usó la
expansión de ténninos.

TABLA 3.12 Tabla de verdad de


F=xy'+xz

o O O 1
O O 1 1
O 1 O O
O 1 1 O
1 O O O
l O 1 1
1 1 O O
1 1 1 1
Álgebra booleana y diseño lógico 89

3.6. FORMAS NORMALIZADAS


Las dos formas canónicas descritas en la Sección 3.5 proporcionan expresiones
únicas para cualquier función booleana definida por su tabla de verdad. Sin
embargo, estas formas son raramente las que tienen un menor número de opera-
dores, ya que, por definición, cada minterm o maxterm requiere n - 1 operadores
AND uOR.
Sin embargo, como alternativa, podemos definir también las funciones boo-
leanas de forma estándar, en las que cada término puede requerir menos de
n - 1 operaciones. Hay dos tipos de formas estándar, la suma de productos y el
producto de sumas. Como antes, la suma de productos se podría definir como
una expresión booleana que contiene términos AND, denominados términos pro-
ducto o implican tes, incluyendo uno o más literales. La suma denota la aplica-
ción del operador OR a esos términos . Un ejemplo de una función expresada
como suma de productos es
FI = xy + x'yz + xy'z
Obsérvese que esta expresión tiene tres términos producto, conteniendo cada
uno de ellos dos o tres literales.
Por otra parte, una expresión de producto de sumas es una expresión AND
que contiene términos OR, denominados términos suma o implicados, donde el
producto denota la aplicación del operador AND a esos términos. Cada término
de la suma puede tener cualquier número de literales, y el producto puede tener
cualquier número de términos suma. Un ejemplo de una función expresada como
producto de sumas es
PI =(x' + y'). (x + y' + z') · (x' + Y + z')
Obsérvese que la expresión tiene tres términos suma con dos o tres literales
cada uno.
Estas formas de suma de productos y productos de sumas normalizadas no son
únicas, en el sentido de que puede haber varias sumas de productos y productos
de sumas distintas para una función dada. Sin embargo, aunque estas formas nor-
malizadas no son únicas, son útiles porque contienen menos operadores que las
formas canónicas. Estas formas normalizadas se obtienen de las formas canóni-
cas, combinando los términos que difieren en un literal, usando los axiomas del
álgebra booleana.
Por ejemplo, la expresión xyz + xyz' podría reducirse a xy de la siguiente
forma:

xyz + xyz' = xy(z + z') por la distributiva [Axioma 4(a)]


= xy. 1 por el complemento [Axioma 5(a)]
=xy por la identidad [Axioma 2(a)]

De forma similar, la expresión xyz + xyz' + xy'z +' xy'z' se podría reducir a x
aplicando el procedimiento anterior dos veces:
90 Principios de diseño digital

xyZ + xyZ' + xy'Z + xy'Z' = xy(Z + z') + xy'(Z + Z')


=xy+xy'
= x(y + y')
=x
También podemos obtener una forma normalizada con pocos operadores apli-
cando este procedintiento varias vec,?s a distintos grupos de términos, como mani-
fiesta el siguiente ejemplo.

EJEMPLO 3.5 Forma normalizada


PROBLEMA
Obtener una forma normalizada con un número reducido de operadores para la función
F , = xyz + xyz' + xy'z + x'yz.
SOLUCIÓN
Como puede ver el lector, el término xyz se puede combinar con los términos seg undo, ter-
cero y cuarto de esta expresión. Por tanto 10 podemos replicar dos veces antes de combi-
narlo con otros términos:
F¡ = xyz + xyz' + xy'z + x'yz
= xyz + xyZ' + xyz + xy'Z + xyz +xyz
= xy(Z + Z') + x(y + y')Z + (x + x)yZ
=xy+XZ +Yz

En general, podemos combinar términos y eliminar literales en forma norma-


lizada hasta que no se puedan reducir más. En este caso, cada término producto
en forma de suma de productos se denomina implicante primo y un término suma
en forma de producto de sumas, implicado primo.
Cada implicante primo representa uno o más minterms l. Obsérvese que cada
minterm 1 puede estar incluido en varios implicantes primos. Si un minterm lestá
incluido en un solo implicante primo denominamos a este implicante, implican-
te primo esencial ya que no se puede omitir de la forma normalizada sin que cam-
bie la función dada. De forma similar, podemos defmir implicados primos esen-
ciales para la forma normalizada de producto de sumas. En el Capítulo 4 tratare-
mos de procedimientos sistemáticos para obtener una forma normalizada forma-
da por implican tes primos.
A pesar de que estas formas normalizadas requieran menos operadores que las
formas canónicas, estas expresiones todavía puede que no contengan un número de
operadores del todo mínimo. Por otra parte, factorizando los literales, podemos expre-
sar una función booleana dada de forma no normalizada que a veces puede requerir
incluso menos operadores. Por ejemplo, el número de operadores de la expresión
xy + xy'z + xy'w se puede reducir más aún si factorizamos la variable x y luego la y':
xy + xy'z + xy'w = x(y + y'z + y'w)
= x(y + y'(z + w))
Álgebra booleana y diseño lógico 91

Como puede verse, esta forma no es ni una suma de productos ni un produc-


to de sumas, a pesar de que se puede pasar a una forma normalizada usando la ley
distributiva para quitar los paréntesis.

EJEMPLO 3.6 Formas no normalizadas


PROBLEMA

Reducir el número de operadores de la forma normalizada de la función F, = xy + xz + yz


SOLUCiÓN

Hay tres formas no normalizadas de la función F, que requieran menos operadores: cada
una de ellas requiere dos AND y dos OR, en comparación con las tres AND y las dos OR
de la forma normalizada.
F, = xy + xz + yz
= xy + (x + y)z
=x(y+ z)+yz
=xz + y(x + z)

Expresión algebraica

Forma no normalizada

FIGURA 3.2 Estrategia para minimizar operadores en expresiones booleanas.

Como hemos mostrado en esta sección, podemos usar varias estrategias para
reducir el número de operadores de la expresión booleana, y todos ellos se pue-
den combinar constituyendo la estrategia de diseño mostrada en la Figura 3.2.
92 Principios de diseño digital

Siguiendo esta estrategia, primero convertimos cada expresión algebraica en una


tabla de verdad. Segundo, generamos una forma canónica. Luego reducimos el
número de operadores creando subcubos y convirtiendo la forma canónica en una
forma normalizada. Finalmente, podríamos reducir este número aún más factori-
zando todas las subexpresiones comunes 'y creando una forma no normalizada.

3.7. OTRAS OPERACIONES LÓGICAS


Anteriormente, hemos tratado sólo con dos funciones booleanas de dos variables,
AND y ORo Sin embargo, como mostramos en la Sección 3.6, hay 22" funciones
booleanas para n variables binarias cualesquiera, lo que significa que habrá un
total de 16 funciones booleanas para dos variables. Puesto que las funciones AND
y OR son sólo d<is de las 16 funciones booleanas posibles, en esta sección defini-
remos las otras 14 funciones de dos variables.
En la Tabla 3.13 se dan las 16 funciones de dos variables binarias, x e y . Cada
fLia de esta tabla representa una función posible de estas dos variables, y los nom-
bres de estas funciones se dan en la primera columna de la tabla. Las tablas de ver-
dad de las 16 funciones se presentan en la tercera columna de la tabla. Como cada
una de estas funciones se puede expresar también algebraicamente, damos las
correspondientes expresiones booleanas en la cuarta columna de la tabla.
Obsérvese que cada función se ha denominado F;, donde i es el equivalente deci-
mal que se puede obtener interpretando como números binarios los valores de la
función que aparecen en la tercera columna.
Como el lector sabe, cada una de estas funciones se puede dar en forma nor-
malizada usando los operadores AND, OR Y NOT. Como no hay motivos por los
que no podamos asignar un símbolo especial de operador a cada función, cada
función se puede representar también mediante el símbolo del operador que se
lista en la segunda columna de la tabla. Sin embargo, como regla, con la excep-
ción del símbolo XOR, estos símbolos no los usan normalmente los diseñadores.
Finalmente, la última columna contiene la descripción en español que explica
cada una de las 16 funciones.
Como puede deducirse a partir de los comentarios, las 16 funciones listadas
se pueden subdividir en tres categorías de acuerdo con el número de variables que
en ese momento influyan en el valor de la función:
1. Hay dos funciones que generan constantes: cero y uno. Para cada combi-
nación de los valores de las variables, la función cero dará 0, mientras que
la función uno dará 1.
2. Hay cuatro funciones de una variable que indican operaciones de com-
plemento y transferencia. Concretamente, la función complemento pro-
ducirá el complemento de una de las variables binarias. La función trans-
ferencia, sin embargo, reproduce una de las variables binarias en la sali-
da, así que la variable atraviesa la lógica (o se transfiere a la salida) sin
cambiar su valor.
Álgebra booleana y diseño lógico 93

TABLA 3.13 Expresiones booleanas de las 16 funciones de dos variables

EXllllilli',
AUI 571.,. ~

Cero O O O O Fo = O Constante binaria O


AND x·y O O O 1 F, =xy xey
Inhibición xIy O O I O F 2 :::xy' x pero no y
Transferencia O O 1 1 F3 =x x
Inhibición y/x O I O O F, = xy y pero no x
Transferencia O I O 1 F, =y Y
XOR xey O I I O F6 = xi + xy x 6 y pero no ambas
OR x+y O I I I F7 = X + Y xóy
NOR x.J. y 1 O O O F, = (x + y)' ORno
~ plEquivalencia x0y I O O I F9 = xy + xy' x igual ay
Complemento y' 1 O I O FIO = y' yno
Implicación xcy I O I I FII = X + y' si y, entonces x
Complemento x 1 1 O O F'2 = x xno
Implicación x::>y · I I O I F13 = x + y si x, entonces y
NANO xiy 1 1 1 O F'4 = (xy)' ANDno
Uno 1 1 I F15 = 1 Constante binaria ]

3. Hay 10 funciones que definen ocho operadores binarios específicos:


AND, Inhibición, XOR, OR, NOR, Equivalencia, Implicación y NAND.
De estos ocho operadores binarios, Inhibición e Implicación no se usan nunca
en diseño de computadoras, concretamente porque son difíciles de implementar
como componentes individuales pero se pueden implementar fácilmente usando
operadores AND u OR junto con un operador NOT en una de las entradas. Sin
embargo, como regla general, los diseñadores prefieren los operadores NOR y
NAND a los operadores OR y AND, sencillamente porque NOR y NAND se pue-
den implementar con menos transistores.
Básicamente, la función NOR es el complemento de la función OR ; de hecho,
su nombre es una abreviación de no-OR. De forma similar, NAND es el comple-
mento de AND, y su nombre una abreviación de no-AND. XOR , que es la abre-
viación de exclusive-OR, es similar a OR excepto que excluye el resultado 1 siem-
pre que x e y sean iguales a 1. El operador equivalencia produce una salida 1 siem-
pre que ambas variables binarias tengan el mismo valor (es decir, cuando ambas
sean iguales a O ó a 1). Dadas estas propiedl\\!es, resulta obvio que las funciones
XOR y equivalencia son complementos la una de la otra, como puede verificarse
comparando las tablas de verdad de F6 y F9 dadas en la Tabla 3.13. Debido a esta
complementariedad, la función equivalencia se suele denominar exclusive-NOR,
·oXNOR.
De las 16 funciones definidas en la Tabla 3.13, se puede ver que sólo 12 son
únicas, ya que cuatro de estas funciones están repetidas dos veces. Cero y uno se
94 Principios de diseño digital

implementan de forma particularmente fácil, conectando las líneas de alimenta-


ción, y no requiere ningún circuito. Dos de estas funciones , Inhibición e
Implicación, son ambas conmutativas pero no asociativas, lo que es un inconve-
niente para usarlas en diseño lógico. Sin embargo, las otras ocho se pueden imple-
mentar fácilmente con puertas normalizadas y por consiguiente se usan frecuen-
temente en diseño lógico.

3.8. PUERTAS LÓGICAS DIGITALES


En las secciones anteriores se ha descrito cómo representar funciones booleanas
y cómo obtener expresiones para calcular valores de funciones. Para implemen-
tar una de estas expresiones booleanas, construimos una red lógica o circuito
lógico en el que se usan las variables de la expresión como entradas a la red
lógica, que contiene una o más puertas lógicas. Cada puerta lógica realiza una
o más operaciones booleanas que hemos definido en secciones anteriores. La
colección de puertas lógicas que usamos para construir redes lógicas se deno-
mina biblioteca de puertas, y las puertas de biblioteca se denominan puertas
normalizadas. Aunque cada operador booleano se puede implementar con una
puerta lógica e incluirse en la biblioteca de puertas, las bibliotecas de puertas
modernas rara vez incluyen más de una docena de puertas distintas para dismi-
nuir el costo del mantenimiento de la biblioteca y simplificar el desarrollo de
herramientas CAD para diseño lógico. Antes de seleccionar qué operadores se
van a incluir en la biblioteca de puertas, generalmente consideramos los
siguientes criterios:
1. La frecuencia de su uso en diseños lógicos típicos, definida como su capa-
cidad para implementar una serie de funciones booleanas junto con otras
puertas.
2. La ampliabilidad del operador a más de dos variables, lo que requiere que
sea conmutativo y asociativo.
3. La sencillez de construcción definida por el número de transistores que se
necesitan para su construcción y el tiempo que se necesita para que el
cambio de la señal se propague a través de la puerta.
En base a este criterio, generalmente se seleccionan ocho operadores que
van a utilizar en la implementación como puertas normalizadas, que son, los ope-
radores Complemento, Transferencia, AND, OR, NAND, NOR, XOR, Y XNOR.
Los diseñadores de lógica frecuentemente denominan al operador Complemenlo.
operador Inversor O NOT, y al operador Transferencia, Adaptador (driver) ya que
se usa para excitar grandes cargas y líneas de conexión largas.
En la Tabla 3.14, mostramos los símbolos gráficos y expresiones booleanas de
cada una de estas ocho puertas. Obsérvese que cada puerta tiene una o dos en~
das binarias, designadas por x y/ó y, y una salida binaria, denominada F. Como
lector puede ver, la Tabla 3.1 4 también muestra el costo de cada puerta en fun .
del número de transistores que se necesitarían para su construcción con tecn<»
Álgebra booleana y diseño lógico 9S

gía CMOS y el retardo normalizado de propagación de la señal al atravesar una


puerta concreta. .
Corno la función del inversor es complementar el valor lógico de sus entradas,
se coloca un pequeño CÍrculo en la salida del símbolo gráfico para indicar esta
Complementación lógica. También se usa un triángulo corno símbolo para indicar
un circuito Adaptador, que implementa la función de Transferencia replicando el
valor de entrada a la salida. En general, un Adaptador equivale a dos Inversores
conectados en cascada, de forma que la salida del primer Inversor sirva de entra-
da del segundo .
Corno mencionamos anteriormente, las puertas AND y OR se usan para
implementar los operadores binarios ANO y OR, mientras que las puertas NANO
y NOR se usan para implementar las funciones complemento de ANO y ORo
Como puede verse, bay un pequeño CÍrculo en cada una de estas salidas que indi-
ca su complemento. Entre los diseñadores de lógica, estas puertas NANO y NOR
se usan ampliamente y son más comunes que las puertas ANO y OR, sencilla-
mente porque su implementación requiere sólo cuatro ' transistores, en compara-
ción con las puertas ANO y OR que requieren seis transistores. Además, como
utilizan menos transistores, las puertas NANO y OR son más rápidas que las
correspondientes puertas ANO y OR o

TABLA 3.14 Biblioteca 16gica básica

Inversor x . =- - F F= x' 2

Adaptador

AND
x

:=a-• F

F
F=x

F= xy
4

6
2

2,4

OR ;=a- F F=x+ y 6 2,4

NAND
:=a- F F = (xy)' 4 1,4

NOR

XOR
:=a- F F = (x + y)'

F=x (fJy
4

14
1,4

4,2
; =:j. F

XNOR F=xGy 12 3,2


: =:j. F
96 Principios de diseño digital

Como se indica en la Tabla 3.14, el símbolo gráfico de la puerta XOR es casi


el mismo que el de la puerta OR, excepto que tiene una línea curva adicional en
la entrada. Obsérvese que la puerta XNOR es el complemento de la puerta XOR,
como indica el pequeño círculo en su línea de salida.
Cuando implementamos funciones booleanas con esta biblioteca de puertas
básica, normalmente intentamos encontrar la expresión booleana que satisfará
mejor un conjunto dado de requisitos del diseño. Generalmente, estos requisitos
implican restricciones en el coste, lo que se puede traducir en términos de núme-
ro de transistores, y/o retardo de la señal a través de la red lógica, que normal-
mente se especifica en nanosegundos (ns). Muy frecuentemente, nuestro principal
objetivo será encontrar el diseño menos caro. Debido a su naturaleza, estos dos
objetivos tienden a estar en conflicto, ya que un diseño más rápido normalmente
evalúa subexpresiones en paralelo, lo que significa que requerirá más puertas que
un diseño con un costo menor en el que las expresiones se factorizan y ejecutan
en serie.
En el siguiente ejemplo, mostraremos varios de los distintos compromisos de
diseño en la realización de un sumador completo.

EJEMPLO 3.7 Diseño de un sumador completo


PROBLEMA

Diseñar un sumador completo basándose en las especificaciones dadas en la Tabla 2.3, y


utilizando la biblioteca básica que se dio en la Tabla 3.14. El principal objetivo es minimi-
zar el retardo de propagación de c¡ a ci+1' mientras que el objetivo secundario es usar el
menor número posible de transistores.
SOLUCIÓN
. Primero obtenemos una expresión que contiene un número mínimo de operadores. La
expresión para s, se puede reducir a dos puertas XOR:
Si ;;;; xii,e; + x¡Y,c'¡ + x¡y'/¡ + x¡Y,c¡
= (x¡Y¡ + x¡y'¡)c'¡ + (x' ¡y'¡ + x¡Y¡)c¡
= (x, El) y,)c', + (x,0 y,)c,
= (.,ti €El y¡)c'¡ + (Xi EB y¡lc¡
= (x, El) y,) al c,
Como vimos en el Ejemplo 3.5, la expresión de la función de acarreo C'+ l podría redu-
cirse a x¡Y, + c,(x, + y,). Sin embargo, si la pasarnos a otra forma, podremos usar la subex-
presión x El) y, que también forma parte de la expresión de s,.
C i+ 1 = x¡Y/¡ + x¡Y,c¡ + x'¡Y,c¡ + X¡y'li
= x¡y¡(c'¡ + e¡) + c¡(x¡y¡ + x¡y'¡)
= x¡Y¡ + c¡(x¡ E:':9 y¡)
De esta forma podemos compartir las subexpresiones comunes de las expresiones de Si
y c i+1' lo que nos pennite implementar el sumador completo con cinco puertas, como se ve
en la Figura 3.3(a). Obsérvese que esta implementación requiere 46 transistores y tiene un
Álgebra booleana y diseño lógico 'Y7

retardo de 4,8 os de e, a c'+I' La implementación usa puertas AND, OR YXOR, que son más
lentas que las correspondientes puertas NAND, NOR y XNOR. Sin embargo, si modifica-
mos las expresiones de Si y e j+! tendremos las ventajas de la rapidez y mejor precio de las
puertas NAND y NOR. Para ello, primero transformamos la expresión de e j + 1 corno sigue,
aplicando los teoremas de De Morgan:
C¡ + 1 = xiY¡ + c¡(x¡ + Yi)
= «x¡y,)'(c¡(x, + y,))')'
De forma similar, transfonnamos la expresión de si aSÍ:
Si = (Xi Ea y¡)c'¡ + (X¡0Y¡)C¡
= (x,0y,)'e', + (x¡0y,)c,
= (x¡0y,)0e,
Además, también podemos implementar x¡0y, con dos puertas NAND y una OR:
X¡0Y¡ = x¡y; + X'¡y'i
= «x¡y,)'(x' ¡y',)')'
= «x¡y,)'(x, + y,»'
Usando estas expresiones. podemos implementar un sumador completo más rápi -
do como se ve en la Figura 3.3(c). Obsérvese que este sumador tarda sólo 2,8 ns de
c¡ a ej+1' en comparación con los 4,8 os del di seño anterior. La implementac ión sería
también menos cara, ya que usa sólo 36 transistores en lugar de los 48 que necesita
el otro.

A partir del Ejemplo 3.7, podemos generalizar y decir que intentar minimi-
zar el número de operadores no da necesariamente el diseño más rápido ni tam-
poco el menos caro, pero si intentamos encontrar la expresión que use las puer-
tas más rápidas o menos caras de la biblioteca, puede que consigamos los obje-
tivos.

TABLA 2.3 Suma de dígitos binarios

0, ~, .,
O O O O O
O O 1 O 1
O 1 O O 1
O 1 1 1 O
O O O 1
O 1 1 O
1 O 1 O
1 1 1 1
98 Principios de diseño digital

Xi Yi

r--\.:~\--+--.--- ci
4,8
C¡ a Ci + I
e¡ a Si 4,2
Xj' Yi a e¡ + 1 9,0
Xi' Yi a Si 8,4

'i
(a) Diseño con un número (b) Retardos Entrada/Salida para el diseño
mínimo de operadores del apartado (a)

Xi Yi

I++---, Ci

ei a c j + I 2,8
e¡ a Si 3,8
Xi' Yi a Ci + 1 5,2
Xi'Y i aSí 7,2

'i
(e) Diseño con puertas (d) Retardos Entrada/Salida para e l diseño
NAND y OR del apartado (e)

FIGURA 3.3 Diseño de un sumador completo.


Álgebra booleana y diseño lógico 99

AMPLIACiÓN A VARIAS ENTRADAS Y VARIOS


OPERADORES
Además, hay otras formas para disminuir el coste y el retardo de una implemen-
tación, una de ellas implica ampliar la biblioteca construyendo puertas que tengan
más de dos entradas. Corno regla general, cualquier puerta se puede ampliar para
tener más entradas ya que la operación binaria que se implementa es conmutativa
y asociativa, y garantiza que las variables se pueden conectar a las entradas de la
puerta en cualquier orden. Como las operaciones AND y OR poseen estas dos
propiedades por definición de álgebra booleana, son muy fáciles de ampliar.
Sin embargo, las funciones NAND y NOR son conmutativas pero no asocia-
tivas. Pero es posible pensar en funciones NAND y NOR de varias entradas corno
complementos de las funciones múltiples AND y OR respectivamente. Así las
funciones NAND y NOR múltiples se definen de la forma siguiente:
NAND(x, y, z, ... ) = (xyz ... )'" x i y i z i ...
NOR(x, y, z, ... ) = (x + y + Z + ... )'" x j, y j, z j, ...

Como las puertas XOR y XNOR son ambas conmutativas y asociativas, se


pueden ampliar a más de dos entradas. En otras palabras, cualquier puerta de la
Tabla 3. 14, excepto el inversor y el adaptador, se pueden ampliar a más de dos
entradas.
Por otra parte, usualmente no se hacen puertas XOR y XNOR de varias entra-
das ya que la mayoría de las funciones lógicas en diseño digital, con la excepción
de las funciones de paridad, se pueden diseñar usando puertas XOR y XNOR de
sólo dos entradas. Además, incluso estas puertas XOR y XNOR de dos entradas
se construyen a partir de puertas NAND, NOR y NOT para simplificar la biblio-
teca de puertas.
Por tanto, las bibliotecas más amplias deberían tener puertas NAND, NOR,
AND y OR de 3 o 4 entradas cada una. Se pueden construir puertas con un
número mayor de entradas, pero son más difíciles de hacer y como se usan
menos, el coste de la biblioteca y del mantenimiento de las herramientas CAD
tiende a considerarse más. relevante que su limitado uso. Por estos motivos se
han incluido sólo puertas de 3 y 4 entradas en nuestra ampliación de la biblio-
teca. Los símbolos gráficos de estas puertas AND, OR, NAND, Y NOR de 3 y
4 entradas se muestran en la Tabla 3.15, con sus correspondientes expresiones
de costo y retardo.
Hay otra forma de mejorar las prestaciones y el coste de la implementación de
funciones booleanas, pero implica ampliar la biblioteca para incluir puertas que
puedan realizar más de una operación booleana. Ya que en muchos casos las fun-
ciones booleanas, se implementan usando la forma normalizada de suma de pro-
ductos o producto de sumas, es por ejemplo beneficioso tener puertas normaliza-
das que puedan implementar estas formas eficientemente. Como se muestra en la
Tabla 3.16, estas puertas de varios operadores se denominan INVERSORES
AND-OR (AOI) y puertas INVERSORAS OR-AND (OAI). Usando estas puer-
100 Principios de diseño digital

tas, podemos construir implementaciones en la forma normalizada que son de


menor coste y con menores retardos que cuando se implementan con puertas con
operadores únicos. Por ejemplo, un AOI con 2 niveles y 3 entradas que imple-
menta la suma de dos productos con tres literales cada uno requiere 12 transisto-
res e introduce un retardo de 2.2 ns, mientras que se necesitan 20 transistores y
4,2 ns para la misma suma de productos cuando se implementa con dos puertas
AND de 3 entradas y una puerta NOR de 2 entradas.

TABLA 3.15 Puertas lógicas normalizadas de varias entradas

SfiEOlO
GIW100 =. COSTE DE
(HOMERO -...
TRANSISTORES)
-' ""&f)
M!RfA

AND de 3 entradas F= xyz 8 2,8

AND de 4 entradas
r=a- F F = XYZIV 10 3,2

OR de 3 entradas
~~F F= x + y + z 8 2,8

OR de 4 entradas
~F F=x+y+ z +w \O 3,2

NAND de 3 entradas ~~ F F = (xyz)' 8 1,8

NANO de 4 entradas Iw~ F F = (>yzw)' 10 2,2

NOR de 3 entradas
~~F F=(x+ y + z)' 8 1,8

NOR de 4 entradas
f~F F = (x + y + Z + IV)' 10 2,2

Las puertas que tienen varias entradas y pueden realizar varias operaciones se
denominan frecuentemente puertas complejas. En los siguientes dos ejemplos
mostraremos su utilidad.

EJEMPLO 3.8 Implementación con puertas de varias entradas


PROBLEMA

Implementar el sumador completo del Ejemplo 3.7 usando las puertas adecuadas de varias
entradas mostradas en la Tabla 3.15.
Álgebra booleana y diseño lógico 101

SOLUCIÓN
Para usar puertas de varias entradas, necesitarnos partir de la forma normalizada, concreta-
mente de una con el menor número posible de operadores, que nos pennita minimizar el
coste. Además, intentaremos usar las puertas más rápidas de la biblioteca, para obtener el
menor retardo posible. Usualmente, las puertas más rápidas de la biblioteca son las puertas
NANO y NOR, así que para usarlas 'aplicaremos los teoremas de De Morgan hasta que
hayamos convertido la forma nonnalizada seleccionada en una expresión con operadores
NANO o NOR.
En el caso del sumador completo, modificamos la expresión de ei+! y Si de la siguiente
forma:

e j + 1 = x¡Y¡ + cr ¡ + ciY¡
= «x;y,)'(cr'';l'(c¡y;l'l'

TABLA 3. 16 Puertqs lógicas normalizadas de varios operadores

AOI
2 de ancho .t F F= (wx + yz)' 8 2,0
2 entradas

AOI
,"
w
3 de ancho F F = (uv + wx + y¡)' 12 2,4
2 entradas x
y
,
AOI
2 de ancho
3 entradas
"'-
,
W
x
,
y
F F = (uvw + xy¡)' 12 2,2

OAI
2 de ancho
2 entradas

DA!
3 de ancho
f'-
u
,
W
F

F
F

F
= «w + x)(y + z)J'

= «u + v)(w + x)(y + z))'


8

12
2,0

2,2
x
2 entradas
y

~.
DAI
2 de ancho W
x
F F = «11 + v + w)(x + y + z)J' 12 2,4
3 entradas )'
Z
102 Principios de diseño digital

Si = x¡y',C¡ + X¡Y,c'¡ + x¡y'/¡ + X¡Y,C¡


= «x' j1 ,cj)'(x'¡y/e' ¡)'(x¡y' ,e' ¡)'(x¡Yl¡»'
En la Figura 3.4(a) ilustramos una implementación obtenida a partir de estas expresio-
nes modificadas. Como se puede ver, el retardo de cualquier salida Si es sólo 5,0 ns, y de
e i + 1 es sólo 3,2 ns. Sin embargo, desgraciadamente, el diseño requiere 56 transistores para
su implementación lo que probablemente se reduciría usando puertas de varios operadores.

el' a ej ... I 3,2


el' a Si 5,0
X¡.Y¡8C i + 1 4,2
Xi' Yi as; 5,0

(a) Diseño con puenas de varios operadores (b) Retardos Entrada/Salida para el diseño
del apartado (a)

FIGURA 3.4 Diseño del sumador completo con puertas de varias entradas.

EJEMPLO 3.9 Implementación con puertas de varios operadores


PROBLEMA

Implementar el sumador completo usando las puertas apropiadas de varios operadores que
se muestran en la Tabla 3.16.
SOLUCIÓN
Cuando se usan puertas de varios operadores podemos empezar transformando las expre-
siones funcionales en subexpresiones AOI y OlA. Como la expresión de la suma Si tiene
cuatro términos AND de tres literales cada uno, la mejor elección para su implementación
sería una puerta AOI de 3 entradas y 4 niveles. Sin embargo, como no tenemos este tipo de
puerta en nuestra biblioteca, podemos implementar mejor el sumador usando dos puertas
AOI de 3 entradas y·2 niveles junto con una puerta NAND, como se muestra a continua-
ción:
Si = xjy',e,. + x'¡y,c'¡ + x¡y',c'¡ + x¡YF¡
;; «x'¡y',c¡ + x¡Y,c'¡)'(x¡y',c'¡ + x¡Y,c¡Y)'
Para usar una única puerta AOI de 2 entradas y 3 niveles en la implementación de la
función de acarreo, debemos generar la expresión de su complemento:
Álgebra booleana y diseño lógico 103

ei+. = X¡Y¡ + C¡X¡ + C¡Y¡


; «XiY;l'(CiX;l'(CiY;l')'
; «Xi + y'¡l(C'i + Xi)(c'¡ + y'i))'
= (XiYi + e/ir,. + c'¡y'¡)'
El resultado se muestra en la Figura 3.5(b). Obsérvese que el retardo entre ci y Ci+1 es
de 3,4 ns, que es sólo 0.2 ns mayor que el de la implementación que usaba puertas de varias
entradas. Por otra parte, el retardo entre c¡ y Si es de s6lo 4,6 os, que es 0,4 os menor que el
de la implementación que usaba puertas de varias entradas. Además, el uso de puertas de
varios operadores ha reducido el C,oste de 56 a 46 transistores.

En los Ejemplos 3.7, 3.8 Y 3.9, hemos ilustrado la manipulación algebraica de


expresiones booleanas para implementarlas con varios tipos de puertas. Como
hemos visto, en un principio no es obvio qué tipos de puertas darán el mejor dise-
ño. Normalmente hay que probar distintas alternativas hasta encontrar la mejor
solución. En el Capítulo 4, veremos procedimientos sistemáticos para implemen-
tar funciones booleanas y optimizar esas implementaciones para distintas biblio-
tecas.

r ~ . _. . . ".
~.. • . .~~i f,;.. .. .. 4,./~"-:~ ~
~ ... r. \'0'. < ";.;~'."

e¡ a ej + I 3,4
c¡ a Si 4,4
Xi' Yi a ej. I 3,4
Xi' y . a Si 4,4

Si
(a) Diseño con puertas de varios operadores (b) Retardos Entrada/Salida para el diseño
del apartado (a)

FIGURA 3.5 Diseno del sumador completo con puertas de varios operadores.

3.10. IMPLEMENTACIONES DE PUERTAS


En las Secciones 3.8 y 3.9 introdujimos distintos tipos de puertas que realizan una
o varias operaciones booleanas. Estas puertas son circuitos electrónicos com-
puestos por resistencias, diodos, y transistores que se pueden conectar de distin-
tas formas para realizar distintas operaciones booleanas. Las primeras puertas se
construían principalmente con resistencias y diodos ya que los transistores eran
104 Principios de diseño digital

caros. Sin embargo, con los avances de la tecnología de semiconductores, la fabri-


cación de transistores se volvió sencilla y barata, así que las puertas actuales se
construyen exclusivamente con transistores.
La forma de conectar los transistores caracteriza cada familia lógica o biblio-
teca y le da un nombre específico. Antes de discutir las bases de las familias lógi-
cas básicas definiremos varias medidas que se pueden usar para comparar las dis-
tintas familias.

3.10.1. Niveles lógicos

Las implementaciones de puertas son circuitos electrónicos cuyo comportamiento


se puede explicar muy bien en términos de niveles de tensión, medidos en voltios
(V), y no necesariamente en términos de los valores booleanos O y 1. Sin embar-
go, para adaptarse a 'estos valores booleanos, los circuitos de puertas se diseñan de
forma que sólo se pueden dar dos niveles de tensión, alto (H) y bajo (L), para un
estado concreto de las entradas y salidas. Por consiguiente, la función booleana
realizada por tal circuito de puerta depende de la interpretación de los niveles de
tensión H y L, o en otras palabras, de la·correspondencia entre O y 1 y los niveles
de tensión H y L. Esta correspondencia se puede realizar de dos formas diferentes,
dando lugar a dos sistemas lógicos diferentes: positivo y negativo.

SNT'RADI!S 8,WOAS ENTRA1tl1IS SALIDAS etmIADAS W!b&s


LL H 00 I I I O
LH H OI I lO O
HL H 10 I OI O
HH L I I O 00 I

(a) Componamiento de la puerta (b) NANO con lógica positiva (e) NOR con lógica negativa

FIGURA 3.6 Interpretación del circuito cuya salida es L sólo cuando ambas entradas son H.

ENTRADAS SAI _ ENT1WlAS ~ SAI..IDA8


LL H 00 I I I O
LH L OI O 10 I
HL L IO O 01 I
HH L II O 00 I

(a) Comportamiento de la puerta (h) NOR con lógica positiva (e) NAND con lógica negativa

FIGURA 3.7 Interpretación del circuito cuya salida es L siempre que una de las entradas es H.

En el sistema lógico positivo, O se asigna a L y 1 a H , mientras que en el sis-


tema lógico negativo lo asignamos al revés: L representa 1 y H representa O.
Entonces, cada circuito de puerta realiza diferentes funciones booleanas según se
Álgebra booleana y diseño lógico 105

considere en el sistema lógico positivo o en el sistema lógico negativo. Por ejem-


plo, el circuito de puerta cuya salida es L sólo cuando ambas entradas son H
[Figura 3.6(a)) realiza la operación NAND en lógica positiva [Figura 3.6(b)) y la
operación NOR en lógica negativa [Figura 3.6(c)).
De forma similar, un circuito de puerta cuya salida es L siempre que una de
las entradas sea H [Figura 3.7(a)) se puede usar para realizar la operación NOR
con lógica positiva [Figura 3.7(b)) o la operación NAND con lógica negativa
[Figura 3.7(c)).
Para distinguir los sistemas de lógica positiva y negativa usamos un pequeño
triángulo como indicador de polaridad de lógica negativa en las líneas de señal de
entrada o de salida correspondientes. La presencia de este indicador de polaridad
significa que se ha supuesto lógica negativa para los valores de tensión de una
señal concreta. Usando los indicadores de polaridad, podemos mezclar valores de
lógica positiva y negativa como se muestra en la Tabla 3.7.
La mezcla de ruveles lógicos se hacía frecuentemente en el pasado cuando los
diseñadores mezclaban puertas de distintas familias lógicas en la misma tarjeta.
Desde que aproximadamente a partir de la década pasada, todos los lC (lntegrated
Circuits, circuitos integrados) nuevos se hacen con la familia lógica CMOS , que
usa lógica positiva, la lógica negativa ha perdido el apoyo de los diseñadores, así
que las herramientas CAD modernas usan predominantemente la lógica positiva.
Por este motivo sólo usaremos lógica positiva a lo largo del libro.

TABLA 3. 17 Ejemplos de símbo·


los de lógica positi·
va y negativa

3.10.2. Márgenes de ruido


Los circuitos se construyen para admitir variaciones en los niveles de tensión de
las entradas y de las salidas. Estas variaciones se deben usualmente a varios fac-
tores diferentes. Por ejemplo, las baterías envejecen y pierden su potencia cau-
sando una disminución de la tensión de la fuente de alimentación. De forma simi-
106 Principios de diseño digital

lar, operar a temperaturas altas puede causar una deriva en la tensión y en la


corriente del transistor. Por otra parte, los cambios bruscos de corriente proce-
dentes de líneas de alimentación vecinas, pueden introducir pulsos espúreos en las
líneas de señal. El conjunto de todas estas variaciones indeseables en la tensión,
que se superponen a los niveles de tensión normales de funcionamiento, se deno-
mina ruido.
Todas las puertas se diseñan para tolerar una cierta cantidad de ruido en sus
puertos de entrada y salida. El máximo nivel de tensión de ruido que una puerta
tolera se denomina margen de ruido. El margen de ruido se puede obtener a par-
tir de la tensión característica de entrada/salida que se mide bajo distintas condi-
ciones de operatividad y se da en la documentación de la puerta. Esta caracterís-
tica de entrada/salida se muestra en la Figura 3.8 para la familia lógica transistor-
transistor, en donde se representa la tensión de salida Vo frente a la tensión de
entrada VI'

4,0 ,..--,..--,,----,---.--,---.,--,.---,

3.5

3,0
,,0
• 2,5 1 - - + -
:9
~
.g 2.0 f--+--t'
~
t: 1,5 f--+--.-
¡!:

I,OI---Il--rt
0,5 I--t--rlf-

0,5 1,0 1,5 2,0 2,5 3,0 3,5 4,0


Tensión de entrada VI

FIGURA 3.8 Caracterlstica de entrada/salida tlpica de las puertas en la familia lógica transis-
tor-transistor.

Como las características de entrada/salida varían bajo distintas condiciones de


operatividad, mostramos también el rango de variación con el área sombreada de
la Figura 3.8. A partir de la figura podemos ver que la puerta dada, opera en tres
modos diferentes: salida alta, transición y salida baja. En el primer modo, cuando
VI está entre O y 0.8 V, la tensión de salida [Link] mayor de 2.4 V Y menor que la
tensión de alimentación Vcc' que usualmente es 5 V. En el modo de transición,
cuando V 1 está entre 0.8 y 2.0 V, la puerta conmuta de H a L. Finalmente, en el
tercer modo, cuando VI es mayor de 2.0 V, la tensión de salida Vo es mayor que O
y menor que 0.4 V.
Álgebra booleana y diseño lógico 107

Para determinar los márgenes de ruido, debemos comparar la salida y los ran-
gos de tensión de salida de las puertas de la misma familia, como se muestra en
la Figura 3.9, en la que vemos el rango de tensi6n de salida de una puerta excita-
dora, en la parte izquierda, y el rango de tensi6n de entrada de las puertas excita-
das, en la parte derecha.
Cualquier tensi6n entre VOH y Vce se considera H y cualquier tensi6n entre O
y VOL se considera L. De forma similar, cualquier tensi6n entre V IH y V ce se con-
sidera H y cualquier tensi6n entre O y VIL se considera L.
La diferencia de tensi6n VOH - VIH se denomina margen de ruido del nivel alto,
ya que cualquier tensión de ruido menor de V OH - V IH será tolerada y no cambia-
rá el valor de salida de la puerta excitada. Con el mismo razonamiento, la dife-
rencia de tensi6n VIL - VOL se denomina margen de ruido del nivel bajo. En el
ejemplo de la 16gica transistor-transistor, V OH = 2.4, V IH = 2.0, VIL = 0.8 Y
VOL = 0.4, Y ambos márgenes de ruido, alto y bajo, son iguales a 0.4 V. En otras
palabras, cualquier ruido menor de 0.4 V no influirá en el funcionamiento de la
puerta. Tales márgenes de ruido, que no se dan en circuitos anal6gicos, hacen los
diseños digitales más fiables que los anal6gicos.

Rango de Rango de
tensión de tensión de
salida entrada

FIGURA 3.9 Márgenes de ruido alto y bajo.

3,10.3. Conectividad de salida


Como mencionamos en las subsecciones previas, cada puerta puede conectarse a
otras puertas. El número de puertas que cada puerta puede hacer funcionar, mien-
tras se le proporcionen niveles de tensi6n dentro del rango garantizado, se deno-
mina carga normalizada o conectividad de salida (Jan-out).
La conectividad de salida realmente depende de la cantidad de corriente eléc-
trica que una puerta pueda dar o recibir mientras esté excitando a otras puertas.
Como podemos ver a partir de la Figura 3.10, cuando la salida de la puerta es H,
la puerta se comporta como una fuente de corriente ya que la corriente IOH fluye
108 Principios de diseño digital

desde la puerta excitadora hacia el conjunto de puertas excitadas. La corriente IOH


es igual a la suma de todas las corrientes de entrada, denominada I¡H en la figura,
que fluye hacia las puertas conectadas. Por otra parte, cuando la salida de la puer-
ta es L, la puerta se comporta como un sumidero de corriente, ya que la corriente
I OL fluye desde las puertas excitadas hacia la puerta. La corriente I OL es de nuevo
igual a la suma de todas la corrientes de entrada I¡L que fluyen de todas las puer-
tas excitadas.
Como todas la puertas de una familia lógica se construyen de forma que cada
puerta requiera la misma IJH y la misma I¡L ' podemos calcular la conectividad de
salida de la siguiente forma:
Conectividad de salida = max (JOH/1JH' IOL/1¡J
Por ejemplo, la corriente de entrada y salida de esta familia lógica transistor-
tr~sistor es la siguiente:

A otras puertas A otras puertas


(a) Puerta como fuente de comente (b) Puerta como sumidero de comente

FIGURA 3.10 Flujo de corriente en un circuito 16gico tfpico.

Por tanto, la conectividad de salida es igual a max(400/40, 16/ 1.6) = 10. Esto
significa que cada puerta puede excitar a otras 10 puertas de la misma familia sin
salirse del rango de garantía de funcionamiento. En el caso en que estén conecta-
das más de 10 puertas a la salida de una sola puerta, los niveles de tensión de sali-
da se degradarán y la puerta irá más despacio.
Las familias lógicas modernas metal-óxido-semiconductor (MOS) tienen una
conectividad de salida de alrededor de 50, ya que cada puerta debe dar o recibir
corriente sólo durante la transición de H a L ó de L a H.
Álgebra booleana y diseño lógico 109

3.10.4. Disipación de potencia

Cada puerta está conectada a la fuente de alimentación Vcc y utiliza cierta canti-
dad de corriente durante su funcionamiento. Como cada puerta puede estar en
estado alto, en transición o en estado bajo, podemos distinguir tres corrientes dis-
tintas proporcionadas por la fuente de alimentación: I CCH' I cerY I cCL. En las anti-
guas familias lógicas como TIL, la transición de corriente 1CcT es despreciable en
comparación con ICCH e ICCL" Suponiendo que la puerta permanece un tiempo
aproximadamente igual en los estados alto y bajo, y no está apenas en el estado
de transición, y la corriente media es igual a (lCCH + I CCL)/2. Se puede calcular la
disipación de potencia media como el producto de la corriente media por la ten-
sión de la fuente de alimentación. En otras palabras,
P mema = Vcc X (lcc + 1ccJI2
La disipació[Link] potencia se mide en milivatios (mW) y para la familia lógi-
ca TIL este valor es aproximadamente de 10 mW.
En tecnologías modernas como la familia CMOS, las corrientes en estado
estacionario ICCH e I cCL son despreciables en comparación con l cer y la disipa-
ción de potencia media es
Pmedia = VCC X l cer
donde l cer incluye sólo la corriente media durante el periodo de transición. Como
la corriente es relativamente pequeña, la disipación de potencia típica de las puer-
tas CMOS es más pequeña. Obviamente, la disipación de potencia aum~nta con
la frecuencia de cambio de la salida.
La disipación de potencia es una medida importante por dos razones. Primero,
la cantidad de corriente y la potencia disponible en una fuente es casi constante.
Entonces, la disipación de potencia de un circuito o de un producto determina la
vida de la batería o pila.
Segundo, la disipación de potencia es proporcional al calor generado por el
microchip o dispositivo. Una disipación de calor excesiva puede incrementar la
temperatura de funcionamiento y causar que la circuitería del sistema se salga de
su rango normal de operación, lo que causaría que las puertas generen valores de
salida incorrectos. Por ambas razones, debemos mantener la disipación de poten-
cia lo más baja posible en cualquier implementación de una puerta.

3.10.5. Retardo de propagación


El retardo de propagación de cada puerta de las Tablas 3.12 a 3.14 se define como
el tiempo medio necesario para que el cambio de la entrada se propague a la sali-
da. Este retardo de propagación se mide usualmente en nanosegundos (ns) que es
igual a 10-9 segundos. Este retardo de propagación se puede obtener a partir de las
formas de onda de salida y entrada de la puerta, como se ilustra en la Figura 3.11.
A partir de la figura se puede observar lo siguiente:
110 Principios de diseño digital

1. Las señales de entrada, y consecuentemente las de salida, no conmutan


sus valores instantáneamente.
2. Los cambios de H a L y de L a H pueden retardarse en distintas cantida-
des de tiempo.
Como los valores de la señal no cambian instantáneamente, podemos definir el
tiempo de subida como el retardo de la señal para conmutar del 10% al 90% de su
valor nominal. De forma similar, podemos definir el tiempo de caída como el tiem-
po que tarda una señal en conmutar del 90% al 10% de su valor nominal. Como las
transiciones de H a L y de L a H no van retardadas de igual forma, podemos definir
el retardo de propagación de H a L, IpHL, Y el retardo de propagación de L a H, IpUf"
El IPHL es el tiempo necesario para que la señal de salida alcance el 50% de su valor
nominal en transición de H a L después de que la señal de entrada alcance el 50%
de su valor nominal. El I pLH se define de forma similar. El retardo de propagación,
I p ' se puede definir ,como el valor medio de I
PHL
y I pLH' Por tanto
Ip = (tPHL + I pLH)12

Tiempo Tiempo
de subida ,de baja~

~: :.....-.:

Salida
• - - - 50%

• • • 10%

: t

FIGURA 3. 11 Retardo de propagación.

Como ejemplo, la puerta NAND de 2 entradas típica de la familia ITL tiene


un I pHL = 7 ns y I pLH = 11 ns para un valor nominal Ip = (7 + 11)/2 = 9 ns. La fami-
lia lógica CMOS tiene un Ip = 1 ns. Como los fabricantes de rc no pueden garan-
tizar el mismo valor nominal en cada puerta que fabrican, también dan valores de
retardo máximos que !\arantizan que no serán superados por ninguna puerta.
Álgebra booleana y diseño lógico 111

Por ejemplo, los retardos de propagación máximos para las puertas NAND de
2 entradas en la familia TIL son tPHL = 22 ns y tpUl = 15 ns, con un retardo medio
lp = 18.5 ns. En el pasado, estos valores de retardo máximo se usaban en el dise-
ño, ya que las distintas puertas procedian de distintos fabricantes y no había
garantías de que todas las puertas lentas no aparecieran en el mismo camino crí-
tico de la entrada a la salida. Actualmente, todas las puertas se fabrican a la vez
en un microchip, así que las variaciones de fabricación se aplican por igual a todas
ellas. En este caso, cada retardo de entrada a salida cambia proporcionalmente y
todo el IC va más rápido o más lento dependiendo de las variaciones en la fabri-
cación. Los IC más lentos se venden a menor precio y los rápidos a mayor precio.
Por este motivo, los diseñadores de hoy día usan el retardo nominal en vez de los
retardos máximos.

3.10.6. Familias lógicas bipolares


En la Sección 3.9 hemos presentado distintos tipos de puertas que realizaban una
o más operaciones booleanas. Estas puertas se pueden construir usando dos tec-
nologías de transistor distintas: bipolar y metal-óxido-semiconductor.
Un transistor bipolar se puede modelar mediante un conmutador controlado
por tensión de tres terminales: emisor, colector y base. Como se muestra en la
Figura 3.12, el conmutador entre el emisor y el colector está abierto cuando la ten-
sión en su base es baja y está cerrado cuando la tensión es alta. En tecl\ología
bipolar cada puerta se construye con resistencias, diodos y transistores. Las resis-
tencias se fabrican como los transistores pero sin la base, y con los conmutadores
siempre cerrados, y los diodos se fabrican como transistores pero sin colector lo
que permite que la corriente vaya sólo en una dirección.
Todas la puertas de una familia lógica concreta se construyen de la misma
forma, mostrando ciertas características que los distinguen y que dan nombre a
todas las puertas de la familia. Una primera familia que se usaba en los años 60
era la lógica resistencia-transistor (RTL), en la que se utilizaba una resistencia
y un transistor en cada entrada de la puerta. Esta familia lógica surgió en una
época en la que la fabricación de transistores era cara y el objetivo de los diseña-
dores era minimizar el número de transistores que se usaban en el diseño. La lógi-
ca RTL se usaba antes de que se inventaran los circuitos integrados, y en esa
época las puertas lógicas se construían a partir de componentes discretos fabrica-
dos por separado. Después de la invención de los circuitos integrados, la fabrica-
ción de transistores se hizo menos cara, así que las resistencias de entrada de los
circuitos de puerta fueron sustituidas por diodos y se les puso de nombre lógica
transistor-diodo (DTL). Las puertas normalizadas de la familia DTL tenían tiem-
pos de subida y bajada menores, pero requerían más componentes.
Con la invención de los transistores multiemisor, los diodos de entrada se
sustituyeron por transistores multiemisor, dando lugar a la popular familia lógi-
ca transistor-transistor (TIL), que dominó los diseños digitales en los años 70
Y 80.
112 Principios de diseño digital

Colector Colector

L
Base ;:=::....;
B
H.....:

Emisor Emisor
(a) Tensión baja en la base (b) Tensión alta en la base

FIGURA 3.12 Modelo de transistor bipolar.

Como se muestra en la Figura 3.13, una puerta TIL típica consta de tres partes:
la lógica de puerta, un divisor de fase y una etapa de salida con una disposición
denominada totem-pole. La lógica de entrada realiza la función booleana que se
necesite, mientras que el divisor de fase proporciona dos señales de polaridad
opuesta para excitar los dos transistores de salida, que no están ni abiertos ni cerra-
dos a la vez, excepto durante las transiciones. Estos dos transistores, usualmente
denominados transistores de subida (pull-up) y de bajada (pull-down), alternan
sus estados cerrándose alternativamente. Cuando el transistor de subida está cerra-
do el de bajada está abierto, la salida de la puerta sube a H y la puerta cede la
corriente 1H" Por otra parte, cuando el transistor de subida está abierto y el de baja-
da está cerrado, la salida de puerta baja a L y la puerta capta la corriente 1L"

I Etapa
de
~ salida
- Ug;ca Divisor
~k
Entradas de la - de fase
Saüda
- ~
puerta
~

I 1
¡
GNO

FIGURA 3.13 Implementación de una puerta TIlo

Además de la salida totem-pole, la familia lógica TIL también dispone de


puertas con otros dos tipos de salida: salidas en colector abierto y tri-estado. El tipo
de salida en colector abierto (OC, Open Collector) se obtiene omitiendo el tran-
sistor de subida y su resistencia asociada. Este tipo se hizo para obtener funcion
más complejas, tales como un lNVERSOR-AND-OR, sin usar puertas AOL
Usando puertas OC, podemos unir sus salidas y conectarlas a una fuente de ali-
Álgebra booleana y diseño lógico 113

mentación a través de una resistencia de subida a parte, como se muestra en la


Figura 3.14(a). En este caso, la salida conectada es H sólo si cada puerta OC está
H , y L siempre que una de las salidas OC esté L. De esta forma se obtiene una fun-
ción ANO conectando salidas OC sin usar puertas adicionales. Como no se usa una
puerta física, esta función AND se denomina puerta AND cableada, y su símbo-
lo se muestra en la Figura 3.l4(b). Como puede verse a partir de la figura, la sali-
da de la función booleana obtenida de esta forma es igual a una puerta AO! ya que
F = (wx)'(yz)' = (wx + yz)'

w w
x x
F F = (wx+yz)'
y y
z
(a) Diseño del circuito (b) Símbolo gráfico

FIGURA 3.14 ADN cableada de dos puertas de colector abierto en la familia lógica TIL.

La salida tri-estado o 3-estados se usa para controlar buses. En este caso, el


divisor de fase de la Figura 3.13 se hace más complejo para proporcionar tres esta-
dos posibles en las salidas de los controladores: estado alto (H), bajo (L) , y de alta
impedancia (2).

TABLA 3.18 Características de una NAND de 2 entradas en distintas familias lógicas

RTL 3 2 0,4 5 20 25
DTL 4 3 2 1,0 8 12 30
TIL 4 1 5 0,4 10 10 9
Schottky TIL 5 2 7 0,4 10 19 3
ECL 8 2 6 0,15 25 25 2
CMOS 4 0,5 30-50 0,1-0,3 1

En los estados alto y bajo, la salida totem-pole actúa como antes, mientras
que en el estado de alta impedancia ambos transistores están abiertos y la salida
de la puerta se desconecta eléctricamente del bus. La salida tri-estado se necesi-
ta para controlar buses grandes con muchos controladores ya que las puertas
AND cableadas sólo se pueden usar con buses pequeños en los que pocas puer-
114 Principios de diseño digital

tas controlan el bus. La puerta AND cableada está limitada a buses pequeños
debido a la falta de corriente a través del transistor de bajada cuando está abier-
to. Si hay demasiadas puertas cableadas juntas, la suma de todas las pérdidas de
corriente puede ser suficientemente grande como para disminuir H en el bus
hasta un rango inaceptable.
Como la lógica TIL fue la familia lógica dominante en los 70 y 80, se comer-
cializaron muchas variaciones de la familia básica para aplicaciones de baja
potencia y alta velocidad. En las versiones de baja potencia, el consumo de poten-
cia se redujo a expensas de la velocidad, y en las variantes de altas prestaciones,
el retardo se redujo a base de incrementar la disipación de potencia. Una de las
versiones TIL fue la Schottky TIL, que usaba transistores especiales denomina-
dos como uno de los inventores del transistor (Schottky).
Para aplicaciones de velocidad realmente alta, tales como supercomputadores
y comunicaciones, los diseñadores usaban una familia bipolar denominada lógica
de emisor acoplado (ECL, emitter-coupled-logic). La familia ECL ofrecía la
mayor velocidad de todas las familias, reduciendo el tiempo de conmutación de
los transistores de H a L, y viceversa. En la Tabla 3.18 se comparan los principa-
les parámetros lógicos de las distintas familias lógicas.

3.10.7. Familias lógicas MOS


La segunda familia lógica, que surgió como competidora de la tecnología bipolar
en 1980, debido a su reducido consumo de potencia y que ha llegado a ser la tec-
nología dominante en el diseño de lC es la lógica metal·óxido-semiconductor
(MOS). Un transistor MOS se construye a partir de una capa de metal sobre una
capa de semiconductor con una capa de dióxido de silicio entre ellas que sirve
como aislante. Como se muestra en la Figura 3.15, un transistor MOS también se
puede modelar como un conmutador controlado por tensión con tres terminales:
fuente, puerta y drenador.
En tecnología MOS es posible fabricar dos transistores complementarios: UD
transistor P y un transistor N. Como se muestra en la Figura 3.15(a), el transistor P
está cerrado cuando la tensión de puerta es alta y está abierto cuando la tensión de
puerta es baja. Por otra parte, como muestra la Figura 3.l5(b), el transistor N
cerrado cuando la tensión de puerta es baja y está abierto cuando es alta. Esta naIU-
raleza complementaria de los transistores MOS se puede usar en el diseño de eta
de salida en circuitos de puerta usando el transistor N para subida y el transistor P
para bajada. Como estos dos transistores son complementarios, pueden ser contro-
lados por la misma señal sin requerir el divisor de fase que se necesita en la familia
lógica TIL. Además, como los transistores MOS no dan o reciben ninguna corfiat.
te de puerta excepto durante la transición, podemos combinar la lógica de puella
la etapa de salida y reducir el número de transistores. La familia lógica basada
estas ideas, que se conoce como lógica MOS complementaria (CMOS), se usa
los 90 exclusivamente para el diseño de le. Su popularidad se debe a su baja
pación de potencia, alta conectividad de salida y sencillez de fabricación.
Álgebra booleana y diseño lógico 115

Los esquemas de las puertas lógicas básicas de la familia CMOS se muestran


en la Figura 3.16. El circuito inversor mostrado en la Figura 3. 16(a) consta sólo
de dos transistores. Como se puede ver a partir de la tabla de verdad de la Figura
3.16(b), cuando la señal de entrada x es L, el transistor de subida TI está cerrado
y el transistor de bajada está abierto. Como el transistor subida está cerrado, la
salida F vale 5.0 V, que representa el nivel alto, H. Por otra parte, cuando x es H,
el transistor de subida TI está abierto, el de bajada T2 está cerrado, y la salida vale
O V (GND, tierra), que representa el nivel de tensión bajo, L.

Drenador Drenador

Puerta Puerta

Fuente Fuente

(a) Transistor P (b) Transistor N

FIGURA 3.15 Modelos de transistor MOS.

Las puertas más complejas funcionan de la misma forma, a pesar de que


sus transistores de subida y de bajada constan de más de un transistor. Como se
muestra en la Figura [Link](c), una puerta NAND tiene una sección de subida que
consta de dos transistores TI y T2 conectados en paralelo y una sección de bajada
que consta de dos transistores T3 y T4 conectados en serie. Como muestra la tabla
de verdad de la Figura 3.16(d), cuando al menos una de las señales de entrada x Ó
y es L, al menos uno de los transistores TI o T2 estará cerrado, uno de los transis-
tores T3 y T4 estará abierto y la salida F valdrá H. Por otra parte, cuando ambas
señales x e y sean H, los transistores TI y T2 estarán abiertos, T3 y T4 cerrados y
la salida F será L.
La puerta NOR se construye de forma simétrica y opuesta. Como puede verse
a partir de la Figura 3.16(e), la sección de subida consta de dos transistores TI y
T2 conectados en serie, mientras que la sección de bajada tiene dos transistores T3
y T4 conectados en paralelo. En este caso la puerta funciona como muestra la tabla
de verdad de la Figura 3.16(f). Cuando ambas entradas x e y son L, los transisto-
res de subida TI Ó T2 están cerrados, las transistores de bajada T3 y T4 están abier-
tos, y la salida F es H. Caso de que una de las señales x ó y sea H, al menos uno
de los transistores de subida estará abierto, uno de los transistores de bajada esta-
rá cerrado, y la salida F será L.
Como podemos ver a partir de la discusión anterior, la implementación de una
puerta CMOS es muy sencilla, lo que da a la lógica CMOS ventajas enormes sobre
la lógica bipolar. Como los CMOS requieren el menor número de transistores por
116 Principios de diseño digital

VDD =+5V

T,
x F
L 00 off H
T,
H off 00 L

o GND
(a) Inversor (b) Tabla de verdad del inversor

VDD =+5V

T,

T,

F ~ T4
x T, L L on on off off H
L H on off off on H
y T,
H L off on on off H
H H off off on on L

o GND
(e) Puerta NANO (d) Tabla de verdad de la puerta NANO

(. VDD =+5V

r-c:(~,) T ,

T,

L L 00 00 off off H
x-n:v L H 00 off off 00 L
y -L-t--{,n T, H L off 00 00 off L
H H off off 00 on L

T GND
(e) Puerta NOR ef) Tabla de verdad de la puerta NQR

FIGURA 3.16 Esquemas de puertas básicas en tecnología CMOS.

puerta, es la familia lógica con mayor densidad, que se mide en número de puer-
tas por área de silicio. Además, como el dióxido de silicio es muy buen aislante,
el terminal de puerta está muy bien aislado de la fuente y del drenador y por tanto
los transistores CMOS dan corriente sólo durante la transición de H a L y la reci-
Álgebra booleana y diseño lógico 117

ben durante la transición de L a H. Como no hay corriente en estado estacionario,


la lógica CMOS no tiene disipación de potencia estática, aunque tiene una peque-
ña disipación de potencia dinámica, que se mide en microvatios por megahercio
(]JWlMHz). Para una frecuencia de 100 MHz esta disipación de potencia dinámi-
ca se encuentra entre 0.1 y 0.3 Il W. Además, como sólo se necesita una pequeña
cantidad de corriente durante la transición, una puerta CMOS tiene un alto grado
de conectividad de salida, aproximadamente de 30 a 50. La única debilidad que
presentó la lógica CMOS a principios de los 80 fue un retardo de propagación
mayor que el retardo que mostraba la lógica bipolar. Sin embargo, con los avan-
ces en las técnicas de fabricación, hoy se pueden fabricar transistores CMOS de
aproximadamente 1 micra (micrómetro) de ancho, con retardos inferiores a 1 ns.
La lógica CMOS, con estos transistores pequeños, también sobrepasa a la lógica
bipolar en velocidad, como se puede ver en la Tabla 3.1 8. Por estos motivos, la
CMOS se ha convertido en la familia lógica dominante de los 90 y con las reduc-
ciones en los tarnaÍios del transistor en el rango de las submicras, es probable que
no tenga competidores en un futuro próximo.

3.11. TECNOLOGíA VLSI


En el nivel más básico, los diseños digitales se implementan con circuitos inte-
grados, o lC, que se hacen en cristales pequeños de silicio, o chips. La superficie
de cada chip contiene una serie de transistores que se producen en un pr~eso de
fabricación que altera la superficie del chip químicamente. Los transistores están
interconectados para formar varios tipos de puertas, y las puertas se pueden usar
para formar componentes mayores, tales como memorias y procesadores. Cada
chip de silicio se monta en un contenedor de cerámica o plástico como el que se
muestra en la Figura 3.17 y se conecta a los conectores de salida externos que
sobresalen del encapsulado, formándose así un circuito integrado. El número de
conectores de cada chip va desde 14 en los encapsulados lC más pequeños hasta
varios cientos en los encapsulados más grandes. Independientemente del número
de conectores, cada encapsulado lC es muy pequeño, tan pequeño que un micro-
procesador completo se podría incluir en un encapsulado IC de 40 conectores de
dimensiones 2.0xO.6xO.2 pulgadas. Cuando esto sucede, a cada lC se le asigna un
número que se rotula en su superficie con objeto de identificarlo. Además, los
vendedores de lC publican catálogos que contienen toda la información impor-
tante sobre las propiedades eléctricas y mecánicas de estos lC, incluyendo des-
cripciones funcionales, diagramas de flujo del funcionamiento y diagramas de
tiempo de las señales de entrada y salida.
Frecuentemente, los lC digitales se clasifican según el número de transistores
o puertas lógicas contenidas en un único encapsulado, y estas categorías se sue-
len denominar dispositivos a escala de integración pequeña, mediana, grande y
muy grande. Los dispositivos a escala de integración pequeña (SSI) contienen
hasta 10 puertas independientes en un solo encapsulado. Como las entradas y sali-
das de estas puertas están conectadas directamente a los conectores del encapsu-
118 Principios de diseño digital

lado, el número de puertas está limitado por el número de conectores dispolllllll.


en el le. En la Figura 3.18 mostramos seis dispositivos SSl típicos de la
7400 de la familia lógica TIL.

0,785

@@)@@@)®®

r1
~ ~
,020 -.11.- 0,070 Precintado
de cnstal

¡ ~
Planode
Asentamiento
-t~
t ~ 0,Q30

0,130 1-1-,
Espaciado enlre 0.100
conectores

FIGURA 3.17 Encapsulado de cerámica con 14 conjK:tores (todas las dimensiones lineales se
dan en pulgadas).

Los dispositivos a escala de integración mediana (MSl) tienen una comple-


jidad entre 10 y 100 puertas en un único encapsulado. Estos dispositivos contie-
nen usualmente varios trozos de módulos de memorias digitales normalizadas o
componentes aritméticos como registros, contadores, bancos de registro, sumado-
res, multiplexores, y generadores de paridad. La Figura 3.19 muestra, por ejem-
plo, un generador de paridad par/impar de 9 bits TIL en un encapsulado de 14
conectores. Introduciremos estos componentes en los Capítulos del 5 al 7.
Los dispositivos a escala de integración grande (LSI) contienen entre 100 y
varios miles de puertas en un solo encapsulado. Esta categoría de dispositivos
incluye componentes digitales como controladores, caminos de datos, chips de
memoria y componentes lógicos programables. Describiremos algunos de estos
componentes en los Capítulos 7 y 8.
Finalmente, los dispositivos a escala de integración muy grande (VLSI)
contienen cientos de miles de puertas en un solo encapsulado. Ejemplos de estos
dispositivos son memorias grandes y microprocesadores, chips microcomputado-
res, y subfunciones de sistemas, tales como controladores gráficos y aceleradores
en punto flotante. El pequeño tamaño y el bajo coste de los chips VLSI ha revo-
lucionado la tecnología de diseño, ya que proporciona a los diseñadores una opor-
tunidad sin precedentes de crear lC de uso específico (ASlC) a bajo coste y con
Álgebra booleana y diseño lógico 119

altas prestaciones que pueden realizar una sola tarea de forma muy eficiente y
adaptarla para ciertas aplicaciones. Actualmente, los componentes VLSI son los
únicos componentes en uso, ya que los componentes SSI, MSI y LSI que predo-
minaron en los- años 70 y 80, hoy en día sólo están disponibles para reemplazar
piezas de equipos antiguos.

~r;;4:F'=;-,oJ'"-a--"T:;;¡: v ee
14 Vcc

ffi--0
mJ
6
a612]
8
7"'--_ _ _
GND CiJL.: .!::ITJ==
(.)7400 (b)7404

GND~ ________ ~~
GND 12L_ _==:I.!J
(c)7420 (d)7430

GND~ ______ ~~~ 7"'--_ _ _--l.;:!.l


GND CiJL.:
(e) 7451 (1) 7454
FIGURA 3.18 Encapsulados TTL básicos de la serie 7400.

El advenimiento de la tecnología VLSI ha supuesto un importante cambio en


la forma de evaluar el coste. Por ejemplo, el coste de hardware de un producto dise-
ñado con componentes SSI, MSI o LSI suele medirse con el número total de IC de
una taJjeta de circuito impreso (PCB). Sin embargo, con la nueva tecnología el
coste de hardware de un chip VLSI se mide por su área de silicio. Como este área
es proporcional al número de transistores o puertas en un esquema lógico o al
120 Principios de diseño digital

número de bits de almacenamiento en un diseño de una memoria, hace que los


diseñadores intenten implementar estos diseños con el mínimo número de puertas
y con la memoria más pequeña posible, que les permita minimizar así el coste.

':ffi1~
: (1:)) Entrada
D ( 11) P"
Entrada
de datos

'~
F (13)
Entrada
impar

o]b
H (2)

Entrada (4)
impar
Entrada 3
p"

FIGURA 3.19 Encapsulado de cerámica con 14 conectores (todas las dimensiones lineales se
dan en pulgadas).

Los chips VLSI que se usan en la mayoría de los diseños son de tres tipos:
diseños a medida, casi a medida o programables. En la aproximación a medida
(custom approach), los chips VLSI, o algunas de sus partes se diseñan a mano, así
que cada transistor y cada cable se definen individualmente mediante un conjun-
to de polígonos que se usan para generar las máscaras fotográficas necesarias en
el proceso de fabricación. Como el diseño a mano es muy tedioso, se han desa-
rrollado metodologías de diseño de celdas para acortar el tiempo de diseño per-
mitiendo el uso de celdas estándar (standard cel/s) o componentes prediseñados,
como bloques de construcción, a partir de los que se pueden construir circuitos
muy grandes.
Como regla general, cada celda estándar contiene una única puerta de uno de
los tipos mostrados en las Tablas 3.14, 3.15 y 3.16. Todas estas celdas son de la
misma altura, pero de distinta anchura y tienen sus entradas y salidas en la parte
superior o inferior de la celda. Por tanto, las celdas estándar se pueden situar por
filas y conectarse con cables que se sitúan en los canales que hay entre las filas .
Las tiras borizontales y verticales generalmente se fabrican en dos capas diferen-
tes que se sitúan encima de las celdas estándar como se muestra en la Figura 3.20.
Las celdas estándar se pueden reunir en bibliotecas de celdas estándar que
usan los diseñadores a lo largo del proceso de diseño. El proceso de diseño de cel-
das estándar consta de varias tareas: identificación, capturación, simulación, ubi-
cación, e interconexión. En la primera tarea debe capturarse el diseño con edito-
res de esquemas, que permiten a los diseñadores trabajar en la pantalla de un com-
putador ubicando y conectando los símbolos gráficos de las puertas que se van a
usar. Luego, para verificar las funciones lógicas que se han capturado y el retardo
Álgebra booleana y diseño lógico 121

entre la entrada y la salida, el diseñador simula el esquema capturado con un


simulador lógico, que genera los valores lógicos y su evolución en el tiempo para
cada señal o cada conexión. Después de que la simulación haya confirmado la
validez del esquema, se ubican las celdas estándar en una superficie de silicio.
Para este fm, el diseñador usa herramientas estándar CAD de ubicación (place-
ment tools), que defmen la ftla adecuada de cada celda y su posición dentro de
ella. El objetivo de la ubicación es minimizar el área de ocupación total de las cel-
das usando un número mínimo de pistas en cada canal. Finalmente, después de
terminar la ubicación, el diseñador usa una herramienta de interconexión (routing
tool) para conectar todas las celdas. El objetivo de la interconexión es conectar
todas las redes con líneas metálicas de longitud mínima .

......-- Celdas estándar

+--- Canal de
interconexionado

FIGURA 3.20 Aproximación de una celda estándar.

En la Figura 3.21 , mostramos la implementación de las funciones de suma y


acarreo de un sumador completo con celdas estándar. Obsérvese que la ubicación
de las celdas en la figura requiere cuatro pistas horizontales para interconectar el
canal superior, y cinco pistas para el canal inferior.
En contraste con la aproximación a medida, en la aproximación casi a medi-
da (semicustom approach) de un diseño lógico se emplea un lC que está parcial-
mente prefabricado y que se conoce como array de puertas (gate array) ya que
incorpora un gran número de puertas idénticas que se !lncuentran en una matriz
bidimensional regular. En la tecnología de hoy, el número de puertas de un chip
dado se encuentra entre lOO.O<X> y 1.0<X>.0<X>. Estas puertas suelen ser de tipo
NAND o NOR de 3 ó 4 entradas. Como todas estas puertas están prefabricadas,
hay que añadir las interconexiones. Más aún, como la fabricación de estas interco-
nexiones requiere.sólo deposición de metal, el costo de fabricación de los arrays de
puertas es sustancialmente menor que la aproximación a medida. Por otra parte, la
122 Principios de diseño digital

densidad del array de puertas es mucho menor que la de los chips a medida, ya que
un array de puertas del mismo tamaño que un chip a medida contiene entre la cuar-
ta y la décima parte del número de puertas que el correspondiente chip a medida.

FIGURA 3.21 Implementación de un sumador completo con celdas estándar.

El proceso de diseño de un array de puertas es similar a! que se usa en el dise-


ño a medida, excepto que necesita realizar un paso adiciona! de optimización,
denominado mapeado a la tecnología, después de la captura y simulacion del
esquema. La finalidad del mapeado a la tecnología es convertir todos los compo-
nentes del esquema capturado en un único tipo de puerta que esté disponible en el
array de puertas seleccionado. Por ejemplo, si un array de puertas contiene puer-
tas NAND de 3 entradas, todas las funciones booleanas del esquema se imple-
mentan con puertas NAND de 3 entradas. Cuando esta traslación o mapeado a la
tecnología se ha terminado, se realizan la ubicación e interconexionado con las
mismas herrlllnientas CAD que usamos en el diseño de celdas estándar.
Como ejemplo de este tipo de diseño casi a medida, consideremos la imple-
mentación de las funciones suma y acarreo de un sumador completo con un array
de puertas de puertas NAND de 3 entradas. Primero, hay que convertir las expre-
siones de suma y acarreo en implementaciones con puertas N AND de 3 entradas
usando los teoremas de De Morgan:
Ci+ l = .xy + yc¡ + XCj
= «X¡Y,)'(y,c,)'(x,c,)'Y
y
Álgebra booleana y diseño lógico 123

D
- !!l!i.C;J'
p. ¡- 1- l:?) r-
'-"'
n
r;-
11 ---
!-

~- ' r ~,'" ~c.


11
jLJ J ~
ej ••
..........

y,

r~"·) .
iD 1",;)
1-
~ !-
e,

p~C. J 1
Ü =ft-> fU r"I--I

FIGURA 3.22 Implementación del sumador completo con tecnología de array de puertas.

En la Figura 3.22 puede verse la implementación de un sumador completo que


usa un array de puertas NAND. Obsérvese que el acarreo se ha implementado con
4 puertas, que es el número mínimo de puertas requeridas por esta función. Por
otra parte, la función de suma necesita 7 puertas, ya que la NAND de 4 entradas
requiere 3 puertas cuando se implementa con puertas NAND de 3 entradas.
La tercera aproximación para diseñar, conocida como aproximación progra-
mable in situ (field programmable approach), permite un compromiso entre coste
y tiempo para conseguir pequeñas densidades de puertas en dispositivos programa-
bles in situ, que son arrays de componentes lógicos cuya conectividad se establece
simplemente cargando los datos de configuración adecuados en una memoria inter"
na del dispositivo. Como estos dispositivos programables in situ se pueden repro-
gramar cualquier número de veces, son adecuados para usarlos en diseños nuevos
en los que las especificaciones de diseño evolucionan, o en aquellos diseños en los
que el hardware debe ser a medida de los usuarios. Además, los dispositivos pro-
gramables in situ son ideales para hacer prototipos y también ofrecen una solución
con coste adecuado para producciones de pequeño volumen. Desgraciadamente, la
densidad y velocidad de estos dispositivos tiende a ser menor que las de los dispo-
sitivos disponibles en las aproximaciones a medida o casi a medida.
Como se muestra en la Figura 3.23(a), una array de puertas programable in
situ (FPGA, Field-Programmable Gate Array) contiene una matriz de bloques
lógicos programables (pLB, Programmable Logic BlocJes) rodeada de intercone-
xiones programables y varios bloques de E/S situados en el perímetro del chip,
que se usan para controlar otros componentes situados fuera del chip. Cada PLB
124 Principios de diseño digital

consta de dos bloques lógicos de cuatro variables y dos elementos de memoria de


un bit, como se indica en la Figura 3.23(b). Obsérvese que cada bloque lógico se
puede programar para implementar cualquier función booleana de cuatro varia-
bles, y el valor funcional que genera puede pasar inmediatamente a otro PLB, o
alternativamente, puede almacenarse para su uso posterior en un elemento de
memoria de un bit.

(a) Estructura del array

1,
1,
--
-- to~
booIeaoa
-
deUDbiI

1,
1,
...
variables
Memoria
h, deDDbit

-ro~
h, l'uaci6o>
booleana
lo, de_
-~ variables

(b) Bloque lógicos programables {e} Pumo de interconexión

FIGURA 3.23 Array de puertas programable in situ (FPGA).

En una FPGA, las interconexiones programables contienen un conj unto de


líneas metálicas horizontales y verticales que pueden interconectarse a través de
una matriz de conmutación (SM, Switching Matrix) . En cada SM n x n, habrá
m ~ n x n puntos de interconexión que se pueden usar para conectar las líneas
Álgebra booleana y diseño lógico 125

horizontales con las verticales de distintas formas. Como se muestra en la Figura


3.23(c), cada puerto de interconexión contiene seis conmutadores, que se pueden
programar para que están abiertos o cerrados. Dependiendo de qué conmutadores
estén cerrados, podremos seleccionar una de las 64 conexiones diferentes entre las
líneas superior, inferior, de la izquierda o de la derecha. Los puntos de intercone-
xión se usan también para conectar un PLB a las líneas horizontales y verticales
como se muestra en la Figura 3.23(a).

81 81 g) 84 G GQ •
Sin usar 8,

I
X O O O O
X O O I O G
8,
X O I O O e¡. J
X O I I I
8, XI O O O
XI O I I
8, X I I O I
x, XI I I I
J,

h, h, h, h3 h4 H
e, - O O O
O O I
X
X
O
I
h, HQ
O I O X I

Sin usar
h,

h,
O I I
I O O
I O I
X
X
X
O
I
O
I H

I I X O
I I I º X I

FIGURA 3.24 Implementación del sumador completo con un PLB.

Como se ve en la Figura 3.24, la [Link]ía FPGA permite implementar


el sumador completo con un PLB , en el que las funciones de suma y acarreo
se implementan cada una con ún bloque lógico. Obsérvese que como la suma
y el acarreo son funciones de tres variables, no se usa una entrada de cada
bloque.

3.12. RESUMEN DEL CAPíTULO


Empezamos este capítulo con una definición axiomática del álgebra booleana,
que es la base formal del diseño lógico. También hemos presentado los principa-
les teoremas del álgebra booleana, ya que estos teoremas son imprescindibles para
la manipulación correcta de expresiones booleanas.
Además, hemos introducido el concepto de funciones booleanas y hemos
mostrado como definirlas en términos de tablas de verdad y cómo obtener las
126 Principios de diseño digital

expresiones booleanas correspondientes. Como hemos indicado, estas expre-


siones booleanas se pueden dar de tres maneras, usando las formas canónica,
normalizada o no normalizada. Aunque la forma canónica tiene la ventaja de
ser única, no usa necesariamente el mínimo número de operadores en una fun-
ción booleana dada. En comparación con esta forma canónica, la forma nor-
malizada tiende a usar menos operadores, y la forma no normalizada preten-
de utilizar el menor número de las tres. Cualquiera de las dos formas puede
obtenerse a partir de la forma canónica con manipulación algebraica. Sin
embargo, es importante recordar que las formas normalizada y no normaliza-
da no son únicas, lo que quiere decir que para cada función booleana puede
haber varias expresiones normalizadas o no normalizadas distintas. Una de las
principales tareas de diseño es encontrar la expresión, entre las posibles for-
mas no normalizadas, que tenga el menor número de operadores. En este capí-
tulo hemos trabajado con varios ejemplos que ilustran cómo esta expresión se
puede encontrar mánipulándola algebraicamente, pero no hemos presentado
ninguna técnica sistemática que pueda garantizar la minimización o casi mini-
mización.
También hemos introducido las puertas lógicas más sencillas que se usan
para implementar operadores booleanos, así como puertas más complejas que
pueden implementar varios operadores booleanos a la vez. Estas puertas senci-
llas y complejas constituyen las bibliotecas lógicas normalizadas usadas por los
diseñadores en diseñ'o lógico. Hemos introducido también la tecnología VLSI y
varias formas de fabricar microchips usando tecnologías a medida, casi a medi-
da, y programable. Como cabe esperar, cada tecnología, para implementar fun-
ciones booleanas, usa su propia biblioteca y requiere sus propias técnicas de opti-
mización.
En resumen, podemos decir que el principal problema del diseño lógico es
lograr encontrar la implementación de una función booleana que mejor satisfa-
ga los requisitos de coste y retardo, que normalmente se manifiesta con altas
prestaciones (retardo mínimo) y coste mínimo. En el Capítulo 4, discutiremos
algunas de las técnicas sistemáticas para resolver este problema. Como estas
técnicas difieren según la tecnología y la biblioteca dadas, también centraremos
nuestra atención en los compromisos de diseño y en la exploración del diseño
lógico.

3.13. LECTURAS ADICIONALES


Boole, G. An Investigation ofthe Laws ofThought. New York: Dover, 1954.
Presenta el trabajo original sobre álgebra booleana.
Friedman, A. D. and P. R. Menon. Theory ami Design of Switching Circuits. Rockville,
MD: Computer Science Press, 1975.
Uno de los primeros libros de texto sobre diseño lógico y circuitos de conmutación.
Proporciona un tratamiento minucioso de la materia y de los resultados de investiga-
ción de los 60 y principios de los 70.
Álgebra booleana y diseño lógico 127

Hayes, J. P. Introduction lo Digilal Logic Design. Reading, MA: Addison-Wesley, 1993.


Un texto comprensible sobre diseño lógico introductorio que relata bien la tecnología
VLSI sin requerir conocimientos previos ni de diseño ni de teoría de circuitos.
Huntington, E. V. "Sets of independent postulates for!he algebra of logic". Transactions of
the American Mathematical Society, Vol. 5 (1904), pp. 288-209.
El artículo que introdujo la formulación axiomática del álgebra booleana presentada en
este libro.
Shannon, C. E. "A symbolic analysis of relay and switching circuits." Transactions of the
AlEE, Vol. 57 (1938), pp. 713-723.
El primer artículo mostrando cómo se puede aplicar el álgebra booleana al diseño de
circuitos lógicos que se implementan con relés electromecánicos.
Weste, N., and K. Eshragian. PrincipIes of CMOS VLSI Design, 2nd ed. Reading, MA:
Addison-Wesley, 1993.
Combina la tecn'llogía VLSI y el diseño lógico, haciendo énfasis en la metodología de
diseño a medida. Recomendado a estudiantes de ingeniería con algunos conocimientos
sobre teona y práctica de circuitos.

3.14. PROBLEMAS
3.1. (Teoremas del álgebra booleana) (e) F(x, y, z) = (x + z)'
Pruebe los siguientes teoremas. (d) F(x, y, z) = (x + z)'(x + y')
(a) Teorema 2(a) y (b) .
(h) Teorema 3(a) y (b) 3.5. (Funciones booleanas) Obtenga los
(e) Teorema 4(a) y (b) complementos de las funciones del
(d) Teorema 5(a) y (b) Problema 3.3, usando la ley de De
(e) Teorema 6(a) y (b) Morgan.

3.2. (Teoremas y demostraciones) Usando 3.6. (Funciones booleanas) Pruebe me-


tablas de verdad, probar la validez de diante manipulación algebraica que
las siguientes identidades. las siguientes expresiones son equi-
(a) (xyz)' = x' + y' + z' valentes.
(h) xy' + x'y = (xy + x'y')' (a) x'y' + xy = (xy' + x'y)'
=
(e) xy + x'z + yz xy + x'z (h) x'z + xy = xy'z + yz + xy
(d) (x + y + z)' = x'y'i (e) xy'z' + ::1 + xyZ" = X + z'
(d) x + xy + y = x + y
3.3. (Teoremas y demostraciones) Pruebe
algebraicamente estas ampliaciones 3.7. (Formas canónicas) Obtenga las for-
del teorema de De Morgan. mas canónicas de la suma de ntin-
(a) (xyz)' = x' + y' + z' terms y del producto de maxterms de
(b) (x + y + z)' = x'y'z' las siguientes funciones booleanas.
(a) F = x (J) y (J) z
3.4 . . (Funciones boolenanas). Obtener las (b) F;; zW' + xiw' + xy'z
tablas de verdad de las siguientes fun-
ciones booleanas: 3.8. (Formas canónicas) Obtenga los
(a) F(x, y, z, w) =xz + yw + xi complementos de las funciones boo-
(h) F(x, y, z, w) = x'y'z' + x'iw' + leanas presentadas en el Problema
xzw' + xy'w 3.6.
128 Principios de diseño digital

3.9. (Formas normalizadas) Obtenga para completo que se especifica en la


las funciones booleanas especificadas siguiente tabla:
en el Problema 3.6 las formas norma-
lizadas de suma de productos y pro-
ducto de sumas, usando el mínimo
número de operadores. o O O O O
O O I 1 I
3.10. (Manipulación algebraica) Minimice O I O 1 1
el número de operadores de las O I I 1 O
siguientes expresiones booleanas. 1 O O O I
(a) xy' + xy + xy' 1 O 1 O O
I 1 O O O
(b) (x + y)(x + y')
I I 1 1 I
(e) xy' + xy + xz
(d) y'z' + xy' + xz + yz'
Encontrar la implementación que
3.11. (Manipulación algebraica) Explique tenga:
la diferencia entre reducir el número (a) El menor coste
de operadores y reducir el número de (b) El menor retardo
literales.
3.17. (Bibliotecas lógicas) Rehaga el
3.12. (Funciones booleanas) Pruebe si se Problema 3.15 usando sólo las puertas
verifica o no la conmutatividad de las que se dan en las Tablas 3.14 y 3.15.
siguientes operaciones.
3.18. (Bibliotecas lógicas) Rehaga el
(a) Inhibición
Problema 3.15 usando sólo las puer-
(b) Equivalencia
tas lógicas normalizadas que se dan
(e) Implicación
en las Tablas 3.14, 3.15 Y 3.16.
(d) Exclusive-or
3.19. (Arrays de puertas) Sin usar nada
3.13. (Funciones booleanas) Pruebe si se
salvo puertas NAND de tres entradas,
verifica o no la asociatividad de los
obtener el esquema lógico de un:
operadores dados en el Problema
(a) Sumador completo
3.12.
(b) Restador completo
3.14. (Implementaciones booleanas) Im-
3.20. (Arrays de puertas) Usando una
plemente la función XOR en térmi-
impl~mentación con NAND de 3
nos de:
entradas del (a) sumador completo, y
(a) Sólo puertas NAND
(b) restador completo, determine la
(b) Sólo puertas NOR
posición de cada puerta en un array
(e) Puertas AND, OR Y NOT
de puertas 4 x 4 de forma que ningún
3.15. (Implementaciones booleanas) Imple- canal de interconexión horizontal O
mente x Ell y Ell z usando los compo- vertical tenga más de cuatro pistas.
nentes de la biblioteca lógica básica
3.21. (Arrays de puertas programables in
presentada en la Tabla 3.12. Encontrar
situ) Programe una celda PLB para
la implementación que tenga:
que siempre que la entrada de control
(a) El menor coste
valga 1, actúe como un sumador
(b) El menor retardo
completo. mientras que si la entrada
(e) El menor producto coste-retardo
vale O se convierta en un restador
3.16. (Bibliotecas lógicas) Usando la bi- completo. Suponer que las señales de
blioteca lógica básica presentada en acarreo y adeudo comparten la
la Tabla 3.12. implementar el restador misma entrada.
Simplificación
de funciones
booleanas
3
Álgebra booleana

binario
y representación
de datos
132 Principios de diseño digital

En el Capítulo 3 se mostró con varios ejemplos cómo implementar funciones boo-


leanas con puertas lógicas. También se indicó que el coste y retardo de una imple-
mentación dada depende de la forma de la expresión booleana y de la biblioteca
lógica utilizada en su realización. Por ejemplo, se mostró que una función boole-
ana puede especificarse en la forma de una tabla de verdad, sobre la

o
0----0

(a) n =1

00 01
o o

o o
10 11

(b) n" 2

(e) n :z 3

00 1~.:.
0_ _-"

1000 100 1

(d) n:: 4

FIGURA 4. 1 Cubos booleanos para n = 1, 2, 3 Y 4.


Simplificación de funciones booleanas 133

base de que así se pueden definir las formas canónica, estándar y no estándar de
una expresión booleana para esa función. Como se indicó en el Capítulo 3, estos
tres tipos de formas tienen diferentes propiedades. Aunque la forma canónica es
única, generalmente contiene demasiados operadores como para servir de base a
una implementación eficiente. Por otra parte, una forma estándar, que general-
mente contiene pocos operadores, no es única. De igual manera, una forma no
estándar, que tiene a su vez menos operadores que una forma estándar, no es tam-
poco única. Ya que estas formas no son únicas, es necesario un procedimiento que
permita obtener una forma no estándar que tenga el mínimo número de operado-
res, ya que las expresiones booleanas con menos operadores requerirán menos
puertas y menos entradas por puerta, facilitándonos así la realización de imple-
mentaciones menos costosas.
Al mismo tiempo, sin embargo, mientras que la minimización del número de
operadores permite realizar implementaciones menos costosas, tales implementa-
ciones presentan á menudo retardos mayores, ya que la señal de entrada ha de pro-
pagarse a través de más puertas como consecuencia de expresiones muy factoriza-
das. Así pues, para minimizar este retardo es necesario concentrarse en la reduc-
ción del número de operadores en cada camino .crítico desde la entrada a la salida.
Además, debe asegurarse que los tipos de operadores en esos carninas críticos pue-
dan ser implementados con las puertas más rápidas de la biblioteca de puertas.
En el Capítulo 3 se mostró cómo se podía minimizar el número de operadores
en una expresión por medio de ciertos tipos de manipulaciones algebráicas. En
este capítulo se describen técnicas sistemáticas que permiten, primero, minimizar
el número de operadores en formas estándar y no estándar, y después implemen-
tar estos operadores con puertas de una biblioteca dada.

4.1. REPRESENTACiÓN CON MAPAS


El método del mapa es un procedimiento sencillo y directo para minimizar el
número de operadores en expresiones en forma estándar. Para generar una forma
estándar comenzamos con una representación cómoda de tabla de verdad llama-
da mapa, que fue propuesta por Veitch y después modificada por Karnaugh. El
mapa está diseñado para ayudarnos a identificar el número más pequeño posible
de subcubos que define una función booleana dada. Cada subcubo representa un
producto en una forma estándar de suma de productos.
En el Capítulo 2 se presentaron los n-cubos booleanos, que proporcionan la
base para estos mapas. La Figura 4.1, por ejemplo, muestra los cubos booleanos
para n= 1,2,3 Y4. Como se ha mencionado anteriormente, cada vértice en un,..
cubo representa un minterm de una función booleana de n variables. Así cada fun-
ción booleana podrá ser representada visualmente en la forma de un n-cubo mar-
cando aquellos vértices en los que el valor de esa función es 1, y dejando sin mar-
car los vértices para los que el valor de la función es O. Cada representación en el
cubo es equivalente a la representación en la tabla de verdad de esa misma fun-
ción, dado que hay una correspondencia exacta entre cada fila de la tabla de ver-
134 Principios de diseño digital

dad y cada vértice del n-cubo booleano. En la Figura 4.2, por ejemplo, se muestra
la tabla de verdad y las correspondientes representaciones con cubos de las cono-
cidas funciones de acarreo y suma, utilizadas ampliamente como ejemplos en el
Capítulo 3.
Para obtener la forma estándar de una función que contenga el número míni-
mo de operadores, utilizamos el concepto de subcubo booleano. En general, un m-
subcubo de un n-cubo puede defInirse como el conjunto de 2m vértices en los que
n-m variables tendrán el mismo valor en cada vértice, mientras que las m varia-
bles restantes tomarán las 2m posibles combinaciones de valores O y l. Así cada
subcubo puede caracterizarse por los valores de las n-m variables que son los
mismos para cada vértice del subcubo. Por ejemplo, si una función booleana toma
valor I en cada vértice del m-subcubo, los 2m minterms que hacen I a la función
en ese subcubo podrían expresarse con un único término de n-m literales, que
representa los valores de las variables que son iguales para cada vértice del sub-
cubo. Para demostrar este hecho, sean XI' x2' ... , xn_ m las variables cuyos valores
son iguales en cada vértice del n-cubo, y sean 11, Ir.,ln-m los literales tales que
li = Xi siempre que Xi = 1, Y li = Xi siempre que Xi = O. Entonces el valor de la fun-
ción del m-subcubo es igual a

ll2 ... ln-m~'n-m+lx'n-m+2 o •• xn +x'n-m+lx'n-m+2 o •• xn


+ ... + x n_m+1x n-m+2 0'- x) = 1}12 o" ln-m
Obsérvese que la expresión entre paréntesis representa la suma de todos los
posibles minterms de m variables, que será siempre equivalente a 1.
Sobre la base de esta demostración, sabemos que cualquier función booleana
puede ser descrita en una forma de suma de productos estándar, en la que cada tér-
mino será un subcubo de minterms que hacen I a la función y cada uno de éstos
estará en, al menos, un subcubo. Para minimizar el número de operadores OR de
esta manera, hay que elegir el menor número posible de subcubos que cubran los
minterms que hacen I a la función, y para minimizar el número de operadores
AND hay que elegir los mayores subcubos posibles, que son denominados impli-
cantes primos.
En general, un implicante primo (PI, Prime Implicant) se defme como un
subcubo que no está contenido en ningún otro subcubo, y un implicante primo
esencial (EPI, Esential Prime Implicant) es el subcubo que incluye un minterm
que hace I a la función y que no está incluido en ningún otro subcubo. Estos
implicantes primos pueden ser determinados y seleccionados visualmente en una
representación en cubo, o podemos obtenerlos a partir de una representación bidi-
mensional de este cubo, llamada mapa de Karnaugh o, abreviadamente, mapa.
El mapa es una matriz de celdas organizada en mas y columnas. Las variables
están divididas en variables de ma y de columna, representando cada fIla una
asignación particular de ceros (O) y unos (1 ) para las variables de ma y represen-
tando cada columna una asignación similar para las variables de columna.
En otras palabras, cada celda corresponde a un vértice del cubo, es decir, a un
minterm de la función booleana. Si el minterm hace I a la función se colocará un
Simplificación de funciones booleanas 135

1 en la celda, mientras que si la celda está vacía indicará un mintenn de valor O


(O-mintenn).
En la Figura 4.3 se observa que hay una correspondencia directa entre cubos
booleanos y mapas de Karnaugh. En otras palabras, estos mapas son simplemen-
te representaciones bidimensionales de cubos booleanos. Son más utilizados que
las tablas de verdad simplemente porque pueden identificarse las adyacencias y
pueden, por consiguiente, ayudar a la determinación de los subcubos.

"'r.... 1" ••, . " ' j .


!,t", [l' " ..,' ';
~ ''"'-': "". ! __r: ~

o O O O O 100 101
O O 1 O 1 (b) FunCión de acarreo e¡.1
O 1 O O 1
O 1 1 1 O
1 O O O 1
1 O 1 1 O
1 1 O 1 O
1 1 1 1 1

(a) Tabla de verdad

100 101

(e) Función de suma Si

FIGURA 4.2 Representación de las funciones de suma y acarreo con cubos booleanos.

La Figura 4.3(a), por ejemplo, es un mapa de una sola variable compuesto por
dos celdas que indican x = O Y x = 1. Este mapa podría ser utilizado para repre-
sentar las cuatro funciones de una sola variable: O, x, x' Y 1. Sin embargo, como
las expresiones para estas funciones son fáciles de recordar, este mapa se usa rara-
mente. Un mapa más utilizado es el de la versión con dos variables mostrado en
la Figura 4.4(a) . Este mapa contiene cuatro celdas, que representan los cuatro
mintenns de una función booleana de dos variables, a saber, x'y', x'y, xy', xy. El
subcubo más grande en un mapa de dos variables es un l-cubo, que representa una
variable o su complemento. Por ejemplo, la Figura 4.4(b) muestra tres de estos
subcubos de tamaño 1. Un mapa de dos variables podría utilizarse para represen-
tar cada una de las funciones de dos variables. Como ejemplo, las funciones boo-
leanas AND, OR Y XOR se muestran en la tabla de verdad de la Figura 4.5(a) y,
también, en los mapas de la Figura 4.5(b), (c) y (d).
En la Figura 4.6(a) se presenta un mapa de tres variables que contiene ocho
celdas, correspondientes a los ocho mintenns de una función booleana de tres
136 Principios de diseño digital

variables. A partir del mapa puede verse que los subcubos mayores tienen tama-
ño 2 y que estos subcubos pueden expresarse con un solo literal. En la Figura
4.6(b) se muestran tres de los seis posibles subcubos de tamaño 2, y en la Figura
4.6(c) se indican varios subcubos de tamaño 1.

(a) n = I
y
x o I
mo mi
O

I
m, mJ

(b) ti =2

yz
x 00 01 II 10
mo mi ni m,
O
lo. .J

I
lo. .J
m m m m,
(e) ti =3

xy
zw 00
n
01
, , 11 10
n
00
1.. m mi m m, f-'

O1 1..
m m, ni m, f-'

I
1.. ni: ni mi m J4 ~

O
lo. ni, ni, mil m IO f-'
U ...J U ...J
(d) ti =4

FIGURA 4.3 Cubos booleanos y mapas de Karnaugh correspondientes, para n = 1, 2, 3 Y 4.

Como ejemplo de representación de mapa, en la Figura 4.7 se han presentado


la tabla de verdad y los mapas de las funciones de acarreo y suma definidas en el
Simplificación de funciones booleanas 137

Capítulo 2 Y utilizadas como ejemplos en el Capítulo 3. Téngase en cuenta que la


función de acarreo podría expresarse como la suma de tres subcubos de tamaño 1:
xiY¡, c¡X¡ y ciYr' Como puede observarse en el mapa, los tres subcubos son impli-
cantes primos esenciales, ya que cada subcubo contiene un minterm que no está
incluido en ninguno de los demás subcubos. Por otra parte, la función suma no
puede simplificarse ya que no tiene subcubos con dos o más minterms en su repre-
sentación de mapa. En otras palabras, la funci ón suma no presenta una forma
estándar que difiera de su forma canónica.

y y
o 1 o •
x
, x
" .- - -"
o xy ' xy
o !Subcubo x

!Subcubo y
l' xy xy $ubcubo x

(a) Organización con mapa (b) Ejemplo de subcubos de tamaño 1

FIGURA 4.4 Mapa de dos variables.

y
x o 1
,
o
,
1 1

(b) ANO, xy

y
x o 1

o 1

,
o O O O O
1 1
O 1 O 1 1 1 '1
1 O O 1 1
1 1 1 1 O (e) OR: x + y

(a) Tabla de verdad y


x o 1
, ,
O 1

1 1

(d) XOR x'y + xi

FIGURA 4.5 Representación con mapas de tres funciones booleanas de dos variables.
138 Principios de diseño digital

y,
x 00 01 11 10
l'
, , ,
o x'y' :.: · x 'y ' :.: x'>" x 'y:.::'
, , ; o

1
xy ' z' xy' , X)'Z xy,'

(a) Organización del mapa


y,
x 00 01 11 lO
, , ,
-- - .. .- - - I
,
'O
:-:z:.... l '
x

(b) Ejemplo de subcubos de tamaño 2

y,

-,
- - y,
-
,[
- - 1 f-
,y
, ,- --' '- -- '--t- xt
I I I I ~
I _ ~_-_-_-_-_-_- _-_-_-_-_-_- _-_-_-_- _ .J

(e) Ejemplo de subcubos de tamaño 1

FIGURA 4.6 Mapa de tres variables.

En la Figura 4.8(a) se muestra un mapa de cuatro variables, que contiene 16


celdas, correspondientes a los 16 minterrns de una función de cuatro variables.
Cada celda del mapa es adyacente a otras cuatro celdas que difieren en el valor de
una variable, incluyendo las celdas de los extremos del mapa. En el caso de las
celdas de los extremos, recordamos que el mapa representa un 4-cubo y que una
celda en la fila superior y la celda en la fila inferior de la misma columna son
adyacentes entre sí, como lo son una celda en la columna de la izquierda y la celda
en la columna de la derecha de la misma fila . Teniendo 1:sto en cuenta, en la
Figura 4.8(b) y (e) se muestran algunos ejemplos de 2-subcubos y de 3-subcubos
en un mapa de cuatro variables.
Como ejemplo de función de cuatro variables, considérese un comparador de
dos bits que compara los números binarios de dos bits x= xlxO' Y= YIYO' cuyos
valores pueden ser 0, 1, 2 ó 3. En este comparador la función mayor que, G, es
igual a 1 siempre que x> y, mientras que la función menor que, 1. es igual a l
siempre que x < y. La función de igualdad, E, que indica x = y, puede obtenerse a
Simplificación de funciones booleanas 139

partir de Gy L , ya que E= (G+ L)'. En la Figura 4.9(a) se presenta la tabla de ver-


dad de G, Ey L, mientras que en las Figuras 4.9(b) y (c) pueden verse las repre-
sentaciones de mapa de las funciones G y L. Obsérvese que las funciones G y L
son simétricas con respecto a la diagonal principal, y que cada una puede descri-
birse como la suma de un 2-subcubo y dos l-subcubos. Téngase en cuenta tam-
bién que cada uno de estos subcubos es un implicante primo esencial.

,
ei ()() 01 11 10
., , ,
- -,
O ,' 1 ,
, ,_ L -
,
r- -, ij 1I - -,
1 , 1 I-_~ - ~I
--
o O O O O (b) FunciÓn acarreo: ci+,=xiY¡+ c¡X¡+ ciY¡
O O I O I
O I O O I
O I I I O XiY¡
()() 01 11 10
I O O O I ei , , ,
I O I I O
O 1 1
1 1 O 1 O
1 1 1 1 1 , .< ..
1
"
1 1
(a) Tabla de verdad

(e) Función suma:


s,.=x' iY'¡c¡+x;Y¡c',.+x¡y',c ¡+x;Y¡C¡

FIGURA 4.7 Representación con mapas de las funciones acarreo y suma.

Desafortunadamente, los mapas que se utilizan para representar funciones de


cinco y seis variables no son tan útiles como los mapas de dos, tres y cuatro varia-
bles, simplemente porque, a este nivel de complejidad, la adyacencia es más difí-
cil de visualizar. Por ejemplo, en el mapa de cuatro variables cada celda era adya-
cente a otras cuatro celdas: por arriba, abajo, izquierda y derecha. Para mostrar
estas adyacencias en un mapa de cinco variables, sin embargo, es necesario uti-
lizar dos mapas de cuatro variables colocados uno junto al otro, como se indica en
la Figura 4. \O(a). En esta representación se supone que el segundo mapa se super-
pone sobre el primero como si se crease un objeto tridimensional. Con esta idea,
cada celda puede verse adyacente a otras cuatro en su propio mapa, así como a las
celdas que están en la misma fila y columna del otro mapa.
En la Figura 4.1 O(b) se muestran varios ejemplos de 3-subcubos y 4-subcubos
dentro de este mapa de cinco variables. Los subcubos que abarcan ambos mapas
se reconocen fácilmente ya que contienen dos mitades que ocupan el mismo lugar
en ambos mapas. En otras palabras, un m-subcubo podría representarse por dos
(m - 1)-subcubos idénticos, uno en cada mapa, o por un único m-subcubo conte-
nido en sólo uno de los mapas.
140 Principios de diseño digital

Pueden obtenerse conclusiones similares para los mapas de seis variables


como el mostrado en la Figura 4. 11 (a). En este mapa se puede observar que un l1<
subcubo podría contener (1) cuatro (m - 2)-subcubos que ocupan la misma posi-
ción en los cuatro mapas, (2) dos (m - 1)-subcubos que aparecen en la misma
posición en dos mapas adyacentes, ó (3) un único l1<subcubo que aparece en sólo
uno de los mapas. En la Figura 4.11(b) se muestran varios ejemplos de estos 4-
subcubos.

,w
00 01 11 10
"
, ,
00 x'y''l.'W :litw x'y'z-w xizw'


01 xyiw' xy",w xyzw xyzw'
.
"
.
11 xytw xytw X)'ZW "",W

. ,.
10 xy'(W xy't w xy',w xy'zw'

(a) Orgamzaclón del mapa


---.---------,- - - - - -
,w , ,
xy 00 I 01 11 ' 10

00

01
'- -
.. ,.
¡--- -1
11 ,

I--"¡-- -'/+,_ "..+-_0--


' ::..¡-Z- "
;:
10 1- -.
~ _L _ J

_-.-.-.-_-.-.-_... - - - - .1
(b) Ejemplos de 2-subcubos

xy 00 01 11 10

,- 00 , T -,
,, ;".J _

, , -L '
, ~ ¡..
, 01 , ,
I
x
,- " 1- --- - --,.
J~
,
11
" =- w
"
,.
10
"
-- ~ --
l. _ :.. - . - . - . -_ - . -_ -_ - . -_ - . -_ -_ - . - . -~ _ ~
(e) Ejemplos de 3-subcubos

FIGURA 4.8 Mapa de cuatro variables.


Simplificación de funciones booleanas 141

Y/Yo
X¡Xo 00 01 11 10

00

01
,1 ,
I I

o O O O O 1 O ,1
O O O J O O J '- - r
O O J O O O J , , "
O O J J O O J 10 ,' 1 1 ,
O J O O J O O
(b) FunCión "mayor que":
O J O J O J O
J J G = x,i. + xoY,Yo + x Jx'~o
O O O O J
O J J J O O J Y/Yo
1 O O O J O O
J O O J J O O o 00
, 01
, ,' 11 I 10
,
1 O J O O 1 O 00 ~ 1 - - -Irl l "
.J!.__ J
- -. , ~
J O J J O O J , , , ..
J J O O 1 O O "
1 1 O 1 1 O O 01 ,' 1 1 ' ,
1 1 1 O 1 O O -- -- "
J J J J O J O 11
" " " "
,
(a) Tabla de verdad
10
• ,,- 1-,," '"
, ,,
(e) Función "menor que" :
L = xIJ, + x'¡.X" aYo + x'oY .Yo

FIGURA 4.9 Representación de las funciones "mayor que" y "menor quell en los mapas.

v=o v= 1

xy 00 01 11 10 00 01 11 10
, ,
00
" " " " "
m, m, m, m, mI' ma m" mI,
, , ,
• ." ,. .,
01 m, m, m, m, m2J
"
m,o m" m"
'. ,< ., <
" " " "
11 m" m" m" m" m,o
m" m" m' l
,
, ,
"
__
.,
10 m,
" '"
m. m" m" m" m" m" m"

(a) Organización del mapa

FIGURA 4.10 Mapa de cinco variables.


142 Principios de diseño digital

v= 1

xy 00 0\ 11 \0
,. , , , _00
_ 1f 0\
,. 11 \0
,- -- - - - -- u
"
.00 , , -,,
~

,~ ';:--, ~ x'
,, , , . ,, ,, , " " ,1 " , 1 '2
0\
,
- - ,.- - - - --
, , .. - ,- --1-
l'
-
,, 'u
,
_1- _ -1
"
,,..
" "
.- - -" .., ,,
1 31
r- - - ,
, , ,, ,... ,
11 ~

.'
1
, ,, ,
,, " , ,.'" " I ::~
, , ,
, !';

.... .
1
\0 1
- , -
xi • '
- --------~~~~~~,- -- -----
I~ - J
'.'
(b) Ejemplo de subcubos de tamaños 8 y 16

FIGURA 4.10 Continuación.

v=1

,w
xy 00 0\ 11 \0
, , 00 0\
,. 11
'o
\0
" " "
00
mo m, m, m, m" m 17 m '9 m
l8
, , . ,
0\ m, m, m, m, m 20
"
m
" m 2J
"
m 2}
21

,. ;; .. ,.
m15" m"
l.'

11 m 12
" "
m" m" m,. m JJ m JO
, , , ,. /. ..
lO m, m,
"
m" m" m" m" m" m"

00
'.'
"
m",
)
" • " " '.
m" m" m" m" m",

o\
• ,. ,
m"

"
<- ,.
n/ SI

"
.
m" m" m" m" m" m" m" m"
u=J

11
. " " ~
.' " " ~

m" m" m" m" m", m" m6J m"


w
\0 " " " 1,
" "
m", m" m" m" m" m" n/
59 m 58

(a) Organización del mapa

FIGURA 4.11 Mapa de seis variables.


Simplificación de funciones booleanas ~~

v :: 1

,w
xy 00 01 II 10 00 01 11 10
, ,
00
,, ,, , r., - --
" "
,, ' ,
,,,
- I I ~F
"
01 , "
"r - --
U",o
,, ,, '.' u ,
, - ,
" ,t- ....----z- xv
II
, ,
r- " r-

10 ,,
..-,
, " "

--
,
,, " " !- -'"1-- - ~,+.Li' --
"
"
-. ;7

- . J,, ,,
,,
.-
," , •

00
-..
,, ,
, ,
" -.
, ,•
r,
, ~

"
- --
, , ,,
• ,
,, ,
"
"

,, ,, ,-
• ,, , ", ~

01 , ,
"
, "" r - - " -
,"
u '" 1
,, ,," o> ~
,
" r. ~
t' "
II
, , , - ",
r- r- ,o---z-. xz
10
, ,,
'..-'
~
,
"
, ,
,, - .
-
____ __ z.:.w.: ___ ___ ___ '
.- ~
; ,
- "'-i-'" ---- e
'.
, ~
'
. --.
,

(b) Ejemplo de subcubos de tamaño 16

FIGURA 4.11 Continuación.

4.2. MÉTODO DE SIMPLIFICACiÓN CON MAPAS


Como se ha mencionado anteriormente, el propósito fundamental de estas repre"
sentaciones con mapas es ayudar a simplificar formas estándar reduciendo el
número de operadores que contienen. Como se indica en la Figura 4.12, el proce"
dimiento para la reducción de operadores, llamado usualmente método del mapa,
consta de cuatro pasos básicos.
GENERACIÓN DEL MAPA. El primer paso consiste en convertir cualquier otra
representación de una función booleana dada en una representación con mapa.
Una tabla de verdad, por ejemplo, se convierte en un mapa colocando un 1 en las
celdas correspondientes a los minterms que implican a la función. De igual
modo, una forma canónica se convierte en un mapa insertando un 1 para cada
minterm en dicha forma. Una forma estándar puede, bien expandirse en una
forma canónica primero, o puede convertirse directamente insertando (n - m)
unos en cada (n - m)-subcubo del mapa para cada término de m literales en la
forma estándar.
144 Principios de diseño digital

GENERACIÓN DE IMPUCANTES PRIMOS. En el segundo paso, se desarro-


lla una lista de implicantes primos inspeccionando cada l-minterm, obteniendo el
mayor subcubo posible de l-minterms que incluya el minterm en cuestión, y aña-
diendo ese suboobo a la lista de implic3lltes primos. Si se encuentran dos o más
subcubos diferentes, se añarlirán todos a la lista. Por otra parte, si volvemos a
encontrar un subcubo que ya está en la lista, no se añadirá por segunda vez.
SELECCIÓ[Link] IMPUCANTES ESENCIALES. En el terc'er paso, buscamos
todos los l-minterm que estén incluidos en sólo un implicante,primo, ya que este
implicante es un implicante primo esencial y será añadido automáticamente a la
lista de cobertura, que se rexplica a continuación.
CREACIÓN DE LA OOIIJERTURA MÍNIMA. El propósito de este paso es gene-
rar una lista de cobea;tm;a que contenga el menor númer" posible de implicantes
primos, que se seleccil!lnarán de manera tal que cada l,minterm esté contenido en,
al menos, un implicante primo. Hay varias fonnas de (crear esta lista, siendo la
más sencilla la denolllÜnada manera codiciosa, que se explica a continuaciñn. En
este método se obtieoe ,el implicante primGl que :c<!>Iíti:ene el mayor número de 1-
minterms no cubiertos, y se traslada de la üsta de ~¡ilicantes primos a la lista de
cobertura. Si aparecen ,dos ~'iicantes primos c¡¡ue incluyen a la vez el mismo
número de minterms no cubientos, se ~e uno 'aleatoriamente. Este. procedi-
miento se repite hasta que todos los mintelJlIls Ih~an sido cubiertos. El ejemplo
siguiente muestra una aplicación de este método..

EJEMPLO 4.1 Método del mapa


PROBLEMA
Utilizando el método del mapa, simplificar la función booleana F; "'·y'z' .... wz + xyz + w'y.
SOLUCIÓN

Siguiendo el procedimiento descrito en la Figura 4.12, primeramente se generamn mapa a par-


tir de la expresión a1gebráica dada, insertando unos en todos los subcubos que se .dan en la
expresión. En este caso, estos subcubos son w'y'z', wz, xyz y w'y, como se muestra en la
Figura 4. 13(a). Obsérvese que el término xyz es redundante ya que sus mintermsx'yzw y xyzw
están incluidos en los subcubos wz y w'y, respectivamente.
Una vez desarrollado el mapa de cuatro variables, se determinan todos los implican tes
primos y se genera una lista PI, como se muestra en la Figura 4.13 (b) Y (e). Para $enerar
la lista PI, se inspecciona cada l-minterm y se añaden a la lista todos los implicantes pri-
mos que contengan a ese mintenn. Como se mencionó anteriormente, si se encuentra un
implicante que ya está en la lista, no se duplica.
En nuestro caso se empieza con el minterm ma el cual está contenido en el implicante
primo w'z'. El minterm m, está contenido en dos implicantes .primos, w'y y w'z. Ahora, sin
embargo, s6lo se añade w'y a la lista, ya que w'z' ya está en .ella. De igual forma, el mino
term m3 está contenido en yz y w'y, pero sólo yz se añade a la lista. Los minterms m., 1116 y
m., no proporcionan ningún nuevo implicante primo a la lista. Sin embargo, el minterm m9
añade wz a la lista. Como ninguno de los restantes minterms añade nuevos implicantes pri-
mos a la lista, sabemos que la lista PI completa contiene cuatro implicantes primos, como
se indica en la Figura 4.l3(c).
Simplificación de funciones booleanas 145

Tabla de verdad. forma cañónica


o fonna estándar

Generación del mapa

Determinación de
implicames primos

Selección de implicantes
primos esenciaJes

Obtención de la cobertura
mínima

Fonna estándar
!
FIGURA 4.12 Método del mapa para simplificación booleana.

yz yz
wx 00 01 11 10 wx 00 01 11 10
, , , , , ,
r -, " - - --, - - --, •
-Oi -., -
00
,,, I , ,
: I I , I , j1
"
l'
, , ,, ,
, n -,
o

( ,,•
01 .
,' -I " 11 l .
,-
I I l' , '1 "

..
"
-, - - - _1 o
-- ,
" -1- -
- -- _l-
" - -- '-'
- , " ,- --'.' +-.
, 1 "" "
11
: I .. - ...I 1 1I I , ,
, • , • , , "
,' I " " '"
10
-,-- - I : I I 1"
! ::\ -!,.I

1'\ 1'\ 1'\ ~ 1'\ 1'\ 1'\ 1'\


w'y't wz xyz w'y w't wz yz w'y

(a) Representación con mapa (b) lmplicantes primos en el mapa


Lista PI: w't. wz. yz. w'y
Lista EPI: w't. wz
Listas de cobertura: (1) w't, wz. yz (1) F=w'z'+wz+yz
(2) w't. wz. w'y (2) F=w't+wz+w'y

(e) PI, EPI Ylistas de cobenura (d) Dos expresiones de la func ión

FIGURA 4.13 Simplificación booleana.


146 Principios de diseño digital

En este punto se puede realizar el tercer paso seleccionando los implicantes primos
esenciales. Como puede verse, los minterms mo y m. están cubiertos únicamente por el
implicante primo w 'z ', mientras que los minterms m9 y m' 3 están cubiertos sólo por el
implicante primo wz. Por tanto, la lista de implicantes primos, o lista EPI, contiene los dos
implicantes primos w'z' y WZ, como muestra la Figura 4.13(c).
Finalmente, es necesario obtener el mínimo número de implicantes primos que cubran
a los restantes minterms m3 y m.,. En el mapa de la Figura 4. I 3(b) se observa que ambos
minterms están cubiertos por yz y por w'y. Como ambos implican tes primos tienen el
mismo tamaño, cualesquiera de ellos puede elegirse como cobertura final. Por este motivo,
la Figura 4.13(c) muestra dos listas de cobertura diferentes y la Figura 4.13(d) muestra dos
expresiones simplificadas, teniendo cada una de ellas el mismo número de operadores.
Observe que cada una de estas expresiones simplificadas requiere tres operadores ANO y
dos operadores OR, en contraste con los seis operadores ANO y los tres operadores OR que
requería la expresión original. En otras palabras, nuestro procedimiento de simplificación
ha obtenido una reducción en el número de operadores ANO del 50%, y en el número de
operadores OR una reducción dél 33% . .

Aunque el procedimiento descrito anteriormente ha sido efectivo en el caso


considerado, no siempre esta estrategia conduce a la obtención del número míni-
mo de implicantes primos. En algunos casos, por ejemplo, el tamaño de la cober-
tura final se ve afectado por el orden en el que los implicantes primos hayan sido
seleccionados, como puede verse en el siguiente ejemplo.

EJEMPLO 4.2 Selección de implicantes primos


PROBLEMA

Simplificar la función booleana F= w'x'yz' + w'xy + wxz + wx'y' + w'x'y'z'.


SOLUCiÓN

En la Figura 4.14(a) presentamos el mapa generado a partir de la expresión anterior. Como


puede verse, este mapa muestra que hay ocho implican tes primos pero no esenciales para
esta función. Además, la Figura 4.14(b) muestra que se pueden obtener dos coberturas com-
pletamente diferentes para esta función, requiriendo ambas el mismo número de operado-
res.
Obsérvese que seleccionar los implicantes primos para cada cobertura es una tarea difí·
cil ya que se está obligado a seleccionar implican tes primos aleatoriamente, una vez que
todos los implicantes primos tienen el mismo tamaño. Sin embargo, si primero se seleccio-
na el implicante primo w'x'z' y después el implicante primo xyz, son necesarios tres impli-
cantes primos más para completar la cobertura. En otras palabras, se necesita un implican·
te primo más que los utilizados en cada una de las dos coberturas mostradas en la Figura
4.14, cada una de las cuales requería sólo cuatro implicantes primos. Téngase presente tam·
bién que estas dos coberturas mínimas son disjuntas, ya que no tienen implican tes primos
en común.

En el Ejemplo 4.2 se ha demostrado que el orden en el que se seleccionan


implicantes primos puede ser extremadamente importante y que el procedimien-
Simplificación de funciones booleanas 147

to heurístico descrito en la Figura 4.2 no siempre será suficiente para obtener las
coberturas mínimas. En la Sección 4.4 introduciremos un procedimiento alterna-
tivo que puede ser seguro a la hora de obtener todas las coberturas mínimas de una
función booleana dada.

wx 00 01 11 10
, ,
~_J. , 1-,
~

00 ",1_1.
-- -- , 1r1_1_

• 1 ,... - , ,
Lo _ '" ~
11 -11
01 11 __ 1_ I 11 '
T_-_,I
¡; ,... - , 11 I 115
11 11- 1-'- ¡- - 111 "
IL _1_ ~ ___-11

,, _ J , ,
10 .- 1- -
L __
, l ',
"
::1 1

(a) Representación con mapa

Lista PI: w':tt. w'xy, wxz. wxy, xy,', wy'z. xyz. w'yi
Lista EPI: vacía
Listas de cobertura: (1) wx't . w'xy, wxz. wx'y'
(2) "'yr, wyO xyo w'yr

(b) PI, EPI Ylistas de cobertura

FIGURA 4.14 Ejemplo de simplificación booleana.

4.3. INDIFERENCIAS
En secciones previas hemos considerado solamente aquellas funciones booleanas
que están completamente especificadas, es decir, hemos asumido que una fun-
ción toma el valor O ó 1 para cada combinación de los valores de las variables.
Bajo esta hipótesis, se podría definir cada función booleana en términos de un
conjunto de O-minterms y de un conjunto de I-minterms. Sin embargo, en la prác-
tica se especifica sólo el conjunto de I-minterms y se .supone que todos los min-
terms que no están en ese conj unto son O-minterms. No obstante, en muchas apli-
caciones una función booleana no está especificada para ciertas combinaciones de
los valores de las variables, ya que dichas combinaciones nunca se presentan. Por
ejemplo, el código BCD para dígitos decimales utiliza sólo 10 de las 16 posibles
combinaciones para especificar los dígitos decimales O al 9. En otras palabras,
seis de esas combinaciones, que representan los números 10, 11, 12, 13, 14 Y 15
nunca se utilizan. Por este motivo, cualquier función booleana que use el código
BCD como entrada tendrá que ser considerada no especificada para las combina-
ciones que representan los números lO, 11, 12, 13, 14 Y 15. Una función boolea-
na de este tipo, que tiene salidas no especificadas para algunas de las combina-
ciones de entrada, se denomina función incompletamente especificada, y los
148 Principios de diseño digital

minterms para los que la función no está especificada se denominan mintenns


indiferentes (d-mintenns, don't care minterms) o indiferencias.
Las indiferencias pueden utilizarse para simplificar más la expresión boolea-
na de una función incompletamente especificada. Ya que estos minterms con indi-
ferencias nunca se presentan, podemos asignarles un valor funcional de O o 1 de
manera que se creen subcubos de implicantes primos mayores y, por tanto, se
obtengan expresiones funcionales más pequeñas. Dentro del propio mapa distin-
guimos estas indiferencias de los valores O y 1 colocando una X en la celda corres-
pondiente, lo que indica intuitivamente que es indiferente el valor O ó 1 asignado
al minterm concreto.
Cuando se utilizan mapas con indiferencias, durante la generación de impli-
cantes primos, se inspecciona cada l -minterm, buscando el subcubo mayor posi-
ble de l-minterms y, en este caso, de minterms con indiferencias que incluyan al
minterm en cuestión y después se añade este subcubo a la lista de implicantes pri-
mos, si no está ya incluido. En otras palabras, implícitamente asignamos un valor
funcional de 1 a todos aquellos minterms que estén incluidos en al menos un
implicante primo y asignamos el valor O a los restantes. Se describe este procedi-
miento en el siguiente ejemplo.

EJEMPLO 4.3 Simplificación con indiferencias


PROBLEMA
Obtenga expresiones booleanas para el complemento a nueve de un dígito BCD.
SOLUCiÓN
Sabemos, de la Sección 2.5, que el complemento de un número decimal es igual a su com-
plemento a nueve incrementado en 1. Además, se sabe que el complemento a nueve de un
número decimal puede obtenerse restando de 9 cada uno de sus dígitos. Por consiguiente,
los complementos a nueve de los dígitos O, 1,2,3,4,5,6,7,8 Y 9 son 9, 8, 7, 6, 5, 4, 3, 2,
1 Y O, como se muestra en la Figura 4.l5(a). Si suponemos el código BCD, cada uno de
estos dígítos está representado por el número binario de 4 bits xrrlxo' y su complemento
a nueve por otro número binario de 4 bits Y:¡YV'IYO' como se indica en la misma figura.
Como puede verse, las combinaciones 1010,1011,1100, 1101, 1110 Y 1111 nunca se utili-
zan para codificar el complemento a nueve de los dígitos decimales. Estas combinaciones
representan las indiferencias de las cuatro funciones booleanas que definen la codificación
del complemento a nueve. A partir de la tabla de dígitos decimales y de su complemento a
nueve mostrada en la Figura 4.l5(a), podemos obtener las representaciones de mapa mos-
tradas en la Figura 4.15(b). Obsérvese que las seis combinaciones de indiferencias han sido
indicadas con el símbolo x en cada uno de estos mapas.
Para reducir el número de términos en la expresión booleana y el número de literales en
cada término, se deben asignar los valores apropiados a las indiferencias en cada mapa. Por
ejemplo, al simplificar. la expresión de Y3 asumimos que todas las indiferencias tienen el
valor O, lo que hace que Y3 = x' r',x r
Alternativamente, la expresión para Y2 se simplifica asumiendo que sólo dos de los min-
terms indiferentes, m l 4 y m15 , tienen valor O mientras que todos los demás tienen valor 1.
De igual forma, cuando se simplifica la expresión de Y" se supone que los minterms indio
Simplificación de funciones booleanas 149

ferentes mIO' m l l'm l4 y miStienen el valor 1, y en la expresión de Yo' que los rninterms m9,
mil y m l4 son iguales a l.
Si no se utilizaran estas indiferencias, se obtendría un literal extra pnr término en las
expresiones para Y2' YI' Yo' además de un término extra en la expresión para Yo' Es innecesa-
rio decir que estos minterms indiferentes pueden utilizarse de manera similar para simplifi-
caciones en forma de producto de sumas o en otras formas no estándar, indistintamente.

o 0000 9 1001
1 0001 8 1000
2 0010 7 O1 1 1
3 OO 1 1 6 01 10
4 0100 5 O1O1
5 O1 O1 4 0100
6 01 10 3 O01 1
7 O1 1 1 2 0010
8 1000 1 0001
9 100 1 O 0000
(a) Tabla de complementos a nueve

xx
, 11 ¡ ,,
,, "
xx 00
• ,
01 11
, \O ,, "
xx 00 01
,, "
\O ,.
,,
p

'- r - - -1-·
00 L __ 00
" I
- -, ,
. ,- - I
, , - --..
01 01
,' 1
- -
- -" I ,. "
,
.' , ,
11
" ~
;'
X X X X 11 'X X, X X
---
\O
, ,
X
"
X
" \O
L_
L
.,, --
X
" - --,
X ,,

xx xx
,, "
xx 00
, 01 11
,
10 , ,. -"
xx 00
. 0\
,
11
, \O
, - 1-,, " - 1 -, ,,- --
00 ,1 00 , I

, , , ,,
1 ,
0"
01 ,01 1 ,
, 01
, , I

"
, < " ~O
r " ,
,,
.
H X X ,' X X ,' H X ,
, X X X

\O " ,' X " ,"


X' 10 1
,.-
, "
X
" ,,
X
,- - - -' - -- , "--

J._X.
(b) Representación con mapa

FIGURA 4.15 Simplificación de funciones de complemento a nueve.


150 Principios de diseño digital

El ejemplo anterior ha mostrado que, en un mapa dado, los minterms indife-


rentes pueden utilizarse para nuestro beneficio, ya que podemos elegir un valor
funcional Oo l como asignación a esos minterms indiferentes, dependiendo de sus
posiciones en el mapa. Una vez realizada esta elección, la función incompleta-
mente especificada se transformará en una completamente especificada, cuya
expresión ya no indicará qué elección fue hecha al asignar O ó l a los minterms
indiferentes.

4.4. MÉTODO TABULAR DE SIMPLIFICACiÓN


.Como se desprende de la Sección 4.3, el método del mapa es esencialmente un
<procedimiento de tanteo ya que requiere que una persona reconOZGa patrones de
~*bcubo en el mapa. Cuando el número de variables es mayor que seis, se hace
~to/(fIifícil reconocer subcubos y seleccionar un conjunto mínimo de implican tes
~s.
f j olQn contraposición, el método tabular no tiene estas desventajas ya que no
Q:lep3lide del reconocimiento de patrones. Claro que este método de tabulación es
faM>tffiás tedioso para los diseñadores, que son propensos a cometer errores con
<km qargo y monótono proceso. Sin embargo, es conveniente para su realización
en un [Link]!AA.0r ya que busca casi exhaustivamente los implicantes primos y
obtiene eventualmente todas las posibles coberturas. Muchas herramientas CAD
, modefllas utilizan,"-v .antes de este método, que inicialmente fue propuesto por
' o . 11 . 10, . 00 mejora . do por McCI us key, por lo que es conOCl'do frecuente-
:_ -'!l! n_~ , mo éto 0' de Quine-McCluskey.
t--¡-tl~~<éJl1l:_!r_~bular de simplificación booleana empieza con la forma canó-
dé : Otlucto y consta de dos pasos. En el primer paso, se obtienen
[Link];ttc~-tes pri de una función booleana dada. En el segundo paso,
Iif§ i plican e?primos esenciales y se utilizan para obtener todas las
....""".,,.,.,..=;;1
r.:-.7>c¡:.¡"'1...
:x x

4.4.1 ~ "· ~ene ión de im'Dí'icantes primos


01 11 10 1. l . 01 ' -1 Il

" ¿ailt s pri os, el método de tabulación requiere,


arrCad~nih~rrri:n forma canónica con todos los demás
ub'¿ os e dimensión 1 o l-subcubos. En otras
t-PlI1¡rru~:;-s:eir¡remja obten , dos minterms que difieren en el
¡\hable este prd,c s15 d ':0 j:\aración se suele acelerar, prime-
1-"""h;-;;,.,..j"",,,,,,rr..[Link] mi ' s q\l .smo número de variables cuyos
_ . _'v. . ores on i ~}¡ 1, lo cj~~ .~ '61:0 o . a n ' ero de unos, y entonces se orde-
nan es, o.~pupos en orden ascen e\\.~,.por su numero de unos. Agrupando y orde-
nando de esta manera, se obtienen cualesquiera dos minterms que difieren exac-
tamente en un&~e~·1:'3'ñ1.'jí'ilrf!l\do los minterms de un grupo con los minterms
del Si~M\l!otJl8l!l§l~lIIJlólIlWIorHA>ll~i!ilqmlata~ación, se genera un
Simplificación de funciones booleanas 151

número de l-subcubos que pueden ser agrupados y ordenados de acuerdo con su


propio número de unos. Después, se comparan los minterms de los dos grupos de
l-subcubos, cuyo número de unos difiere en uno, y se generan los 2-subcubos.
Este proceso puede repetirse tantas veces como sea necesario hasta que no se
generen nuevos subcubos, o hasta que todos los minterms se hayan agrupado en
un n-subcubo, lo que significaría que la función es igual a 1. En el siguiente ejem-
plo utilizamos la función booleana presentada en el Ejemplo 4 .1 para describir
este procedimiento.

EJEMPLO 4.4 Generación de implican tes primos


PROBLEMA

Generar todos los implicantes primos para la función F definida originalmente en el mapa
de la Figura 4.13(a), y que se vuelve a mostrar en la Figura 4.16(a).
SOLUCIÓN
De acuerdo con este mapa, la forma canónica de esta función contiene diez I-minterms que
pueden agruparse en cinco grupos: Go' G" G 2, G 3 Y G•. Cada grupo G¡, donde O ~ i ~ 4,
contiene aquellos minterms cuyo número de unos es igual a i. Por ejemplo, el primer grupo,
Go' contiene sólo el minterm mo ya que este minterm representa la combinación wxyz =
0000, y su número de unos es igual a O. De igual forma, el grupo G, contiene los minterms
m2 y m., ya que estos minterms representan las combinaciones wxyz = 0010 Y wxyz = 0 100,
cuyo número de unos es igual a 1. Se pueden definir los demás grupos del mismo modo.
Cada grupo contiene minterms que pueden ser considerados como O-subcubos, como se
muestra en la lista de O-subcubos de la Figura 4.16(b).
Como puede verse en esta lista, cada elemento (fila) contiene cuatro campos: el nom-
. bre del grupo, G¡, los índices de los minterms incluidos en el subcubo concreto, los valo-
res de las variables del subcubo y una etiqueta que indica si ese subcubo está cubierto o no
por un subcubo mayor. La etiqueta se pondrá a "sr' o "no" después de haber generado la
lista de posteriores subcubos mayores. Obsérvese que, al contener la forma canónica 10
minterms, esta lista de O-subcubos contendrá 10 elementos que ocuparán cada uno de ellos
una fila.
Para generar una lista de I-subcubos, necesitamos comparar cada uno de los minterms
del grupo G¡ con cada uno de los minterms del grupo G¡+" y generar un I-subcubo por
grupo G¡ en la lista de I-subcubos si estos minterms difieren en una variable. Por ejemplo,
de acuerdo con la Figura 4.16(b), el minterm "bpuede combinarse con el minterm '''2 para
generar un I-subcubo que contenga a "b y m, y tenga los valores en la variables wxyz =
00-0. Este I-subcubo puede representarse por IV 'X'Z' . De igual forma, el minterm "bpuede
también combinarse con el minterm m4 • generando un l-subcubo cuyos valores en la varia-
bles son wxyz = 0-00, y que se representa por w 'y'z'. Hasta ahora, pues, se ha completado
la generación de I-subcubos para el grupo Go' ya que no hay más parejas de minterms cuyo
primer minterm esté en el grupo Go y cuyo segundo esté en el grupo Gr Utilizando esta
misma técnica, se pueden generar el resto de I-subcubos para los grupos G" G 2 Y G3 .
Téngase en cuenta que, como cada minterm en la lista de O-subcubos ha sido utilizado en
al menos un l -subcubo, se ha insertado un "sí" en cada ftla de la cuarta columna de la
Figura 4.16(b).
152 Principios de diseño digital

yz • J - - - Uf:'!' J1\'~'f:. ~-, --

wx 00 01
, II
,
10
,
~"r
~,
" ~;,,'" \.~:~+ v: "" •
.,
• v ~

,
• ,

" t~· .~ ~ "- . ,. ,"


00 1 1 1 f '~-II.;';.¡jijf:{. , - :...;-~'" '-: •• - :_~
,
< l • Go (O) O O O O sí
01 1 1 1
G, (2) O O 1 O sí
l.'
(4) O 1 O O sí
II " 1 1
" " G2 (3) O O 1 1 sí
, , (6) O 1 1 O sí
n
" (9) 1 O O 1 sí
10 1 1
G, (7) O 1 1 1 sí
(11) 1 O 1 1 sí
(a) Representación con mapa (13) 1 1 O 1 sí
G4 (15) 1 1 sí

(b) Lista de O-subcubos

Go (0, 2) O O O sí
(0,4) O - O O sí
G, (2,3) O O 1 sí
(2,6) O 1 O sí
(4,6) O 1 - O sí
G2 (3, 7) O 1 1 sí
(3, 11) - O 1 1 sí
(6,7) O 1 1 sí
(9, 11 ) 1 O - 1 sí
(9, 13) 1 - O 1 sí
G, (7, 15) 1 1 sí
(11, 15) - 1 sí
(13,15) sí

(e) Lista de l -subcubas

Go (0, 2, 4, 6) O O no
G, (2,3,6,7) O - 1 - no
G, (3,7, 11, 15) - - 1 no
(9, 11 , 13, 15) 1 1 no
(d) Lista de 2-subcubos
FIGURA 4.16 Generación de implicantes primos.
Simplificación de funciones booleanas 153

Una vez obtenida una lista completa de l-subcubos, se puede generar una lista de 2-sub-
cubos, como se indica en la Figura 4.1 6(d). Como puede observarse, cada uno de los 2-sub-
cubos en esta lista contiene cuatro minterms y pueden describirse por un término de dos
literales. De nuevo, estos 2-subcubos se han generado comparando los I-subcubos de dos
grupos anteriores de la lista de I-subcubos y combinándolos en 2-subcubos si difieren en
una variable exactamente; es decir, se genera un 2-subcubo siempre y cuando haya una
variable en ambos I-subcubos que tenga un valor O en uno de ellos y un valor I en el otro.
Obsérvese que «-» no es una indicación del valor de la variable sino que es una indiferen-
cia para una variable que ya ha sido eliminada de la expresión. Como se observa en la
expresión 4.16(d), comparando todas las parejas de I-subcubos de la Figura 4.16(c) se
obtendría un total de cuatro 2-subcubos. Téngase presente también que, como cada I-sub-
cubo ha sido utilizado para generar un 2-subcubo, se ha insertado un «sí» en cada ftla de la
cuarta columna de la Figura 4.16(c).
Ahora, se intentan coinbinar 2-subcubos de la lista para formar 3-subcubos, pero en este
caso no se obtiene ninguno. Por consiguiente, todos los 2-subcubos que aparecen en la lista
de la Figura 4.16(d) son los implicantes primos. En otras palabras, los cuatro implicantes
primos de la función [Link] especifica en la Figura 4.16(a) son w'z ' , w'y, yz y wz. Obsérvese
que ningún l-subcubo o O-subcubo es un implicante primo, ya que cada uno de ellos está
cubierto por, al menos. un 2-subcubo.

4.4.2. Generación de la cobertura mínima

Para determinar la cobertura mínima de una función, hay que determinar los impli-
cantes primos esenciales que deben ser incluidos en cada cobertura, ya que los
implicantes primos esenciales son los implicantes que contienen aquellos niinterms
cubiertos una sola vez, aunque un implicante primo esencial pueda contener tam-
bién otros rninterms. El mejor modo de obtener implican tes primos esenciales es
construir una tabla de selección en la que cada fila representa un implicante primo
esencial y cada columna representa un rninterm. En la tabla se marca con x una
intersección entre fila y columna si y sólo si el rninterm representado en esa colum-
na está incluido en el implicante primo correspondiente a esa fila. Después de relle-
nar la tabla sabremos que las columnas que contienen sólo una x representan aque-
llos minterms que han sido cubiertos sólo una vez. Entonces, la x se rodea de un
círculo y el correspondiente' implicante primo se incluye en la lista de implicantes
primos esenciales. Este prooedimiento se detalla en el Ejemplo 4.5.

EJEMPLO 4.5 Selección de implicantes primos esenciales


PROBLEMA
Obtener todas las coberturas mínimas de la función cuyos implican tes primos se determi-
naron en el Ejemplo 4.4.
SOLUCIÓN
En el Ejemplo 4.4 se identificaron cuatro implicantes primos: w'z', w'y, yz y wz. Así pues,
se construye la tabla de selección de implicantes primos esenciales como se muestra en la
1M Principios de diseño digital

Figura 4.l7(a), indicando en cada ma el nombre, expresión y los índices del minterm de uno
de los implicantes primos, y asignando una columna a cada l-minterm. Entonces, se intro-
duce una X donde un minterm dado sea cubierto por un implicante primo. Por ejemplo,
empezando por la primera ma, se introduce una X en las columnas 0, 2, 4 Y6 ya que el impli-
cante PI contiene los minterms mo' "'1, "'4 Y m6 ·
Tras introducir todas las X necesarias en todas las mas, se indicarán aquellas columnas
que tengan únicamente una x, rodeando dicha X con un círculo. Como se observa en la
tabla, las columnas 0, 4, 9 Y 13 tienen sólo una X cada una. Así pues, P, y p. son impli-
cantes primos esenciales ya que son los únicos implicantes primos que cubren a los min-
m
tenns mo' 4 , m9 y m 13. Mortunadamente. PI y P4 también cubren a los minterms m2 , m6 ,
mil y m 15 • lo que significa que los únicos minterms no cubiertos, ni por PI ni por P4 ' son
los minterms m3 y m.,. Ya que ambos minterms podrían estar cubiertos por P2 o P3' se
obtienen dos posibles coberturas: como se muestra en la Figura 4.l7(b), una cobertura con-
tendría PI' P2 Y p. mientras que la segunda contendría a PI' P 3 Y p •. En la Figura 4.17(c)
se muestran dos expresiones mínimas en fonna de suma de productos correspondientes a
estas dos coberturas.

PI w'z' (0,2,4, 6) ® x ® x
-ilq Ti 2' P2 w'y (2, 3, 6, 7) x x x x
201 sup P3 yz (3,7, 11 , 15) x x x x
U fll!Un Íf) p4 wz (9, 11 , 13, 15) ® x ® x
-[Link] 1s11
Minterms cubiertos por EPI: O 2 4 6 9 II 13 15
2:J 2~!Jli~. Minterms no cubiertos: 3 7
omi'lq ~Jl
Gnu X no (a) Tabla de selección de EPI
-mulo:> s, Lista PI: w't, w'y, yz. wz
-:Jlbl e b ¡ Lista EPI: w'i, wz
- ~UpG n¡;J, Listas de cobertura: ( 1) w't, W1.. w'y
(2) w'l'. wz. yz
nu :lb ssb
2:l1ClB~i[qr (b) Listas PI, EPI Y de cobertura

(1) F = w't + wz + w'y


(2) F = w't + wz + yz

(e) Expresiones de núnima cobertura

FIGURA 4.17 Selección de implicantes primos del Ejemplo 4.5.

En el Ejemplo 4.5 se identificaron dos implicantes primos esenciales que podrí-


an cubrir ocho de los diez minterms, lo que significaba que obtener una cobertura
mínima era una tarea relativamente sencilla. Sin embargo, en muchos casos la tarea
de seleccionar el resto de implican tes primos para completar la cobertura mínima
Simplificación de funciones booleanas 155

puede no ser tan fácil como la de seleccionar los implicantes primos esenciales.
Muy frecuentemente, se tiene un gran número de implicantes primos para escoger,
lo que complica de modo significativo la selección. Una manera de obtener todas
estas posibles coberturas es generar, primero, un producto de sumas en el que cada
suma representa un conjunto de implicantes primos que cubren un minterm en con-
creto que no ha sido cubierto por ningún implicante primo esencial. Después, se
realiza la multiplicación en la forma de producto de sumas hasta obtener una forma
de suma de productos en la que cada producto, junto con todos los implicantes pri-
mos esenciales, representa una de las posibles coberturas. De entre todas las cober-
turas, aquéllas que tengan el menor número de implicantes primos serán las cober-
turas mínimas. Este procerlimiento se describe en el siguiente ejemplo.

EJEMPLO 4.6 Generación de una cobertura mínima


PROBLEMA
Obtener todas las posibles coberturas mínimas para la función booleana dada en el mapa de
la Figura 4. 18(a).
SOLUCIÓN
La generación de implican tes primos se muestra en la Figura 4. 18(b) Y (c), la tabla de selec~
ción de implicantes primos esenciales en la Figura 4.18(d) y la lista de todos los implican-
tes primos en la Figura 4.18(e). En la tabla de selección se obtiene que existen dos impli·
cantes primos esenciales, PI Y P2' que cubren a los mintenns m2 , m6 , m8 y m9 ·
Sin embargo, existen tres minterms que han quedado sin cubrir por P, y P2 : m7 , m" y
m". Dentro de este grupo, el minterm ni¡ podría estar cubierto por P3 o P" m'3 podría estar
cubierto por p. o P6 y m" podría estar cubierto por P, o P6' lo cual puede expresarse en tér·
mínos del siguiente producto de sumas de estos implicantes primos:
(P 3 + P,) (P. + P() (P, + P()
Multiplicando la segunda y la tercera sumas se obtiene la siguiente expresión:
(P 3 + P,) (P.p, + P' P6 + p. P6 + P()
Como P6 cubre los mísmos mínterms que P' P6 y tiene menos implicantes primos, se
puede suprimir el producto P,P6 de la expresión. Por el mismo motivo, también se puede
suprimir el producto P' P6' 10 que reduce la expresión de cobertura a
(P 3 + P,) (p.p, + P()
Desarrollando esta expresión, se obtiene la siguiente más reducida:
P 3P.P, + p.p, + P3P6 + P' P6
Como P3' p. Y P, no constituyen el conjunto más pequeño de implicantes primos, se
puede prescindir de dicho conjunto. Así pues. de acuerdo con la expresión obtenida se
pueden cubrir los minterms m,.
111" y,,,,, utilizando p. y P,. o P3 Y P6• o P, Y P6 ·
Finalmente. combinando estas tres opciones con los implican tes primos esenciales defi·
nidos anteriormente, se obtienen las tres coberturas mínimas diferentes mostradas en la
Figura 4. 18(e).
156 Principios de diseño digital

- - - - - 0:;- -- f.' .-

wx 00
, 01
, II
, 10
-'
00 1 . .
, , , • GI (2) O O 1 O sí
01 1 1 (8) 1 O O O sí
... G2 (6) O 1 1 O sí
II
"
1 1
" " (9) 1 O O 1 sí
G, (7) O 1 1 sí
, ,
10
" '" (13) 1 O 1 sr
1 1
G. (15) sí

(a) Representación con mapa (h) Lista de adyacencias de orden O.

Lista PI: w'yt, xY'l.. w'.xy, , _-o - ..0 : : - .


wxz. xyz. wyz." " .
Lista EPI: w'y¡', xy'z.
Listas de cobertura: (1) w'yt. x'y''l.. wxy, xyz;
(2) wyt. ry'~ wxy. wyz;
(2) wyt. ry'~ xy~ wyz
. ,
GI (2, 6) O - 1 O no
(e) PI, EPI Ylistas de cobertura (8, 9) - O O 1 no
G2 (6, 7) O 1 1 - no
(9. 13) 1 O - no
G, (7. 15) - 1 1 1 no
(13. 15) 1 - 1 1 no
(e) Lista de adyacencias de orden 1.

. " .' 'v . , .

. '<

PI w yi (2, 6) ® X
P2 xy'z (8, 9) ® X

P, ,.IX)' (6. 7) X X

p. wxz (9. 13) X X

P, xyz (7. 15) X X

p. wyz (13. 15) X X

Minterms cubiertos por EPI: 2


Mintenns no cubiertos:
• 7
8 9
13 15

(d) Tabla de selección de EPI

FIGURA 4. 18 Generación de implicantes primos y selección de la cobertura para el Ejemplo 4.6.


Simplificación de fund!)lll's [Link] · 157

Como se ha comprobado en estos ejemplos, este método de tabulación resul-


ta adecuado para funciones booleanas que tienen relativamente pocos implicantes
primos. Desafortunadarnente, no obstante, cuando el número de variables crece
por encima de 10 y el núm~ro de implicantes supera los 100, este método de tabu-
lación se hace ineficiente, incluso con herramientas CAD utilizadas en estaciones
de trabajo de altas prestaciones. ¡Por este motivo, la mayoría de las herramientas
CAD rápidas utilizan diversas heuristicas orientadlS a satisfacer un conjunto
específico de fines o a determinadas aplicaciones, bibliotecas y tecnologías.

4.5. TRASLACiÓN A LA TECNOLOGíA DE ARRAYS DE PUERTAS


En la Sección 4.4 se presentaron ciertas técnicas utilizadas para obtener las formas
estándar y factori?:adas de funciones booleanas con n variables. Cada una de estas
formas utiliza los operadores booleanos estándar AND, OR Y NOT, y pueden
implementarse fácilmente con puertas AND, OR Y NOT con más de nentradas.
Para reducir el coste y el tiempo de diseño, muchos sistemas se están fabrican-
do actualmente con tecnología de arrays de puertas. Como se ha descrito en la
Sección 3.11, un array de puertas es una matriz bidimensional de celdas en la que
cada celda contiene una única puerta con un número fijo de entradas. Estas puertas
internas a las celdas son normalmente puertas NAND (NOR) de m entradas, o más
frecuentemente, puertas NAND (NOR) de 3 entradas. Para utilizar estos arrays de
puertas, pues, se necesita convertir una expresión o circuito con puertas AND, OR
Y NOT en otro que tenga únicamente puertas NAND (NOR) de m entradas.
Este proceso de conversión, llamado traslación a la tecnología (del inglés
technology mapping), incluye diversas y distintas tareas que se describen en esta
sección. Primero, se muestra una técnica para convertir un circuito con varias
puertas AND, OR Y NOT en otro formado sólo por puertas NAND (NOR). Esta
tarea conlleva dos partes diferenciadas, conversión y optimización. Durante la
conversión, se sustituye cada puerta AND y OR con una puerta equivalente
NAND (NOR), mientras que durante la optimización se eliminan los inversores
dobles que se h<\Il introducido durante la fase dll'conversión. Tras explicar la con-
versión y la optimización, se mostrará cómo una puerta AND (OR) de n entradas
puede descomponerse en una puerta AND (OR) de m entradas. Finalmente, se
mostrará cómo esta técnica de descomposición puede utilizarse para minimizar el
retardo en un circuito con puertas NAND (NOR).
Las reglas de conversión están basadas en el teorema de involución y en las
Leyes de De Morgan, y pueden resumirse como sigue:
Regla 1: xy = «xy)')'
Regla 2: x+ y= «X+ y)')' = (x'y')'
Regla 3: xy = «xy),), = (x' + y')'
Regla 4: x+ y= «x+ »')'
Las Reglas 1 y 2 se usan, generalmente, para la conversión a circuitos NAND,
mientras que las Reglas 3 y 4 se utilizan, generalmente, para la conversión a cir-
158 Principios de diseño digital

cuitos NOR. Todas estas reglas, se muestran gráficamente en la Figura 4.19(a).


También se utiliza una regla sencilla de optimización, que establece que todo
inversor doble puede eliminarse, ya que (x)' = x de acuerdo con el teorema de
involución. Esta regla se muestra gráficamente en la Figura 4.19(b). Obsérvese
que, en la práctica, los inversores se implementan con puertas NAND (NOR) que
tienen todas sus entradas unidas. En esta exposición, utilizaremos el símbolo del
inversor en vez del símbolo de las puertas NAND (NOR) ya que los inversores
. pueden distinguirse más fácilmente de las puertas NAND (NOR).

•• •• •• ~.
~.
~.

• •. •• ~.

~.


(a) Reglas de conversión
~.

~. ~.

(b) Regla de optimización

FIGURA 4. 19 Reglas de conversión y optimización.

En términos sencillos, el procedimiento para convertir circuitos AND-OR en


circuitos NAND (NOR) puede establecerse como sigue:
Sustituir puertas AND y OR por puertas NAND (NOR) utilizando las
Reglas 1 y 2 (3 Y4), Yeliminar los inversores dobles siempre que sea posible.
Como se indica en la Tabla 4.1, este procedimiento de conversión puede apli-
carse fácilmente a formas. estándar de suma de productos y producto de sumas. En
esta tabla, por ejemplo, puede verse que una forma de suma de productos puede
convertirse en una implementación NAND simplemente reemplazando cada puer-
ta por una puerta NAND. Por otra parte, una forma de suma de productos puede
convertirse en un circuito NOR sustituyendo cada puerta por una puerta NOR e
insertando un inversor en cada terminal de entrada y de salida. También puede
verse que el recíproco es cierto siempre y cuando se realice la conversión de una
forma de producto de sumas a implementaciones NAND o NOR. Sin embargo,
debido a los inversores adicionales, raramente se utilizará una forma de producto
de sumas para obtener una implementación con puertas NAND, o una forma de
suma de productos para obtener una implementación con puertas NOR.
Simplificación de funciones booleanas 159

TABLA 4.1 Conversión de suma de productos y producto de sumas a circuitos NAND y NOR

Suma de productos ~ ~ ~

Producto de sumas ~ ~ ~

EJEMPLO 4.7 Conversión a puertas NAND (NOR).


PROBLEMA

Obtenga las implementaciones NANO y NOR de la función de acarreo definida anterior-


mente en la Tabla 2.3 y reproducida en forma de mapa en la Figura 4.20(a).
SOLUCIÓN
En la Figura 4.20(b) se muestran las formas estándar de suma de productos y producto de
sumas, y en la parte izquierda de la Figura 4.20(c) y (d) se muestran las representaciones
sencillas de estas formas con puertas ANO y ORo
A! convertir la implementación de suma de productos en la implementación NANO
mostrada en la Figura 4.20(c), sencillamente se reemplaza cada puerta ANO por una puer-
ta NANO seguida de un inversor (Regla 1), y se reemplaza cada puerta OR por una puerta
NANO con inversores en sus entradas (Regla 2). Tras eliminar los inversores dobles, se
obtendrá la implementación NANO que se muestra en la parte derecha de la Figura 4.20(c).
De manera similar se podrían utilizar las Reglas 3 y 4 para convertir la implementación
de producto de sumas en una implementación NOR. Tras la eliminación de inversores
dobles, se obtiene la implementación NOR mostrada a la derecha de la Figura 4.20(d).
En estas figuras y, a partir de los datos presentados en la Tabla 3.14, pueden verse las
mejores prestaciones de estas implementaciones NANO y NOR, que presentan un retardo
de sólo 3,2 ns desde cualquier entrada hacia la salida, en contraste con las implementacio-
nes ANO-OR y OR-AND, que requieren 5,2 ns. Además, es sabido que estas implementa-
ciones NAND y NOR tienen también un menor coste, ya que requieren 16 transistores en
comparación con los 24 transistores utilizados en las implementaciones ANO-OR y OR-
AND.

En el Ejemplo 4 .7 se ha visto cómo convertir puertas ANO y OR en puertas


NANO (NOR). Sin embargo, si se tienen que utilizar puertas NAND (NOR) dis-
ponibles en una matriz de puertas se necesitará tener en cuenta que las puertas en
dicha matriz tienen sólo m entradas, mientras que los términos AND y OR pue-
160 Principios de diseño digital

den tener hasta n entradas, siendo n mucho mayor que m. Para poder utilizar puer-
tas NAND (NOR) de mentradas, se debe saber cómo descomponer estos mayores
términos AND y OR en puertas AND y OR de mentradas .

. ,
e, o, 011
, 11 10

o 1

• <

1 1 1 1
.
..
(a) Definici61ll en mapa de la función acarreo

O¡+/ ~iYi+XFi+YrCj
cj+l =(x¡+y¡)(x¡+cj(Y¡+c)

(1) Formas estándar

x, --"t-'-.:.../ x, --"J--L.:.../
J, J,
e, -':1-<---.. e, ~c;::;
(e) Implementación NANO

(d) Implementación NOR

FIGURA 4.20 Implementaciones NANO y NOR de la función de acarreo.

En este procedimiento, llamado a veces descomposición de términ!)S; cada


puerta AND (OR) de nentradas se descompone en un árbol de puertas AND (OR)
de n entradas. Este árbol tiene flogmn 1niveles y f(n - l)/(m - 1)1 puertas de m
entradas, asumiendo que el símbolo fxl indica el menor entero mayor o igual que
x, y que el signo LxJ indica el mayor entero menor o igual que x. En el primem-
nivel de este árbol, hay LnlmJ puertas; Jas salidas de estas puertas, junto con las
restantes (n - LnlmJ) entradas del primer nivel, sirven como entractas. a las puenas
del [Link] nivel. Este procedimiento puede repetirse para cada, uno de ros
flogmn I niveles. En el siguiente ejemplo se detalla este procedimiento de des-
composición.
Simplificación de funciones booleanas 161

EJEMPLO 4.8 Descomposición de puertas


PROBLEMA
Descomponer el término ANO de 10 variables xgXrr6xsx4xrr¡xO en un árbol de puertas
ANO de tres entradas.
SOLUCiÓN

Para un término de 10 variables, tenemos rlog31O1 = 3 niveles de puertas en el áIrbol y se


requieren r(lO - 1)/(3 - 1)1 = 5 puertas. Como este árbol NANO tiene 10 entradaS', requie-
re L10/3J = 3 puertas en el primer nivel. En el segundo nivel tiene
3 + (10 - 3QIO/3J» = 4 entradas y, por tanto, requiere L4/3:J' = 1 puerta, y en el tereer nivel
tiene 1 + (4 - 3Q4/3J» = 2 entradas y 1 puerta. Estos cálculos, qne determinan el número
adecuado de puertas en cada nivel, están resumidos en la Figura 4.2l(a).

I 10 LIO/3J=3
2 3+(1O-3(11013J),=4 L4/3J = 1
3 1 ... (4 - 3Q4I3J¡) = 2 L2I3J = 1

(a) Cálculo de las,entradas y las puertas en cada nivel

(a) Una posible descomposici6n (b) Descomposición allemativa

IflGURA 4.2J1 Descomposición de una puerta ANO de 10 entradas en puertas ANO de 3 entradas.

Una vez que se ha determinado el número de puertas en cada nivel, se necesita aún
determinan CÓmo deben conectarse las entradas a las puertas del primer nivel, y cómo las
salidas dedas puertas de un nivel deben conectarse a las entradas de las puertas del siguien-
te nivel. .ESto puede realizarse de varias maneras, cada una de las cuales proporcionará una
combinao:ión diferente de retardos entre las entradas y la salida. En las Figuras 4.21(b) y (e)
se presentan dos posibles descomposiciones que permiten implementar la puerta ANO de
10 entradas con cinco puertas ANO de 3 entradas. Obsérvese que estas dos posibles des-
composiciones difieren únicamente en el retardo de propagación de algun camino de entra-
da/salida. En la Figura 4.21(b), por ejemplo, el retardo de propagación a la salida desde
162 Principios de diseño digital

todas las entradas excepto la situada más a la derecha es de 8,4 ns, y el retardo de propaga-
ción desde la entrada situada más a la derecha a la salida es sólo de 2,8 ns. Sin embargo, en
la Figura 4.21 (c), el retardo de propagación desde las tres entradas de la izquierda a la sali-
da es de 5,6 ns, mientras que el retardo de propagación de las demás entradas a la salida es
de 8,4 ns.

Como regla, la descomposición de puertas ANO y OR debe preceder a la tarea


de conversión siempre y cuando el número de literales en un término producto o
suma dados supere m En otras palabras, la conversión a puertas NANO (NOR) y
la eliminación de inversores dobles puede realizarse sólo después de la descom-
posición, como demuestra el siguiente ejemplo.

EJEMPLO 4.9 Traslación a l¡¡ tecnología de arrays de puertas.


PROBLEMA
Implementar la función suma del sumador completo, utilizando puertas NAND de 3 entra-
das.
SOLUCiÓN

La función suma, definida inicialmente en la Tabla 2.3, se representa en el mapa mostrado


en la Figura 4.22(a). Como se sabe hasta ahora, su forma de suma de productos, que se obtu-
vo en la Figura 4.7(c), puede escibirse de la siguiente manera:
Si: x/y/e; + x;'Yl;' + x¡y¡'c¡' + xiY,c¡
A partir de esta forma estándar, se puede obtener la implementación ANO-OR mostra-
da en la Figu,ra 4.22(b).
Ya que la puerta OR en este circuito tiene cuatro entradas, se necesita descomponerlo
en dos puertas OR con no más de tres entradas cada una, como indica la Figura 4.22(c).
Después de esta decomposición, se puede utilizar ahora la primera de las dos reglas de
inversión para convertir cada puerta en una puerta NAND de tres entradas, lo que llevará al
circuito mostrado en la Figura 4.22(d). Finalmente, pueden eliminarse los inversores dobles
para obtener el circuito NANO optimizado que se muestra en la Figura 4.22(e).

Como se ha mostrado en el Ejemplo 4.8, la descomposición de una puerta


puede producir una red de árboles NAND (NOR) en los que diferentes caminos
en la red pueden tener distintos retardos. Este hecho puede ser provechoso cuan-
do se optimizan las prestaciones de una red lógica dada.
Esta tarea de optimización de las prestaciones, llamada retemporización (del
inglés retiming), se realiza, generalmente, después de la descomposición, conver-
sión y eliminación de inversores, una vez que los diversos retardos a través del
circuito pueden calcularse con precisión. Durante la retemporización, los caminos
con los menores retardos en la red se asignan a las señales con el mayor retardo a
través de toda la red lógica. Después de la retemporización, usualmente tienen que
repetirse los procedimientos de conversión y eliminación una vez más. En el
siguiente ejemplo se muestra este proceso de retiming.
Simplificación de funciones booleanas 163

,
, o o, 11 'o
o I

I I I

(a) Representación con mapa

e, XI Y¡

W-*D-----'I I 'i 'i

I
(b) Implementación AND-OR (e) Descomposición en puertas OR

'i

(d) Conversión a red NANO (e) Red NANO optimizada

FIGURA 4.22 Implementación de la función suma con puertas NANO de 3 entradas .

EJEMPLO 4.10 Retemporización de un diseño •


PROBLEMA

Implementar la función de acarreo anticipado c4 utilizando puertas NAND de 3 entradas.


SOLUCIÓN

La función de acarreo de salida del i-ésimo bit puede definirse por la siguiente ecuación,
donde g¡= x¡Y¡ YP¡ = x¡ + Yi
C i+ 1 = g¡+ p,e¡

Por consiguiente, para representar los primeros cuatro acarreos pueden obtenerse las
siguientes ecuaciones:
C, = go+ Poco
c2 = g , +P, c,
c3 = g2 + P 2C2
c4 = g3 + P 3c 3
164 Principios de diseño digital

Substituyendo, se puede expresar c. más directamente en términos de co' gi y Pi' donde


O~ i ~ 3:
c. ; gJ + P~2 + PJP2g¡ + PJP2P¡gO + PJP2P¡POCO
Esta función se denomina función de acarreo anticipado de 4 bits, ya que el acarreo de
salida c. no depende de los acarreos intermedios c¡, c 2 y cJ . En la Figura 4.23(a) se mues-
tra una implementación ANO-OR sencilla basada en esta expresión. En la Figura 4.23(b)
se presenta una posible descomposición de esta implementación en 3 puenas ANO y OR
de 3 entradas. Posteriormente, convirtiendo a puenas NAND y eliminando inversores
dobles se obtiene el circuito NAND de la Figura 4.23(c). Como puede observarse en la
Figura 4.23(c), el máximo retardo de entrada/salida para esta red de acarreo anticipado es
de 8,2 ns.

~ --------------------,

(a) Implementación AND-OR

', ----------------------~ ', -----Do---------------,

máximo =8,2 ns
~ ~==========~J " .!:!...= ====
(b) Descomposición del diseño (a) (e) Implementación NANO del diseño (b)

1, ', -----D»-----,
P,
1,
Pz PJ
1,
P,
P,
P,
1,
P,
P,
P,
P,
" ,, ~=====
(d) Descomposición con pre5laCiones optimizadas (e) Implementación NANO con prestaciones optimizadas

FIGURA 4.23 Dos implementaciones NANO de la función de acarreo anticipado de 4 bits.


Simplificación de funciones booleanas 165

Sin embargo, es posible que una descomposición alternativa de la puerta OR propor-


cione un retardo inferior. Esta descomposición alternativa asigna los caminos más cortos a
través de la puerta OR a los términos P3P2P ,gOy P3 P2P,CO' produciendo así la nueva des-
composición de la función de acarreo anticipado que se muestra en la Figura 4.23(d), con
la que se obtienen prestaciones optimizadas. Después, Iras la conversión a puertas NANO
y la eliminación de inversores dobles, se obtiene la red NANO mostrada en la Figura
4.23(e). Obsérvese que el máximo retardo de esta red NANO es sólo de 6,4 ns, lo cual
representa una reducción impresionante, del 30%, en el retardo del camino crítico.

En la Figura 4.24 se presenta un diagrama de flujo del procedimiento de con-


versión utilizado para los arrays de puertas en el que las redes multinivel AND-OR
van a ser convertidas en reñes de puertas NAND de m entradas. Como se demos-
tró en el Ejemplo 4.10, este procedimiento consta de cuatro pasos: descomposi-
ción, conversión, eliminación y retemporización. En la tarea de descomposición' se
dividen las puertas AND y OR mayores en árboles de puertas AND y OR de' m
entradas. En el paso de conversión, se reemplaza cada una de estas puertas AND-
OR por una combinación equivalente de puertas NAND (NOR) y NOT. Después,
en la fase de eliminación se suprimen los inversOles dobles innecesarios. A conti-
nuación, se calculan los retardos de entrada/salida para todos los caminos de entra-
da/salida, y los caminos que tienen mayor retardo se' etiquetan para un examen más
minucioso. Si es posible, estos retardos en los cammos críticos se reducen por
retemporización, que puede repetirse tantas veces como sea necesario hasta que se
llegue a un punto en que no pueda reducirse más el retardo del camino crítico.

Descomposición

FIGURA 4.24 Procedimiento de traslación a la,tecnología de arrays de puertas.


166 Principios de diseño digital

4.6. TRASLACiÓN A LA TECNOLOGíA DE BIBLIOTECAS A


MEDIDA
En secciones anteriores se trató sobre la tarea de conversión de un circuito con
puertas AND, OR Y NOT en un circuito NAND o NOR en el que cada puerta
NAND o NOR dispone sólo de m entradas. Como han mostrado los ejemplos, la
conversión puede ser bastante sencilla en este contexto ya que, una vez que la
expresión original o circuito ha sido descompuesto en puertas AND y OR de m
entradas, la conversión consiste básicamente en reemplazar cada puerta AND o
OR de m entradas por la única combinación de una puerta NAND o NOR. Sin
embargo, cuando se trabaja con bibliotecas a medida este procedimiento de con-
versión resulta más complejo, precisamente porque estas bibliotecas contienen
puertas complejas tales como puertas AOI y OAl, lo que significa que cada puer-
ta en el circuito original podría ser sustituida por más de una puerta en la biblio-
teca. Además, esto también significa que cada puerta en la biblioteca podria reem-
plazar a varias puertas en el circuito original. Por este motivo, la traslación a la
tecnología de bibliotecas a medida requiere que se agrupen las puertas en el cir-
cuito original de manera tal que cada grupo represente a una de las puertas de la
biblioteca, mientras que, al mismo tiempo, el circuito obtenido debe tener el
mínimo retardo o coste de implementación.
La tarea de agrupar las puertas en el circuito original puede considerarse como
un proceso de cobertura del circuito original con puertas de biblioteca. Así pues,
minimizando el retardo se seleccionará aquella cobertura para la que el maximo
retardo desde cualquier entrada a la salida sea mínimo. De igual forma, minimi-
zando el coste, se seleccionará la cobertura para la que el coste sea mínimo.
Aunque a veces es posible minimizar el retardo y el coste al mismo tiempo,
generalmente la minimización del retardo y del coste ocasiona dos objetivos con-
tradictorios. Por ejemplo, para minimizar el retardo las señales de entrada deberí-
an pasar por el menor número de puertas posible. Por este motivo, los circuitos
con retardo optimizado tienden a utilizar una forma estándar de suma de produc-
tos (producto de sumas), que requieren sólo dos niveles de puertas, aunque estas
formas pueden necesitar más puertas y, también, puertas con un mayor número de
entradas que las formas no estándar. Sin embargo, para minimizar el coste se veri-
fica lo contrario ya que la implementación del circuito debe tener el menor núme-
ro de puertas posible, y cada puerta debe tener el menor número de entradas posi-
. ble. Por esta razón, los circuitos con coste optimizado suelen utilizar formas no
estándar factorizadas al máximo, con más de dos niveles de puertas, lo que requie-
re menor número de puertas y puertas con menos entradas que con las formas
estándar. Después de lo dicho, puede observarse que la minimización del coste
puede ser vista como un incremento del retardo al introducir niveles adicionales
de puertas, mientras que la minimización del retardo tiende a incrementar el coste
al incrementarse el número de puertas y el número de entradas en cada puerta.
Sin embargo, en muchos casos estos dos objetivos pueden sincronizarse
mientras se \leva a cabo la traslación a la tecnología. Como el objetivo de la
Simplificación de funciones booleanas 167

minimización del retardo es reducir el retardo del camino más largo de entra-
da/salida, denominado camino crítico, no hay razón por la que todos los cami-
nos no críticos no puedan minimizarse en coste, en la medida en que el retardo
de los caminos no críticos no exceda el retardo del camino crítico. Por consi-
guiente, cuando se lleva a cabo la traslación a la tecnología siempre se comien-
za minimizando el retardo del camino crítico y, después, se procede a minimizar
el coste de los caminos no críticos. Para determinar el camino crítico, general-
mente se convierte el circuito dado en un circuito NAND o NOR, ya que las
puertas NAND y NOR son usualmente las más rápidas en cualquier biblioteca.
En el siguiente ejemplo se detalla esta tarea de aplicación a la tecnología de una
biblioteca a medida. -

EJEMPLO 4.11 Traslación a la tecnología de bibliotecas a medida


PROBLEMA

Convertir la expresión w 'z' + z(w + y) en un circuito lógico utilizando cualesquiera puertas


de la biblioteca definida en las Tablas 3. 14, 3.15 Y 3.16.
SOLUCIÓN

Como se muestra en la Figura 4.25(a), la expresión w'z ' + z(w + y) puede implementarse
fácilmente con puertas AND, OR Y NOT obtenidas en esta bibliioteca. Sumando los retar-
dos de cada puerta individual, que se indican en el interior del símbolo de cada puerta, se
observa que el mayor retardo va desde la entrada yo la entrada w hacia la salida F, y es igual
a 7,2 ns. Además, sabiendo que cada puerta AND o OR de 2 entradas requiere seis transis-
tores, y que cada inversor contiene dos transistores, se puede ver que el coste total de esta
implementación es igual a 28 transistores.
Por otra parte, si este circuito se convierte a puertas NAND siguiendo el procedimien-
to descrito en la Sección 4.5, se obtiene el circuito mostrado en la Figura 4.25(b), cuyo
retardo en el camino crítico es de sólo 5,2 ns y' cuyo coste total es de 22 transistores. Como
se observa en la Figura 4.25(c), este circuito permite dos posibles conversiones en relación
al camino crítico desde yo whacia F, que se muestran aquí como alternativas Ay B. Si se
implementa la alternativa A, se reemplazan tres puertas por una puerta AO! de 2 entradas
y 2 niveles y un inversor, como se muestra en la Figura 4.25(d). Desafortunadamente, esta
substitución incrementa en 0,2 ns el retardo en el camino crítico, si bien reduce el coste total
a 20 transistores. Por el contrario, si se implementa la alternativa B, reemplazando tres puer-
tas por una puerta OA! de 2 entradas y 2 niveles, como se indica en la Figura 4.25(e), se
puede reducir a 3,4 ns el retardo del camino crítico y reducir el coste a 20 transistores. Sin
embargo. al mismo tiempo se puede introducir un nuevo camino crítico desde las entradas
wy z hacia la salida F, que tendrá un retardo de 3,8 ns.
Ya que se ha generado un nuevo camino crítico, es necesario volver a prestar atención
en la reducción de su retardo. Sin embargo, para este camino crítico no se puede aplicar
reducción alguna, aunque puede obtenerse una ligera reducción de coste reemplazando la
agrupación formada por los dos inversores y la puerta NANO de 2 entradas de la Figura
4.25(e) por una puerta NOR de 2 entradas y un inversor. El resultado fInal, mostrado en la
Figura 4.25(1), tiene un retardo en el camino crítico de 3,8 ns y un coste total de 18 tran-
sistores.
168 Principios de diseño ~gital

; -r--I~F
I(a) Implementación AND-OR (retardo = 7.2 os; coste = 28)

J::F--'
y

;===::!::jl
(b) Implementación NANO (retardo = 5,2 ns; coste = 22)

-------

r.~ ID· ID.


F
w-------r-il><
, _ _ _ _..J....(¡» - ID·
(e) Dos posibles conversiones

:, ~-~-'---,-
_--'-II~
[-+-I~~~'­
II F

(d) Alternativa A (retardo"" 5.4 ns; coste = 20)

w
,
(e) Alternativa B (retardo = 3,8 os; coste = 20)

w
,
(1) Alternativa B optimizada en coste (retardo = 3,8 ns; coste = 18)

FIGURA 4.25 Ejemplo de tareas en las técnicas de traslación.


Simplificación de funciones booleanas 169

COIIl!1) Iregla, d procedimiento de conversión mostrado en el Ejemplo 4.10,


'que se resume en el diagrama de flujo de la Figura 4.26, puede aplicarse a cual-
quier circuito y <ll cualquier biblioteca. Para empezar, se convierte el circuito dado
en una implementación NAND o NOR, ya que esto permitirá estimar con preci-
sión sus retardos ,de entrada/salida. Después, se clasifican todos sus caminos de
.acuerdo .(lon el [Link] de sus retardos. Una vez determinado el camino con mayor
retardo, se intenta sustituir una puerta del camino crítico por una de las puertas de
la biblioteca. En .cada intento, se anota la ganancia en prestaciones y en coste con

Seleccionar un camino

Seleccionar puerta

IRGURA 4.26 Procedimiento de conversión para bibliotecas a medida.


170 Principios de diseño digital

el objetivo de obtener una cobertura de única puerta que consiga la mayor ganan-
cia. Este procedimiento se repite hasta que todas las puertas del camino crítico
hayan sido cubiertas por, al menos, una de las puertas de la biblioteca. A conti-
nuación, se selecciona la alternativa de mayor provecho y se recalculan los retar-
dos en el resto de los caminos utilizando los mismos procedimientos para cubrir
el más largo de los caminos no cubiertos. Finalmente, cuando todos los caminos
del circuito hayan sido cubiertos, terminará el procedimiento de conversión y se
podrá proceder con la eliminación de inversores y a la retemporización, como se
ha descrito en la Figura 4.24.

4.7. DISEÑO LIBRE DE RIESGOS


Cuando se diseñan .circuitos combinacionales se debe estar seguro de que el cir-
cuito opera adecuadamente bajo todas las posibles condiciones. Una condición que
puede originar un malfuncionamiento del circuito se denomina riesgo. Los riesgos
generan pequeños pulsos espúreos indeseables que aparecen en las salidas a causa
de los diferentes retardos de propagación en caminos diferentes, pero convergen-
tes, a lo largo del circuito. Concretamente, un pulso espurio es un cambio de corta
duración en el valor de la salida cuando no debería aparecer cambio alguno.
El concepto de riesgo se muestra en el ejemplo de la Figura 4.27 , en la que se
expone la representación de mapa- y el circuito lógico correspondiente a la función
booleana F = xy' + yz ..
A partir del circuito de la Figura 4.27(b) puede verse que hay dos caminos
diferentes, etiquetados como a y b, desde la- entrada y hasta la salida F, con dos
retardos de propagación diferentes. El retardv en el camino a, que va desde y hasta
F a través del inversor, una puerta AND y una- puerta OR, es de 5,8 ns, mientras
que el retardo en el camino b, que sólo. atraviesa una- puerta AND y una puerta OR
es de 4,8 ns. En el caso en que x =Z = 1, Y = 1, la salida Fvaldrá 1 debido al cami-
no b. De igual modo, cuando x = z = 1, Y =O, la salida Fvaldrá l debido al cami-
no a. Por consiguiente, en un diseño ideal donde el retardo de las puertas es O, la
salida F debería permanecer a l cuando y cambia de l a O" ya que a se hace igual
a l al tiempo que b se hace igual a O. Sin embargo, en realidad a necesita 3,4 ns
para llegar a valer 1, mientras que b se iguala a O en 2,4 ns, forzando F a O duran-
te 1 ns. Esta situación se muestra en la Figura 4.27(c), en la que y cambia a Oen
lo seguida por un cambio de b a O en lo + 2,4 ns y por un cambio en a al valor 1 en
lo + 3,4 ns.
Ya que F es igual al valor de ao al valor de b, Fcambia a O en 1, = lo + 4,8 ns,
y vuelve a valer 1 en 12 = lo + 5.8 ns. Este pulso espurio de l ns es debido a que
existe un riesgo estático al uno al implementar la función booleana F. Más con-
cretamente, se dice que un circuito lógico tiene un riesgo estático al uno si hay dos
implicantes que difieren en sólo una variable que no están cubiertos por un tér-
mino producto común en la implementación de suma de productos. De igual
forma, se puede defmir un riesgo estático al cero como una condición en la que,
en una implementación de producto de sumas, hay dos minterms que hacen O a la
Simplificación de funciones booleanas 171

función no cubiertos por un término de suma común. Por ejemplo, si se implemen-


ta la función F en la Figura 4.27 utilizando el producto de sumas (x + y)(y' + z), se
observa un pulso espúreo positivo de 1 ns cuando y cambia de O a 1 siendo
x = Z = O.
La definición de riesgo sugiere la técnica para diseñar circuitos libres de riesgos.
A partir de la definición de riesgo, se sabe que existe un riesgo al uno porque se utili-
zan dos términos producto distintos adyacentes para cubrir dos minterms que hacen 1
a la función. Así pues, para eliminar un riesgo debe incluirse un implicante primo adi-
cional que cubra a los dos minterms adyacentes que hacen 1 a la función en la expre-
sión de suma de productos. Este implicante primo adicional es redundante ya que, con
o sin él, la expresión de suma de productos define la misma función booleana.

yZ
x o 01
, 11
, 10
" , 1 ,, r-'
o ,
. ,
, ; ,.
1 ,ei - -- I-- ,,, ,- I- .,
- --
F=xy'+y1.
(a) Representación de mapa

x _ _ _ .,-:~

, - - - - - L:.J
(b) Esquema lógico

x - - - -- - - - - - -

,
a -+! 3,4 1..-

b -+: 2,4 LI+-


______
F -+:+- 4,8 -+~+-
'o ti '1
(e) Diagrama de tiempos

FIGURA 4.27 Diseño con un riesgo estático al uno.


172 Principios de diseño digital:

En la Figura 4.28 se muestra la e1iminación del riesgo C!il:f ejemplo presentado


en la Figura 4.27. 8omO'se ha visto en la Fi~ 4.27, la expJlf!ltién mínima de suma
de productos contiene· 0080 ímplicantes primos esenciales: ~ e yz. En la Figura
4.28(a) se incluyen dlls'·miÍ1terms adyacentes, ms y m¡, que e~ eubiertos por dos
ímplicantes primos diferentes. Estos dos I1lÍAterms introduClm! el pulso espurio
cuando la variable y camtifu de 1 a 0, como se muestra en la ltígura 4.27(c). Para
evitar este pulso espliriií 'se' debe añadir el implicante primo ~¡(' la suma de pro-
ductos. Este implicante-primlJ' introducirá una puerta adicional cuya salida se ha
rotuJ!ado con e en el circuiio ,f6gíco de la Figura4.28(b). Como;tse: muestra en el
diagrama de tiempos de 1á'fffg!lra' 4.28( c), esta puerta redundante evita la aparición
de umwuJso espurio ya que el 'val0r de e = xz es igual a 1 durant~, cambio en el
valor efe y mientras x = z ==1; .i'iIra el diseño de circuitos libres del riesgos puede
aplicarse una técnica sirnilár· a la,iimna de producto de sumas , en [Link] se añaden
implicanleS primos redundantes [Link] evitar los riesgos estáticos al clirO,

x '" " o ,. 01 11
r - ,
, \O

o' ,, I ,,
,
f'i--
1 l' I

(a) Representación de mapa

(b) Esquema. lógiCo,

x-------------------
ylf-----

a ....,, 3.' ¡;::


b ....,, 2.4 1_
i

,
F ----~--------------

(e) Diagrama de tiempos

FIGURA 4.28 Diseño libre de riesgos.


Simplificación de funciones booleanas 173

En general, los riesgos estáticos se originan a causa de dos señales comple-


mentarias (tales como ye y'), que se hacen iguales por cortos períodos de tiempo
debido a los diferentes retardos en caminos distintos a través del circuito. Si ade-
más dos señales que tienen siempre el mismo valor se hacen diferentes por un
corto período de tiempo, se dice que el diseño presenta un riesgo dinámico. Esta
situación se produce cuando el mismo valor de la variable se propaga a través del
diseño por dos caminos diferentes con distintos retardos. Un riesgo dinámico oca-
siona un pulso espurio en la salida después de una transición de O a 1 Ó de I a O.
Como ejemplo, considérese el diseño de la Figura 4.29, que fue obtenido aña-
diendo una puerta ANO y otra OR al diseño con un riesgo estático al uno de la
Figura 4.27(b). Como se muestra en el diagrama de tiempos de la Figura 4.29(b),
la señal c genera un pulso espurio a los lo + 4,8 ns después de que y cambie de 1
a O en lo. Por otra parte, la señal dcambia de O a 1 en I I = lo + 3,4 ns. Como en ese
instante ces igual a 1, la salida Fcambiará a 1 en 12 = I I + 2,4 ns. Sin embargo, el
pulso espurio en la señal c aparecerá a la salida en 12 + 1,4 ns y desaparecerá 1 ns
después en 12 + 2,4 ns.

,
.,
~. ID
ID
.. fII F

w ~===g
(a) Esquema lógico

x-----------
yl f - - - -
,
W __ -j--_ _ _ _ _ _ __

~ 1'- 4.8 ~""-


, r--r'----
d -..: 3,4 I+- :
, ,

F --!c--.;-~

'o "
(h) Diagrama de tiempos

FIGURA 4.29 Riesgo dinámico .


174 Principios de diseño digital

Este riesgo dinámico puede eliminarse del diseño de varias formas distintas.
Una de ellas, es eliminar el riesgo estático introduciendo un implicante primo
redundante, como se ha expuesto anteriormente. Otra manera consiste en retrasar
el cambio en dhasta 12, insertando en d otra puerta con un retraso de 2,4 ns o más,
entre la puerta OR y la puerta AND de salida. Este retardo adicional retrasará el
cambio en d de O a 1 hasta 12, y el cambio en F de O a 1 hasta 12 + 2,4 ns, cuando
el pulso espurio ya haya desaparecido.
Hasta ahora se ha mostrado que los riesgos estáticos y dinámicos causan un
funcionamiento erróneo del circuito durante cambios en una variable. La detec-
ción y eliminación de riesgos con cambios en múltiples variables es más difícil, y
se encuentra fuera del alcance de este libro .
. Como conclusión, los riesgos en lógica combinacional no son tan críticos ya
que las salidas alcanzan su valor estable tras algún tiempo. Por otra parte, los ries-
gos en circuitos secuenciales son críticos ya que los pulsos espúrios pueden con-
fundirse con pulsos de señales válidas y llevar a un componente secuencial a un
estado incorrecto, sin la posibilidad de recuperarlo de este malfuncionamiento.

4.8. RESUMEN DEL CAPíTULO


En este capítulo se han introducido dos métodos para la simplificación de expre-
siones de funciones booleanas. El primer método se basa en la representación con
mapa de una función booleana, que es muy conveniente para la identificación
visual de implicantes primos. A pesar de que el método con mapa es muy utiliza-
do en esta identificación, no proporciona un procedimiento· sistemático para la
selección de los implicantes adecuados que se incluyen en la cobertura mínima.
Por otra parte, el método tabular proporciona un procedimiento sistemático para
obtener todos los implican tes primos, seleccionar los implican tes primos esencia-
les y obtener todas las coberturas mínimas que serán utilizadas para la implemen-
tación de una función booleana. Aunque el método tabular garantiza la obtención
de todas las coberturas mínimas, no es práctico desde el punto de vista computa-
cional para funciones booleanas con un gran número de variables, ya que precisa
de mucho tiempo para obtener todas las coberturas mínimas. Por este motivo, la
mayoría de las herramientas CAD para la síntesis lógica utilizan distintas heurís-
ticas para acortar el tiempo de cómputo de los algoritmos de síntesis.
Incluyendo los métodos del mapa y de tabulación, la mayoría de los métodos
de simplificación de funciones booleanas minimizan el número de operadores en
la expresión utilizada para la implementación de la función. Ya que estas imple-
mentaciones se construyen con puertas de diferentes bibliotecas, se necesita apli-
car, después del proceso de simplificación, un procedimiento para la traslación a
la tecnología que transforme los operadores de una expresión booleana en puertas
de la biblioteca dada. En este capítulo se han introducido dos métodos para la tras-
lación a la tecnología. El primer método se diseña para arrays de puertas, en los
que la biblioteca completa contiene puertas NANO o NOR sencillas con un núme-
ro de entradas fijo. En este método, primeramente se descomponen las puertas
Simplificación de funciones booleanas 175

grandes en puertas más pequeñas con el mismo número de entradas que las puer-
tas NAND o NOR de la biblioteca, y después cada puerta se convierte en puertas
de la biblioteca utilizando las reglas de conversión dadas. Tras la conversión de
las puertas, se procede a la eliminación de inversores para reducir el coste, y a una
retemporización para reducir el retardo de propagación en los caminos críticos.
El segundo método presentado está pensado para bibliotecas a medida, que
incluyen puertas complejas que pueden realizar varias operaciones booleanas
diferentes concurrentemente. En este método, primero se implementa una función
booleana con puertas NAND y NOR para estimar con precisión el retardo de pro-
pagación y para obtener los caminos críticos en las implementaciones. Después de
estimar el retardo, primero se intenta reducir el coste de los caminos críticos y, a
continuación, se procura reducir el coste de los caminos no críticos. De este modo
se pueden satisfacer los dos requisitos contrapuestos de coste y optimización de
prestaciones.

4.9. LECTURAS ADICIONALES


Devadas, S ., A. Ghosh y K. Keutzer. Logic Synthesis, New York: McGraw-Hill, 1994.
Una exposición matemática muy detallada de los algoritmos utilizados en las herra-
mientas CAD para síntesis lógica. Recomendado para estudiantes interesados en algo-
ritmos de síntesis lógica y herramientas CAD.
Karnaugh, M. "A map method for synthesis of combinatoriallogic circuits". Transactions
ofthe AlEE, Communications and Electronics, Vol. 72, Part I (Noviembre 1953), pp.
593-599.
El artículo que introdujo el método del mapa.
McCluskey, E. Logic Design PrincipIes. Englewood Cliffs, NJ: Prentice-Hall, 1986.
Un libro de introducción al diseño lógico escrito por uno de los pioneros en la materia.
Incluye una buena visión panorámica de los principios del diseño, diseño libre de ries-
gos y métodos de test, así como la formulación original de McCluskey del método de
tabulación.
Quine, W. ''The problem of simplifying truth functions ." American Mathematical Monthly,
Vol. 59 (Octubre 1952), pp. 521-531.
El artículo que introdujo el método tabular.

4.10. PROBLEMAS
4.1. (Representación de cubos) Especi- (d) F = x'iz' + wiz + xyz' + w'yz'
ficar las representaciones de cubo e
identificar todos los subcubos para 4.2. (Representación con mapa) Generar
las siguientes funciones booleanas. las representaciones con mapa para
(a) F = i ,io + xoY' , + x,i , + X,Xo +
las siguientes funciones booleanas.
(a) F = w'x' + xy + wi + wx
x)i o
(b) F = w'i + wz + w'y (b) F = x',x'o +x',Yo + y,Yo + x',y, +
(e) F = w'x' + xy + wy' x'oY,
176 Principios de diseño digital

(e) F = w'z' + wz + w'y + yz 4.8. (Método tabular) Utilizando el méto-


(d) F = w'xi + w'xy + wxz + wxy do tabular, obtener todos los implican-
+ w'yi tes primos esenciales y coberturas
mínimas para las siguientes expresio-
4.3. (Fonnas estándar) Utilizando el méto-
nes booleanas.
do del mapa, obtener la fonna están-
(a) F = l:(O, 1,2,3,5,6,7, 10, 11,15)
dar de suma de productos para las
(b) F = l:(O, 1, 2,3,6,7, 8,9, 12, 13,
siguientes funciones booleanas.
14, 15)
(a) F=y',(y'o+xol+x,(y',+xo+y'ol (e) F = l:(O, 2, 4, 5, lO, 11, 13, 15)
(b) F = x ,xoY' ,y'o + x ,xoY' ,Yo + (d) F = l:(1, 2, 3, 6, 7, 8, 9,12, 14)
x,xoY ,Yo + x,xoY,y'o
(e) F = w'z' + yz + wz 4.9. (Método tabular) Utilizando el méto-
(d) F = w'y'z' + xy'z + wyz + xyi do tabular, obtener todas las cobertu-
ras mínimas para las siguientes fun-
4.4. (Método del mapa) Utilizando el
ciones booleanas.
métod o del mapa, determinar los
(a) F = wx + xy' + lV'y
implicantes priinos de las siguientes
(b) F = w'y'z' + xy'z + lVyz + wxy +
funciones booleanas.
w/xz'
(a) F = x ,x o + y,Yo + x,xoY,Yo +
(e) F = wxy'z' + WXZ' + x'y'z + w/y
X ,xoY,y'o + x ,x oY,y'o
(b) F = w'x + w'xy + wxy' + wx (d) F = x ,xoYo + x ,y, + x,x'oY,Yo
(e) F = w'y'z' + xy'z + wyz + x'yz' 4.10. (Traslación a arrays de puertas)
(d) F = w'y + w'xz + xyz' + wxy' + Convertir la función wxy' + yw'i +
wy'i yxz + yxw a:
(a) puertas NAND de 2 entradas
4.5. (Método del mapa) Obtener todos los
(b) puertas NAND de 3 entra4as
implicantes primos esenciales para las
(e) puertas NAND de 4 entradas
siguientes funciones booleanas.
(a) F =y',(y'o+xo+x,) +x ,(xo + y'o) 4.11. (Traslación a arrays de puertas)
(b) F = x,xoY ,y'o + x,xoY',Yo + Convertir las siguientes funciones a
x,xoY ,Yo + x,xoY ,y'o puertas NOR de 3 entradas.
(e) F = w'xz' + w'xy + wxz + wxy' (a) F = wxy' + xyz + w'yz' + wxy
(d) F = y'z + wyz + 1V'(y' + z') (b) F = wxy' + y(w'z' + x(z + w))
(e) F = wxy' + w'yz + xz(w + y)
4.6. (Método del mapa) Obtener todas las
(d) F= w'(yz' + xy) + w(xy' + xz)
coberturas mínimas para las siguien-
tes funciones booleanas. 4.12. (Traslación a arrays de puertas)
(a) F = w'x + w'xy + wx + wxy' + xy Suponer que las siguientes expresio-
(b) F = yz + w'z' + IVy'Z nes han de implementarse con puertas
(e) F = xy'i + wy'z + xyz + w'yz' NOR de 2 entradas y realizar la des-
(d) F = wy'z' + wxy' + w'y + w'xy'z composición de puertas que minimice
+ wxyz' su retardo.
(a) F = w'xyz' + w'y'z' + wy'z + yz +
4.7. (Método tabular) Utilizando el méto-
w'x'yz'
do tabular, obtener todos los implican-
(b) F = w'y + wz + w'z'
tes primos para las siguientes expre-
(e) F = w'x + wx + w'xy + wy'z' +
siones booleanas.
wxy'z
(a) F=l:(O,4,5,8,9, 10, 12, 13, 14, 15)
(d) F = wi + xy + w'x + wxyz
(b) F = l:(O, 1,2,4,5,6,9, 11 , 13, 15)
=
(e) F :E(l, 2, 3, 6, 7, 8, 9, 12, 14) 4.13. (Traslación a la tecnología) Utilizando
(d) F = :E(O, 2, 4, 5, lO, 11 , 13, 15) la biblioteca definida en las Tablas 3.14,
Simplificación de funciones booleanas 177

3.15 Y3.16, realice la traslación a la tec- (e) La biblioteca a medida definida


nología y minimice el retardo para las en las Tablas 3.14, 3.15 Y 3.16.
siguientes funciones booleanas.
4.17. (Traslación a la tecnología) Obtenga
(a) F=y'¡(Yo+xo+x¡)+x¡(xo+y'ol
una implementación con retardo míni-
(b) F = w'(x'z' + xy) + w(xz + x'y')
mo para la función de acarreo antici-
(e) F = w'x'z + w'xy + wxz + wx'y'
(d) F = wx'y' + y(w'z' + x(z + w)) pado c. = g3+ PJ82 + P~2g¡ + P~2P¡go
+ P~2P¡POco que utilice:
4.14. (Traslación a la tecnología) Rehacer el (a) La biblioteca a medida definida
problema 4.13 utilizando sólo la en la Tabla 3.14.
biblioteca definida en la Tabla 3.14. (b) La biblioteca a medida definida
en las Tablas 3.14 y 3.15.
4.15. (Traslación a la tecnología) Rehacer el
(e) La biblioteca a medida defini-
problema 4.13 utilizando sólo la
biblioteca definida en la Tabla 3.16. da en las Tablas 3.14, 3.15 Y
3.16.
4.16. (Traslación a la tecnología) Comen-
4.18. (Diseño libre de riesgos) Detectar y
zando con el ' sumador completo defi-
corregir todos los riesgos estáticos
nido en la tabla del Problema 3.15,
para la solución propuesta en el
c:tiseñar una implementación con retar-
Ejemplo 4.1.
do mínimo que utilice:
(a) La biblioteca a medida definida 4.19. (Diseño libre de riesgos) Diseñar una
en la Tabla 3.14. implementación libre de riesgos para
(b) La biblioteca a medida definida la función booleana dada en el
en las Tablas 3.14 y 3.15. Ejemplo 4.2.
e A U L o

Componentes
combinacionales

3
Álgebra booleana Puertas lógicas
y bieslables
180 Principios de diseño digital

En este capítulo se diseñan los componentes combinacionales básicos que se uti-


lizan en el diseño digital a nivel de registro. Estos componentes combinacionales,
junto con una variedad de componentes de almacenamiento, completan la micro-
arquitectura de todos los procesadores estándar y circuitos integrados de aplica-
ción específica a medida. Los componentes combinacionales pueden utilizarse
para transformar datos, para interconexiones y para control. Más concretamente,
los componentes para transformación de datos realizan operaciones aritméticas
(suma, resta, multiplicación y división), operaciones lógicas (AND, OR, XOR y
complementación), operaciones de comparación (mayor que, igual que y menor
que) y operaciones de tratamiento de bits (desplazamiento, rotación, extracción e
inserción). Los componentes de interconexión, que comprenden selectores y
buses, se utilizan para conectar componentes aritméticos y de almacenamiento.
Los componentes de conversión tales como decodificadores y codificadores se
usan para realizar conversiones entre diferentes códigos. Finalmente, los compo-
nentes universales como memorias de sólo lectura (ROM, Read Only Memory) y
arrays lógicos programables (PLA) se utilizan principalmente en el diseño de uni-
dades de control.
En las secciones siguientes se describen todos estos componentes y se mues-
tra cómo pueden construirse a partir de puertas estándar. Para simplificar las
explicaciones, se utilizan sólo puertas genéricas AND, OR, XOR Y NOT, y no se
intenta optimizar cada diseño para una tecnología o biblioteca particular.

5.1. SUMADORES CON ACARREO EN CASCADA O PROPAGADO


En esta sección se describen los componentes aritméticos utilizados para realizar
la suma binaria. Como se explicó en el Capítulo 2, para sumar dos números bina-
rios x = Xn_l".xO e Y = Y,,- I"'YO se suman cada par de bits X¡ e y¡, así como el bit de
acarreo e¡, el cual se propaga desde la posición del bit anterior. Sumando estos bits
para cada posición i, entre O y n - 1, se produce el bit de suma s¡ y un bit de aca-
rreo de salida e¡+ l ' Este procedimiento para la suma de un bit se de¡¡l:ribió en la
tabla de verdad de la Tabla 2.3 y se repite en la Figura 5.1 (a).
Para obtener el circuito lógico de este sumador binario, se necesita convertir
la tabla de verdad de la Figura S:J(a) en la representación con mapa de la Figura
5.1 (b). A partir de esta representación se pueden conseguir expresiones booleanas
que tienen un mínimo número de literales, necesarios para el diseño de un suma-
dor de un bit. Como este sumador realiza la suma de dos bits X¡ e y¡, Y del bit de
acarreo e¡, generalmente se le denomina sumador completo (FA, Full Adder).
Como se recordará, este sumador completo se utilizó ampliamente en el Capítulo
3 como ejemplo de cómo implementar una función booleana dada con diferentes
bibliotecas (Ejemplos 3.7 y 3.8) Y tecnologías (Figuras 3.21 , 3.22 Y 3.24). En la
Figura S.I(c) se muestra el circuito lógico para este FA, que contiene cinco puer-
tas genéricas.
Como regla, cualquier sumador binario puede implementarse como una cone-
xión serie de FA, dispuesta de manera que el acarreo de salida de cada FA sirve
Componentes combinacionales 181

de acarreo de entrada para el siguiente FA más significativo. Por ejemplo, un


sumador de 8 bits consta de ocho FA conectados de acuerdo con el circuito de la
Figura S.l(d). En general, cualquier sumador de n bits, cuyo símbolo gráfico se
muestra en la Figura 5 .1(e), podría construirse de este modo. Como puede verse,
el mayor retardo en el sumador sería desde el acarreo de entrada co, o bits menos
significativos Xo e Yo, al acarreo de salida Cout. Es decir, cualquier cambio en co, Xo
o Yo tiene que propagarse o difundirse por todos los FA, por lo que a este suma-
dor se le denomina sumador de acarreo propagado (ripple-carry adder).

x¡y. i ,,
ei O 01 11 10 ei O 01 11 10
o O O O O "
, , , , , ,
O O J O J O I I O I
O J O O J
O 1 1 1 O , , o , •
I O O O I I I I I I I I
I O I I O
I I O I O
1 I 1 1 1
(a) Tabla de verdad del sumador (b) Representación con mapa
completo
Xi Yi

x y

u "
• :.;'
Ci
Sumador


.Jo •

I s .
Si
(e) Circuito lógico del sumador completo (e) Símbolo gráfico
.'

(d) Unidad de suma de ocho bits

FIGURA 5.1 Sumador de acarreo en cascada.


182 Principios de diseño digital

5.2. SUMADORES CON ACARREO ANTICIPADO


Sin embargo, es posible reducir el retardo del acarreo en cascada en este tipo de
sumador de acarreo propagado utilizando lo que se denomina la técnica de aca-
rreo anticipado. Esta técnica es ventajosa debido a que la mayor parte de las
expresiones de cada acarreo en la cadena pueden ser precalculadas. Para explicar
este concepto, primeramente trataremos de precalcular los acarreos de un suma-
dor modular de 4 bits, que suma Xi+:¡Xi+zXi+'X i , Yi+3Yi+2Yi+'Yi y el acarreo de entrada
e i · En este sumador modular, si se defme la función generación de acarreo gi = X¡}'i
y la función propagación de acarreo P i = Xi Ea Yi' los cuatro acarreos ei+" ... ,ei+4
pueden expresarse corno sigue:

Ci+l = g¡ + p,e; I (5.1)


Ci+2 = gi+l + P;+lCi+l (5.2)
,Ci+3 = gi+2 + P i+2Cj+2 (5.3)
Cj+4 = gi+3 + P i+3 Ci+3 (5.4)

Además, tras sustituir términos, se puede expresar cada uno de estos acarreos
en términos de ei' como en las siguientes expresiones:

Ci+ 1 = g¡+ Pic ¡ (5.5)


C¡+2 = gj+l + P i+ lg ¡ + p¡+lP¡c¡ (5.6)
Ci+3 = g¡+2 + Pi+2Ei+ ! + Pi+2Pi+lg¡ + P¡+2Pi+tP¡Ci (5.7)
Ci+4 = gi+3 + Pi+3gi~2 t P i+3Pi+'2Ei+l
+ Pi+3Pi+2Pi+ !gi + P i+3Pi+2Pi+tP¡C¡ (5.8)
Las ecuaciones (5.5)-(5.8) [Link] los acarreos ei+" ei+2' ei+3 Y ei+4 pue-
den calcularse directamente a partir de los bits de entrada y del acarreo de entra-
da ei sin el efecto cascada. En otras' palabras, ninguna de las Ecuaciones (5.5)-
(5.8) depende de ei+ " ei+2' ei+3 o ei+4. sin embargo, esta técnica no puede ampliar-
se fácilmente a módulos de n-bits, siendo n mayor que cuatro, a causa de las limi-
taciones en la conectividad de entrada y salida. Corno se observa en la Ecuaciones
(5.5)-(5.8), el número de términos producto y el número de literales en cada tér-
ntino producto se incrementa en uno en cada ecuación sucesiva, necesitando ade-
más puertas con n+ 1 entradas para un módulo de n bits. Si la biblioteca disponi-
ble contiene puertas con conectividad de salida mucho más pequeña, estas puer-
tas deben implementarse con múltiples niveles de puertas, como se ha visto en el
Ejemplo 4.10. Una implementación con múltiples puertas introduce mayores
retardos, lo que contradice el objetivo de mejorar la velocidad de propagación del
acarreo.
De forma similar, al incrementarse el número y tamaño de los términos en las
Ecuaciones (5.5)-(5.8), puede observarse un incremento en la aparición de varia-
bles en esos términos. Concretamente, cada variable Pi+k> O::; k ::; n - 1, aparece
(k + l)(n - k) veces en las ecuaciones del acarreo. Por ejemplo, Pi aparece cuatro ·
veces YPi+" Pi+2 YPi+3 aparecen 6, 6 y 4 veces, respectivamente. Con un número
mayor de aparición de variables, debe incrementarse la conectividad de salida de
Componentes combinacionales 183

sus adaptadores, lo que implica incrementar el tamaño' y el retardo de la imple-


mentación completa. Por estas razones prácticas, n se limita usualmente a 4.
La Ecuación (5.8) puede ser también reescrita como -
(5.9)
donde
g(i,i+3) = gi+3 + P i+3gi+2 + Pi+3Pi+zgi+1
+ P i+3Pi+2Pi+lgi (5.10)
P(i,i+3)= Pi+3Pi+2Pi+lfJi (5.11)

En las Ecuaciones (5.5)-(5.11) se ha definido el componente combinacional,


denominado generador de acarreo anticipado (CLA) (carry-look-ahead gene-
rator). En las Ecuaciones (5.10) y (5.11), específicamente, se han definido las
funciones generac,ión de acarreo y propagación de acarreo para un módulo de 4
bits, que pueden utilizarse por los CLA de mayor orden en la generación de aca-
rreos en módulos mayores de 4 bits.
Este generador CLA puede utilizarse para reemplazar la cadena de acarreo de
4 bits que calcula Ci+ l' ci+2' ci+3 y ' c¡+4 haciendo, así, más rápido el sumador.
Considérese, por ejemplo, la comparación entre un sumador con acarreo anticipa-
do y un sumador en cascada. Como se observa en la Figura 5.2(a), la cadena de
acarreo de 4 bits en el sumador en,cascada contiene una puerta ANO y una puer-
ta OR, utilizadas para calcular Ci+l = g¡ + PiCio
Sin embargo, si reemplazáramos esta cadena de acarreo por el generadQr CLA
mostrado en la Figura 5.2(b) obtendríamos el sumador CLA mostrado en la Figura
5.2(c). En esta versión del sumador, el generador CLA produciria cuatro acarreos
con menos retardo que la cadena de acarreo propagado. Los retardos de entra-
da/salida para el sumador de acarreo propagado de la Figura 5.2(a) y el sumador
CLA de la Figura 5.2(c) se resumen en la Tabla 5-1. Como puede observarse en
la tabla, el generador CLA tarda sólo 8.8 ns en generar C¡+4' lo que es significati-
vamente menor que los 19,2 ns que requiere la cadena de acarreo propagado. De
igual forma, el retardo desde X¡ o y¡ hasta Ci+4 es de 13,0 ns para el sumador CLA,
a diferencia de los 23,4 ns del sumador de acarreo propagado. De esta compara-
ción, pues, se deduce que el generador CLA de 4 bits originará un sumador de 4
bits más rápido, y que conectando varios sumadores de 4 bits como éstos se podría
mejorar también sustancialmente la velocidad de sumadores mayores. En la
Figura 5.3(a) se muestra un sumador de 16 bits que contiene cuatro sumadores
con acarreo anticipado de 4 bits. El sumador se ha realizado de forma tal que los
acarreos en cada sumador de 4 bits se calculan con un generador CLA, mientras
que los 4 bits de acarreo C4' cs, cl2 Y Cl6 se propagan en cascada a través de los
módulos de 4 bits, de manera que el acarreo de salida desde un generador servirá
como entrada de acarreo al siguiente generador más significativo.
Este tipo de sumador, en el que los generadores CLA se han utilizado para
aumentar la velocidad de los acarreos en módulos de 4 bits, mientras que los aca-
rreos entre los generadores se propagan en cascada a través del sumador, se
denomina sumador CLA de un nivel. También se puede hacer más rápida la
184 Principios de diseño digital

generación de los 4 bits'de acarreo c4. c s . C12 Y C16 utilizando un generador CLA
adicional .

"

(a) M~ulo de 4 bits de un sumador con acarreo en cascada

(b) Circuito lógico de acarreo anticipado

(e) Sumador de 4 bits con generador de acarreo anticipado

RGURA 5.2 Generador de acarreo anticipado.

Utilizando la Ecuación (5.9). los acarreos c4. cs. C12 Y C16 pueden expresarse
como:
C4 = g(O,3) + P (O.3)cO (5.1 2)
Cs = g(4,7) + P (4,7)C4 (5.13)
C12 = g(S,II) + P (S, II )CS (5. 14)
C16 = g(12.15) + P (12 ,15)C12 (5. 15)
Componentes combinacionales 185
.. ,.
TABLA 5.1 Retardos en cascada y con acarreo anticipado
para un sumador modular de 4 bits'

c¡(x¡. Yi) a ej+ I 4,8 (9,0) 4,8 (9,0)


c,{x¡. Yi) a Ci+2 9,6 (13,8) 5,6 (9,8)
C,{X¡, Yi) a ej+3 14,4 (18,6) 6,4 (10,6)
c,{x¡. Yi) a Ci+4 19,2 (23,4) 4,8 (I3,Q)
c,{x¡. YI) a g (i,;+3) No aplicable 6,4 ( 10,6)
c,{x¡. Yi) a P (i,;+) No aplicable 3,2 (7,4) •
• Los valores entre paréntesis son retardos desde X¡ o Yi-

Ya que las Ecuaciones (5 .12)-(5. 15) tienen la misma forma que las Ecuaciones
(5 .1)-(5 .4), puede utilizarse un generador CLA para generar los acarreos C4' cs, C l 2
y Cl6 como indica la Figura 5.3(b). Observe que, en este diseño a dos niveles, el
acarreo no se propaga en cascada a través de los generadores CLA; por el contra-
rio, el segundo nivel genera estos acarreos para los generadores CLA del primer
nivel. En este diseño, pues, los acarreos de salida c,¡, cs, cl2 Y Cl6 desde el primer
nivel de generadores no se utilizan. En su lugar, se utilizan las salidas 8(i.;+3) y
P (i,;+3) desde los generadores del primer nivel para generar estos acarreos en el
generador CLA del segundo nivel. .

(a) Generador CLA de un nivel

,(b) Generador CLA de dos niveles

RGURA 5.3 Sumador de 16 bits con acarreo anticipado.


186 Principios de diseño digital

Igual que en la Ecuación (5.9), se puede defInir el acarreo C16 en términos del
acarreo de entrada Co con la siguiente ecuación: •
(5.16)
Las funciones de 16 bits de generación de acarreo y propagación de acarreo,
g(0.15) Y P (0. 15) tienen la misma forma que las dadas por las Ecuaciones (5.10) y
(5.11), Ypueden utilizarse para la generación de acarreos de mayor orden C16' C32'
c48 Y c64 en un sumador de 64 bits con tres niveles de generadores CLA.
En general, en un sumador de n bits se pueden utilizar r lo~n1niveles de gene-
radores CLA. En la Tabla 5.2 se han comparado los retardos de los sumadores de
16 bits de las Figuras 5.3(a) y (b), que disponen de generadores CLA de uno y dos
niveles, con el sumador de 16 bits de acarreo propagado.

TABLA 5.2 Retardos de acarreos en cadena para el sumador de 16 bits'

Co(Xo. Yo) • C4 19.2 (23.4) 4.8 (13.0) 4.8 (13.2)


co(Xo. Yo) • Cg 38.4 (42.6) 9.6 (17.8) 5.6 (16.2)
co(Xo. Yo) • CI2 57.6 (61.8) 14.4 (22.6) 6.4 (17.0)
co(Xo, Yo) a CI6 76.8 (81.0) 19.2 (27.4) 4.8 (19.4)

I Los valores entre paréntesis son retardos desde Xo o Yo.

En la tabla se observa que el sumador de 16 bits con dos niveles de genera-


dores CLA es, aproximadamente, un 30 por ciento más rápido que un sumador
que utilice sólo un nivel de generadores CLA y, además, es cuatro veces, apro-
ximadamente, más rápido que un sumador de acarreo propagado. La razón de
esta diferencia en el retardo está en la realización de las cadenas de acarreo en
los sumadores de acarreo propagado y con acarreo anticipado. Para comparar
estos retardos, asumiremos que cada puerta tiene idéntico retardo. Bajo esta
hipótesis, un sumador con acarreo propagado de n bits tiene 2n retardos de puer-
ta, como puede apreciarse en la Figura 5.2(a). Por otra parte, el sumador de n bits
con rlog4n1niveles de generador CLA requiere (ilo~1) retardos de puerta para
generar los acarreos del nivel más alto y otros 2d lo~n 1-1) niveles de puerta para
generar acarreos por cada bit, como se ha mostrado en la Figura 5.3(b). Así pues,
. el retardo de puerta total crece logarítmicamente con el número de bits en un
sumador CLA, mientras que crece linealmente en un sumador de acarreo propa-
gado.
Por comodidad, se utilizará la técnica de acarreo propagado a lo largo de este
libro, aunque debe tenerse en cuenta que, en la práctica, la técnica CLA se utiliza
más frecuentemente en diseños de ~tas prestaciones.
Componentes combinacionales 187

5.3. SUMADORES I RESTADORES


Como regla, la substracción binaria se realiza sumando al minuendo el comple-
mento a dos del substraendo. El complemento a dos se obtiene complementando
cada bit del sustraendo y sumando l. Esta adición del 1 se lleva a cabo poniendo
el acarreo de entrada Co a l mientras se suma el minuendo al complemento del
substraendo. Es decir, en general la resta se realiza a partir de la suma y, por este
motivo, usualmente es más conveniente construir una unidad funcional que reali-
ce tanto la suma como la resta.
En general, este sumador/restador tendrá dos entradas A = an_l· .. aO Y
B = bn-l ... boY una salida F = fn-l .. Jo, así como una señal de selección, S. Siempre
que S = 0, el sumador/restador realizará la suma, y cuando S = 1 realizará la resta.
La tabla funcional para el sumadorlrestador se muestra en la Figura 5.4(a), y su
símbolo gráfico se indica en la Figura 5.4(b). Finalmente, como ejemplo, en la
Figura 5.4(c) se muestra un sumador/restador de 8 bits. Obsérvese que esta figu-
ra representa un diseño de acarreo propagado, si bien podría también utilizarse
una implementación de acarreo anticipado (eLA) como la expuesta en la Sección
5.2. En esta implementación, el complemento de la entrada B se obtiene realizan-
do una operación XOR entre S y B.

A B

s
Sumador/restador
o A+B Suma
I A+B'+I Resta
(a) Tabla de verdad
F
(b) Sfmbolo gráfico

(e) Circuito lógico

FIGURA 5.4 Sumador/restador en complemento a 2.


188 Principios de diseño digital

5.4. UNIDAD LÓGICA


En el sentido más amplio de la palabra, una unidad lógica permite realizar una
entre varias funciones booleanas con dos operandos X = xn_" "xo e Y = Yn-" "Yo' Es
decir, siempre que la funció[Link] se seleccione, la unidad lógica generará el resul-
tado S =..t;{X, Y) =.fj(xn_" Yn_')··..fj(xo, Yo)'
Ya que una unidad lógica que realice las 16 funciones booleanas de dos varia-
bles no es demasiado compleja, utilizaremos esta unidad para demostrar los pro-
cedimientos generales que se utilizan para diseñar cualquier unidad lógica dada.
En la Figura 5.5(a) se muestran las 16 funciones booleanas de dos variables.
Como son 16 funciones, deben utilizarse cuatro variables de selección S3' S2' S, Y
So para permitir elegir cualquiera de estas funciones. La codificación de estas
variables de selección para una función dada es tal que la variable de selección Si'
para O ::; i ::; 3, es igual a 1 si y sólo si el minterm mi = 1 para esa función. Por
ejemplo, la función OR esf'4 = l1IJ + m2 + m" así que los valores de las variables
de selección son S3S2S,SO = 1110. Obsérvese que, cuando el valor de las variables
de selección S3S2S,SO se interpreta como un número binario, será igual al índice
de la función que selecciona. En otras palabras, en el caso de la función f'4' el
valor de S3S2S,SO es igual a 1110, que es también la representación binaria del
número entero 14.

f, • f" f'2 f.,.


4 " 4 fo t,. f.,a
'o
"'o O O O 1 O 1 O 1 O 1 O 1 O 1 O 1 O So
" m, O 1 O O 1 1 O O 1 1 O O 1 1 O O 1 SI
" m,l O O O O O 1 1 1 1 O O O O 1 1 1 S2
" 1 O O O O O O O O 1 1 1 1 1 1
nI3 1 J S3

(a) Funciones booleanas de dos variables

(b) Implementación de la unidad


lógica
x y

s. -;--'---'---,
s,
?, --L_-,_--'
s, s, S, S, s, s, S, So
s
(e) Símbolo gráfico (d) Unidad lógica de 8 bits

FIGURA 5.5 Unidad lógica.


Componentes combinacionales 189

Como cada variable de selección controlará un minterm, se puede escribir una


expresión para un módulo de 1 bit dé la unidad lógica (LU, Logic Unit) de la
siguiente manera:
S¡ = Somo + Slml + S2~ + S 3m3
= SoX ' ¡}"¡ + Slx '¡}'¡ + S-¿x¡}" ¡ + S:¡X¡}'¡
El diagrama lógico de un módulo de 1 bit de la unidad lógica se muestra en la
Figura 5.5(b), y el símbolo gráfico de una unidad lógica de n bits se indica en la
Figura 5.5(c). En general, cualquier unidad lógica de n bits contendrá n módulos
funcionando concurrentemente, como en el caso de la unidad lógica de 8 bits mos-
trada en la Figura 5.5(d).

5.5. UNIDAD ARITMÉTICO-LÓGICA


Una unidad aritmético-lógica (ALU, Arithmetic-Logic Unit) realiza las opera-
ciones aritméticas y lógicas básicas de un microprocesador. Estas operaciones
aritméticas incluyen, por ejemplo, la suma, resta, incrementar y decrementar, y
sus operaciones lógicas incluyen la AND, OR, identidad y operaciones de com-
plemento. Como todas las operaciones aritméticas están basadas en la suma, se
puede diseñar una ALU simplemente modificando las entradas de un sumador de
acarreo propagado o de acarreo anticipado (CLA). La lógica de modificación uti-
lizada en las operaciones aritméticas se denomina, a veces, un ampliador arito
mético (AE, Arithmetic Extender), y la lógica de modificación utilizada para las
operaciones lógicas se denomina un ampliador lógico (LE, Logic Extender).
Cada uno o ambos ampliadores se conectan a la entrada del sumador, como se
indica por las líneas discontinuas de la Figura 5.6. Ahora, mostraremos cómo
diseñar estos ampliadores de uno en uno.

J, J, J, Jo

FIGURA 5.6 Sumador de 4 bits con ampliadores aritméticos (AE) y lógicos (LE).
190 Principios de diseño digital
I
Como la ALU en cuestión realiza cyatro operaciones aritméticas y cuatro ope-
raciones lógicas, es necesario introducir una variable de control de modo, M, que
seleccionará operaciones aritméticas o lógicas de manera tal que siempre que
M = 1, la ALU realizará operaciones aritméticas y cuando M =O realizará opera-
ciones lógicas. También es necesario utilizar dos variables de selección, SI YSo'
que habilitarán la selección de las cuatro operaciones aritméticas o de las cuatro
operaciones lógicas. Los valores asignados a SI Y So para cada operación aritmé-
tica se resumen en la tabla funcional de la Figura 5.7(a).
Como se observa, la tabla también muestra el valor de la salida F de la ALU,
así como los valores de las entradas del sumador X, Y Y Co necesarios para gene-
rar ese valor de F. Obsérvese que, de acuerdo con esta tabla, la entrada X del
sumador requiere siempre el valor de A, mientras que la entrada Y puede disponer
de todo unos, B, B' o todo ceros. Estos valores para la entrada Y serán generados
por el AE, cuya tabla de verdad se muestra en la Figura 5.7(b). Esta tabla se ha
obtenido a partir dé la tabla funcional de la Figura 5.7(a) simplemente expan-
diendo la columna Yen las columnas b¡ e y¡. En la Figura 5.7(c) se muestra la
representación en forma de mapa del AE, a partir de la cual se obtiene su expre-
sión booleana:
y¡ = MS'lb¡ + MS'ob'¡
Finalmente, el circuito lógico de este AE se muestra en la Figura 5.7(d).

~~ '."" :< 1 ~ _-~ . ~~ 1


_ 1'. ", ' '. ') ,. _ " ~,,~ ;.,'. 2
) O O Decremento A-I A Todo unos (1) O
) O ) Suma A+B A B O
1 I O Resta A+B'+) A B' )
) I ) Incremento A+ I A Todo ceros (O) I
(a) Tabla funcional
b,

,o
b¡ 00 01 11 10 'o
)
I
O
O
O O )
O ) )
-- - -
1
I
, , J
,-- , "M
O I I 1
1 O 1 O O - - -, 1 __

1 O ) ) I
- -I
, . ,
~--
1 1 O O 1 1 1 1
---
I
I
1 ) O 1 O 1- __
I ) 1 O O
I I I I O
Y,
(h) Tabla de verdad
(e) Representación COD mapa (d) Esquema lógico

FIGURA 5.7 Ampliador aritmético.


Componentes combinacionales 191
\
Una vez descrito el procedimiento de diseño de un AE, se puede volver al
diseño de un LE, tal como el que se inicia con la tabla funcional de sus opera-
ciones que se muestra en la Figura 5.8(a). En esta tabla puede verse que las entra-
das Y y Co siempre están a valor Opara operaciones lógicas, mientras que la entra-
da X requiere diferentes expresiones booleanas para cada una de estas operacio-
nes. Basándose en esta tabla funcional, se puede desarrollar la tabla de verdad
para el LE, que se muestra en la Figura 5.8(b), y su representación en forma de
mapa, presentada en la Figura 5.8(c). A partir del mapa se puede obtener la
siguiente expresión booleana para decribir al LE:
X¡ = M'S ISrfl'¡ + M'S¡Soh¡ + Srfl¡b¡ + Sla¡ + Ma¡
Una vez obtenida esta expresión, se procede a la construcción del circuito
lógico del LE, mostrado en la Figura 5 .8(d).

o O O Complemento A' A' O O


O O I AND AANDB AANDB O O
O l O Identidad A A O O
O l I OR AORB AORB O O
(a) Tabla funcional
(b) Tabla de verdad

/JI bJ

M_O M _ l

[Link] So
00 01 11 10 00 01 11 10
op, s,
00 ,' l ,' M
, " "

01 "
' 1 ,'
,- ,1( ,1
11

10
,, 1 " 1:
"
1
-
I1_____ _
,I
!~~ I "
':.":.
,+
.
XrM'S' ]Sffi ¡+MSISfI'¡+S¡f1¡b¡+S1/J¡+Ma¡ x,
(e) Representación con mapa (d) Circuito lógico

FIGURA 5.8 Ampliador lógico.

Hasta abora, se han obtenido los circuitos lógicos para el AE y el LE, y la


siguiente tarea es conectarlos con un sumador para formar una unidad aritméti-
co-lógica completa, como la ALU de 4 bits mostrada en la Figura 5.9(a).
Obsérvese que, en la ALU, las operaciones lógicas se realizan en el ampliador
lógico y los sumadores completos (FA) se utilizan para pasar los resultados del
192 Principios de diseño digital

LE sin cambiarlos. En otras palabras, los FA se utilizan como conexiones con


retardo fijo. ~~
Obsérvese, también, que el acarreo de salida del bit más significativo repre-
senta un desbordamiento en. el caso de aritmética sin signo y que la EX-OR de los
acarreos de salida de los dos bits más significativos representa el desbordamiento
en el caso de aritmética en complemento a 2. Si es necesario, la ALU de 4 bits
mostrada en la Figura 5.9(a) puede ampliarse a una ALU de n bits utilizando un
sumador de n bits conjuntamente con n AE y n LE. El símbolo gráfico para esta
ALU se muestra en la Figura 5.9(b). En la industria, muchas ALU utilizadas en
productos reales se construyen de esta manera, con la excepción de que pueden
diferir en el número y tipo de sus operaciones aritméticas y lógicas, y en la imple-
mentación de sus cadenas de acarreos.

Desbordamiento 13 J, 1, lo
(a) ALU de 4 bits

A B

So --r--'---'---,
S, ...Unidad lógica
M
coo, --~,---,~---"

Desbordamiento F

(b) Símbolo gráfico

FIGURA 5.9 Diseño final de la ALU .


Componentes combinacionales 193

5.6. DECODIFICADORES
Los decodificadores (a veces llamados también demultiplexores) se incorporan
frecuentemente 'en grandes unidades para su utilización siempre que se necesite

°
activar o habilitar sólo uno de n subcomponentes. En tal caso, a cada subcompo-
nente se le puede asignar un índice entre y n-l que representa una dirección
binariaA. Para activar un subcomponente concreto en un tiempo dado, esta direc-
ción A se decodifica en n líneas de habilitación, de las cuales sólo una es igual a
1. En general, un decodificador de m a n tiene m = log2n líneas de entrada,

°
Am_I..A O' Y n líneas de salida, Cn_I ... CO, así como una entrada de control, E. Esta
entrada de control habilita las salidas del siguiente modo: siempre que E = todas
las salidas son 0, y siempre que E = 1 sólo la salida C¡ será 1, siendo i el entero
cuyo valor es igual al valor binario de las entradas Am_I .. AO'
Como ejemplo, la Figura 5.10 muestra un decodificador de 1 a 2, y el símbo-
lo gráfico y la tabla de verdad se dan en las Figuras [Link](a) y [Link](b). Como puede
verse, el decodificador tiene una línea de dirección, A o, Y una línea de habilita-
ción, E, con dos líneas de salida Co y C I . Mientras E valga 1, Co = 1 siempre que
Ao = 0, y C I = 1 siempre que Ao = 1. Las expresiones booleanas de las salidas C I
y Co se muestran en la Figura [Link](c), mientras que su implementación con puer-
tas se presenta en la Figura S.10(d).

Ao

E Decodificador
o 1 O O 1
1 1 1 O
O X O O
cl Co
(b) Tabla de verdad
(a) Símbolo gráfico

el Co
(e) Expresión booleana (d) Diagrama lógico

FIGURA 5.10 Decodificador de 1 a 2.


Principios de diseño digital
194
,.
Si es necesario, este decodificador de 1 a 2 puede ampliarse a un decodifica-
dor de 2 a 4, como muestra la Figura 5.11. Obsérvese que, ahora, el decodificador
tiene dos líneas de dirección, A 1 Y Ao, la línea de habilitación, E, y cuatro líneas
de salida, C3, C2, C I y Ca. Como se ha explicado anteriormente, este decodifica-
dor de 2 a 4 se utiliza para decodificar el número binario representado por A 1 Y
Ao, es decir, para asignar un 1 a la línea de salida cuyo índice es igual al número
binario.

Decodificador
E

<a) Símbolo gnlfico


(b) Tabla de verdad

CO=EA']A'Q

C¡=EA'JAO

C2= EA.A'o
C)= [Link]

(e) Expresión booleana (d) Diagrama lógico

FIGURA 5.11 Decod~icador de 2 a 4.

También es posible construir decodificadores mayores de "m a n" a partir de


decodificadores de 1 a 2 y de 2 a 4. Por ejemplo, si se utilizan decodificadores de
1 a 2 en la construcción, el decodificador de m a n tendrá log2n niveles de deco-
dificadores de 1 a 2, cada uno de los cuales decodificará un bit de dirección. En
otras palabras, el bit de dirección más significativo será decodificado por un deco-
dificador, el siguiente bit más significativo por dos decodificadores, y así sucesi-
vamente hasta que el bit menos significativo sea decodificado por n/2 decodifica-
dores. La salida de cada decodificador de un nivel particular habilitará a uno de
los decodificadores del siguiente nivel, de modo que el número de decodificado-
Componentes combinacionales 195

res en cada nivel sucesivo se duplicará con la distancia al primer decodificador.


En la Figura 5.12, por ejemplo, se muestra un decodificador de 3 a 8 realizado a
partir de decodificadores de I a 2. Su tabla de verdad se muestra en la Figura
5.12(a) y su impfementación en la Figura 5.l2(b). Se aplican los mismos princi-
pios cuando se utilizan decodificadores de 2 a 4, excepto 'que un decodificador de
2 a 4 puede decodificar 2 bits al mismo tiempo, ya que un decodificador de m a n
construido con decodificadores de 2 a 4 necesita sólo la mitad de niveles y la
mitad de decodificadores que uno realizado con decodificadores de I a 2, como
claramente se muestra en la Figura 5 .12(c).

1 O O O O O O O 1
I O O O O _ ) O
1 -0- -) O O '0 1 O O
1 O I O 0 J."L O O O
I O O 1 O O -O- O
1 ) O O O I O O O O O
) I 1 'O 1' O O O O O O
1 J 11 0 1_
0_ O_ O O O O
O X X O O O O O O O O

(a) Tabla de verdad


e l C6 e s C4 c ] Coz el Co
• •
(b) Implementación con decodificadores de 1 a 2 (e) Implementación con decodificadores de 2 a 4

FIGURA 5.12 Decodificador de 3 a 8.

5.7. SELECTORES
En muchos diseños se encuentran componentes que necesitan utilizar datos de
fuentes distintas en tiempos distintos. Para tales diseños es necesario un selector
196 Principios de diseño digital

o multiplexor (MUX), que es un componente combinacional que permite selec-


ciomir una o varias fuentes corno operandos de una ALU, para almacenarlos en
una memoria o para transmitirlos a un bus. En general, un selector tendrá n entra-
das, una salida y log2n señales de selección que seleccionarán datos desde cua-
lesquiera de las n entradas y las llevarán a la salida. Aunque se podría construir
cualquier selector de n al, en la práctica la mayoría de las bibliotecas lógicas sue-
len incluir sólo selectores de 2 a 1 y de 4 a l , simplemente porque los selectores
con un número mayor de entradas pueden reilizarse fácilmente a partir de selec-
tores de 2 a 1 y de 4 a 1.
En la Figura 5.13 se muestra un selector de 2 a 1, cuyo símbolo gráfico se pre-
senta en la Figura 5. 13(a) y su tabla de verdad en la Figura 5.13(b). Corno puede
verse, este selector de 2 a 1 ruspone de dos entradas, DI y Do, Y una salida, Y, ade-
más de una señal de selección, S, que selecciona una de las entradas del siguien-
te modo: siempre que S = O la salida Y = Do, mientras que siempre que S = l la
salida Y = DI. La expresión booleana para la salida Y se indica en la Figura 5. 13(c)
y el ruagrama lógico completo de este selector de 2 a 1 se presenta en la Figura
5. 13(d).

s
o Do
l D,
y (b) Tabla de verdad
(3) Símbolo gráfico

(e) E)tprcsi6n booleana (d) Diagrama lógico

FIGURA 5.13 Selector de 2 a 1.

En contraposición, la Figura 5.14 muestra un selector de 4 a 1, que seleccio-


na cualesquiera de las cuatro líneas que indiquen las dos señales de selección SI
Y So· En esta figura puede verse el símbolo gráfico, la tabla de verdad, la expre-
sión booleana de silida y el diagrama lógico de este selector de 4 a l.
Componentes combinacionales 197

Si es necesario, los selectores de mayor tamaño pueden construirse a partir de


un número de [Link] de 2 a 1. Por ejemplo, para un selector de n al, donde n
es una potencia de 2, se utilizarán log2n señales de selección y log2n niveles de
selectores de 2 a L Cada señal de selección servirá para controlar uno de los nive-
les de selectores. En el primer nivel, cada selector seleccionará entre dos fuentes
de datos, mientras que en ~ l segundo nivel cada selector seleccionará entre las dos
salidas del selector del primer niveL Es decir, en cada nivel superior al primero,
cada selector se utiliza para seleccionar una d~ las dos salidas producidas por los
selectores del nivel anterior. Como ejemplo de selectores de mayor tamaño, la
Figura 5.15 muestra un selector de 8 al , cuya tabla de verdad se indica en la
Figura 5.15(a), mientras que en la Figura 5.15(b) se muestra una implementación
que utiliza selectores de 2 a L

DJ D2 0 1 Do

SI 3 2 1 o S, So y
So Selector
O O DO
O 1 DI
y
I O D,
I I D3
(a) Símbolo gráfico (b) Tabla de verdad ~

D, D, DI Do SI So

y= S1'SrPO+S 1'ScPl
+SIS'cP2+SJScP3

(e) Expresión booleana (d) Diagrama lógico

FIGURA 5.14 Selector de 4 a 1.

Es posible implementar el mismo selector de 8 a 1 utilizando puertas lógiGas,


como se muestra en la Figura 5.16. En este caso, como puede verse, se utiliza un
decodificador de 3 a 8 para decodificar las señales de controL Aunque esta repre-
sentación con puertas parece bastante sencilla, presenta el inconveniente de que
no es fácilmente escalable o ampliable. En otras palabras, el nú[Link] y el tamaño
de las puertas del decodificador, así como el tamaño de la puerta OR de salida,
198 Principios de diseño digital

tendrían que crecer con el número de entradas de manera que las puertas de mayor
tamaño tendrían que implementarse como árboles de puertas, lo que incrementa-
ría significativamente el coste y el retardo del selector. Por este motivo, general-
mente se utiliza esta implementación con puertas sólo para pequeños valores de
n, mientras que los selectores para valores mayores de n se construyen con el
método [Link] anteriormente, utilizando varios niveles de selectores de 2 a I y
de 4 a 1.

o O O Do
O O I D,
O I O O2
O I I D3
I O O D.
1 O I D,
I I O D6
I I I D7
(a) Tabla de verdad

y
(b) lmplemenlaci60 con selectores de 2 a 1

FIGURA 5.15 Selector de 8 a 1.

So
S,
O O O DO S,
O O I D,
O I O D2
O I I D3
1 O O D.
I O 1 D,
I J O D6
I 1 J D7
(a) Tabla de verdad

(b) Implementación con un decodificador

FIGURA 5.16 Selector de 8 a 1 alternativo.


Componentes combinacionales 199

5.8. BUSES
Aunque los selectores descritos en secciones anteriores se utilizan habitualmente,
aquéllos que tienen un mayor número de entradas son difíciles de fabricar, ya que
requieren reunir muchas conexiones centralizadas, donde se sitúa el selector.
Afortunadamente, existe una solución elegante a este problema, que se denomina
bus, que puede estar situado fácilmente alrededor de otros objetos en un micro-
chip o en una taIjeta peB. Para realizar un bus se utiliza un componente denomi-
nado adaptador triestado, cuya salida proporciona tres valores diferentes, 0, 1 YZ.
El valor Z representa un estado de alta impedancia, que puede considerarse como
una desconexión eléctrica del bus a efectos prácticos. .

E---,
D ·~ Y
(a) Símbolo del adaptador [Link] (b) Tabla de verdad para un adaptador triestado

s -,,-[>0---, Bus

Do -1-----1-:>---1
y
D, _ _ _--1>_-1

(e) Bus de 2 enlradas (d) Tabla de verdad para el bus de 2 entradas

Bus

Do

D,
y
D,
o O DO
D, O 1 DI
1 O D2
1 1 D3
(e) Bus de 4 entradas (O Tabla de verdad para el bus de 4 entradas

FIGURA 5. 17 Implementación con bus.


200 Principios de diseño digital

Como puede apreciarse en la Figura 5.17(a) y (b), un adaptador triestado tiene


una línea de datos, D, una línea de habilitación, E, y una línea de salida, Y. Siempre
que E = 1 la salida Y seguirá a la línea de datos de entrada, D. En caso contrario,
siempre que E valga 0, el valor de la salida será igual a Z. Cada bus contiene un con-
junto de adaptadores triestado de modo que se utiliza un adaptador para cada fuen-
te de información de datos que se conecta al bus. Como sólo se permite que una
fuente de datos se conecte al bus en un instante dado, las líneas de habilitación de
los distintos adaptadores pueden codificarse como direcciones de fuente para que el
almacenamiento y transmisión de estas direcciones sea más eficiente.
Un bus, en su funcionamiento, es equivalente a un selector ya que puede tener
n entradas de datos, pero proporciona sólo un dato al bus en un instante dado. Por
ejemplo, el bus de 2 entradas mostrado en la Figura 5.17(c) tiene dos líneas de
datos, DI y Do, Y una línea de dirección, S, tal que cuando S = 0, y es igual a Do,
y cuando S = I entonces Yes igual a DI' Obsérvese que la tabla de verdad de este
bus de 2 entradas; mostrada en la Figura 5.17(d), es equivalente a la tabla de ver-
dad de un selector de 2 a 1. Utilizando los mismos principi~, se pueden construir
buses que tengan más entradas, tales como el bus de 4 entradas mostrado en la
Figura 5.17(e), que corresponde a la tabla de verdad de la Figura 5.17(f). Como
puede verse, este bus incorpora un decodificador de 2 a 4, que convertirá las dos
líneas de dirección S I Y So en las cuatro líneas de habilitación necesarias para que
los cuatro adaptadores triestado se conecten al bus Y.
En general, los buses son muy fáciles de fabricar y muy sencillos de modifi-
car si se necesita añadir nuevas fuentes o eliminar antiguas. Por este motivo, los
buses son usuales en redes locales donde hay muchas fuentes de información que
han de conectarse en la misma sala o en el mismo edificio.

5.9. CODIFICADORES DE PRIORIDAD


Un codificador de prioridad es casi el complemento de un decodificador, en el
sentido de que un codificador de prioridad conectado a las salidas de un decodi-
ficador produce una función identidad, es decir, la salida del codificador de prio-
ridad es igual a la entrada al decodificador. Por otra parte, un decodificador conec-
tado a las salidas de un codificador no produce una función identidad porque un
codificador de prioridad se diseña para codificar la posición de la entrada con
valor uno más significativa, prescindiendo de los valores del resto de entradas en
posiciones menos significativas. Por este motivo, los valores de entrada del codi-
ficador no pueden reproducirse a las salidas del decodificador conectado a él.
En términos generales, un codificador de prioridad tiene n entradas,
D ,,_I, ... ,Do, siendo n = 2m para algún 111. También tiene log2n = 111 salidas,
Am_I, ... ,Ao, así como una salida adicional llamada Cualquiera, que será I siempre
que alguna de las entradas tenga algún valor distinto de O. Las salidas A",_I" ",AO
representan el índice del bit de entrada Di más significativo que sea 1.
El más sencillo de todos los posibles codificadores es el codificador de prio-
ridad de 2 a 1 mostrado en la Figura 5.18. Su símbolo gráfico se muestra en la
Componentes combinacionales 201

Figura 5.18(a) y su tabla de verdad en la Figura 5.18(b). Como puede verse, el


codificador de prioridad de 2 a l tiene dos entradas, DI y Do, Y una salida, Ao, ade-
más de la salida Cualquiera descrita anteriormente. En este codificador, siempre
que D, = O YDo = l entonces Ao = O e, inversamente, siempre que DI = l Y Do sea
indiferente entonces Ao = 1. Las expresions booleanas de la salida pueden obte-
nerse fácilmente a partir de la tabla de verdad, y se muestran en la Figura 5.18(c).
Finalmente, en la Figura 5.18(d) se muestra el circuito lógico de este codificador
de prioridad de 2 a 1.

~ D.¡. Cf ~ CUALQUlBIA
O O O O

rT
Cualquier Ao
O
J
1
X

'\
O
1

(b) Tabla de verdad


1
J

(a) Símbolo gráfico

Cua lquier = Do+ D , Cualquier Ao

(e) Expresión OOoleana (d) Diagrama lógico

FIGURA 5.18 Codificador de prioridad de 2 a 1.

Sin embargo, un codificador de prioridad más utilizado que el de 2 a 1 es el


de 4 a 2 que se muestra en la Figura 5.19, que consta de cuatro entradas, D 3 , D 2 ,
DI Y Do, Y dos salidas de dirección, Al y Ao, además de la salida Cualquier. Su
símbolo gráfico se muestra en la Figura 5.19(a) y su tabla de verdad en la Figura
5.19(b). Como antes, puede usarse ahora el método del mapa para obtener las
expresiones booleanas de salida, mostradas en la Figura 5.19(c), dando éstas lugar
al circuito lógico presentado en la Figura 5.19(d).
La importancia de los codificadores de 2 a 1 y de 4 a I reside en que combi-
nándolos con selectores se pueden construir codificadores de prioridad con mayor
número de entradas. Cuando se utilizan codificadores de 2 a l para diseñar estos
componentes mayores, se agrupan las entradas por parejas, de manera que cada
grupo de dos se codifica por uno de los codificadores de prioridad de 2 a l.
Procediendo de esta forma, en el primer nivel se utilizan un total de n/2 codifica-
202 Principios de diseño digital

dores de 2 a 1, que generarán n/2 candidatos para la dirección de bit menos sig-
nificativa, Ao. Uno de estos candidatos será seleccionado por un selector de (n/2)
a 1. Para producir la siguiente dirección más significativa, A ¡, habrá que codificar
n/2 salidas Cualquiera de los n/2 codificadores de primer nivel, agrupándolos una
vez más por parejas. En este segundo nivel de codificación, se utilizan n/4 codi-
ficadores de prioridad y un selector de (n/4) a 1 que selecciona el bitA¡. Además,
estos n/4 codificadores generan n/4 salidas Cualquiera, que pueden codificarse
para producir la dirección de bit más significativa, A 2 . Este procedimiento se repi-
te hasta que sólo quede una salida Cualquiera.

D) D2 DJ Do

3 2 ¡ o
O O O O O O O
Codificador
O O O 1 O O 1
O O l X O l 1
O l X X l O 1
Cualquier Al A. l X X X 1 l l

(a) Símbolo gráfico (a) Tabla de verdad

• ,,"
,.
AO"" DIO' 2+D)

AI= D2+DJ
Cualquier = DO+D I+D2+D)

(e) Expresión booleana


•••
Cualquier Al

(d) Diagrama lógico


AO

FIGURA 5.19 Codificador de prioridad de 4 a 2.

En cada nivel del codificador se usan selectores de 2 a 1 para seleccionar el


bit de dirección adecuado. Cada selector de 2 a 1 selecciona una de las salidas de
un grupo de dos codificadores, utilizando la codificación de sus salidas
Cualquiera como líneas de control en esta selección. Como ejemplo, en la Figura
5.20(b) se muestra una implementación de un codificador de prioridad de 8 a 3
que utiliza codificadores de 2 a 1 y selectores de 2 a l. La tabla de verdad de este
codificador aparece en la Figura 5.20(a). De manera alternativa, el mismo codifi-
cador de 8 a 3 podria implementarse utilizando codificadores de 4 a 2, un codifi-
cador de 2 a l y dos selectores de 2 a 1, como se muestra en la ·Figura 5.20(c) .
Componentes combinacionales 203

, • > I \ .. ,

~ ": .. . . ,.,
o O O O O O O O O O O O
O O O O O O O 1 O O O 1
O O O O O O I X O O I 1
O O O O O I X X O I O 1
O O O O 1 X X X O 1 I I
O O O I X X X X 1 O O I
O O 1 X X X X X I O 1 I
O 1 X X X X X X 1 I O I
1 X X X X X X X I 1 I I

(a) Tabla de verdad


Cua/quiero A A,
Cua/quitra A2 A, 2

(b) Implementación con codificadores y selectores de 2 a 1 (e) Implementación utilizando codificadores de 4 a 2

FIGURA 5.20 Codificador de prioridad de 8 a 3.

5.10. COMPARADORES DE MAGNITUD


Muchos lenguajes de programación incluyen operadores relacionales que permi-
ten evaluar ciertas condiciones y determinar en qué momento tomar ciertas accio-
nes. En estos lenguajes, estas condiciones se expresan, generalmente, en términos
de relaciones entre dos entidades X e Y, que pueden representar constantes, varia-
bles o expresiones aritméticas. Estas expresiones relacionales utilizan tres opera-
dores básicos, "mayor que" (X> Y), "igual que" (X = Y) y "menor que" (X < Y).
Además, cada uno de estos operadores tiene su complemento: el operador "mayor
o igual que" (X ~ Y) es el complemento de "menor que", "menor o igual que"
(X $ Y) es el complemento de "mayor que", y " no igual que" (X Y) es, obvia- *
mente, el complemento de "igual que". El resultado de estas operaciones relacio-
nales es una variable binaria, que puede tomar valor O ó lo
Como regla, estas operaciones de relación son realizadas por unidades llama-
das comparadores. Es posible construir un comparador para cada operador rela-
204 Principios de diseño digital

cional, pero en esta sección se describirá cómo diseñar un comparador universal


que puede utilizarse para evaluar cualesquiera de los operadores relacionales. En
términos generales, un comparador universal compara dos enteros positivos
X = xn_, ...xo e Y = Yn- ""Yo Y genera dos resultados booleanos G y L como salidas,
de la forma siguiente: cuando la salida G = 1, entonces X > Y, Y cuando G = 0,
entonces X $ Y; al mismo tiempo, cuando L = 1, entonces X < Y, Y cuando L = 0,
*
°
entonces X $ Y. Así pues, se sabe que X Y siempre que G = 1 o L = 1, e inver-
samente, que X = Y siempre que G = y L = O.
Para determinar estos resultados para enteros X e Y de n bits, el comparador
inicia su comparación con los bits menos significativos Xo e Yo, calculando G; y L;
para cada sufijo de X e Y, donde tos sufijos i de X e Y se definen como los ente-
ros X;X;_, .. -xo e Y;YH ...Yo tales que i $ n - 1. Por tanto, para el sufijo i de X e Y, G
es igual a 1 si x; es mayor que y; o si x; = y; Y si el sufijo (i-l) de X es mayor que
el sufijo (i-l) de Y. Igualmente, L es igual a I si x; es menor que y; o si x; = y; y si
el sufijo (i-l) de X es menor que el sufijo (i-l) de Y. Estos valores pueden resu-
mirse en las expresiones siguientes:
G; = (x; > y) ó ((x; = y;) y (G;_, > L H ))
L; = (x; < y;) ó ((x; = y) Y (G;_, < L;_,))
Como puede verse, se ha reducido la comparación completa a una compara-
ción de números de 2 bits x;G;_, e y;L;_,. Ahora, pues, se puede diseñar un com-
parador básico de 2 bits que puede comparar los números de 2 bits a,~ y b,bo, Y
utilizarlo para construir comparadores de un número mayor n de bits.
En la Figura 5.21(a) se muestra una tabla de verdad para un comparad0f de 2
bits cuyas entradas son los dos enteros de 2 bits a,ao y b,bo, Y las salidas son G y
L. La representación con mapa de este comparador, con las expresiones boolea-
nas para G y L, se muestra en la Figura 5.21(b), y su circuito lógico en la Figura
5.21(c).
Como se ha mencionado, el comparador de 2 bits puede utilizarse en imple-
mentaciones serie y paralelo de comparadores de n bits que pueden comparar cua-
lesquiera enteros sin signo X e Y. Por ejemplo, en una implementación serie se uti-
liza un comparador de 2 bits para cada pareja de bits, representada por x; e y;. Para
cada comparador de 2 bits, los valores de entrada x ; e y; se conectan a sus entra-
das a, y b" mientras que los valores G;_, y L;_, obtenidos de la comparación del
sufijo (i-l) se conectan a las entradas ao y bo·
De este modo, cada comparador de 2 bits produce las salidas G y L , que repre-
sentan las funciones G; y L;. En la Figura 5.22(a) se muestra una implementación
de un comparador de magnitud de 8 bits. Como puede apreciarse, este compara-
dor de 8 bits necesita sólo siete comparadores de 2 bits, ya que se ha utilizado sólo
un comparador de 2 bits para comparar x,xo e Y,Yo'
Como regla general, la comparación de cualesquiera dos enteros de n bits
siempre requiere (n-I) comparadores de 2 bits, independientemente de si se utili-
za una implementación en serie o en paralelo.
Sin embargo, la implementación serie descrita anteriormente presenta un gran
inconveniente, debido a que el retardo del comparador de n bits será igual a (n-I)
Componentes combinacionales 20S

veces el retardo de un único comparador de 2 bits. Por el contrario, en una imple-


mentación en paralelo este retardo puede reducirse a rlog2n1, porque la implemen-
tación en paralelo divide la comparación de n bits en comparaciones de dos bits en
el primer nivel. Así, el resultado de estas comparaciones de dos bits se comparan en
el siguiente nivel, obteniéndose comparaciones de 4 bits, que son comparadas en el
siguiente nivel, dando coml'araciones de 8 bits, y así sucesivamente. Procediendo
de este modo, se necesitan IIog2n1niveles para obtener una comparación de n bits.
Como ejemplo de este tipo de comparación en paralelo, la Figura 5.22(b) muestra
una implementación para el comparador de magnitud de 8 bits. Observe que esta
implementación en paralelo aún requiere (n-l) comparadores de 2 bits, pero su
retardo es sólo r log2n1vec'es el retardo de un único comparador de 2 bits.

;,'
. -. .
, ~ , 4;.,~' \

o O O O O O
O O O 1 O 1
O O 1 O 1 O G
O O 1 1 O O
O 1 O O O 1
O 1 O 1 O 1
O 1 1 O O 1
O 1 1 1 O 1
1 O O O 1 O
1 O O 1 1 O
1 O 1 O 1 O
L
1 O 1 1 1 O
1 1 O O O O
1 1 O 1 O 1
1 1 1 O 1 O
1 1 1 1 O O
(a) Tabla de verdad (e) Esquema lógico
[Link]
00 01 11 10 00 01 11 10
a lb, , J , a lb, , , ,
00
" I 00 I
J

, . • , , ,
-
01 01 I I I I

,. ,. ,. ,.
11
" I " 11
" I
"
, , .<

10 I I I " I " 10
"
" "

(b) Representación con mapa

FIGURA 5,21 Comparador de magnitud de 2 bits.


206 Principios de diseño digital

(a) lmplememación serie

G, L,
(b) Implementación paralelo

FIGURA 5.22 Comparador de magnitud de 8 bits.

5.11. DESPLAZADORES Y ROTADO RES


En diseño digital se utilizan frecuentemente operaciones de desplazamiento
rotación para empaquetar y desempaquetar dígitos y caracteres, para extracción e
inserción de campos y para operaciones aritméticas en coma flotante. Por ejem-
plo, cada procesador tiene al menos varias instrucciones para desplazar a derecha
e izquierda, y rotar a izquierda y derecha, I bit. La operación de desplazamien
puede realizarse en modo lógico o aritmético. Durante una operación de despla-
zamiento lógico, una palabra es desplazada m posiciones de bit a izquierda o dere-
cha. Como resultado de esta operación, se han desplazado fuera de la palabra '"
bits, y m nuevos bits se han desplazado al interior. Durante una operación de d
plazamiento aritmético, la palabra que se va a desplazar ha de ser un número tal
que el desplazamiento de m bits a la derecha represente una división por 2m y d
desplazamiento de m bits a la izquierda represente una multiplicación por 2m • j
el número desplazado es un número en complemento a 2, hay que desplazar '"
copias del signo durante el desplazamiento aritmético a la derecha, y m ceros
Componentes combinacionales 207
(
durante el desplazamiento aritmético a la izquierda. Además, el bit más significa-
tivo debe ser un duplicado del bit de signo después del desplazamiento aritméti-
co a la izquierda. Por otra parte, durante una operación de rotación no se pierden
bits, ya que los bits desplazados fuera en un lado son simultáneamente desplaza-
dos hacia el interior en el otro lado de la palabra.
Los desplazadores y rotadores que se usan para estas operaciones se imple-
, mentan con selectores. Por ejemplo, el desplazador/rotador universal mostrado en
la Figura 5.23, que puede realizar desplazamiento lógico o rotar una posición de
bit a la izquierda o a la derecha, tiene una entrada de datos, D = dw ..do, una sali-
da, Y = Yw ..Yo, Y tres líneas de selección, S2> SI y So, que determinan la operación
a realizar. De acuerdo con la tabla funcional de la Figura 5.23(a), cuando S2 = O
los datos de entrada pasarán sin modificarse a la salida, mientras que cuando S2 = I
se realizará una operación de .desplazamiento o rotación. El hecho de que estas
operaciones muevan a la izquierda o a la derecha depende del valor de SI: esto es,
SI = O indica que' el movimiento de datos será a la izquierda, mientras que SI = 1
indica que el movimiento será a la derecha. Finalmente, So se utiliza para distin-
guir entre operaciones de desplazamiento y de rotación, tal que si So = O el des-
plazador/rotador desplazará, y si So = I rotará.

o O X D No desplaza
O l X No usado
l O O shl(D) Desplaza izquierda
l O l n1(D) Rota izquierda
l l O shr(D) Desplaza derecha
l l l rtr(D) Rota derecha
(a) Tabla funcional

Entrada
11 [Link]

s,

s,
S,

h h ~ ~ ~ ~ Y,
(b) Desplazador implementado con selectores de 4 a 1

FIGURA 5.23 Desplazador de 8 bits.


208 Principios de diseño digital •
(
En la Figura 5 .23(b) se muestra una implementación de un desplazador/rota-
dor de 8 bits. Esta unidad puede desplazar o rotar un bit a la izquierda o a la dere-
cha, y puede dejar pasar los datos sin modificarlos. Como puede observarse, este
desplazador/rotador se ha implementado con un selector de 4 a l para cada bit,
dispuesto de manera que cada selector puede elegir entre el bit de entrada posi-
cionado a la izquierda, el bit posicionado a la derecha o el bit que está en su
misma posición. Además, este desplazador tiene dos selectores de 2 a 1 adiciona-
les, que pueden elegir entre el bit más a la izquierda o más a la derecha durante
una operación de desplazamiento o de rotación.

o O O d, d6 d, d. d, dz dI do
O O 1 do d, d6 d, d. d, dz dI
O 1 O dI do tJ., d6 d, d. d, dz
O 1 1 dz dI do tJ., d6 d, d. d,
1 O O d, dz dI do tJ., d6 d, d.
I O I d. ti, dz dI do d, d6 d,
I I O d, d. ti, dz dI do d, d6
I I 1 d6 d, d. d, d, dI do d,
(a) Tabla de verdad

s,

s,

s,

(b) Rotador implememado con selectores de 2 a 1

FIGURA 5.24 Rotador a la derecha de tambor de 8 bits.


(
Componentes combinacionales 209

Como se ha mencionado anteriormente, este desplazador es capaz de despla-


zar o rotar un bit a la izquierda o a 'la derecha lo que significa que, siempre que se
necesite un desplazamiento en más de una posición, habrá que pasar los datos a
través del desplazador varias veces. Es decir, este tipo de desplazador realiza la
tarea de desplazar o rotar datos un número arbitrario de posiciones muy lenta-
mente. Para evitar este retardo innecesario, los diseños de altas prestaciones utili-
zan un desplazador en bloques (barrel shifter), diseñado para desplazar cual-
quier número de posiciones en un tiempo dado. En este tipo de desplazador/rota-
dor de n bits, donde n = 2m, se utilizan m = log2n niveles de selectores de 2 a 1
dispuestos de forma tal que el nivel i-ésimo de selectores (O :s; i :s; m-1) desplaza
2i posiciones cuando su línea de selección Si = 1, o pasa sin modificar los datos
cuando la línea Si = O. En otras palabras, si se quiere desplazar B posiciones los
datos, siendo B un número binario bm_I ... bo, se coloca el valor de la línea de selec-
ción Si del desplazll;dor a bi , para todo i tal que O :s; i :s; m-1.
En la Figura 5.24 se muestra un posible diseño para un desplazador en bloques
en el que, por simplificación, se ha limitado el desplazador a una función, la rota-
ción a la derecha. Como puede verse, este desplazador en bloques de 8 bits se ha
implementado con tres niveles de selectores de 2 al, controlados por las líneas de
selección So' SI Y S2 del siguiente modo: cuando So = 1, el primer nivel rota un
bit; cuando SI = 1, el segundo nivel rota dos bits, y cuando S2 = 1, el tercer nivel
rota cuatro bits.
En general, el coste de este rotador en bloques de 8 bits será de nlog2n veces
el coste de un único selector de 2 al, Y su retardo desde cualquier entrada a cual-
quier salida será aproximadamente log2n veces el retardo de un selector de 2 a 1.
Para construir un desplazador/rotador más complejo capaz de realizar un amplio
número de operaciones se utilizan, fundamentalmente, los mismos conceptos y un
número mayor de selectores de 2 a 1.

5.12. MEMORIAS DE SÓLO LECTURA


Una memoria de sólo lectura (ROM) puede considerarse como un elemento
lógico universal que permite implementar concurrentemente varias funciones
booleanas diferentes definidas con las mismas variables. En términos generales,
cada ROM contiene n palabras de m bits cada una y, usualmente, se referencia
como una ROM de n x m. También incluye log2n líneas de dirección que se utili-
zan para direccionar cada una de sus n palabras. Así pues, cada ROM de n x m
permite implementar m funciones booleanas cualesquiera de log2n variables.
Para explicar el circuito de esta ROM es necesario introducir dos nuevos sím-
bolos, que representan versiones programables de la noción de puertas AND y
OR. Como puede verse en la Tabla 5.3, se han reemplazado todas las entradas de
las puertas por una única línea de puerta interseccionada por varias líneas de
entrada. En cada intersección de una línea de entrada y una línea de puerta se usa
un cuadrado para indicar una conexión entre la entrada y la puerta. Estas cone-
xiones pueden realizarse de una de dos maneras durante la fabricación, conectan-
210 Principios de diseño digital

do físicamente dos líneas siempre que se desee una conexión o in situ, fundiendo
el fusible entre una línea de entrada y una línea de puerta siempre que no se quie-
ra una conexión. Tales memorias ROM con fusibles, llamadas también ROM
programables (pROM, Programmable Read Only Memory), son muy prácticas
ya que pueden fabricarse en grandes cantidades y personalizarse, posteriormente,
in situ. Además, a menudo son preferibles a las ROM porque son fáciles de mejo-
rar o de sustituir si el contenido de la PROM necesita modificarse. De hecho, las
PROM pueden considerarse corno un caso particular de arrays lógicos programa-
bles in situ (FPGA, Field Programmable Gate Array), descritas en la Sección
3.10; dado su parecido funcional, estas memorias PROM pueden verse como pre-
decesoras de las FPGA, que requieren una organización interna más compleja.
Por ejemplo, en la Figura 3.23 se vió que cada PLB se implementaba con una
PROM de 16 x 2.
"

TABLA 5.3 Sfmbolos programables


de ANO yOR

.. ..eDD
A 8
-

•• eD
A 8
•••O
Corno se ha mencionado anteriormente, una ROM de n x m úpica, o PROM,
tiene k = log2n líneas de dirección Ak_ ¡, ... ,Ao, así corno m líneas de salida
Fm-l , ... ,Fo. Contiene un decodificador de direcciones de k a n y un array OR pro-
gramable. Como ejemplo, la Figura 5.25 muestra una ROM de 16 x 4 en la que
se utiliza un decodificador de 4 a 16 para seleccionar cualesquiera de las 16 pala-
bras de la ROM. En el array OR programable, el valor de cada bit en cada pala-
bra se determina por la presencia o ausencia de una conexión entre las líneas hori-
zontales y verticales, ya que un cuadrado negro en una intersección indica una
conexión que, además, denota que se ha escrito un valor 1 en una posición de bit
determinada.
En la Figura 5.26(a) se utiliza esta ROM de 16 x 4 para la implementación del
sumador/restador modular presentado, anteriormente, en la Figura 5.4. Como
puede observarse, este módulo tiene una línea de selección, S, que selecciona la
realización de una suma o una resta sobre los dos bits ai Y bi, con el acarreo ei
obtenido de la etapa anterior. Este módulo tiene dos salidas: 1;, que representan el
bit de suma o diferencia, y el acarreo de salida ei. l' que se propaga a la siguiente
Componentes combinacionales 211

etapa. La tabla de verdad para la función de este módulo se muestra en la Figura


5.26(b), y en la Figura 5.26(c) se muestra su implementación con ROM.
Obsérvese que, en esta implementación, cada 1 en la columna de salida de la tabla
de verdad se ha transformado en una conexión apropiada del array OR de la
ROM. En el caso de una implementación con ROM, pues, las líneas de entrada S,
al' b¡ y c¡ se corresponden con las líneas de dirección A ), A 2, A1 YAo, mientras que
las líneas de salida C¡+ 1 YJi se corresponden con F 1 y Fo.

o
1
2
)
4
5
Decodificador 6
de 4a 16 7
8
9
10
11
12
13
14
15

FIGURA 5.25 ROM de 16 x 4.

También es importante observar, en esta implementación, que las palabras de


la ROM con direcciones O y 10 no son necesarias. Desafortunadamente, una
implementación ROM derrochará palabras como éstas siempre que los valores
de todas las salidas de una palabra concreta sean O. A causa de este desaprove-
chamiento de palabras, las implementaciones con ROM de funciones que sólo
tienen pocos valores 1 son muy caras. Por otra parte, las ROM son excelentes
para almacenar datos fijos, porque tienen una alta densidad de bits en compara-
ción con las memorias de escritura. Por el mismo motivo, se utilizan muy fre-
cuentemente en las unidades de control de procesadores estándar y en coproce-
sadores de aplicación específica que generan valores de señales de control.
Además, las ROM son no volátiles, es decir, no pierden el contenido memoriza-
do después de que se desconecte la alimentación. Por esta razón se utilizan para
almacenar programas y datos con el fin de inicializar computadoras cuando se
conecta la alimentación.
212 Principios de diseño digital

• ")"1 •

. ~.

~ ~ ,
~. . ......'- -'
o O O O X X O O
s O O O 1 X X O 1
O O 1 O X X O 1
O O 1 1 X X 1 O
O 1 O O X X O 1
O 1 O 1 X X 1 O
O 1 I O X X 1 O
O 1 1 1 X X 1 1
FA FA 1 O O O X X O 1
1 O O 1 X X 1 O
1 O 1 O X X O O
1 O 1 1 X X O 1
1 1 O O X X 1 O
1 1 O 1 X X 1 1
1 1 1 O X X O 1
ti 1 1 1 1 x: X 1 O
(a) Módulo sumador/restador (b) Tabla de verdad

Decodificador
de4 a 16

(e) Programa en ROM

FIGURA 5.26 ROM de 16 x 4 programada como un módulo sumador/restador.

5.13; ARRAYS LÓGICOS PROGRAMABLES


En la Sección 5.12 se indicó que las memorias ROM no son muy eficientes cuan-
do se usan para implementar pocas funciones con, únicamente, un pequeño núme-
Componentes combinacionales 213

ro de unos ya que, en estos casos, muchas palabras de la ROM tendrán valor 0, lo


que significa desperdicio de área de silicio. Los arrays lógicos programables
(PLA, Programmable Logie Array) se desarrollaron para minimizar este desapro-
vechamiento. Básicamente, la PLA difiere de la ROM en su implementación del
decodificador de direcciones: en vez de utilizar un decodificador completo, como
la ROM, una PLA utiliza un decodificador programable, llamado array AND, que
puede programarse para decodificar sólo aquellas palabras que tienen contenido
distinto de cero. Más aún, además de este decodificador programable, una PLA
puede tener una array de salida programable para utilizarse siempre que se nece-
site complementar los valores de salida. Esta array de salida puede mejorar la efi-
ciencia de la PLA permitiendo un mayor grado de flexibilidad al implementar
cada función . Por ejemplo, si una función dada tiene sólo unos cuantos ceros, los
arrays AND y OR pueden programarse para implementar el complemento de esa
función, lo que requerirá menos palabras y, así, complementar este complemento
de la función otra' vez en el array de salida.
Como regla, cada PLA se caracteriza por su número de palabras, designado
por n, y por su número de salidas, definido como m. Por otra parte, como el núme-
ro de líneas de dirección no será igual a log2n, se necesita especificar el número
de entradas o líneas de dirección de la PLA, lo que se designa como k. Así, se sabe
que una PLA de k x n x m tendrá A k_¡, ... ,AQ líneas de dirección además de las n
palabrás, donde cada palabra representa un minterm de las direcciones de las
entradas, y m salidas, denominadas F m_¡, ... ,FQ• También se sabe que la PLA puede
implementar m funciones booleanas cualesquiera de k variables cada una, siem-
pre que el número total de términos diferentes en las m funciones no sobrepase el
valor de n.
En la Figura 5.27 se muestra la estructura de una PLA de 4 x 8 x 4. Como
puede apreciarse, tiene las cuatro entradas A 3 , A 2 , A¡ Y A Q, las cuatro salidas F 3 ,
F 2 , Fl YFQ Y 8 términos ANO de palabras. A partir de esta definición se sabe que
cada término ANO puede contener más de cuatro literales, que cada función de
salida tiene más de ocho términos ANO y que cada salida puede obtenerse con o
sin complementar.
En la Figura 5.28 se utiliza esta PLA de 4 x 8 x 4 para implementar las fun-
ciones e¡+l Y S¡ del sumador completo, que se definió en la Figura 5.1. Téngase en
cuepta que no se podría utilizar esta PLA para implementar el sumador/restador
modular que se presentó en la Figura 5.26 porque tal módulo necesita ocho tér-
minos para las funciones/; y cinco términos más para la función e¡+¡, es decir, un
total de 13 términos diferentes que sobrepasaría el límite de ocho términos dispo-
nibles en la PLA. .
Para implementar este sumador completo, se asignan Xi' y ¡ Y e¡ a las líneas de
direcciónA¡, A¡ y A Q, y las salidas e¡+¡ YS¡ a las salidas F¡ y FQ de la PLA. La tabla
de verdad y las representaciones con mapa para esta implementación se han mos-
trado en la Figura 5.28(a) y (b), y el circuito lógico de la PLA, indicando todas
sus conexiones, se ha presentado en la Figura 5.28(c).
Las PLA tienden a ser no menos flexibles que las ROM y tienen la ventaja
adicional de ser más eficientes en la implementación de lógica aleatoria.
214 Principios de diseño digital

Consecuentemente, se utilizan más a menudo para la implementación de lógicas


de control, mientras que las ROM se utilizan más frecuentemente para tablas de
coeficientes, programas de arranque, vectores de test y otros datos diversos.

FIGURA 5.27 Estructura de PLA.

5.14. RESUMEN DEL CAPíTULO


En este capítulo se han enumerado y diseñado los componentes combinacionales
básicos que se utilizan para implementar transformaciones entre datos en proce-
sadores y en otros microchips a medida. Estos componentes, generalmente deno-
minados componentes a nivel de registro, se diseñan para tratamiento de números
binarios completos, no sólo a nivel de bit. Para empezar, se han diseñado unida-
des funcionales que realizan operaciones aritméticas y lógicas, tales como suma-
dores, unidades lógicas de suma/resta y ALU. En la discusión de este tipo de uni-
dad, se ha mostrado cómo incrementar la velocidad de la cadena de acarreo por
Componentes combinacionales 215

, ,
, DO
e

O
"
01

1
" 10

1
As A,. 1'1 Fo
X¡ S¡ c,., , ,
1 1 1
X O O O X X O O
X O O 1 X X O I
X O I O X X O I
X O 1 1 X X 1 O , ,
X 1 O O X X O 1 e, DO 01
, 11 10
X 1 O 1 X X I O
X I I O X X 1 O O ,,r . -I,
X 1 1 I X X I I
, ,_ .J '
(a) Tabla de verdad 1 .- .- -
"--
-lrl ~1
I!--:..l
- l-'
- ,
o

(b) Representación con mapa

(x¡) (1¡) (ej )


A) A2 Al Ao

(No usado) (Si ) (eí..)

(e) Implementación de la PLA

FIGURA 5.28 Implementación con PLA del sumador completo,


216 Principios de diseño digital

medio de técnicas de acarreo anticipado. A continuación, se han introducido com-


ponentes que pueden decodificar direcciones binarias, utilizadas frecuentemente
en el diseño de memorias, y componentes que pueden codificar líneas de priori-
dad, que se utilizan a menudo para arbitrar el acceso a buses. Después, se han
introducido los selectores y los buses, utilizados para conectar componentes en un
microchip o PCB. Además, se han diseñado componentes combinacionales que se
usan para calcular operadores relacionales tales corno comparadores, y compo-
nentes que se utilizan para tratamiento de bits, tales corno desplazadores y rota-
dores. Finalmente, se han descrito componentes programables, tales corno memo-
rias ROM y PLA, frecuentemente empleados en la implementación de tablas,
lógica de control y otras funciones lógicas diversas. En muchos casos se han dise-
ñado estos componentes a partir de sus tablas funcionales, convirtiéndolas en
tablas de verdad e implementándolas con puertas universales, mientras se recurría
a técnicas de sínte~is lógica estudiadas en capítulos anteriores.

5.15. LECTURAS ADICIONALES


E~cegnovac, M. Y T. Lang. Digital Systems and Hardware/Firmware Algorithms. New
York: Wiley, 1985.
Una iotroducción excelente y precisa a la construcción de componentes combinaciona-
les y arrays iterativos.
Hayes, J.P. Computer Architecture and Organization. New York: McGraw-Hill, 1988.
Un libro de introducción a la arquitectura que describe muchos componentes combina-
cionales a nivel de registro y su utilización en el diseño del procesador.
Neil, H. y K. Eshraghiarn. PrincipIes 01 CMOS VLSI Design. Reading, MA: Addison-
Wesley, 1993.
Explica a los lectores que poseen conocimientos de diseño de circuitos y técnicas de
trazado, el diseño de componentes combinacionales a nivel de circuito e ilustra cómo
realizar el trazado de transistores para muchos de los componentes.

5.16. PI:¡OBLEMAS
5.1. (Sumadores) Diseñe un sumador 5.3. (Restadores) Defina y diseñe una fun-
modular de 2 bits que combioe las ción de adeudo anticipado (borrow-
funciones de dos FA. Utilizando la look-ahead) y muestre cómo podría
biblioteca presentada en la Tabla utilizarse en un restador de magnitud.
3.14, compare el retardo de su diseño
5.4. (Generadores de acarreo anticipado)
con el del diseño mostrado en la
Utilizando las bibliotecas dadas en las
Figura S.l.
tablas que se iodican a continuación,
5.2. (Restadores) Defina y diseñe un res- rediseñe el generador CLA mostrado
tador completo, que podría ser equi- en la Figura S.2(c).
valente a un sumador completo, y uti- (a) Tabla 3.14
Iícelo para diseñar un restador de (b) Tablas 3.14 y [Link]
adeudo propagado (ripple-borrow) . (e) Tablas 3.14, 3.15 Y 3.16
Componentes combinacionales 217

En cada diseño, compare los retardos pueda comparar los siguientes tipos
al generar los siguientes acarreos: e4, de representación numérica:
Cs, Cl2 Y C16' (a) Siguo y magnitud
(b) Complemento a dos
S.S. (Generadores de acarreo anticipado)
(e) Punto flotante
Diseñe un sumador CLA de 64 bits
utilizando: 5.14. (Comparadores) Diseñe comparado-
(a) Un nivel de CLA res que puedan evaluar las siguientes
(b) Dos niveles de CLA relaciones:
(e) Tres niveles de CLA (a) X> Y
(b) X = Y •
5.6. (Generadores de acarreo anticipado)
(e) X < Y
Diseñe el sumador CLA más rápido
(d) X:i! y
posible de:
(e) XS;Y
(a) 16 bits
(b) 32 bits 5.15. (Comparadores) Rediseñe el compa-
(e) 64 bits • rador de 2 bits que compara X = x,xo
con Y = y,Yo, con la condición de que
5.7. (Unidades lógicas) Diseñe una unidad
Xo e Yo no pueden ser 1 al mismo tiem-
lógica que mejore las siguientes com-
po. ¿Cúantos transistores aborrará si
binaciones de operaciones:
utiliza este comparador de 2 bits en la
(a) NANO, NOR, transferencia y
implementación serie del comparador
complemento
de 8 bits de la Figura 5.22(a)?
(b) XOR y XNOR
(e) ANO, OR Y NOT 5.16. (Comparadores) Rediseñe el compa-
rador de 2 bits que compara X = x,xo
5.8. (ALU) Diseñe una ALU que pueda
con Y = y,Yo, con la condición de que
realizar las operaciones de suma,
resta, NANO y NOR. x, e y, o Xo e Yo o ambos no pueden ser
1 al mismo tiempo. ¿Cúantos transis-
5.9. (ALU) Diseñe un ampliador lógico tores aborrará si utiliza este compara-
que realice las operaciones ANO, dor de 2 bits en la implementación
NANO, OR, NOR, XOR, XNOR, paralelo del comparador de 8 bits de
identidad y complemento. la Figura 5.22(b)?
5.10. (Decodificadores) Diseñe un decodi- 5.17. (Desplazadores) Diseñe un registro
ficador de 4 a 16 utilizando: de 8 bits que:
(a) decodificadores de l a 2 (a) rote a la izquierda
(b) decodificadores de 2 a 4 (b) desplace a la izquierda
(e) puertas lógicas ANO, OR YNOT (e) desplace a la izquierda y a la
derecha
5.11. (Codificadores) Diseñe un codifica-
(d) desplace y rote a la izquierda y
dor de (a) 2 a 1, (b) 4 a 2, (c) 8 a 3 y
a la derecha
(d) 16 a 4, que sea un verdadero com-
plemento de un decodificador. 5.18. (Desplazadores) Defina las operacio-
nes de un desplazamiento aritmético a
5.12. (Selectores) Obtenga un algoritmo
la izquierda (multiplicación por 2) y
para la construcción de selectores de
uno a la derecha (división por 2) para
n a 1 a partir de selectores de 2 a 1
los números en signo y magnitud y
para cualquier entero dado n.
complemento a 2. Diseñe un despla-
5.13. (Comparadores) Diseñe las versiones zador aritmético de 1 bit para:
serie y paralelo de un comparador que (a) Números en signo y magnitud
218 Principios de diseño digital

(b) Números en complemento a 2 2 bits que genere las funciones


(e) Ambos tipos de números "mayor que", "menor que" e "igual
que".
5.19. (Desplazadores) Diseñe de nuevo el
desplazador universal presentado en 5.22. (PLA) Utilizando el tipo de PLA indi-
la Figura 5.23 añadiendo la capacidad cado entre paréntesis, implemente las
de dos desplazadores aritméticos en siguientes funciones:
complemento a 2 a su conjunto de (a) Un módulo sumador/restador
operaciones. (con PLA de 4 x 16 x 4)
(b) Un comparador de magnitud
5.20. (ROM) Compare el coste y el retardo (con PLA de 4 x 8 x 4)
de las siguientes implementaciones (e) Un generador de CLA (con PLA
de funciones booleanas cualesquiera: de9x8x6)
(a) A PROM
(b) A PLA 5.23. (pLA) Utilizando una PLA de 4 x 8 x 4,
(e) A FPGA • añada el modo de bit M al sumador
(d) Lógica diversa presentado en la Figura 5.28(a) tal que,
si M; O la salida s;; X;, Y si M; 1, Ia
5.21. (ROM) Utilizando una PROM de PLA realice la función del sumador
16 x 4, implemente un comparador de completo.

Lógica
secuencial

3
Álgebra booleana Puertas lógicas
y biestables

Máquina de 6
estados finitos

Sistema binario
y representación
de datos
Componentes
combinacionales
222 Principios de diseño digital

En los cinco capítulos anteriores se ha descrito el procedimiento de diseño de


componentes combinacionales. La característica principal de todos los compo-
nentes combinacionales es el hecho de que sus valores de salida se calculan exclu-
sivamente a partir de sus valores actuales en las entradas. Para cualquier cambio
en los valores de entrada, los valores de salida aparecen en los terminales de sali-
da con el retardo D. necesario para calcular los valores de salida. Los componen-
tes secuenciales difieren debido a que contienen elementos de memoria, mientras
que los combinacionales no. Como resultado, los valores de salida de los compo-
nentes secuenciales se calculan utilizando tanto los valores de entrada actuales
como los anteriores.
Esta dependencia, en los circuitos secuenciales, de los valores de entrada ante-
riores hace necesaria la presencia de elementos de memoria. Los valores almace-
nados en elementos de memoria defmen el estado de un componente secuencial.
Así pues, cualquier, cambio en los valores de entrada en el instante t.I modificará
el estado del componente secuencial en el instante ti + D.[ Y los valores de salida
en el instante ti + 1'1z:
Como ejemplo de circuito secuencial, considérese el contador de tonos en un
contestador automático, que cuenta el número de tonos y conecta el grabador de
mensajes después de cuatro tonos. Como el contador de tonos cuentra hasta cua-
tro, la memoria del contador debe permitir el almacenamiento de cuatro dígitos:
O, 1,2 Y 3. Cuando el número O está almacenado en memoria, se dice que el con-
testador está en el estado O, esperando el primer tono. En los estados 1, 2 Y 3 el
contestador habrá recibido uno, dos o tres tonos, respectivamente. Cuando e.l con-
tador esté en el estado 3 y llegue el cuarto tono, el grabador se activará. En este
momento, los tonos posteriores serán ignorados y el contador volverá al estado O.
En este ejemplo puede verse que la salida del contador de tonos depende no sólo
de un tono, sino de una secuencia de tonos que se suceden antes de que llegue el
cuarto tono.
Generalmente, esto es verdad en todos los circuitos secuenciales. Sus salidas
dependen de la secuencia de valores de entrada presentados durante un período de
tiempo. De hecho, el término secuencial se debe a esta dependencia con la secuen-
cia de valores de entrada en lugar de depender sólo del valor de entrada actual.
Como se ha visto, la secuencia de valores de entrada, o algo relacionado con ella,
se almacena en la memoria. Debido a que esta memoria siempre es finita, el tama-
ño de la secuencia debe ser finito, lo que significa que la lógica secuencial conten-
drá sólo un número finito de estados, aunque éste sea bastante elevado.
En general, los circuitos secuenciales pueden ser asíncronos o síncronos. Los
circuitos secuenciales asíncronos camb~an su estado y los valores de salida siem-
pre que hay un cambio en los valores de entrada, mientras que los circuitos
secuenciales síncronos cambian sus estados y los valores de salida en instantes
fijos de tiempo, determinados por el flanco de subida o bajada de una señal exter-
na de reloj (clk, de clock). En la Figura 6.1 se muestra el diagrama de tiempos y
la nomenclatura de una señal típica de reloj. En este diagrama puede verse que el
período de reloj es el tiempo entre transiciones sucesivas en la misma dirección,
es decir, entre dos flancos de subida o dos flancos de bajada. El inverso del perí-
Lógica secuencial 223

odo de reloj se denomina frecuencia de reloj. Normalmente, el período de reloj


se mide en nanosegundos (ns) y la frecuencia se mide en megahertzios (MHz). El
ancho del pulso de reloj es el tiempo durante el cual el valor de la señal de reloj
es igual a 1. El cociente entre el ancho del pulso de reloj y el período de reloj se
denomina rendimiento de ciclo (duty cycle) . Se dice que una señal de reloj está
activa en alta si el cambio de estado se produce en el flanco de subida de reloj o
durante el ancho del pulso de reloj . En caso contrario, se dice que la señal de reloj
está activa en baja.

Periodo del reloj !

j )'1
Ancho del pulso
(1 l;
Flanco de subida Flanco de bajada
de reloj

FIGURA 6.1 Señal de reloj.

En este capítulo se utiliza esta nomenclatura para el estudio de la lógica


secuencial síncrona. Primero, se introducen los elementos básicos de almacena-
miento que memorizan un bit de información, que son los latches y los biestables
(jlip-flops). Después, se da el procedimiento de análisis para la lógica secuencial
y se establece el modelo de máquina de estados finitos que se utiliza para el mode-
lado de la lógica secuencial. También se trata el procedimiento de síntesis para
convertir descripciones de máquinas de estados finitos en circuitos lógicos
secuenciales. A lo largo de esta presentación, los procedimientos de análisis y sín-
tesis se describirán con varios ejemplos prácticos.

6.1. LATCH SR
El elemento de memoria más simple en un diseño digital es ellatch SR, que cons-
ta de dos puertas NOR conectadas de forma cruzada. Como puede verse en la
Figura 6.2(a), el latch SR tiene dos señales de entrada: la señal de puesta a 1, S
(Set), y la señal de puesta a 0, R (Reset) ; también tiene dos señales de salida, Q y
Q'; finalmente, tiene dos estados: un estado de puesta a uno (o set) cuando
Q = 1 (Q' = O) Y un estado de puesta a cero (o reset) cuando Q = (Q' = 1).
Mientras las señales S y R sean iguales a 0, el latch SR permanece en el mismo
°
estado. Por ejemplo,.si Q = 1 la salida de la puerta NOR superior será igual a 0,
lo que hará que la salida de la puerta NOR inferior sea igual a O. Igualmente, si
Q = 0, la salida de la puerta NOR superior será igual a 1, lo que hará que la sali-
da de la puerta NOR inferior sea igual a O.
224 Principios de diseño digital

1 s --=:::JJ,:i)o--,-- Q'
o o o o 1
o o I I O
o I X O I
o R_'::=~iWc>--L- Q I o X I O
1 1 X O O
(a) Circuito lógico (e) Tabla de verdad

Q'
-
'o
(b) Diagrama de tiempos

FIGURA 6.2 Latch SR (implementación NOR).

Sin embargo, si la entrada S (entrada R) se hace 1, ellatch SR irá al estado de


puesta a uno (puesta a cero). Esto se describe en el diagrama de tiempos de la
Figura 6.2(c). Por ejemplo, cuando S vale 1 en lo' la salida Q' vale O en lo + 1,4
ns, lo que fuerza a Q a valer 1 en 10 '+ 2,8 ns. Téngase en cuenta que, cuando S
baja a Oen 11' ellatch SR permanece en el estado de puesta a uno. De igual forma,
ellatch SR puede ponerse a O manteniendo la señal de reset R mientras se pone S
a valor O. Por ejemplo, cuando R vale 1 en 12, la salida Qvale Oen 12 + 1,4 ns, for-
zando a Q' a valer 1 en 12 + 2,8 ns. Obsérvese también que después de que R vuel-
va a valor Oen 13, ellatch permanecerá en el estado de puesta a cero.
Si las señales de entrada S y R valen ambas 1, las salidas Q y Q' deben ser igua-
les a O. Si una de las señales de entrada cambia antes que la otra, el latch puede
finalizar en un estado forzado por la señal que cambie después. Esta situación se
describe en la Figura 6.2(b) en el momento, 14, en que S vale 1. Como puede verse,
ellatch funcionará normalmente y entrará en el estado de puesta a uno en 14 + 2,8
ns. Además, cuando R cambie en 15, la salida Q valdrá Oen 15 + 1,4 ns. Téngase en
cuenta que, mientras que S y R valgan 1, ambas salidas Q y Q' estarán a O. Sin
embargo, cuando S cambie en 16, el latch entrará en el estado de puesta a cero en
16 + 1,4 ns y permanecerá en este estado hasta que S o R cambien otra vez.
Un problema inherente al latch SR es el hecho de que si S y R cambian al
mismo tiempo, no se puede predecir la salida. En el caso de que las puertas ten-
Lógica secuencial 225

gan el mismo retardo, ambas valdrán 1 al mismo tiempo y, después, valdrán O al


mismo tiempo y así sucesivamente, oscilando siempre como se indica en la Figura
6.2(b). Por ejemplo, cuando las dos señales de entrada se ponen a cero en t lO ,
ambas puertas NOR toman valor 1 en t lO + 1.4 ns. Como una de las entradas a
cada puerta NOR vale ahora 1, ambas puertas se pondrán a O en t 10 + 2,8 ns. Esta
oscilación, llamada usualmente carrera crítica (critical race), continuará con las
salidas de ambas puertas a 1 en t lO + 1,4 x (2n + 1) Y a O en t lO + 1,4 x (2n), para
cualquier entero no negativo n. Cuando las puertas NOR no tienen exactamente
el mismo retardo, una de ellas puede ser ligeramente más rápida que la otra. En
tal caso, la puerta NOR más rápida prevalecerá y establecerá su salida a 1, for-
zando la salida del otro latch a O en t lO + 2,8 ns. Así pues, cuando las señales de
entrada se restablecen al mismo tiempo, el estado siguiente del latch es indefini-
do, ya que no se sabe que condición ocurrirá.
Para eliminar, este funcionamiento indeterminista, se debe asegurar que las
señales S y R no se restablezcan al mismo tiempo.
Desafortunadamente, esta regla es difícil de imponer al no conocer los retar-
dos de los circuitos lógicos que generan los valores de S y R. Como consecuen-
cia, cuando se diseña con latches SR debe seguirse una regla más estricta; hay que
asegurarse de que las señales S y R nunca cambien al mismo tiempo.

R _=::{!;:;y.--L_ Q'
(a) Circuito lógico (e) Tabla de verdad

s
,
R
1':
,-;-,------!I r-----

(b) Diagrama de tiempos

FIGURA 6.3 Latch SR (implementación NANO).


226 Principios de diseño digital

A partir del análisis del modo de operación dellatcb SR, se puede construir la
tabla de verdad del funcionamiento dellatcb, que se muestra en la Figura 6.2(c).
Como indica esta tabla, para cada instante ti' Q(siguiente) y Q'(siguiente) indican
el valor de la salida Q en el instante ti + /J., donde /J. es igual o mayor que 2.8 ns.
La tabla proporciona los valores de salida para cada combinación de los valores
de entrada y del estado dellatcb SR.
El latcb SR puede implementarse también con puertas NAND. Sin embargo,
en este caso las entradas S y R están normalmente a 1. Activando S o R a Ose esta-
blecerá o pondrá a O el latcb, respectivamente, que es justamente lo opuesto a la
implementación NOR en la que activando S o R a I se causaba la puesta a uno o
a cero dellatcb, respectivamente. Finalmente, la implementación NAND se mues-
tra en las Figuras 6.3(a), (b) y (c).

6.2. LATCH SR SINCRONIZADO


Ellatch SR sincronizado (gated SR latch) es similar allatcb SR, con una excep-
ción. Como se muestra en la Figura 6.4, este latch tiene una tercera entrada de
control, e, que habilita o deshabilita la operación dellatch SR. En la práctica, esto
significa que cuando C es igual a l , el latch SR sincronizado funciona como un
latch SR. Sin embargo, cuando C = Ose deshabilitan la puesta a uno y la puesta a
cero, y el circuito persiste en el estado anterior. Considérese, por ejemplo, el dia-
grama de tiempos de la Figura 6.4(d), que describe este funcionamiento y mues-
tra que, aunque ellatcb esté en el estado de puesta a Oen to' no se pone a uno cuan-
do S vale l. Sin embargo, obsérvese que la puesta a uno dellatcb se permite en tI'
una vez que C ha cambiado; la salida Q' vale O en t i + 2,0 ns y Q vale l en t i +
4,0 ns. Una vez que e se desactiva de nuevo en 12, los cambios en los valores de
las señales de entrada S y R, en 13 y 14, no pueden afectar al estado dellatch. Sin
embargo, cuando C cambia de nuevo al , en t s' el valor de las señales de entrada
se propaga a través del latcb. Por lo tanto, ellatch se pone a cero en Is + 2,0 ns.
En general, puede decirse que el latcb sigue los cambios de las señales de
entrada mientras que C vale 1. Por ejemplo, cuando C vale l en t9 , S es igual al ,
Y ellatcb pasa al estado de puesta a uno (Q = 1) en 19 + 4,0 ns. Cuando S se pone
a cero en lJO y R se pone a l en 111' el latch pasa al estado de puesta a cero
(Q = O) en 111 + 2,0 ns.
Es fundamental tomar precauciones cuando se trabaja con el latcb SR sincro-
nizado: el diseñador debe estar seguro de que las señales de entrada no cambian
durante el intervalo de tiempo del fl anco de bajada de la entrada de control C. Este
intervalo empieza en el tiempo de establecimiento (setup ), tsetup' anterior al flan-
co de bajada de C y termina en el tiempo de mantenimiento (del inglés hold), t hold,
posterior al flanco de bajada de C. Por ejemplo, en la Figura 6.4(d) deben cum-
plirse las siguientes condiciones para el tercer pulso de control:
t l2 - t ll 2: tsetup
tJ3 - t l2 2: thold
Lógica secuencial 227

S ....". -Q Q(
Q O X X O O
O X X 1 1

n
~
e

s--'===O
Q'
1
1
1
1
O
O
O
1
O
O
1
O
O
1
X
X
O
1
O
1
1 1 1 X NA

(a) Símbolo gráfico (b) Circuito lógico (e) Tabla de verdad •


Estado reset Estado set Estado reset
r------,
e
,
~--~~--~i:lr~-
, ' ,
R
L
~
, .,2,0
Q
,
" '.
(d) Diagrama de tiempos

FIGURA 6.4 Latch SR sincronizado.

Pueden escribirse desigualdades similares para otros flancos de bajada de la


señal de control de la Figura 6.4(d). En la mayoría de los diseños digitales la
entrada de control se conecta a la señal de reloj del sistema. Por este motivo, el
latch SR sincronizado se denomina latch SR sincronizado (clocked SR lateh).

6.3. LATCH D SINCRONIZADO


Como se ha indicado en la Sección 6.2, los diseñadores que trabajan con biesta-
bles básicos SR deben asegurarse de que las entradas S y R no valgan l al mismo
tiempo. Este inconveniente puede evitarse utilizando biestables básicos D, que
disponen únicamente de una entrada D. Ellatch D sincronizado (gated D lateh)
se realiza a partir dellatch SR sincronizado, conectando la entrada D a la entrada
S, y D' a la entrada R dellatch SR, como indica la Figura 6.5(b). Conectando D y
D' a las entradas S y R se asegura que S y R no estarán a 1 al mismo tiempo. Un
latch D también tiene una entrada e que lo habilita, del mismo modo que se hacía
en ellatch SR sincronizado descrito anteriormente. Cuando e es igual al, la sali-
da Q tomará el mismo valor que la entrada D, después de un corto período de
228 Principios de diseño digital

tiempo. Por el contrario, si C es igual a O, la salida Q mantendrá el último valor


de D establecido antes del flanco de bajada del reloj.
El funcionamiento de un latch D sincronizado se describe en el diagrama de
tiempos de la Figura 6.5(d). Obsérvese que, cuando C alcance el valor 1 en tI' Q
será igual a D en ti + 4,0 ns. De igual forma, cuando C alcance el valor 1 en t 4 , Q
será igual a D en t4 + 2,0 ns. Téngase en cuenta, también, que si D cambia duran-
te el ancho del pulso de reloj, Q seguirá los cambios de la entrada D siempre que
los cambios sucedan antes de tsetu y después de t hold ' Éstos, t ,etup y t bold ' son los
tiempos anterior y posterior, respe~tivamente, al flanco de bajada de la señal Ceo
los que la entrada D debe permanecer estable. El intervalo de tiempo entre t,etup y
t bold se muestra en la Figura 6.5(d) sombreado. Por ejemplo, en la figura, Q será
igual a 1 en t7 + 4,0 ns, ya que D valía 1 cuando C = 1. Por otra parte, cuando D
cambie a O en t s' Q le seguirá en ts + 3,0 ns siempre que t9 - t s ;:: t ..tup' En gene-
ral, es fácil trabajar con ellatch D sincronizado, porque la señal de entrada D y la
señal de salida Q:
ligeramente retardada, tienen el mismo valor durante el perío-
do de tiempo en el que se considera C.

H
a
4,013,0

e Q'

(a) Símbolo gráfico (b) Circuito lógico (e) Tabla de verdad

Estado set Estado reset

e I, I, I, I, I I
, , , ,
,,, ,,,
D
, ,, ,, I :" : I :, IH-"i-':¡--
, , I I I 1 I

,,
, ,' ~
~.o
:1 1;......
2.0 :I : ~;
$ J:- tn
a ,-+>
, , ,
I - . -,

' ~-r~-T-~--~-" ' ~


' ~~~-
I

I I I I I

" " ~
" " '.
....
' '""" 'selUP

(d) Diagrama de tiempos

FIGURA 6.5 Latch O sincronizado.

Como se ha expuesto en el párrafo anterior, la salida Q está retrasada 4,0 ns


en la transición L a H, y 3,0 ns en la transición H a L, lo que se indica por 4,0/3,0
en el símbolo gráfico utilizado en circuitos de mayor tamaño.
Lógica secuencial 229 .

6.4. BIESTABLES
Como se ha explicado anteriormente, los latches con puertas son elementos sen-
cillos de memoria que se habilitan durante todo el intervalo de tiempo en el que
e
la señal de control es igual a 1. Frecuentemente, estos latches se denominan
latches sensibles al nivel porque están habilitados siempre que la señal de con-
trol esté al nivel 1. En cualquier instante de ese tiempo los latches serán transpa-
rentes, en el sentido de que cualquier cambio en las entradas se propagará a la sali-
da con un pequeño retardo. Estos biestables básicos funcionan como elementos de
memoria sólo después del flanco de bajada de la señal de control, cuando man-
tienen el estado establecido por el último valor de la entrada anterior al flanco de
bajada de la señal de control.
Basándose en esta descripción, se comprende que los diseñadores deban tener
cuidado cuando utilizan estos latches ya que, cuando el latch es transparente, los
largos intervalos de tiempo pueden, a veces, permitir que se introduzca informa-
ción no deseada. Como ejemplo, considérese un registro de desplazamiento de 3
bits formado por tres latches D, como se indica en la Figura 6.6(a). En este ejem-
plo, la señal de entrada X se conecta a la entrada D del primer latch, su salida QI
se conecta a la entrada D del segundo, y su salida Q2 se conecta a la entrada D del
tercero. La entrada de control e se conecta al reloj del sistema, e/k, que sincroni-
za la operación de todos los biestables. Teóricamente, este registro de desplaza-
miento debe trabajar de la siguiente manera: Durante sucesivos anchos del pulso
de reloj, el valor X entrará al primer latch, el valor del primer latch se transferirá
al segundo latch, y el segundo valor pasará al tercer latch.
Sin embargo, como puede observarse en el diagrama de tiempos detallado de
la Figura 6.6(b), el desplazamiento de la información que resulta no es el desea-
do. Por ejemplo, supóngase que todos los latches están en el estado de puesta a
cero (Q I =Q2 =Q3 =O) y que la señal de entrada X tiene el valor l durante el pri-
mer pulso de reloj y posteriormente el valor O. En otras palabras, el registro de
desplazamiento debería comenzar con el contenido 000 y con los valores 100,010
y 001 después del primer, segundo y tercer pulsos de reloj. Sin embargo, si el
registro de desplazamiento empieza con el contenido 000, le seguirán los valores
111, 000 y 000 después del primer, segundo y tercer pulsos de reloj . En otras pala-
bras, el registro de desplazamiento funciona como un único latch que almacena el
valor de la señal de entrada X en cada ciclo de reloj .
Observe este funcionamiento, aún con mayor detalle, suponiendo que el ancho
del pulso de reloj es tw = 15 ns y que la señal de entrada X vale 1 en too Cuando la
señal de reloj habilite ellatch en tI' el primer latch cambiará al estado de puesta a
uno (QI = 1) en ti + 4,0 ns. Sin embargo, como la señal de reloj mantiene su valor
otros 11 ns, el segundo latch cambiará al estado de puesta a uno en ti + 8.0 ns, así
como el tercero, que conmutará en ti + 12,0 ns. Entonces, tras el primer flanco de
bajada en 12, el contenido del registro de desplazamiento será igual a 111. Habrá
un funcionamiento similar cuando el segundo pulso de reloj, y los sucesivos, habi-
liten los restantes latches del registro de desplazamiento.
230 Principios de diseño digital

x y
D Q' D Q2 D Q3

4,013,0 4,013,0 4,013,0


e e e

e lk

.(a) Esquema lógico

elk I~ 15 =:¡f-- -----1


x

,,
Q, ~:4., 0 1 . . .
,, :,
-~~~
' :
~4.o l ~ ...,, I~
I

,
~
'
:

,
, , --:
Q3 _ ¡, 40 1... , 1Jt!-

'o " " '3 '. " " "


(b) Diagrama de tiempos

FIGURA 6.6 Desplazamiento erróneo con latches D,

Un posible método para rectificar este funcionamiento erróneo es disminuir el


ancho del pulso de reloj a un retardo de propagación, No obstante, la dificultad de
esta solución radica en que los retardos no son los mismos al poner a uno o cero
los latches, lo que significa que un ancho del pulso de reloj que ponga a uno el
latch puede no servir para ponerlo a cero, y viceversa. Además, si el ancho del
pulso de reloj se limita a un tiempo menor que el retardo del latch, éste no tendrá
tiempo de captar el valor de entrada. En cualquier caso, el fabricante dellatch no
puede garantizar realmente valores exactos de retardo, sencillamente a causa de
los márgenes de error en el proceso de fabricación, En este sentido, debe tenerse
en cuenta que la puesta a uno y a cero que se utilizan son sólo valores de retardo
esperados, mientras que los valores de retardo reales se distribuyen según una dis-
tribución normal alrededor de estos valores esperados.
Una vez expuestas estas restricciones, hay dos posibles soluciones al proble-
ma: los biestables maestro-esclavo y los biestables disparados por flanco, Los
biestables maestro-esclavo (master-slave jlip-jlop) se implementan utilizando
dos latches, denominados maestro y esclavo. Como muestra la Figura 6.7(a), la
Lógica secuencial 231

entrada a1latch maestro es la entrada al biestable, mientras que la entrada a1latch


esclavo es la salida del latch maestro. La salida dellatch esclavo es la salida del
biestable completo. En el biestable, los latches maestro y esclavo están guiados
por la misma señal de reloj, G/k, con la diferencia importante de que ellatch maes-
tro se habilitará cuando la señal de reloj sea igual a O, y ellatch esclavo cuando la
señal de reloj sea igual a 1.
La ventaja de utilizar estos biestables es clara: como los latches maestro y
esclavo no se habilitan nunca al mismo tiempo, el biestable maestro-esclavo
nunca es transparente. Por ejemplo, cuando la señal de reloj es O sólo el latch
maestro está habilitado y su contenido se transfiere al latch esclavo sólo después
de que la señal de reloj valga 1. Obsérvese que, cuando la señal de reloj es igual
al, el latch maestro se deshabilita y su contenido no cambia.

...
...
" ,
1 .l'
." ," .~

C/k

(a) Esquema lógico

C/k

,, ,
Q", -+-:4.0 +, ,-+- , 50
, "
-+-

, ,,
Q, -, 03.0
.....,, ....... ,·4.0 .........
,'

')
" "
(b) Diagrama de tiempos

FIGURA 6.7 Biestable maestro-esclavo.

Esto se indica con más detalle en el diagrama de tiempos de la Figura 6.7(b),


que muestra tres pulsos de la señal de reloj C/k. Cuando la entrada D vale 1 en lo'
el biestable maestro sigue el cambio de la entrada estableciendo Qm = 1 en lO + 4.0
232 Principios de diseño digital

ns, debido a que su entrada de control, C, es igual a 1. Este cambio no se propa-


ga a través del biestable esclavo hasta que C/k sea igual a 1 en tI' estableciendo
Qs = 1 en ti + 4,0 ns. Cuando, de nuevo, D vale O en t3, ellatch maestro le sigue
en t3 + 3,0 ns pero el cambio no se propaga al latch esclavo hasta t4 + 3,0 ns.
Cuando D cambia a 1 en t5, el cambio no se acepta por ellatch maestro hasta que
C/k sea igual a O en t6. Entonces Qm es igual a 1 en t6 + 5,0 ns. Obsérvese que se
ha añadido un retardo adicional de 1 ns debido al inversor asociado a la entrada
e dellatch maestro. Además, cuando ellatch esclavo se habilita en t7 , Qs es igual
a 1 en t7 + 4,0 ns. Un cambio similar de la entrada D a O, en t8, no se considera
por el latch maestro hasta t9 + 4,0 ns, y no se propaga al latch esclavo hasta que
la señal de reloj vuelva a ser igual a 1.
Como se ha indicado en la Figura 6.7, el valor de la entrada D se capta en el
latch maestro antes del flanco de subida de la señal de reloj, y se transfiere allatch
esclavo inmediatamente después del mismo flanco de subida. Prácticamente puede
decirse que el valor de D se ha captado en el flanco de subida de la señal de reloj.
Si se reconstruye el registro de desplazamiento tratado anteriormente utili-
zando biestables maestro-esclavo, se obtiene el circuito lógico de la Figura 6.8(a),
que corresponde al diagrama de tiempos mostrado en la Figura 6.8(b). Este nuevo
diagrama de tiempos muestra la misma señal e/k y las señales de entrada que la
Figura 6.6(b), pero se ha modificado de modo que para cada biestable se indican
dos formas de onda: las salidas de los biestables maestro y esclavo, Q¡m y Qis'
donde 1 ;<:; i ;<:; 3.
Como indica el diagrama, después de que la señal de entrada X cambie a 1 en
lo' sólo el latch maestro del primer biestable se pondrá a I (Q 1m = 1) en lo + 4,0
ns. Entonces, cuando la señal de reloj cambie a 1 en tI' ellatch esclavo se pondrá
a I en ti + 4,0 ns. Un poco después, después de que la señal de reloj vuelva a O
en t2, ellatch maestro del segundo biestable se pondrá a 1 (Q2m = 1) en 12 + 5,0
ns. Nótese que, cuando la señal de entrada X vuelva a Oen 13, ellatch maestro del
primer biestable se pondrá a O (Qlm = O). Tras el siguiente flanco de subida del
reloj , QI Sretornará a Oen t3 + 3,0 ns y Q2.< se pondrá a l en 14 + 4,0 ns. Igualmente.
al tercer flanco de subida del reloj Q2.< se pondrá a O y Q3s se pondrá a 1.
Como puede observarse, los registros de desplazamiento realizados con bies-
tables maestro-esclavo desplazan su contenido una posición a la derecha en cada
flanco de subida de la señal de reloj. Por consiguiente, cada ciclo de reloj corres-
ponde a un estado del registro de desplazamiento que, para la secuencia de valo-
res de la señal de entrada mostrada en la Figura 6.8(b), va desde el estado 000 a
los estados 100, 010 y 001 y vuelve, finalmente, a 000.
Como indica la Figura 6.9(a), un biestable disparado por flanco (edge Irig-
gered flip-flop) se implementa con tres biestables básicos SR de puesta a uno, de
puesta a cero y de salida interconectados. El latch de puesta a uno sigue los cam-
bios en la señal e/k si D es igual a 1 en el flanco de subida de la señal e/k, mien-
tras que el latch de puesta a cero sigue a la señal de reloj si D es igual a O en el
flanco de subida de la señal de reloj. En otras palabras, las señales Ay B registran
los cambios en D mientras e/k es igual a O. El funcionamiento detallado del bies-
table disparado por flanco se ilustra en el diagrama de tiempos de la Figura 6.9(b).
Lógica secuencial 233

{a} Esquema lógico

elk

Q
,
,. _:4.0+
, -,-l E

Q"

Q,. -,,:4.0 +-

_ : LI+-_
'·_
O_i-___
,
,
Q,. ~; s.o l+-
,
Q"

"
(b) Diagrama de tiempos
'. "

FIGURA 6.8 Desplazamiento con biestables maestro-esclavo.

Mientras e/k es igual a O, las señales S y R valen 1, manteniendo ellatch de


salida su estado actual. Cuando D cambia en to' B cambia a O en t o + 1,4 ns y A
cambia a 1 en to + 2,8 ns. La salida Q pennanece sin cambio hasta que e/k sea
igual a 1 en t" forzando a S al valor O en tI + 1,4 ns y a Q al valor 1 en tI + 2,8
ns. Cuando e/k vuelve a O en t2 , S vuelve a 1 en t2 + 1,4 ns, dejando Q a 1.
Cuando D vale O en t 3, B toma valor 1 en t 3 + 1,4 ns y A se pone a O en t 3 + 2,8
ns.
Tras el flanco de subida de la señal e/k en t4 , R cambia a O en t4 + 1,4 ns y Q
a O en t4 + 4,2 ns. El cambio en el valor de D en t5 no se registra hasta el flanco
de bajada de la señal e/k en t6, cuando R vuelve a 1 en t6 + 1,4 ns, B vale O en
234 Principios de diseño digital

16 + 2,8 ns y A vale I en 16 + 4,2 ns. En 17 + 2,8 ns, Q se establece a I tras el flan-


co de subida de C/k en 17 y la bajada de S en 17 + 1,4 ns.

C/k

Q'

(a) Esque ma lógico

C/k

D
\
...... ' 2.8
~
: ~~\~:;,
r ......12,8 ..... ,
,
....... 1 4,2 ..... 1 ....... 2.8

~A====~, ==~,,
S -H-J."I-r-----i--~~====:!'==~===---------T:
, ,
.,.-__~~-":--'::====+,~----~------1'-:;¡
' ,
- 1·4; _!.41_ I I I I 1
1.41..... ~1.4 ~
R ......
, 0..._ _ _:
, ,--,r-
-. . .

,
.,---...¡'-;;, , ,-+---T,--;,--,
B
-+o
1,4
-.
I P.4
...... . ..... ~
, ,1 2.8 L+- ........
I
_________----W ~
1],4 I

, L-~--~--~
. : ,--¡-.-------+-----f,--j , , , ,.;,----+-------
, - , 2.8 ~ 4.2 ~I
..... I ....., 2,8 +- I
Q
"7--¡-'-------------+--1 '
'o " "
(b) Diagrama de tiempos

FIGURA 6.9 Biestable disparado por flanco.

Obsérvese, de nuevo, que el cambio posterior de D en 18 no se propaga a la


salida Q pero es captado cuando B vale I en 18 + 1,4 ns y A vale Oen 19 + 2,8 n _
El valor de Q será igual a O en el siguiente flanco de subida de la señal C/k si D
no cambia después de 18' Si D cambia depués de 18 y antes del siguiente flanco de
Lógica secuencial 235

subida, los valores de las señales A y B captarán este cambio y lo propagarán a la


salida Q en el siguiente flanco de subida de la señal e/k.
Como los biestables maestro-esclavo y los biestables disparados por flanco
cambian de estado sólo durante transiciones positivas de reloj, como se ha mos-
trado en las Figuras 6.7 y 6.9, un estado en un circuito secuencial con biestables
puede definirse como su situación en un intervalo de tiempo entre dos flancos de
subida de la señal de reloj . El valor del circuito secuencial en cada uno de sus esta-
dos está determinado por el contenido de todos sus biestables.

6.5. TIPOS DE BIESTABLES


En la Sección 6.4 se indicó cómo realizar un biestable maestro-esclavo y un bies-
table disparado por flanco. Aunque hay varias y diferentes maneras de realizar
biestables, todas presentan las siguientes dos características: primero, un biesta-
ble cambia de estado sólo en el flanco positivo o negativo de la señal de reloj y,
segundo, sus entradas de datos no deben cambiar después del tiempo t sel " ante-
rior, ni antes del tiempo t ho1d posterior, al flanco de disparo de la señal de ieloj .
Todos los biestables pueden dividirse en cuatro categorías básicas: SR, JK, D
Y T. Se diferencian en el número de entradas y en la respuesta que proporcionan
a valores diferentes de las señales de entrada. Las cuatro clases de biestables se
indican en la Tabla 6.1. Cada uno de estos biestables puede caracterizarse por su
símbolo gráfico, por su tabla característica y su ecuación característica o por su
tabla de excitación. Los símbolos gráficos indican el número y el tipo de entradas
y salidas. Todos los biestables tienen señales de salida Q y Q'. También todos ellos
disponen de entrada de señal de reloj . El pequeño triángulo en la entrada de reloj
indica que el biestable se dispara por el flanco de subida de la señal de reloj. Por
el contrario, un círculo junto al triángulo indicará que se trata de un biestable dis-
parado por flanco de bajada de la señal de reloj.
Para hacerlo más sencillo, a lo largo de este libro se utilizarán sólo biestables
disparados por flanco de subida. Cada biestable tiene una o dos entradas de datos
que caracterizan al biestable y le dan nombre, como se ha descrito anteriormente.
El biestable SR tiene dos entradas, S (set) y R (reset) , que ponen a l Ó a O el bies-
table cuando se activan. En concreto, cuando S = I Y R = O la salida Q del biesta-
ble se pone a l y cuando S = O YR = 1 la salida se pone a O. El biestable JK, simi-
lar al SR, dispone de dos entradas, J y K, que realizan la puesta a 1 ó a O del bies-
table cuando se activan. Además, cuando ambas entradas J y K están activas al
mismo tiempo, el biestable JK cambia de estado. Como se ha mencionado ante-
riormente, el biestable D tiene una entrada D (datos) qúe pone a l el biestable
cuando D = 1 Y lo pone a O cuando D = O. El biestable T tiene una entrada T (tog-
gle) que fuerza al biestable a cambiar de estado cuando T es igual a 1.
En la segunda columna de la Tabla 6.1 puede verse la tabla característica,
una versión reducida de la tabla de verdad que proporciona, para cada conjunto de
valores de entrada del biestable y dado su estado anterior al flanco de subida, su
correspondiente estado posterior al flanco de subida de la señal de reloj. En la
236 Principios de diseño digital

tabla, Q y Q(siguiente) denotan el estado del biestable antes y después del flanco
de subida del reloj, respectivamente. La tabla característica se utiliza en el análi-
sis de circuitos secuenciales, cuando se conoce el valor de las entradas del biesta-
ble y se desea obtener el valor de la salida Q del biestable después del flanco de
subida de la señal de reloj . Como en cualquier otra tabla de verdad, se puede uti-
lizar el método del mapa para obtener una ecuación característica para cada
biestable, como se muestra en la tercera columna de la Tabla 6.1.

TABLA 6.1 Tipos de biestables

- " -;.. ,~ ',. ......; • . ~. +. '. -!

,\ < . ¡

ts.: . • ;..... ~\ ~, + t '. : ~.,;" .' ",,:..'.,.i '

~'!' ~ " •
¡
~/~." :- -, '" ." . ~.
o O Q
Q(siguiente) = S + R'Q
o O O X
SR O 1 O O 1 1 O
1 O 1 SR = O 1 O O I
1 1 NA 1 1 X O

~', I ,;~::."':II' .. ! . • ~ ,.,.~.:: '" - •

"
, .$,-:-- ... f! ¡ .po.c.J ~t-::.. .....1!ro' ••,/ .•

O O Q O O OX
JK O I O Q(siguiente) = JQ' + K'Q O I 1 X
1 O I I O X 1
I 1 Q' I I X O

O O O
D Q(siguiente) =D O I 1
I O O
1 I 1

O O O
T Q(siguiente) = TQ' + TQ O I 1
I O 1
I I O

En la cuarta columna de la tabla se muestra la tabla de excitación, utilizada


para la síntesis de circuitos secuenciales. La tabla de excitación se obtiene de la
tabla característica cambiando las columnas de las entradas y salidas. Proporciona
Lógica secueocial ID

el valor de las entradas de los biestables que se necesitan para cambiar de estado
después del flanco de subida de la señal de reloj.
Además de los símbolos gráficos, tablas o ecuaciones, los biestables pueden
caracterizarse también con diagramas de estados o grafos de estados, en cuyo caso
cada estado se representa por un círculo, y una transición entre estados se indica
por una flecha . Por ejemplo, en la Tabla 6.2 se describen con este método los cua-
tro tipos de biestables. Obsérvese que cada flecha se marca con los valores de las
señales de entrada, que originan una transición de un estado a otro. Además, un
mismo estado puede ser origen y destino de la transición. Como las transiciones
ocurren en el flanco de reloj, cada estado puede considerarse como un intervalo
de tiempo entre dos flancos de subida sucesivos de la señal de reloj.

TA BLA 6.2 Diagrama de estados para distintos biestables

S.R=I ,D

SR
S,R=D,I

l.K=I,D 6 1,1

JK
l ,K=D,1 6 1,1

0=1

D=O

T=I

T=I

Puede verse en la tabla que los diagramás de estados de los cuatro biestables
tienen el mismo número de estados y de transiciones: cada biestable está en el
estado de establecimiento o puesta a 1 (set) cuando Q = l Y en el estado de ini-
cialización o puesta a O(reset) cuando Q = O. Además, cada biestable puede pasar
de un estado a otro o volver al mismo estado. La única diferencia entre los cuatro
238 Principios de diseño digital

tipos de biestables reside en los valores de las señales de entrada que originan las
transiciones. Un diagrama de estados es un método muy conveniente de visuali-
zar el funcionamiento de un biestable o, incluso, de gran número de componentes
secuenciales. En la Sección 6.7 se generalizan estos diagramas de estados al defi-
nir el modelo de máquina de estados finitos utilizado en el diseño de lógica
secuencial.
Cada biestable está disponible, normalmente, con o sin entradas asíncronas,
que se utilizan para poner a I (preset) o poner a O (clear) los biestables indepen-
dientemente de las restantes entradas. Estas entradas se utilizan para poner los
biestables en un estado inicial antes de su funcionamiento normal. Por ejemplo,
tras conectar la fuente de alimentación, el estado de cada biestable no es predeci-
ble y deben utilizarse las entradas asíncronas para poner los biestables al valor
adecuado antes del comienzo de su funcionamiento síncrono. Las entradas de
puesta a uno y cero se denominan asíncronas debido a que no dependen de la señal
de reloj y, por tanto, tienen prioridad sobre todas las operaciones síncronas. En

CLR
D
Q

C PRS
D Q
Q' C Q'
CLR
PRS
(a) Latch O (b) Símbolo gráfico

C/k

Q'
PRS
D Q
D C/k Q'
CLR

(e) Biestable O disparado por flanco (d) Símbolo gráfico

FIGURA 6.10 Elementos de memOria~n entradas asíncronas .


Lógica secuencial 239

otras palabras, cuando las entradas asíncronas están activas los valores de las
demás entradas del biestable se ignoran. Esto puede deducirse, también, de los cir-
cuitos lógicos con entradas asíncronas de un latch D y de un biestable maestro-
esclavo D con entradas asíncronas mostrados en la Figura 6.10.
Como muestra la Figura 6.l0(a), ellatch D con puertas y entradas asíncronas
es el mismo de la Figura 6.5 con dos entradas adicionales: PRS y CLR. Cuando la
entrada de puesta a uno (PRS) es igual a 1, la salida Q' es igual a O y Q a 1.
Contrariamente, cuando la entrada de borrado (CLR) es igual al, la salida Q es
igual a O. Mientras que una de las entradas PRS o CLR sea 1, el biestable perma-
necerá en los estados impuestos por las entradas asíncronas. El símbolo gráfico de
un latch D con entradas asíncronas se muestra en la Figura 6.10(b).

TABLA 6.3 Símbolos gráfi-


cos para biesta-
bles con entra-
das asíncronas

SR

JK


240 Principios de diseño digital

En contraposición al latch D, el biestable disparado por flanco de la Figura


6.10(c) se pone a 1 con la señal PRS cuando ésta vale O, y se borra con la señal
CLR cuando ésta vale O. El hecho de que sea un valor bajo de las señales asín-
cronas el que afecte a los biestables se indica con los círculos pequeños del sím-
bolo gráfico mostrado en la Figura 6.1O(d). Obsérvese que las señales asincronas
de puesta a uno y puesta a cero obligan a todos los latches de la Figura 6.1O(c) a
tomar los estados adecuados que corresponden con Q = 1 Y Q = O, respectiva-
mente. Como las señales de puesta a uno y puesta a cero activas en baja se imple-
mentan más fácilmente en la práctica, a lo largo de este libro se supondrá q~
todas las entradas asíncronas son activas en baja. En la Tabla 6.3 se muestran los
símbolos gráficos de todos los tipos de biestables con entradas asíncronas activas
en baja.

6.6. ANÁLISIS DE LÓGICA SECUENCIAL


Normalmente, la lógica secuencial se implementa con circuitos lógicos que incor-
poran los biestables dados en la Tabla 6.1 y las puertas dadas en las Tablas 3.1 4.
3.15 Y 3.16. Mientras que un circuito lógico de este tipo puede representar clara-
mente la estructura de la lógica secuencial, desgraciadamente no revela de mane-
ra fácil su funcionamiento, lo que representa un problema para el diseñador. Por
ejemplo, cQando se rediseña un producto los diseñadores quieren, normalmente,
modificar el funcionamiento del mismo con el fm de añadir nuevas característi-
cas, o inversamente, pueden pretender la utilización de nuevos componentes y
necesitar comprobar que la sustitución de los componentes no ha modificado el
funcionamiento del producto. En cualquier caso, los diseñadores necesitarán obte-
ner el comportamiento del circuito lógico secuencial.
Este proceso, denominado análisis, requiere que el diseñador genere una o
más descripciones funcionales, utilizando diagramas de estado, tablas de estado y
de salida y ecuaciones booleanas de entrada y salida. Una vez obtenida la des-
cripción funcional, los diseñadores pueden desarrollar diagramas de tiempo que
les permitan contrastar sus predicciones con los resultados de simulación. A con-
tinuación se expone el procedimiento completo de análisis con varios ejemplos.

EJEMPLO 6. 1 Contador módulo 4.


PROBLEMA
Obtenga la tabla de estados y el diagrama de estados del circuito secuencial representado
en el esquema de la Figura 6.11 (a).

SOLUCIÓN
El primer paso en el análisis es obtener las expresiones booleanas de las entradas a cada
biestable del circuito en términos de la entrada externa ent y de las salidas del biestable
QI y Qo' Como hay dos biestables O en el ejemplo, se obtienen dos expresiones para DI
y Do:
Lógica sccucociaI 2A I

Do = Cnt El) Qo = Cnt'Qo + CntQ'o (6.1)


D, = Cnt'Q, + CntQ',Qo + Cnt!2,Q'o (6.2)

c,, _~====l-----'
(a) Circuito lógico
DO" Cm E9 C?o '" Cm'Oo + ente o
D, '" Cnt'Q , + ente,Qo. Cn/Q,Q'O
(b) Ecuación de excilaci6n

Qo(siguiente) .. Do" Cnt'Qo + en/Q' o


Q ,(siguiente) '" D, '" Cnt'Q l + Cnre ,Qo + CntQ 1Q' o
(e) Ecuaciones de estado siguiente

Cnt = O Cnt = I
-- --------- -----
OO OO 'o I
OI OI '1 O
I O I O 1 I
I I I I OO

(d) Tabla de estado siguiente (f) Diagrama de tiempos

FIGURA 6. 11 Análisis de un circuito secuencial.

Estas expresiones booleanas se denominan ecuaciones de excitación, ya que repre-


sentan las entradas de los biestables que, además, determinarán el estado del circuito
secuencial en el siguiente ciclo de reloj. Después de obtener las ecuaciones de excitación,
pueden obtenerse las ecuaciones de estado siguiente transformando estas ecuaciones de
excitación en ecuaciones características del biestable. En el caso de biestables D,
Q(s iguiente) =D . Así pues, las ecuaciones de estado siguiente se igualan a las ecuaciones
de excitación:
Q,"iguiente) = Cnt'Qo + CntQ'o (6.3)
Qo"iguiente) = Cnt'Q, + CntQ',Qo + CntQ,Q'o (6.4)
242 Principios de diseño digital

Ahora se transforman las ecuaciones de estado siguiente a una forma tabular, o tabla de
estados siguientes, en la que cada f¡]a corresponde a un estado del circuito secuencial y
cada columna representa un conjunto de valores de entrada. En general, cada estado de un
circuito secuencial se define por los valores binarios almacenados en su biestable. En este
caso, pues, como s6lo hay dos biestables, el número de posibles estados es de cuatro, es
decir, Q¡Qo puede ser igual a 00,01, \O 6 11. Estos valores se muestran como estados actua-
les en la Figura 6.I1(d).
En la parte de la tabla correspondiente a los estados siguientes, cada entrada define el valor
del circuito secuencial en el siguiente ciclo de reloj tras el flanco de subida de e/k. Como este
valor depende del estado actual y del valor de las señales de entrada, la tabla de estados
siguientes contendrá una columna para cada asignación de valores binarios de las señales de
entrada. En el ejemplo, como hay sólo una señal de entrada, Cnl, la tabla de estados siguien-
tes mostrada en la Figura 6.1l (d) tendrá sólo dos columnas, correspondientes a Cnt = OY Cnl
= 1. Obsérvese que cada fila en la tabla de estados siguientes indica el valor de los biestables
en el siguiente estado si su valor de estado actual es el que se indica en la cabecera de la f¡]a
y los valores de entrada son los mostrados en la cabecera de la columna. Cada uno de los valo-
res de los estados siguientes se ha calculado a partir de las ecuaciones de estado siguiente (6.3)
y (6.4).
Sin embargo, para representar el comportamiento de un circuito secuencial se podría
utilizar un diagrama de estados en lugar de una tabla de estados siguientes. Un diagrama
de estados es, básicamen~e, una representación gráfica de la tabla de estados siguientes.
Para cada estado presente de la tabla de estados siguientes hay exactamente un nodo. iden-
tificado por un círculo. También hay un arco directo saliendo de cada estado para cada
entrada de la tabla. Cada arco se etiqueta con los valores de las señales de entrada que cau-
san la transición desde el estado presente (origen del arco) al siguiente estado (destino del
arco).
En general. el número de estados en una tabla de estados siguientes o diagrama de esta-
dos será igual a 2m • donde m es el número de biestables; de manera similar. el número de
arcos será igual' a 2m X 2'. donde k es el número de señales binarias de entrada. En el dia-
grama de estados de la Figura 6.11(e), debe haber cuatro estados y ocho transicione~.
Siguiendo estos arcos de transición, puede verse que mientras Cnl = 1 el circuito secuen-
cial recorre los estados en la siguiente secuencia: O, 1,2,3. O. 1,2 .... Por otra parte, cuan-
do Cnl = O el circuito permanece en su estado actual hasta que Cnt cambie a 1. en cuyo
caso la cuenta continúa. Como esta secuencia es típica de la cuenta en módulo 4, se puede
concluir que el circuito secuencial representado en la Figura [Link](a) es un contador módu-
lo 4 con una señal de control. Cnl. que habilita la cuenta cuando Cnl = 1 Y la deshabilita
cuando Cnl = O.
En la Figura 6.11 (1) se muestra un diagrama de tiempos que representa cuatro ciclos
de reloj y que permite observar el funcionamiento del contador con mayor detalle. En
este diagrama de tiempos se supone que Cnl se habilita en el ciclo de reloj O. en lo' y se
deshabilita en el ciclo de reloj 3. en t,. También se supone que el contador está en el esta-
do Q¡Qo= 00 en el ciclo de reloj O. Obsérvese que en el flanco de subida del reloj. en ti'
el contador irá al estado Q¡Qo = 01 con un cierto retardo de propagación; en el ciclo 2.
después de t 2• irá a Q¡Qo = 16; Y en el ciclo 3, tras 1" irá a Q¡Qo = 11. Como Cnt vale O
en t,. se sabe que el contador permanecerá en el estado Q¡Qo= 11 en el siguiente ciclo
de reloj . Para verificar completamente er funcionamiento de un circuito secuencial, se
deben construir diagramas de tiempo para todas las posibles secüencias de los valores de
entrada.
Lógica secuencial 243

En el Ejemplo 6.1 se ha expuesto el análisis de un circuito secuencial que no


tiene salidas, desarrollando una tabla de estados siguientes y un diagrama de esta-
dos que describen sólo los estados y las transiciones de un estado al siguiente. En
el siguiente ejemplo se complica el análisis añadiendo señales de salida, lo que
significa que se debe remodelar la tabla de estados siguientes y el diagrama de
estados para incluir el valor de las señales de salida en cada estado. Normalmente,
un circuito secuencial en el que los valores de salida dependen sólo de su estado
presente se denomina circuito secuencial basado en estados (state-based) o cir-
cuito secuencial tipo Moore.

EJEMPLO 6_2 Contador módulo 4 basado en estados


PROBLEMA

Obtenga el estado siguiente, las tablas de salida y el diagrama de estados del circuito
secuencial mostrado en el esquema de la Figura 6.12(a).
SOLUCIÓN

En la figura, la lógica combinacional de entrada es la misma que en el Ejemplo 6.1, por


tanto las ecuaciones de excitación y de estado siguiente serán las mismas que en el Ejemplo
6.1. Para resumir, se han mostrado estas ecuaciones en la Figura 6.12(b) y (e). No obstan-
te, también se ha calculado la ecuación de salida, .
(6.5)
Como muestra esta ecuación, la salida Y será igual a 1 cuando el contador esté en el
estado Q¡ Qo = 11, Ypermanecerá a 1 .;uentras el contador se mantenga en ese estado. Como
la salida Y depende sólo del estado actual del circuito secuencial, puede añadirse una colum-
na adicional a la tabla de estados para transformarla en tabla de estados-siguientes/salidas.
Se utiliza la Ecuación (6.5) para determinar los valores que se colocarán en la columna de
salida, como indica la Figura 6. I 2(d). En general, para convertir una tabla de estados
siguientes en una tabla de estados-siguientes/salidas se añade una columna para incluir las
señales de salida.
En la Figura 6.12(e) se muestra cómo puede añadirse el valor de la señal de salida a cada
estado en el diagrama de estados, y en la Figura 6.12(1) cómo añadir la salida Yal diagra-
ma de tiempos. Obsérvese que, en la Figura 6.12(1), el contador alcanzará el estado Q¡Qo =
11 sólo en el tercer ciclo de reloj, y la salida Y será igual a 1 después de que Qo cambie a 1.
Como el contador queda deshabilitado en el tercer ciclo de reloj, permanecerá en el estado
Q¡Qo = 11 e Ypermanecerá activa en los sucesivos ciclos de reloj hasta que el contador sea
habilitado de nuevo.

En el Ejemplo 6.2 se ha analizado la lógica secuencial de un circuito basado


en estados, en el que los valores de la señal de salida dependían del estado de los
circuitos secuenciales pero no de los valores de la señal de entrada. Sin embargo,
en el caso de un circuito secuencial basado en entradas (input-based) o circui-
to secuencial tipo MeaIy los valores de salida dependen de los valores de entra-
da y del estado del circuito. Analizando este circuito, las tablas de estados y de
salidas deben modificarse para describir este circuito secuencial basado en entra-
244 Principios de diseño digital

das, lo que significa que cada entrada en la tabla de estados siguientes represen-
tará, separados por el signo 1, al estado siguiente y al valor de salida.

Cm

C/k _--.!=====:f-----l
(a) Circuito lógico

Do'" Cm El! Qo = Cnt'Qo + GntO' o (e) Diagramas de estado


DI - CntQ. + CntQ' ,Oo + enrQIO' o
(b) Ecuación de excitación

QO<sjguj~nte) '" Do '" CntQo + CntQ'o


Q,(siguieme)'" D I ='Cn( Q , + CmQ' ,Qo + CmQ ,Q' o
y = Q ,Qo
[l
I e'.clo de reloj.2
rJ . CLc
I CIClo de re loj 3 ,Ciclo de reloj 4

(e) Ecuaciones de estado siguiente y de salida

Q, :1

Cnt = O Cn/= I Q, :1 :1 :1
- - ---- - -- ---- --
OO OO O I O
OI O1 I O O y : 1
I O I O I I O
l I I I OO I
" " " " " "
(d) Tabla de estados siguientes y de salida (O Diagramas de tiempos

FIGURA 6.12 Análisis de un contador módulo 4 basado en estados.

En un diagrama-de estados para este tipo' de circuito secuencial, la salida no


se asocia con el estado sino con el arco de transición. En este caso, cada arco se
marca con los valores de entrada, que llevan al cjrcuito desde el estado actual al
estado siguiente, y con los valores de salida, que corresponden a los valores de la
señal de entrada en el estado actual.
Esta modificación se ilustra con el siguiente ejemplo.
Lógica secuencial 245

EJEMPLO 6.3 Contador módulo 4 basado en entradas


PROBLEMA
Obtenga la tabla de estados/salidas y el diagrama de estados del circuito secuencial mos-
trado en el esquema de la Figura 6.l 3(a).
SOLUCIÓN
Como se observa en la Figura 6.13, este circuito difiere del circuito del Ejemplo 6.2 sólo en
la expresión de su salida, que abora depende del valor de la señal de entrada Cnl. Del cir-
cuito se observa que el valor Yes igual a 1 cuando el contador está en el estado Q,Qo : 11
y Cm: 1. Por lo tanto
(6.6)
Dada esta ecuación de salida, la tabla de estados del Ejemplo 6.1 debe modificarse de
manera que cada entrada represente los valores de estados siguientes y de salida. Es decir,
el valor del estado siguiente debe calcularse a partir de las ecuaciones de estado siguien-
te, y los valores de salida deben calcularse a partir de las ecuaciones de salida, como
muestra la Figura 6.l3(c). Esta tabla de estados/salidas modificada se indica en la Figura
6.13(d).
El diagrama de estados de este circuito basado en entradas tendrá cuatro estados, como
antes. Sin embargo, a diferencia del diagrama del circuito basado en estados, abora se mar-
cará cada arco con los valores de entrada y salida en la forma XlY. La marca XlY se inter-
preta como sigue: si el valor de la señal de entrada en el siguiente flanco positivo de la señal
de reloj es igual a X; entonces el circuito cambiará al estado apuntado por el arco en el
siguiente ciclo de reloj . Además, durante el ciclo actual de reloj su salida será igual a Y
mientras que el valor de la señal de entrada sea igual a X. Por ejemplo, en la Figura 6.l3(e),
el arco entre los estados Q,Qo : 01 y Q,Qo: 10 se ha marcado con Cnl: l/Y: O, signifi-
cando que si (:/11: 1 en el ciclo en que Q,Qo: 01, la salida del contador será Y:O en el ciclQ
actual de reloj, y en el siguiente ciclo de reloj el contador estará en el estado Q,Qo : 10.
Esta situación se ilustra en el ciclo 1 de reloj del diagrama de tiempos presentado en la
Figura 6.13(1).
Por lo tanto, el contador alcanzará el estado Q,Qo: 10 en el ciclo 2 de reloj, cuando la
señal de salida Y : O. En el ciclo 3 de reloj , el contador estará en el estado
Q,Qo: 11 y la señal de salida Yserá igual a 1. Sin embargo, en l. la salida Yserá igual a O
debido a que la señal de entrada Cnt abora vale O, a pesar de que el contador está aún en el
estado Q,Qo : 11. En contraposición, obsérvese que la salida Yen el Ejemplo 6.2 mantenía
su valor 1 en el ciclo 3 de reloj, debido a que su valor dependía exclusivamente del estado
del contador, que no había cambiado.

Sobre la base del procedimiento aplicado en los Ejemplos 6.1 a 6.3, se habrá
obtenido una idea general de los diferentes pasos a realizar para el análisis de cir-
cuitos secuenciales. Como indica la Figura 6.14, se empieza con un circuito lógi-
co obteniendo las ecuaciones de excitación para cada entrada de cada biestable.
Después, para obtener las ecuaciones de estado siguiente, se insertan las ecuacio-
nes de excitación en las ecuaciones características. Las ecuaciones de salida pue-
den obtenerse, también, del circuito y, una vez que se tienen las salidas y las ecua-
ciones de estado siguiente, se puede.n generar las tablas de estados siguientes y de
246 Principios de diseño digital

salidas, así como los diagramas de estados. Cuando se alcanza esta etapa, se uti-
lizan las tablas o los diagramas de estados para desarrollar un diagrama de tiem-
pos, que puede verificarse por simulación. Pueden obtenerse formas de onda
mediante simulación a dos niveles distintos. A nivel físico, puede describirse el
circuito lógico en un lenguaje de simulación y realizar la simulación para cada
estado y valores de entrada utilizando una biblioteca de modelos de puertas y
biestables. A nivel funcional , pueden describirse diagramas de estados o tablas de
estados siguientes/salidas en un lenguaje de simulación y realizar la simulación.
En este caso, se puede verificar el funcionamiento del circuito secuencial pero no
sus retardos reales, ya que el diagrama de estados y las tablas no contienen infor-
mación sobre la implementación del circuito.

Cm

CIk _-=====f----'
(a) Circuito lógico

DO'" Cm e Qo .. Cnt'Qo + CntQ'o (e) Diagramas de estado


DI '" CnlQI + Gn'tQIQo + CnrQIO' o
(b) Ecuaci6n de excitación

Qo(siglliente) '" Do Z Cnti20 + CntQ'o


Ql([Link])" DI ;; Cnt'Q I + CnIQ',ao+ Cn!QlQ'O
y", CIltQIi20

.•
(e) Ecuaciones de estado siguiente y de salida

~ : ,\, \ .... ~ \. .'., .., ~' ,""


, .~ Q, ,1
. . ..."' .....
• ..' ..' .., • < .,0< 11

OO o 0/0 O 110
O1 O 110 1 O1 O
1 O 1 O1 O 1 1/0
1 1 t 1 10 00/1
" "
(d) T..bla de estados siguientes y de salida (O Diagrama de tiempos

FIGURA 6.13 Análisis de un contador módulo 4 basado en 'entradas.


Lógica socueuc:iaI

Esquema lógico

i
Obtener ecuciones de
excilación 1

~
Obtener ecuciones de
estado siguiente y de salida 2

~
Generar tablas de estado
siguiente y de salida 3

~
Generar diagramas
de estado 4

+
Desarrollar diagrama
de tiempos 5

~
Simular el circuito
lógico 6

FIGURA 6.14 Procedimiento de análisis para circuitos secuenciales.

6.7. MODELO DE MÁQUINAS DE ESTADOS FINITOS


Hasta ahora se han analizado diversos circuitos secuenciales, que se han descrito
por medio de ecuaciones booleanas de estado siguiente y de salida, tablas de esta-
dos y de salidas, y diagramas de estados, quedando así totalmente caracterizado
cualquier circuito secuencial. Todas estas descripciones se basan en el modelo de
máquina de estados finitos , que se describe en esta sección.
La máquina de estados finitos (FSM, Finite-State Machine) se define teórica-
mente como una quíntupla
< S, 1, O,J, h >
donde S, I Y O representan el conjunto de estados (states), entradas (inputs) y sali-
das (outputs), y fy h representan las funciones de estado siguiente y de salida, res-
pectivamente. La función de estado siguiente f se define matemáticamente como
una aplicación S x Y ~ S. En otras palabras,f asigna un estado a cada pareja for-
mada por estado y entrada. El modelo FSM supone que el tiempo se divide en
intervalos uniformes y que las transiciones de un estado a otro ocurren sólo al
principio de cada intervalo de tiempo. Así pues, la función de estado siguiente f
248 Principios de diseño digital

define en qué estado estará la máquina FSM en el siguiente intervalo de tiempo,


una vez dados el estado y los valores de entradas en el intervalo presente.
La función de salida h determina los valores de salida en el estado presente.
Hay dos tipos diferentes de máquina de estados finitos, correspondientes a las dos
definiciones distintas de la función de salida h. Un tipo es la FSM basada en
estados o FSM tipo Moore, en la que h se define como una aplicación S ~ O.
Es decir, se asigna una salida a cada estado de la FSM. El otro tipo es una FSM
basada en entradas o FSM tipo Mealy, en la que h se defme como la aplicación
S x I ~ O. En este caso, la salida en cada estado queda definida por el estado y
las entradas.
De acuerdo con esta definición, cada conjunto S, I Y O puede tener cualquier
número de símbolos. Sin embargo, en la práctica se trata sólo con variables bina-
rias, operadores y elementos de memoria. Por lo tanto, S, I Y O deben implemen-
tarse como un prod,ucto vectorial de señales binarias o elementos de memoria,
mientras que las funciones f y h se definen como expresiones booleanas que se
implementarán con puertas lógicas.
Así pues, la máquina de estados finitos puede modelar cualquier circuito
secuencial con k señales de entrada A" ... ,Ak' m biestables Q" ... ,Qm y n señales de
salida Y¡ ,. .. ,Y., como se muestra en la Figura 6.15. En este circuito secuencial, S,
I Y O son el producto cartesiano de biestables o señales de la siguiente forma:
S= Q¡ X Q 2 x ... X Qm
I=A¡ xA 2 x ... x Ak
0= Y¡ X Y2 x ... X Y.
Por consiguiente, cada elemento de S, I Y O se representa con una cadena de
unos y ceros.

• y,} °
Qo , ... , Q.
Y,

Cli< _ _ _ _-'

FIGURA 6.15 Modelo FSM de un circuito secuencial general.

La señal de reloj define los intervalos de tiempo o ciclos de reloj. Si se adopta


la definición anterior, se puede modelar el contador módulo 4 del Ejemplo 6.2 como
una FSM basada en estados, dondeS= {so' sI' s2' s3}' 1 = {io, i l }, O = {oo' al}' sien-
do f y h los mostrados en la tabla de la Figura 6.16.
De igual manera, se puede modelar el contador módulo 4 del Ejemplo 6.3
como una FSM basada en entradas, donde S, 1, O se definen como antes y fy h se
dan en la tabla de la Figura 6.17.
Cada modelo de FSM puede implementarse con biestables y puertas lógicas.
El contenido de los biestables define el estado de la FSM; mientras que f y h se
Lógica secuencial 249

implementan en lógica combinacional. Los diagramas de bloque lógicos genera-


les para las FSM basadas en estados y basadas en entradas se muestran en la
Figura 6.18. Estos diagramas de bloques se utilizarán en secciones siguientes para
la síntesis de lógica secuencial.

So So
s, s,
s,
s,
s,s,
FIGURA 6.16 Modelo FSM de contador módulo 4 del Ejemplo 6.2.

So
s,
s,
s,

FIGURA 6.17 Modelo FSM de contador módulo 4 del Ejemplo 6.3.

6.8. SíNTESIS DE LÓGICA SECUENCIAL


En secciones anteriores se ha descrito cómo analizar diversos circuitos secuen-
ciales. En esta sección se aborda el procedimiento de síntesis, inverso a la tarea
de análisis, en la medida en que el análisis parte de la implementación y obtiene
la función o comportamiento del circuito secuencial, mientras que la síntesis se
inicia con una descripción funcional y genera una implementación.
En la Figura 6.19 se muestra una descripción general del procedimiento se sín-
tesis. Como puede verse, el proceso comienza con una descripción en lenguaje
natural a la que a veces se le añaden uno o más diagramas de tiempos, o a veces,
con una descripción más formal expresada en un lenguaje de descripción de hard-
ware, como puede ser el VHDL, estándar de IEEE. Con esta descripción, el pri-
mer paso en el procedimiento de síntesis consiste en desarrollar el diagrama de
estados y convertirlo en tablas de estados siguientes y de salidas. Después, se
intenta reducir el número de estados eliminandoJos estados redundantes e identi-
ficando los estados equivalentes, ya que un número menor de estados implicará la
reducción de biestables. Finalmente, como cada estado puede expresarse como
250 Principios de diseño digital

una n-upla de valores en los biestables, es necesario asignar distintas n-uplas a los
diversos estados. Este procedimiento, que se denomina codificación, simplificará
la lógica de entrada y de salida si se realiza adecuadamente. Tras la codificación,
se genera la forma binaria de las ecuaciones de estados siguientes y de salidas.

Señales de entrada

f - . - y, Sefiales de
salida

(3) Basada en estados

Señales de entrada

Señales de
I-.- y, salida

Señales
de estado
(b) Basada en entradas

FIGURA 6.18 Implementaciones de máqUinas de estados finitos.


Lógica secuencial 251

Descripción del diseño


o diagrama de tiempos

i
Desarrollo diagrama
de estados

!
Generar tablas de estados
siguientes y de salida

!
Minimizar eslados

!
Codificar entradas.
estados y salidas

!
Obtener ecuaciones
de estados siguientes
y de saJida

!
Elegir elementos de
memoria

!
Obtener ecuaciones
de excitación

!
Optimizar la
implementación
de la lógica

!
Obtener esquema
lógico y diagramas
de tiemPos

!
Simular el esquema
lógico

!
Verificar
funcionamiento y
temporización

FIGURA 6.19 Procedimiento de síntesis de los modelos de FSM.

El siguiente paso en la síntesis consiste en elegir el tipo de biestábles. tenien-


do en consideración el hecho de que cada tipo requiere diferente cantidad de lógi-
ca para implementar las funciones de estado siguiente. Una vez elegido el tipo de
252 Principios de diseño digital

biestable, se pueden obtener las ecuaciones de excitación para cada entrada del
biestable, procediéndose a optimizar la implementación lógica de las ecuaciones
de excitación y de salida, dibujando un circuito lógico que sirva de base a la gene-
ración de un diagrama de tiempos.
La última tarea consiste en simular el circuito lógico, comparando la salida
del diagrama de tiempos obtenido y verificando si la simulación se correspon-
de abora con el comportamiento que se deseaba obtener. En las secciones
siguientes se describirá en detalle este procedimiento de síntesis con un ejem-
plo completo.

6.9. CAPTURA DEL MODELO FSM


El diseño de lógica secuencial se inicia con la generación de un diagrama de esta-
dos y/o las tablas Qe estados siguientes y de salidas. Inicialmente, estos diagra-
mas y tablas deben obtenerse a partir de una descripción en lenguaje natural del
comportamiento del circuito secuencial. Desafortunadamente, las descripciones
en lenguaje natural son, a veces, ambiguas e incompletas en muchos casos, debi-
do a que prestan atención exclusivamente a la función principal del circuito
secuencial, sin enumerar todas las situaciones de su posible comportamiento. Por
este motivo, las descripciones en lenguaje natural se complementan, a veces, con
diagramas de tiempos. Sin embargo, incluso estos diagramas de tiempos pueden
resultar incompletos ya que no muestran las respuestas del circuito a todas las
posibles secuencias de entrada sino sólo las más importantes. Así pues, en
. muchos casos es mejor sustituir la descripción en lenguaje natura:l por una más
precisa, basada en un lenguaje de descripción de hardware como VHDL, o por
una forma gráfica, como un diagrama de flujo o un diagrama AS M, que se intro-
ducirán en los Capítulos 7 y 8. No obstante, independientemente del método que
se utilice, la construcción del modelo FSM es una parte muy creativa del proce-
so de diseño, requiriendo especialización y experiencia. En esta sección se des-
cribe la construcción del diagrama de estados y de la tabla de estados con un
ejemplo sencillo.

EJEMPLO 6.4 Contador ascendente/descendente módulo 3


PROBLEMA
Obtenga el diagrama de estados de un contador ascendente/descendente módulo 3. El
contador tiene dos entradas: habilitación de cuenta (C) y dirección de cuenta (D) .
Cuando e = 1, el circuito contará en la dirección indicada por D, y parará cuando
e = O. Contará ascendentemente cuando D = O, Y descendentemente cuando D = l . El
contador tiene Una salida Y, que se activará cuando el contador alcance el valor 2 ascen-
dentemente, o el valor O si 10 hace descendentemente. El símbolo del contador se mues-
tra en la Figura 6.20(a).
Lógica secuencial 253

SOLUCIÓN
A partir de esta descripción, se concluye que el contador requiere al menos dos biestables,
ya que debe memorizar los códigos de tres dígitos: O, 1 Y 2. Además, como el contador es
bidireccional, se necesitan dos secuencias: una ascendente y otra descendente. La secuen-
cia ascendente contiene tres estados: uo' u l y u2' avanzando desde "o a u l y ~, y volviendo
a Uo mientras CD = la. De igual fonna, cuando la cuenta es descendente pasa por tres esta-
dos que, en este caso, son do, dI y d2 . Sin embargo, en la secuencia descendente el contador
avanza desde do a ~ y dI Y vuelve a do mientras CD = 11. Las secuencias ascendente y des-
cendente se muestran en la Figura 6.20(b).
Al desarrollar el diagrama de estados del contador, debe tenerse en cuenta la posibili-
dad de que el contador cambie de dirección durante la cuenta, es decir, debe permitirse la
posibilidad de que el valor de la entrada D cambie mientras C = l. Aunque este caso no se
ha mencionado en la descripción dada anterionnente, se puede resolver esta posibilidad
suponiendo que el contador seguirá contando en una nueva dirección desde el mismo esta-
do de la otra secuencia, es decir, si D cambia de O a 1, el contador irá desde u,. hasta
dv+I )m0d3' para i = O, 1 ó 2. Este éaso ha sido añadido al diagrama de estados de la Figura
6.20(c). .

CD:IO

L¡t-C
_D:_IO -+t.e t---C
_D:lo---.. ¡J
D _I---~_---' Y

e -----.. asccnde~~~=ndente
Clk ---L________
módulo 3 ...J
ce' CD:II
e
CD=II
CD::11
1+--'----i

l _

(a) Símbolo del contador (h) Diagrama de estados parcial


(cuenta ascendente y descendente)
CD=IO

CD:QX CD:OX

CD= II
(e) Diagrama de estados parcial (d) Diagrama de estados final
(cambiando la dirección)

FIGURA 6.20 Diagrama de estados de un contador módulo 3.


254 Principios de diseño digital

Sin embargo, el diagrama de estados no estará totalmente completo hasta que se


haya considerado lo que ocurre cuando el contador esté deshabilitado por un cambio en
e desde 1 hasta O. En este caso, se supone que el contador permanecerá en ese estado
hasta que e valga I de nuevo. Este caso se ha añadido al diagrama de estados de la
Figura 6.20(d), que considera, ahora, todos los posibles modos de funcionamiento del
contador.

Aunque el diagrama de estados obtenido en el Ejemplo 6.4 es completo, es


importante observar que el diagrama no contiene el número mínimo de estados.
Por supuesto, esto es fácil de entender ya que los distintos modos de operación se
distinguen claramente y son fácilmente visibles en el diagrama de estados. Sin
embargo, en diseño digital la claridad no es, usualmente, el objetivo prioritario;
por el contrario, a menudo los factores más importantes son el coste y las presta-
ciones y, desde esta perspectiva, es necesario considerar la minimización del
número de estados cómo parte del proceso de diseño.

6.10. MINIMIZACiÓN DE ESTADOS


El objetivo de la minimización de estados es la reducción del número de esta-
dos en un circuito secuencial de modo que el circuito requiera menos biestables,
lo que reducirá, además, el coste de la implementación. Sin embargo, una reduc-
ción de estados no reducirá el número de biestables necesarios a no ser que el
número de estados se reduzca por debajo del actual nivel de potencia de 2. Por
ejemplo, para un circuito secuencial con m estados se necesitan rloll 2m1 biesta-
bles. Como reduciendo el número de estados en D. se requieren Ilog2(m-D.)1
biestables, D. debe ser un número tal que r log2m1 sea [Link] que r logim-D.)1 en
' al menos l.
Por ejemplo, considérese un circuito con seis estados. Reduciendo el número
de estados a cinco no se reducirá el número de biestables, porque r log261 =
rlog2s1 = 3. Por otra parte, reduciendo el número de estados a cuatro se reducirá
el número de biestables en 1, porque Ilog241 = 2.
Una segunda ventaja de la reducción de estados es que se puede reducir el
número de puertas y el número de entradas por puerta necesarias para implemen-
tar las funciones de estados siguientes y de salida. La ventaja de tal reducción
radica en el hecho de que las puertas con menos entradas son más rápidas; decre-
ciendo el retardo del circuito secuencial, se puede mejorar la frecuencia de reloj
del circuito y, por tanto, mejorar sus prestaciones globales.
En general, la minimización de estados se basa en el concepto de equivalen-
cia funcional de máquinas de estados finitos y, por extensión, en el de equiva-
lencia de sus estados. Por ejemplo, se dirá que dos máquinas de estados finitos son
equivalentes si producen la misma secuencia de símbolos de salida para cada
secuencia de símbolos de entrada. En algunos casos, máquinas de estados finitos
equivalentes pueden tener distinto número de estados y pueden, también, realizar
transiciones por diferentes secuencias de estados para cada secuencia de entrada;
Lógica secuencial 255

no obstante, se consideran funcionalmente equivalentes mientras que produzcan


la misma secuencia de salidas.
De lo dicho anteriormente, puede concluirse que una máquina de estados fmi-
tos Gon gran número de estados tendrá algunos estados equivalentes. En casos
como éste, pues, se podrá reducir el número de estados de la máquina asociando
aquellos estados que sean equivalentes.
La equivalencia de estados puede definirse sobre la base de los valores de las
salidas de los estados y de los estados siguientes. Más formalmente, dos estados
s . y S k en una máquina de estados finitos son equivalentes, Sj '" sk' si y sólo si las
siguientes condiciones son ciertas:
1. Ambos estados s y sk producen el mismo símbolo de salida para cada
símbolo de entrada i: es decir, h(s,i) = h(Sk,i).
2. Ambos estados tienen estados siiuientes equivalentes para cada símbolo
de entráda i: es decir,ftsj'i) "'ftsk,i).
De esta definición de equivalencia de estados se deduce un procedimiento
sencillo para obtener una máquina de estados finitos con el mínimo número de
estados. El procedimiento requiere particionar todos los estados de una FSM en
clases de equivalencia y construir la FSM cOn mínimos estados, en la que cada
estado represente una clase de equivalencia.
En la práctica, este procedimiento consta de dos pasos. En el primero, se com-
paran los símbolos de salida para cada estado y para cada símbolo de entrada. El
objetivo de esta comparación es combinar estados en grupos, de manera que todos
los estados del mismo grupo generen el mismo símbolo de salida para cada sím-
bolo de entrada. En el segundo paso, se determina el siguiente estado para cada
estade del grupo y para cada símbolo de entrada. Así, se pueden particionar los
grupos en subgrupos de modo que todos los estados de un subgrupo tengan sus
estados siguientes en el mismo grupo para cada símbolo de entrada.
En algunos casos, todos los estados que están en el mismo subgrupo después
de la partición no tienen sus estados siguientes en el mismo subgrupo, aunque sí
en el mismo grupo. En tales casos, el segundo paso debe repetirse hasta que no
sean necesarias particiones adicionales. Así pues, en teoría, cada subgrupo repre-
sentará una clase de equivalencia idéntica a un estado de la máquina mínima de
estados finitos . En el siguiente ejemplo se describe este procedimiento con el con-
. tador módulo 3 del Ejemplo 6.4.

EJEMPLO 6.5 Reducción de estados


PROBLEMA
Obtenga la máquina de estados finitos mínima para el contador módulo 3.
SOLUCIÓN
Como se muestra en la Figura 6.20(c), el contador módulo 3 tiene seis estados. En la Figura
6.21(a) se ha convertido este diagrama de estados en una tabla de estados-siguientes/sali-
das. Con la información proporcionada por esta tabla, se puede aplicar ahora el procedi-
256 Principios de diseño digital

miento descrito anterionnente al conjunto de estados de la Figura 6.21(b). Obsérvese que


se empieza con el conjunto de todos los estados y se detenninan los valores de salida para
cada combinación de los valores de entrada. Para los valores de entrada CD = OX. 10. 11 . se
sabe que el valor de la señal de salida será Y = O. O. 1 ó O. O. O Ó O. l. O. Ahora. se pueden
crear los tres grupos siguientes: Go = {[Link] }, G, = {u"d,} y G 2 = {u 2.d2 } . Después. se debe
detenninar el estado siguiente para cada estado del grupo y para cada conjunto de valores
de entrada. Como puede verse. para cada valor de las señales de entrada. los estados
siguientes a cada estado del grupo penenecen al mismo grupo. Por lo tanto. no es necesa-
rio seguir particionando. Como cada grupo representa una clase de estados equivalentes. se
pueden renombrar los grupos Go' G, y G 2 como estados so' s , y S2 en la máquina de estados
fInitos mínima. La tabla de estados siguientes/salidas para esta FSM mínima se presenta en
la Figura 6.21(c).

(a) Tabla de estados inicial

{uo' u" .,. do· d" d2}

CD=O~ O' Valores


O O O O O
de salida
10 O O I O O I
11 1 O O I O O

OCJl I 000 010\


+
Go = {/lo> do} G, = {u"d l } Gz = {u 2 , d 2 }
CD= OX GoGo GoGo GoGo Estados
10 G,G, Gp, G,G, siguientes
11 GP2 G2G2 GP2
(b) Particionamiento en clases de equivalencia

(e) Tabla de estados siguientes/salidas final

FIGURA 6.21 Reducción de estados para el contador módulo 3.


Lógica secuencial 257

Las cIases de equivalencia de una máquina de estados finitos pueden obtener-


se también construyendo una tabla de implicación, que permite eliminar estados
no equivalentes e indicar los estados equivalentes. Como muestra la Figura 6.22,
una tabla de implicación es una tabla triangular en la que cada celda representa un
par de estados concreto. Obsérvese que las filas han sido marcadas con todos los
estados salvo el primero, mientras que las columnas se han etiquetado con todos
los estados salvo el último. De esta manera, se asegura que cada pareja de estados
tendrá asignada una celda en la tabla.

IX
X <S2· S6>
<8 .84 >
" 3
<S0·S4>

s,
I
'o "
FIGURA 6.22 Tabla de implicación.

El procedimiento para obtener cIases de equivalencia se obtiene de la defini-


ción de equivalencia. En el primer paso se introduce una x para cada par de esta-
dos que difieran en sus valores de salida en, al menos, un valor de entrada. De este
modo, una pareja de estados que no sean equivalentes pueden eliminarse por esta
causa, como ocurre con las parejas <S "S3> y <S0,S4> en la Figura 6.22. Para las
parejas de estados restantes, se introduce en cada entrada la pareja de estados
siguientes que podrian ser equivalentes si la pareja de estados representada en la
entrada también puede serlo. En general, se dice que la equivalencia del par de
estados siguientes es implicada, lo que da nombre a la tabla de implicación. Por
ejemplo, la equivalencia de la pareja <S "s5> de la Figura 6.22 implica la equiva-
lencia de <s3,s4>' Igualmente, la equivalencia de la pareja <s3,s5> implica la equi-
valencia de <s2,s6> y <S0,S4> de acuerdo con la condición 2 de la definición de
equivalencia.
En el segundo paso se puede inspeccionar la tabla desde arriba hacia abajo de
celda en celda, y de izquierda a derecha de columna en columna, y se introduce
una x en aquellas celdas que tengan, al menos, una pareja de estados no equiva-
lentes. Este segundo paso puede repetirse varias veces, ya que la no equivalencia
de un par de estados puede originar la no equivalencia de otro par de estados, y
así sucesivamente. Si no se introducen nuevas x al reinspeccionar completamen-
258 Principios de diseño digital

te la tabla, se habrán obtenido ya todas las parejas de estados no equivalentes, lo


que significará que todas las celdas no marcadas serán parejas equivalentes.
En el tercer paso, se forman las clases de equivalencia utilizando la propiedad
transitiva de la relación de equivalencia, que establece que si s ; ;: Sj y Sj;: Sk' enton-
ces s; ;: sk' Así pues, examinando la tabla se pueden agrupar todos los estados
equivalentes en clases. En el siguiente ejemplo se describe este procedimiento.

EJEMPLO 6.6 Reducción de estados con una tabla de implicación


PROBLEMA
Obtenga el mínimo número de estados para la máquina de estados finitos descrita por la
tabla de la Figura 6.23(a). [Obsérvese que esta tabla es una ligera modificación de la tabla
de la Figura 6.2l(a).]
SOLUCIÓN
Primero, es necesario crear la tabla de implicación, como indica la Figura 6.23(b). Después,
se tachan todas las celdas que representan parejas de estados con diferente salida en, al
menos, un conjunto de valores de entrada. Eso deja, como únicas parejas para examen pos-
er ,
terior de equivalencia entre estados siguientes, a <"o,d <upd¡> y <u."d,>. La pareja
<Uo,do> tiene los mismos estados siguientes para cualquier conjunto de valores de entrada.
Por lo tanto, son equivalentes y no implican la equivalencia de ningún estado siguiente. La
pareja <u¡,d¡> requiere que los estados Uo y d 2 sean equivalentes, así que se introduce
<UO,d2> en la celda que representa a <"pd¡>. Los estados u 2 y d 2 son equivalentes, ya que
tienen los mismos estados siguientes para cada conjunto de valores de entrada.
Posteriormente, se inspecciona la tabla y se inserta una x en la celda que representa a
<Upd¡>, ya que "o y d 2 no son equivalentes, lo que implica que u, y d¡ tampoco lo sean.
Con esto finaliza el segundo paso del procedimiento.
En el tercer paso es necesario agrupar todos los estados equivalentes en clases de equi-
valencia. En el ejemplo. sólo Uo y do, Y u., Yd 2 son equivalentes.
Así pues, la máquina de estados finitos mínima llega a tener cuatro estados, representa-
dos por las cuatro clases de equivalencia siguientes: {"o,do }' {u,}, {d,}, {u 2,d,}.

6.11. CODIFICACiÓN DE ESTADOS


En cualquier máquina de estados finitos, el coste y el retardo inherentes a la lógi-
ca de entrada y salida será mayor en función de qué valores booleanos se asignen
a los estados simbólicos. Por ejemplo, una FSM con cuatro estados, so' s ¡, s2 Y s3
puede implementarse con dos biestables que contengan los valores 00, 01, 10 ó
11. En la práctica, hay normalmente más de n! codificaciones para n estados dife-
rentes, ya que se pueden utilizar más de log2n bits para codificar n estados. Por
este motivo, el recuento manual de todas estas codificaciones, así como la esti-
mación del coste y del retardo de las lógicas de entrada y salida, puede ser tedio-
so incluso con un número pequeño de estados . Para evitar este problema, los dise-
ñadores utilizan diversas estrategias y heurísticas en la asignación de estados. En
Lógica secuencial 2S9

el resto de esta sección se exponen las tres estrategias más comúnmente utiliza-
das: mínimo cambio de bits, prioridad de adyacencia y codificación del uno
caliente.

uo urJO u/O
u, ur!O uJO !b 1
'~g
d: '20 ur!1
u/o
l ~g !b l
'~g
~ JO
(a) Tabla de estados siguientes y de salidas

(b) Tabla de implicación

FIGURA 6.23 Reducción de estados con tabla de implicación.

La estrategia mínimo cambio de bits (minimum bit change) asigna valores


booleanos a los estados, de forma que el número total de cambios de bits en todas
las transiciones se minimíza. En otras palabras, si cada arco en el diagrama de
estados tiene un peso igual al número de bits distintos entre las codificaciones de
origen y destino, la codificación óptima será aquélla que minimice la suma de
todos estos pesos.
En la Figura 6.24(a) y (b) se muestran dos codificaciones para el mismo dia-
grama de estados. La codificación directa para este contador binario tendrá dos
arcos con peso 1 y dos arcos con peso 2, con un peso total de 6. Por otra parte, en
la codificación de mínimo cambio de bits, los cuatro arcos tendrán peso l . En la
segunda codificación, el peso total es mínimo, ya que la codificación entre dos
estados difiere sólo en un bit. Esta estrategia de mínimo cambio de bits se basa en
la premisa de que en una implementación a dos niveles se necesitan, al menos,
una puerta AND adicional y una entrada más a la puerta OR para establecer o
poner a cero el biestable en cada cambio de bit.
260 Principios de diseño digital

TABLA 6.4 Veinticuatro codificadores de


cuatro estados

a¡ S,

1 00 01 10 11
2 00 01 JI 10
3 00 10 01 JI
4 00 10 JI 01
5 00 11 00 10
6 00 11 10 01
7 01 00 10 11
8 01 00 JI 10
9 01 10 00 11
10 01 10 JI 00
JI 01 JI 00 10
12 01 IJ 00 10
13 10 00 01 IJ
14 10 00 11 01
15 10 01 00 IJ
16 10 01 IJ 00
17 10 II 00 01
18 10 11 01 00
19 1I 00 01 10
20 II 00 JO 01
21 IJ 01 00 JO
22 IJ 01 10 00
23 11 10 00 01
24 11 10 01 00

(a) Codificación direc18. (b) Codificación de mínimo cambio de bit

FIGURA 6.24 Dos codificaciones distintas para un contador binario de 2 bits.

La segunda estrategia de asignaci6n de estados, la estrategia de prioridad en


adyacencia, consiste en asignar codificaciones adyacentes, que s6lo difieran en
un bit, a todos los estados que tengan una fuente, destino o salida comunes. En
este procedimiento se da la mayor prioridad a los estados que tienen el mismo
estado siguiente para un valor dado de entrada. La raz6n de esta prioridad deriva
Lógica secuencial 261

del hecho de que durante la minimización lógica aparecerá la misma codificación


de estado siguiente en dos celdas adyacentes del mapa de Karnaugh, en cuyo caso
esta estrategia llevará a una reducción de un literal por cada len la codificación
del estado siguiente. La segunda prioridad se da a los estados siguientes del
mismo estado, basándose en el hecho de que también aparecen adyacentes en el
mapa de Karnaugh durante la minimización. Obsérvese que esto ocurrirá sólo si
los valores de entrada que originan la transición difieren sólo en un bit.
Finalmente, la tercera prioridad se da a los estados que tienen el mismo valor de
salida para los mismos valores de entrada, en base a que codificaciones adyacen-
tes de estados crearán un l-cubo en el mapa de Karnaugh durante la minimización
lógica de las señales de salida.
La Figura 6.25(a) muestra un diagrama de cuatro estados. Obsérvese que los
estados s 1 y s2 satisfacen la condición de la primera prioridad; esto es, la entrada
O lleva a ambos estados a S3' Además, satisfacen la condición de la segunda prio-
ridad, ya que ambos son estados siguientes de so' En relación a la tercera priori-
dad, los estados So y s 1 tienen el mismo valor de salida, O, para el mismo valor de
entrada, O, y los estados s2 y s3 satisfacen idéntica condición. Estas prioridades se
listan en la Figura 6.25(b), y la Figura 6.25(c) muestra una posible codificación
que satisface las distintas prioridades de adyacencia.

Prioridad 1: (s I ,s2)
Prioridad 2: (s I,s2)
Prioridad 3: (so,s.) ,(s2,s3)

(a) Diagrama de estados inicia] (b) Prioridad en las adyacencias (e) Posible codificación

FIGURA 6.25 Codificaciones basadas en la prioridad en adyacencia.

La tercera estrategia para la asignación de estados, codificación del uno


caliente (hOI one encoding), utiliza codificación redundante, de manera que a
cada estado se le asigna un biestable. En otras palabras, cada estado se distingue
por su propio biestable, que tendrá valor 1 mientras que los demás tendrán valor
O. En la práctica, esto significa que un biestable se pondrá a 1, y otro a O, en cada
transición de estado a estado. El nombre de esta codificación de debe a que el
valor 1 reeuerda a una patata caliente que pasa de una mano a otra. La limitación
obvia de la codificación del uno caliente es que funciona sólo en una máquina de
estados finitos con un pequeño número de estados, ya que el número de biestables
resulta excesivo a medida que el número de estados crece.
En general, la mejor estrategia para codificar estados es determinar las posi-
bles opciones y, después, estimar el coste y el retardo de la lógica de entrada y
262 Principios de diseño digital

salida para cada tipo de codificación. En el resto de esta sección, se describe este
procedimiento utilizando el ejemplo del contador módulo 3.

EJEMPLO 6.7 Codificación de estados en el contador módulo 3.


PROBLEMA

Dado el contador ascendente/descendente módulo 3 definido en la tabla mínima de estados


siguientes/salidas de la Figura 6.2l(c), obtenga la codificación que minimice el coste y el
retardo de la lógica del contador.
SOLUCIÓN

Como puede verse en la tabla de estados siguientes/salidas, este contador tiene sólo tres
estados, lo que significa que cualquier codificación produce dos parejas de estados con
codificaciones adyacentes y un par de estados cuyas codificaciones difieren en dos bits.
Además, como se pueden codificar cuatro estados con dos variables, Q, y Qo' existe una
combinación de valores redundante. Porlo tanto, puede omitirse la combinación Q, Qo = 11 ,
ya que esto permitiría reducir el número de unos durante la minimización de la lógica. Así
pues, una posible codificación es la A, mostrada en la Figura 6.26. Es la codificación que
se obtiene si se sigue la estrategia de mínimo cambio de bit.

So oo O1 OO 1
S, o1 00 O1O
S2 1O 1O 100

FIGURA 6,26 Posibles codificaciones de estados para el contador módulo 3.

Si se utiliza la estrategia de prioridad en adyacencia, se llega a que no hay parejas de


estados que satisfagan ni la primera ni la segunda reglas de prioridad. De acuerdo con la ter-
cera regla de prioridad, se obtiene que los estados So y s,. Y s, Y s2' tendrían codificaciones
adyacentes, una opción ya satisfecha con la codificación A. En este sencillo problema se
podría utilizar, también, una estrategia que simplifique la decodificación de estados, asig-
nando las combinaciones Q,Qo = 01 y Q,Qo = 10 a los estados So y s2' que son los únicos
con Y=I. Esta opción, codificación B, se muestra en la Figura 6.26. Su ventaja principal es
que reduce el número de entradas a la puerta AND en la implementación de la lógica de
salida. Finalmente, una tercera estrategia es utilizar la codificación del uno caliente, que
proporciona la codificación C de la Figura 6.26.
Hasta abora, las codificaciones A, B Y C son posibles codificaciones candidatas. Para
evaluar las ventajas de cada una de ellas, se debe estimar el coste y el retardo de sus res-
pectivas implementaciones lógicas de entrada y salida. Con este fin, es necesario obtener
ecuaciones de excitación y de salida y estimar el coste y el retardo de su implementación
con dos niveles de puertas AND. Para simplificar esta estimación, se supone que los valo-
res de cada variable y sus complementos están disponibles sin coste ni retardo. Esta supo-
sición se satisface siempre para las variables de los biestables y, también, es cierta para las
Lógica secuencial 263

variables de entrada ya que se requieren inversores dobles para incrementar su conectivi-


dad como señales de entrada. Los inversores dobles en la entrada añaden un coste y un
retardo constantes a la estimación, por lo que pueden omitirse, ya que no afectan a la com-
paración entre las dos implementaciones alternativas.
En la Figura 6.27 se muestra la estimación del coste y el retardo de la codificación A.
En primer lugar, en las Figu'ras 6.27(a) y 6.27(b) se presentan los mapas de Kamaugh para
las funciones de estado siguiente y de salida, mientras que las ecuaciones de excitación y
de salida obtenidas de los mapas de Kamaugh se dan en la Figura 6.27(c). Finlmente, cada
una de estas ecuaciones se ha implementado con redes lógicas de dos niveles de puertas
NANO. Como puede verse, el coste total será igual a coste(Q,) + coste(Q2) + coste(l') = 24
+ 24 + 18 = 66, y el máximo retardo de entrada será igual a 4.0 ns, mientras que el retardo
de salida será igual a 3,6 ns.

CD CD
Q,Qo 00 01 11 \O Q,Qo 00 01 11 \O
00 O O
~
O O It O
- - --, - . I O~1.! 00 O O
.' 1-, O

O O ;. ~ O
-, , ' , ' ,,
01 O '1 O 1, 01 O O O O
~"-
11 IX IX
,I '_
X IX'
_ .J _, X IX ,
,, -
¡X I X
. 11 X X X ' X'
,, ,,
\O ,1 O
- -- - -
,
1'O O ~ 1_, O O \O O O O , 1,
.-
Q. (siguiente). Qo(siguiente) Y

(a) Mapa de estados siguientes (b) Mapa de salida

Q,(siguiente) =:: Q, C + QoCD' +Q',Q'oCD


Qo(siguiente) =:: QoC + Q ,CD + (l,Q'oCD'
Y -Q,CD' + (!,(!oCD

(e) Ecuaciones de excitación y salida

Coste (Q .) =:: 24 Coste (QO> = 24 Coste (Y) = 18


Retardo (Q,) = 4,0 Reranlo(QóJ - 4.0 Retardo (Y) = 3,6

(d) Estimación de coste y retardo

FIGURA 6.27 Estimación de coste y retardo para la codificación A.

En la Figura 6.28 se obtiene una estimación similar con la codificación B . Como se


esperaba de esta codificación, el coste y el retardo de la lógica de salida se ha mejorado lige-
ramente, ya que el coste total es coste(Q,) + coste(Q2) + coste(Y) = 24 + 24 + 16 = 64, y el
máximo retardo de la lógica de entrada es de 4,0 ns, mientras que el retardo de salida es de
3,2 ns.
264 Principios de diseño digital

CD CD
Q¡Qo DO 01 11 10 Q¡Qo DO 01 11 10
DO O O O O O ¡-1~
,- ,-ii ~ O DO O O O O
~ - - --,
01 0 '1 O l ,' '' 1~, O O O 01 O ,,
O 'l' O
~"- -, , ,, '' X,, ,, X,,
11 ~
, :~ X' X' 'x' x X ,X ,
, -'
_ .J _ ' ,, 11 X X
, - , ,
,1 O 1 ' 0 O O 0 ' 1 , 10 O O O , 1,
10
- - - -' ,- , -
Q,(Slgulente) Qo(Slgulente)

(a) Mapa de estados siguientes (h) Mapa de salida

Q.(siguiente) = Ql e + QoCD+(! ¡Q'oCD'


Qo(siguiente) = QoC + Q,CD' + Q' ¡f¿oCD
y= QoCD + QIGD'

(e) Ecuaciones de excitación y salida

Coste (Q,)=24 Coste (Qo> = 24 Coste (1') = 16


Retardo (Q, ) = 4,0 Retaroo (QO> = 4.0 Retardo (Y) = 3,2

(d) Estimación de coste y retardo

FIGURA 6.28 Estimación de coste y retardo para la codificación B.

La estimación de la codificación C se muestra en la Figura 6.29. Obsérvese que el coste


y el retardo de cada ecuación de excitación se han reducido, pero el coste total es mucho
mayor que antes, principalmente porque la implementación tiene tres biestables en lugar de
dos. Como resultado, el coste total es igual a coste(Qo) + coste(Q,) + coste(Q2) + coste(l')
=22 + 22 + 22 + 16 =82, aunque el máximo retardo lógico de entrada es de sólQ 3.6 ns y
el retardo de salida es idéntico al de la codificación B.
La conclusión que se obtiene de esta comparación es que la codificación C genera la
implementación más rápida y costosa, mientras que la codificación B genera una imple-
mentación que es la menos costosa de las tres alternativas pero, también, más lenta que la
codificación C. Finalmente, la codificación A genera una implementación muy similar, y
sólo insignificantemente inferior, a la codificación B.

En general, es muy difícil estimar el impacto de cada codificación, salvo si se


hace como en el Ejemplo 6.7, generando una implementación para cada codifica-
ción y comparándolas en coste, retardo y otros parámetros. En el resto de este
capítulo se utilizará la codificación A para la implementación del contador módu-
lo 3, ya que es la más común y fácil de entender.
Lógica secuencial 26S

CD CD
Q,Q,Qo 00 01 I I 10 Q,Q, Qo 00 01 11 10
000 xxx xxx x x x x x x 000 x x x X

o 0 :1- -O- O" -1~ --


,11 ,10 o o
- ,
o o ,'1~ o
001
r--¡- --- I - --
11 10
, 001
,,x ''
:x ,' X II X I X
"

, , -,
X 'X 1X X X iX '
011 ,
I L_ --T-
' IX I X
"
.. - I
I

I I
I 11 I
011 X X X
.- -
010 0 .100 1 , 0 o o ,1 o o o o o
00
- - - --
11 0 0 1 . 00 o ..
-- --
~ o
oo ..
, ¡1. 0

~
010

lOO o o o ,r l ',,
c: ', ,
I ___ .1 - - .. r ,,' I _,' ¡

01 :x x:X
I _..¡ -
X :X X
_ ~ _
1

I 1
¡X I:X 1 X
" 1_., _ ., I
x :x .:x' 1, I
101 x x
, , ,'x ,'
,x

,'x- ,' ,, ,'


II I X IX IX X I X IX I I X ', X I 'x I ' X liX '.x I 111 X X 'x '
I I L _ _ 1_.1_1 '_',1 , ,1 11_1. 1
"r
lO :x~'f_~__~~ Jf
I I
IX x~x~ ~ : I ~ : x?'~I
I I I
110 X X X ,x ,
-.
Q2(Slgutente), Q¡(Slgulente), Qo(slgUJente) y

(a) Tabla de estados siguientes (b) Tabla de salida

Qz(siguiente) :: Q2e + QoCD + QIGD'


Q¡(siguiente) = Qle + Q2eD + QoCO'
Qo(siguiente) = QoC + Q2GD' + QleD
y = QoCD + Q2GD'

(e) Ecuaciones de excitación y salida

Qz(siguiente)
Q.(siguiente)
Qo(siguiente)
:>y
Coste (Q~ '" Coste (Q ,) = Coste (Q2):: 22 Coste (Y) = 16
Retamo (Q¡)) = Retardo (Q ,) = Retardo (Q2) = 3,6 Retardo (Y) = 3,2

(d) Estimación de coste y retardo

FIGURA 6.29 Estimación de coste y retardo para la codificación C.

6.12. ELECCiÓN DE LOS ELEMENTOS DE MEMORIA


Después de haber completado el proceso de minimización y codificación de esta-
dos, se debe elegir el tipo adecuado de biestable para la implementación de la
máquina de estados finitos. Como indican las Tablas 6.1 y 6.2, existen cuatro tipos
de biestables. En general, los biestables T son una excelente elección para circui,
tos secuenciales tipo contador, donde los biestables deben conmutar de O a 1 y
volver a hacerlo de 1 a O con gran frecuencia. Los biestables D deben utilizarse,
normalmente, en aplicaciones donde la información de entrada debe almacenarse
durante algún tiempo para su uso posterior. En este sentido, los biestables D se
266 Principios de diseño digital

conciben para almacenamiento temporal o para accesos a la información desde


tenninales de entrada/salida externos. El biestable SR se utiliza más en situacio-
nes donde diversas señales ponen a 1 o O los biestables. Finalmente, el biestable
JK, que es el más complejo, se utiliza siempre que sea necesario combinar las
prestaciones de un biestable T y un biestable SR.
De lo dicho anteriormente, se deduce que los biestables SR y JK deberían
utilizarse más. Sin embargo, aunque tienden a reducir el coste de la lógica de
entrada, requieren el doble de conexiones en sus entradas que los biestables T
y D. En general, como los biestables T y D precisan de un menor número de
conexiones, se adaptan mejor a las implementaciones VLSI. Para comparar la
eficiencia total de los diferentes biestables, se puede obtener la lógica de
entrada para el contador módulo 3 utilizando cada uno de los cuatro tipos de
biestables.

EJEMPLO 6.8
PROBLEMA
Dado el contador módulo 3 con la codificación A, como se describe en la Figura 6.26,
seleccione el tipo de biestable que minimice el coste y/o el retardo de la lógica de
entrada.
SOLUCIÓN
Para realizar el problema, se comienza con la tabla de estados siguientes mostrada en la
Figura 6.27(a), que se ha repetido en la Figura 6.30(a). Después, para obtener las ecua-
ciones de excitación de los distintos tipos de biestables, se utilizan las tablas de excit"-
ción de los cuatro biestables que se muestran en la Figura 6.30(b). A continuación, se
tomará cada pareja de estados presente y siguiente del mapa de estados siguientes y se
sustituirán sus valores de estado siguiente por los valores de entrada requeridos en la tabla
de excitación. De esta forma, se pueden crear mapas de entrada para los biestables SR,
JK, T Y O, que se muestran en las Figuras 6.30(c), (d), (e) y (f), respectivamente.
Obsérvese que, realmente, los mapas de entrada combinan cuatro mapas en el caso de
biestables SR y JK, Ydos mapas en el caso de biestables T y O. A partir de estos mapas
de entrada se pueden obtener expresiones mínimas para cada entrada del biestable, como
se indica en la parte inferior de cada mapa, con el coste y retardo estimados para cada
expresión. La estimación del coste y el retardo no incluye los inversores de entrada, ni el
coste ni el retardo de los biestables.
De estas estimaciones se deduce que una implementación con biestables JK tiene míni-
mo coste y bajo retardo, principalmente porque, en este caso, se puede utilizar una puerta
AO! para la implementación de la lógica de entrada de JI y Jo' en lugar de dos niveles de
puertas NANO. No obstante, en muchos casos en los que hay que implementar circuitos
secuenciales con muchos estados, los biestables JK no presentan grandes ventajas sobre
otros tipos de biestables. Se puede ver en este ejemplo que los biestables T, O YSR gene-
ran implementaciones con costes y retardos similares.
Lógica secuencial 267

CD
o 00 01 I I 10
00 o o o o 1 o o 1

01 o 1 o 1 o o 1 o
11 X X X X X X X X

10 1 o 1 o o 1 o o
Q) (sigUiente) ,Qo (sigUIente)
(a) Tabla de estados siguientes para
la codificación A

o O O X O X O O
O 1 1 O 1 X 1 1

l 1
1
O
1
O
X
1
O
X
X
1
O
1
O
O
1

(h) Tabla de excitación de los biestables

CD
o 00 01 II 10
00 O X O X O X O X
,'..-'. O O X O X '-1" O
, -'
r; •
01 O X X O O X X O O X O ,1 , ' . " O O
, ' ,r. "'
r: "r:". I 1 Ir:" I 1
II X X X X X X X X X , X I. X liX I I~ ~I X : X I~ ~
I .- J
I I
10 X O O X X O O X O ," 1 11 1 10 I O I_l~ OX I
""" J _ J I
-- - - --
.. _ _ _ _ _ _ 1

S,:: QoCO' + Q' ¡(loCD [coste = 18, retardo = 3,6J


R¡:c Qle = (Q'l + e)' [coste = 4, retardo = 1,4]
So = Q¡CD + Q'¡Q'oCD' [coste = 18, retardo = 3,6]
Ro=QoC=(Q'o+C)' [coste =4, retardo = 1.41

(e) Implementación con biestables SR

FIGURA 6.30 Implementación del contador módulo 3 con varios tipos de biestables.
268 Principios de diseño digital

CD
o 00 01 ll 10
o ox o x o 1 iX ~IO ~IX~ o .,- ....
00 X X
, ,IX ,1 1 ,IX I
01 O X X O O X X O iO ~IX "II X "ll l Il ¡-l ~I X "II X "II I II
I " ji_ji I I " 1'_" I
I I I I I I I I I I
ll X X X X X X X X ¡X 1¡X , X IX , ,X I¡X , X IX ,
-ji I I I -', I I I
10 X O O X X O O X X ~1_1 1 ~X_l o IX I
X 11 ,
•_ _ _• 1
------- ____

J , = QoCO' + Q' oCD + (e + Q,jJ + Q' eP')' {coste = 12. retamo = 2,41
K ,=C [coste:: 0, retardo", O]
J . = QIGD' + (lICO' = (e" + QIO' + Q.O')' [coste = 12, retardo = 2.4]
KO= C [cost[Link] O. retardo", 01
(d) Implementación con biestables JK

CD CD
Q,Qo 00 01 ll 10 o 00 01 l l 10
,
00 O O O O 1:~ O
O rt "
,' 00 O O O O
--
11 10
-- O 11 I

01 O O O O O I r.¡J I '
,, ,-,
...
I 01 0."-
, ,
0""" O O 'I 10
, ,,
r: •
~ :;x_, X IX I ' X iX
ll X X X X X ,X I
r'" I
'2' ~ X ll
,iX; ~ , , , '- ,
10 O O O O ,1 u! ~ I O 10
._-O
OJ I ,O
- - O '-' . ,
O O
I

T. = Qle + (loCD + QoCD' (coste = 22, retardo ,. 3,6J D I = Q,e + QoCO' + Q' ,Q'oCD [coste = 24, relardo =4,01
To = Que + QleD + Q' ,CD' [coste = 22, retardo'" 3.61 Do = Qoe + QleD + (! .Q'oCD' [coste = 24, retardo =4.01

(e) Implementación con biestables T (1) Implementación con biestables D

FIGURA 6.30 Continuación.

6.13. OPTIMIZACiÓN Y TEMPORIZACiÓN


El siguiente y último paso en una síntesis lógica secuencial debe consistir en dise-
ñar la lógica de entrada y salida con los componentes de una biblioteca dada. En
el caso del contador módulo 3, ya se han utilizado puertas AOI al calcular el retar-
do y el coste de la implementación con biestables JK.
Una vez que la traslación a la tecnología se ha realizado, se puede dibujar el
esquema para visualizar todas las puertas y conexiones del contador. Como ejem-
plo, en la Figura 6.31 se muestra el esquema lógico del contador módulo 3 con la
implementación JK. (La lógica de salida se ha obtenido en la Figura 6.27(c).) En
esta figura se observa que se utilizan inversores dobles en la entrada para sumi-
nistrar más corriente, lo que decrementa el retardo causado por la carga y descar-
ga de las capacidades de las líneas. Obsérvese que este esquema lógico se imple-
mentará realmente, por lo que tendrá que transformarse en una lista de compo-
Lógica secuencial 269

nentes expresados en un lenguaje de descripción hardware antes de que sea utili-


zado por un programa software de simulación y test.
. El paso final en el proceso de síntesis secuencial consiste en obtener un dia-
grama de tiempos del circuito, y los retardos de las puertas y biestables. El dia-
grama de tiempos del contador módulo 3 se muestra en la Figura 6.32. Los retar-
dos en el diagrama de tiempos corresponden a los retardos dados en la Figura
6.3I(b). En la Figura 6.32 se habilita el contador módulo 3 en to' pero no cambia
de estado hasta el flanco de subida de la señal Clk. Alcanza el estado SI(QIQO = 01)
en tI + 4,0 ns. Tras el segundo flanco de subida, alcanza el estado S2(QI QO= 10)
en t2 + 4,0 ns. La señal de salida Y vale 1 en t2 + 7,6 ns, ya que Y debe valer 1 en
s2 si CD = 10. Cuando, en el siguiente flanco de subida, el contador módulo 3
alcanza el estado so(Q I Qo = 00), la salida Y vuelve a O en t3 + 7,6 ns. Cuando D
se desactiva en t4 , la salida Y vale 1 de nuevo en t4 + 5,6 ns, ya que la salida Y
debe ser 1 en el e~tado So si CD = 11. Después, el contador módulo 3 alcanza el
estado s2(QI QO= 10) en t5 + 4,0 ns e Yvuelve a O en t5 + 7,6 ns, ya que Y debe ser
O en S2 si CD = 11. Finalmen~e, después de t6 + 4,0 ns el contador módulo 3 alcan-
za el estado SI (Q I Qo = 01). Este es el último estado que se indica en el diagrama
de tiempos.

C D
~ 17 ~ 7
Q' ,
~7 W Q,

L~ 2,4 J,
r~ 4,0
Q, -

K¡ Q', -
1,8

I 1,4 y

2,2

~.~

~
L
Jo Qo r- f-
> 4,0
~ C,D a C/k 4,4
Q'o
Ko Q'o r- C/k a Y 7,6
Qo
C,D a Y 5,6
C/k
C/k a C/k 6,4

(a) Esquema lógico (b) Tabla de rewdos

FIGURA 6.31 Circuito contador módulo 3.


270 Principios de diseño digital

Éste y otros diagramas de tiempos se utilizarán para verificar el comporta-


miento de entrada y salida del circuito sintetizado, y para generar señales de entra-
da y salida para simulación. Dadas las ondas de entradas, el simulador generará
las ondas de las salidas, que podrán compararse con las señales esperadas en las
salidas obtenidas en el circuito, o en las especificaciones de circuito o en la des-
cripción funcional. Estas señales de las entrada y salida se denominan, a veces,
vectores de test, ya que pueden utilizarse para testear el circuito después de que
éste se haya fabricado .

e/k

Q, , 0¡:O ~4,ob
-+I4. , -+I4.
, 0¡:O
,
~4,, O ¡:

y
~~ , L-____4 -_ ____

" "
FIGURA 6.32 Diagrama de tiempos de un contador módulo 3 para una secuencia de valores
de entrada.

6.14. RESUMEN DEL CAPíTULO


En este capítulo se ha expuesto cómo construir los elementos básicos de meml>-
ria utilizados en el diseño de lógica secuencial. Con este fin, se han introducido
diferentes tipos de latches y biestables, y se han descrito con ecuaciones caracte-
rísticas, tablas características y diagramas de estados. También se ha introducido
el concepto de lógica secuencial, así como el modelo de máquina de estados fini -
tos, utilizado para representar la lógica secuencial durante la fase de diseño. Se
han proporcionado, paso a paso, procedimientos para el análisis y síntesis de lógi-
ca secuencial, y se han descrito estos procedimientos con ejemplos de contadores
módulo 4 y módulo 3. En el Capítulo 7 se utilizan estos procedimientos para ana-
lizar y sintetizar componentes secuenciales.
Lógica [Link] 271

6.15. LECTURAS ADICIONALES


DeMicheli, G. Synthesis and Optimization of Digital Circuits. New York: McGraw-HilI,
1994.
Describe los conceptos de síntesis lógica y secuencial, y algoritmos en detalle.
Requiere un conocimiento de experto en diseño y en desarrollo de herramientas CAD.
Katz, R.H. Contemporary Logic Design. Redwood City, CA: Benjamin-Curnmings, 1994.
Texto introductorio al diseño lógico, con explicaciones de cómo utilizar las herra-
mientas CAD UC-Berkeley en el proceso de diseño.
Kohavi, Z. Switching and Automatic Theory, 2nd. ed. New York: McGraw-HilI, 1978.
Tratamiento teórico completo de máquinas de estados finitos y lógica secuencial.
McCluskey, E. Logic Design Principies. Englewood Cliffs, NJ: Prentice-Hall, 1986.
Proporciona explicaciones detalladas de los conceptos básicos en el análisis,
síntesis y test lógico secuencial.

6.16. PROBLEMAS
6.1. (Señal de reloj) Calcule la frecuencia 6.4. (Latch D sincronizado) Diseñe un
de reloj y el rendimiento de ciclo para latch D utilizando sólo (a) puertas
una señal de reloj con un ancho y NANO y (b) puertas NOR, y calcule
período de: los retardos D a Q y C/k a Q para tran-
(a) 5 ns y 20 ns siciones de salida positivas y negati-
(b) 10nsy 100ns vas.
(e) 100 ns y I ns
6.5. (Biestables) Diseñe un biestable
6.2. (Latch SR) Dibuje el diagrama de maestro-esclavo (a) SR, (b) JK, (e) D
tiempos de salida de una implementa- y (d) T, utilizando latches SR sincro-
ción (a) NOR y (b) NAND de un latch nizados y puertas AND, OR e
SR para las señales de entrada mostra- INVERSORES .
das en la Figura P6.2.
6.6. (Biestables JK) Obtenga las formas de
onda de salida de un biestable JK
s maestro esclavo para las formas de
onda de entrada dibujadas en la Figura
P6.6.
,
I I I ! t I I I I I I
lo t. t2 IJ '4 t s '6 h t. 19 f_O t ll '1 2 t' 3

FIGURA P6.2 L
6.3_ (Latch SR) Obtenga una implementa-
ción para un latch SR sincronizado K L
utilizando sólo:
FIGURA P6.6
(a) puertas NOR
(b) puertas NANO 6.7. (Biestables) Utilizando mapas de
(e) puertas ANO, OR e INVERSO- Karnaugh, obtenga las ecuaciones
RES características a partir de las tablas
272 Principios de diseño digital

características de los cuatro biestables 6.12. (Minimización de estados) Obtenga la


mostrados en la Tabla 6.l. FSM con mínimos estados a partir de
la tabla de estados/salidas mostrada ..
6.8. (B iestables) .Implemente biestables
la Figura P6.12.
SR, JK, D Y T utilizando sólo puertas
ANO, OR e INVERSORES, y biesta-
bles:
(a) SR
(b) JK
(c) D
(d) T
So sJI siO
6.9. (Análisis secuencial) Obtenga (a) una s, sr/O s.1O
tabla de estados y (b) un diagrama de s2 s,lO s,lO
estados para el circuito secuencial s, s,lO s,lO
mostrado en la Figura P6.9 s. sjO s.1I
s, sjO s,jl
s. s,lO si l
s, s,lO si l

e/k FIGURA P6.12


R,

FIGURAP6.9 6.13. (Minimización de estados) Minimice


los estados de la FSM dada en la
6.10. (Aoálisis secuencial) Obtenga (a) la Figura P6.l3 utilizando:
tabla de estados/salidas y (b) la repre- (a) Particionamiento de estados
sentación FSM del circuito mostrado (b) Una tabla de implicación
en la Figura P6.I0. ¿Cuál es la función
de este circuito secuencial?

x AB=1O
So s.1I sjO s,lI
s, sjO s,/I s./I
S2 s,lI sr/O s,lI
FIGURA P6.10 s, sjO s,lI s./I
s. sr/O s,lI s,/I
6.11. (Análisis secuencial) Obtenga (a) las s, sjO s./I sil
ecuaciones de excitación, (b) una
ecuación de estado siguiente, (c) una FIGURA P6.13
tabla de estados/salidas y (d) un dia-
grama de estados para el circuito mos- 6.14. (Codificación de estados) En el dia-
trado en la Figura P6.11 . grama de estados mostrado en la
Figura P6.14, obtenga las codificacio-
nes de estado utilizando:
(a) La heurística del mínimo cambio
.1 -'---'. de bit
(b) La heurística de prioridad en
adyacencia
FIGURA P6.11 (e) Codificación del uno caliente
Lógica secueocial 273

OJO te tres ciclos de reloj después de que la


señal Reset se haya desactivado. Para
este circuito:
OJO
(a) Realice el diagrama de estados
1/0 OJO
(b) Minimice el número de estados
(c) Codifique los estados para mini-
OJO 110 mizar la lógica combinacional
6.20. (Síntesis secuencial) Repita el Problema
1/1
6. 19 diseñando un circuito que reconoz-
0/0
s. 1/1 ca todas las secuencias de entrada que
tengan tres o más unos consecutivos, O
tres O más ceros consecutivos.
FIGURA P6.14
6.21. (Síntesis secuencial) Implemente un
6.15. (Codificación de estados) Obtenga la
circuito secuencial que complemente
codificación de estados que minimice
un número de 16 bits en complemento
la lógica de salida de un contador que
genera la siguiente secuencia:O, 1, 3, a dos, X ; '<'5'<'4".x,.<0' El circuito
tiene una entrada, X. que tiene valor X i
6, 10, 15, 0, ...
en el ciclo de reloj i, y otra entrada
6.16. (Síntesis secuencial) Diseñe un conta- Reset, que inicializa el circuito a un
dor que genere la secuencia 0, 1, 3,6, estado inicial después de 16 ciclos de
10, 15, utilizando cuatro biestables (a) reloj. La salida Yserá el complemento
D, (b) SR, (c) JK y (d) T, como ele-
mentos de memoria y codificación en
binario natural.
°
a dos de X En el estado inicial, se
establecerá a un indicador. El circui-
to debe actuar como sigue: Para cada
6.17. (Síntesis secuencial) Diseñe un conta-
'<;'° ~ i ~ 15, si indicador; 0, enton-
ces Yi = Xi Y indicador = Xi ; en caso
dor que genere la secuencia 0, 1, 2, 3,
contrario, Y; ; J(. Desarrolle un dia-
4,5,6,7,8,9, O, ..., utilizando codifica-
grama de estados y un circuito lógico
ción en binario natural y biestables D.
utilizando biestables D.
6.18. (Síntesis secuencial) Diseñe un detec-
6.22. (Síntesis secuencial) Diseñe un con-
tor de paridad que cuente el número
trolador de semáforos simplificado
de unos en una cadena de entrada.
que conmute las luces en un cruce
Este detector activa su salida Y si reci-
cuando una calle norte-sur (NS) se
be un número impar de unos en la
cruce con una calle este-oeste (EW).
entrada X Una señal asíncrona Reset
La entrada del controlador es el botón
debe poner al detector de paridad en
PASAR pulsado por los peatones cuan-
su estado inicial. Utilice como ele-
do quieren atravesar la calle. Las sali-
mentos de memoria sólo biestables (a)
das son dos señales NS y EW que con-
D, (b) JK Y (c) T.
trolan los semáforos en las direccio-
6.19. (Síntesis secuencial) Diseñe un circui- nes NS y EW. Cuando NS o EW son 0,
to que reconozca una secuencia de se enciende la luz roja, y cuando son
1, se enciende la luz verde. Si no hay
entrada que tenga, al menos, tres unos.
El circuito tiene una única entrada X y
una única salida Y,además de una
peatones, NS ; °
y EW; 1 durante 1
minuto, y después NS; 1 Y EW ; °
señal asíncrona Reset. El circuito esta- durante otro minuto, y así sucesiva-
blece la salida Y a 1 si la señal de mente. Cuando se pulsa el botón
entrada X es igual a 1 al menos duran- PASAR, NS y EW se ponen a 1 duran-
274 Principios de diseño digital

te 1 minuto, siempre que el minuto (a) Desarrolle un diagrama de esta-


actual haya concluido. Después de dos y una tabla de estados/sali-
esto, las señales NS y EW continúan das.
alternándose. Para este controlador de (h) Codifique los estados
semáforos: (e) Obtenga un circuito lógico.
e A P í

Componentes
de
. . /

memorlzaClon
3
booleana Puertas lógicas
y biestables

6
M~quina de
estados finitos 4
Técnicas de
diseño lógico

Sistema binario
y representación
de datos

....... cte8
0ItId00 tlairoo
• 'jade,
278 Principios de diseño digital

El objetivo fundamental de los componentes de memorización es almacenar dato


y realizar transformaciones sencillas de datos, tales como conteo y desplazamien-
to. En este capítulo se definen y diseñan varios tipos de componentes de memori-
zación, tales como registros, contadores, memorias, pilas, y colas. Además, defi-
nimos diversos tipos de caminos de datos (datapaths) y controladores que consti-
tuyen las unidades de cómputo de muchos chips. Para simplificar la descripción
de estos componentes, utilizamos sólo puertas genéricas y biestables, sin intentar
optimizar el diseño para una tecnología o una biblioteca de celdas particular.

7.1. REGISTROS
El componente de memorización más sencillo es un registro, que puede conside-
rarse como un Ijiestable ampliado a múltiples bits. Cada registro consta de n bies-
tables activados por una señal de reloj común. En otras palabras, cada biestable del
registro almacena su propio dato en cada flanco ascendente de la señal de reloj. Así
pues un registro básico posee n entradas y n salidas además de la señal de reloj .
En la Figura 7.1 se muestra un ejemplo de registro de 4 bits. Su símbolo grá-
fico, que utilizaremos a lo largo del libro, se muestra en la Figura 7.I(a). Como se
indica en la Figura 7.1 (b) el registro consta de cuatro biestables D conectados en
paralelo.

C/k

(a) Símbolo gráfico

"

- D, Q, - "- D, Q, - "- D, Q, c- - Do Qo c-
¡- > - 1> - 1> c- >

Clk
I - 1-
Q, Q, Qo
(b) Esquema del registro

FIGURA 7.1 Registro de 4 bits.


Componentes de memorización 279

La funcionalidad del registro básico de la Figura 7.1 puede mejorarse aña-


diendo diferentes señales de control. Por ejemplo, si el registro debe ponerse a
uno o a cero independientemente de la señal de reloj , bien cuando se conecta la
alimentación o bien en respuesta a algún evento especial, podemos añadirle seña-
les asíncronas de puesta a uno (prfset) y de puesta a cero (clear). Esta mejora
se consigue reemplazando íos biestables indicados en la Figura 7.1 por otros con
puesta a uno y a cero como se muestra en la Figura 7.2.

Preset IJ /2 1) lo
Registro
e /ear Q3 Q2 QI Qo

(a) Símbolo gráfi co

1, 1, 1,

Preset

' - D, Q, f- '- D, Q, f- '- D, Q, f- '- D, Q, f-


r po r- po r- 1> r- 1>

y y y y
e/ear

e/k

Q, Q, Q,
(b) Esquema del registro

FIGURA 7.2 Registro de 4 bits con puesta a uno (prese~ y puesta a cero (cfeat) asíncronas.

Como puede verse en la Figura 7.2(b), el contenido del registro puede hacer-
se todo ceros poniendo a O la señal Clear durante un corto período de tiempo. De
forma similar, un contenido de todo unos podría introducirse poniendo a cero la
señal Preset. Obsérvese que estas señales de puesta a cero y puesta a uno son inde-
pendientes de la señal de reloj y tienen prioridad sobre ella, lo que significa que
si están a cero durante el flanco ascendente de la señal de reloj, se ignora la entra-
da 1 y el registro es puesto a cero o a todo unos.
En lo que resta del libro supondremos que todos los registros y contadores
pueden disponer de entradas asíncronas de puesta a cero, a uno, o ambas. En gene-
ral, no lo indicaremos explícitamente salvo cuando sea esencial para explicar el
funcionainiento del componente.
Tanto en el registro de la Figura 7.1 como en el de la 7.2 automáticamente se
almacena un nuevo dato por cada flanco ascendente de la señal de reloj . Sin
280 Principios de diseño digital

embargo, en la mayoría de los sistemas digitales un dato se memoriza durante


varios ciclos de reloj antes de modificarlo. Por este motivo es útil poder controlar
cuándo ha de introducirse el dato en el registro. Esto se consigue con el uso de
una señal de control, normalmente denominada carga (load) o habilitación (ena-
ble), que permite cargar un dato en el registro. El registro resultante se conoce con
el nombre de registro con carga en paralelo.

Load 1] 12 /1 In
Registro
QJ Qz QI

(a) Sfmbolo gráfico (b) Tabla de operación

1, 1, 1,

.. I t t· IO
I O I O I O I

[
S

-.
Seloctor

•..~
. r S
Selector
r S
Selector
r S
Selector

'- D, Q, f- ..... D, Q, '- - D, Q, '- - D, Q, -


,- ~ r- 1> -~ ,... ~

elk

Y, Y, Y, Y,

(e) Esquema del registro

FIGURA 7.3 Registro con carga en paralelo.

En la Figura 7.3 se muestra un registro con dicha señal de control. Obsérvese


que e.1 diseño del registro contiene un selector de 2 al, que selecciona entre el
dato de entrada o el existente en el registro. La señal de carga Load controla el
selector, de tal manera que si Load es 1 se introduce un nuevo dato en el registro.
En caso contrario, si Load es 0, con cada flanco ascendente de la señal de reloj se
recarga el mismo dato contenido en el registro.
Componentes de memorización 281

7.2. REGISTROS DE DESPLAZAMIENTO


En la Sección 7.1 hemos mostrado cómo puede colocarse un selector delante de
los biestables para posibilitar la carga controlada de un registro. También podría-
mos utilizar un selector que permitiera desplazar el dato memorizado en el regis-
tro. El registro resultante, denominado registro de desplazamiento, desplaza su
contenido en un bit, en una dirección específica, cuando la señal desplazar (Shift)
es 1. Como ejemplo, la Figura 7.4 presenta un registro de desplazamiento de 4
bits. La entrada serie 1L se utiliza para introducir el nuevo dato de 1 bit en el bies-
table más a la izquierda del registro. Un registro como el de la Figura 7.4 se podría
utilizar para convertir una secuencia de datos serie en otra de datos paralelo. Por
este motivo [Link] denomina a veces registro de desplazamiento de entrada-
serie/salida-paralelo.

1,
Registro de desplazamiento
Desplazar Q) Ql 0 1 Qo

(a) Símbolo gráfico


(b) Tabla de operación

I I
I O
I
I O
I I I
I O
I
I
r
O

DespÚWlr t Selector

I
Selector

r Selector

I
Selector

'- D, Q, 1- L... D, Q, r-- L- D, Q, 1- L- D,


Q" 1-
r- r- 1- 1- ,.... 1-
. .
C/k

Y, Y, Y, Y,
(e) Esquema del registro

FIGURA 7.4 Registro de desplazamiento a la derecha con entrada-serie/salida-paralelo.

Para aumentar la versatilidad de un registro podríamos también usar un selec-


tor de 4 a 1 que nos permita combinar las funciones de desplazamiento y de carga.
Por ejemplo, el registro de la Figura 7.5 podría o bien desplazar su contenido o
282 Principios de diseño digital

cargar en paralelo un nuevo dato. Además, podría desplazar en un bit su conteni-


do a la izquierda o a la derecha, introduciendo por la derecha o por la izquierda el
bit de dato disponible en las entradas serie IR o I¿ respectivamente. La Figuras
7.S(a) y (b) muestran el símbolo gráfico y la tabla de operación, y la Figura '7.S(e)
muestra el esquema de este registro multifunción.

(a) Sfmbolo gráfico (b) Tabla de operación

/ , / ,
/,

I I I I I I
3 2 1 O 3 2 1 O 3 2 I O 3 2 1O

s,
s.
Ir
I
Selector
IrI
Selector
Ir
I
Selector

fr
Selector

' - D, Q, - - D, Q, r- " - D, Q, 1- - D, Q, -
-> -> -~ r- >

C/k

Y, Y, Y, Y,
(e) Esquema del registro

FIGURA 7.5 Registro de desplazamiento de 4 bits con carga en paralelo.

Obsérvese que en el esquema del registro de desplazamiento, como en el de


la ALU, podemos distinguir las secciones del bit más significativo, las centrales,
y la del menos significativo. Cada una de estas secciones de bits (bit slices) debe
diseñarse por separado ya que sus funciones son ligeramente diferentes. Ya que
las secciones centrales son más fáciles de entender, normalmente se diseñan pri-
mero. Como ejemplo, de la tabla de operación se pueden obtener las siguiente
ecuaciones de entrada de los biestables para las distintas secciones del registro de
la Figura 7.5:
Componentes de memorización 283

Do = S' ¡S'oQo + S' ¡Sr/o + S¡S'r/R + S¡SOQ¡


D; = S'¡S'oQ; + S'¡Sr/; + S¡S'OQH + S¡SOQ;+1' l ~ i ~ 2
D) = S'¡S'oQ) + S'¡Sr/) + S¡S'OQ2 + S¡Sr/L
El registro de desplazamiento con carga en paralelo puede utilizarse para con-
vertir una secuencia de datos serie ·a paralelo o una secuencia de datos paralelo a
serie, con la opción de sacar el primero el bit más significativo (MSB) o el menos
significativo (LSB). Estos registros suelen utilizarse en la conversión de datos del
computador para comunicaciones serie, y para captar datos transmitidos en serie
a fin de tratarlos en un procesador.

7.3. CONTADORES
Un contador es un tipo especial de registro que incorpora un incrementador, que
permite contar de forma ascendente o descendente. En la Figura 7.6 se muestra un
ejemplo de contador ascendente que tiene dos señales de control: una señal E de
habilitación (Enable), que cuando vale l habilita la cuenta; y una señal Clear para
la puesta a cero del contador. El símbolo gráfico de este contador binario ascen-
dente de 4 bits se muestra en la Figura 7.6(a) y su tabla de operación en la Figura

E
Contador
E..
01'_ O
O
O
1
O
O
O
I
O No cambia I O O I
I Cuenta 1 I 1 O

(a) Símbolo gráfico (b) Tabla de operación (e) Tabla de verdad del HA

e. f..rt e,
h e~ , .r-T e, c.

8 ¡8
IIA HA HA HA
Y

l D, Q, - D, Q, ¡- ID
, Q, - D, <1, -
> f> ;-

CI~l"

CIk

Soli(/(;¡
Q, Q, Q, Q.
dt acarreo
(d) Esquema del contador

FIGURA 7.6 Contador binario de 4 bits.


284 Principios de diseño digital

7 .6(b). En la Figura 7 .6(c) puede verse que el incrementador consta de una serie
de semi-sumadores (HA) dispuestos de manera que el HA en la posición de bit ;
tenga sus dos entradas conectadas a la salida del ;-ésimo biestable Q¡ y al acarreo
e¡ del HA en la posición ;-1. Obsérvese que el nuevo valor del biestable D¡ será
1 si Q¡ ó e¡, pero no ambas, son 1. Por el contrario, la salida e¡+l será 1 sólo si Q¡
y e ¡ son ambas 1. La tabla de verdad de un HA se da en la Figura 6.7(c), de la
cual podemos derivar las siguientes expresiones booleanas para D¡ y e¡+l:
D¡ = Q¡ EIl e¡
e¡+l = Q¡e¡

o X No cambia
1 O Cuenta ascendente
1 1 Cuenta descendente
(a) Símbolo gráfico
(b) Tabla de operación

I O O O O O
1 O O 1 O I
1 O 1 O O I
I O I I I O
----1 -----1-- -----------------------
O O O O
I I O 1 I I
1 I 1 O O 1
1 1 I 1 O O
(e) Tabla de verdad del HAS

D
E

cfc8 ~
HAS HAS ~
-l
~d R3 HAS

D, Q, D, Q, D, Q, D. Q.

rl- e, 1> e, e, e,
,
ca

SaUdn
Q, Q, Q, Q.
de acurno

(d) Esquema lógico

FIGURA 7. 7 Contador binario ascendente/descendente de 4 b~s.


Componentes de memorización 285

Mientras la señal E sea 1, este contador realizará una cuenta ascendente módu-
lo 16, sumado l a su contenido por cada flanco de subida del reloj.
Este contador ascendente básico puede también ampliarse como contador
ascendente/descendente sustituyendo el semi-sumador por un semi-sumadorl
restador (HAS), que pueda incrementar o decrementar bajo el control de una señal
de dirección. Por ejemplo, en la Figura 7.7 se muestra un contador ascendente!
descendente que se parece bastante· al contador ascendente de la Figura 7.6,
excepto en que tiene una tercera entrada de control, D. Como indica la tabla de
operación de la Figura 7.7(b), el objetivo de esta entrada adicional es permitir
contar de forma ascendente cuando su valor es O y de manera descendente cuan-
do es 1. La tabla de verdad de un HAS se muestra en la Figura 7.7(c), de la que
es fácil derivar expresiones booleanas para D¡ y C¡+ I:
D¡ = Q¡$ C¡
e¡+1 = D 'Q¡C¡ + DQ '¡C¡

D 1, 1, 1, 1,
E Contador
ascendente/descendente O O X No cambia
Load O 1 O Cuenta ascendente
O 1 1 Cuenta descendente
(a) Símbolo gráfico
1 X X Carga la entrada
(b) Tabla de operación
1, 1, 1, 1,

~
D
I
E
j 1 1 1 I
HAS
¡-
HAS .
¡-
HAS
r- HAS =~
1
I
SeleclOr
O
I
Selector
O I I O
Selector
I O
Selector I
Load
[ r r

- D, Q, - D, Q, ~
D, Q, - D, Q,

-~ 0',
r ~
0',
- 0',
r-
0',

elk
J
Salida Y, Y, Y, Y,
deacar~o
(e) Esquema lógico

FIGURA 7.8 Contador ascendente/descendente de 4 bits con carga en paralelo.


286 Principios de diseño digital

En el esquema lógico de la Figura 7.7(d) puede verse que cada HAS consta de
. una puerta XOR conectada a las entrada de los biestables, así como dos puertas
AND y una OR que se utilizan para propagar el acarreo.
Es importante observar que el contador ascendente/descendente de la Figura
7.7 siempre comienza a contar desde cero. En muchas ocasiones es sin embargo
más conveniente poner inicialmente el contador a un valor diferente para después
contar de forma descendente o ascendente hasta que alcanza el valor O. Para ello
sólo se necesita una puerta NOR que detecte cuándo se alcanza el valor de cuen-
ta O. Para construir un contador con inicialización de este tipo, combinamos un
incrementador/decrementador con un registro con carga en paralelo. Como mues-
tra la Figura 7.8(a), este contador tiene tres señales de control: E, D, Y Load. La
señal E habilita la cuenta en la dirección especificada por la señal D, y la señal
Load cargará una nueva entrada e inhabilitará la cuenta siempre que su valor sea
l. Por otra parte, mientras la señal Load sea O, el contador se comportará exacta-
mente igual que el ascendente/descendente de la Figura 7.7. La tabla de operación
y el esquema lógico de este contador con inicialización aparecen en las Figuras
7.8(b) y (c).

7.4. CONTADOR BCD


El contador con inicialización descrito en la Sección 7.3 puede utilizarse para
construir otros contadores. Una posible aplicación es el diseño de contadores
BCD que cuentan siguiendo la secuencia O, 1, 2, 3, 4, 5, 6, 7, 8, 9, O... Como se
muestra en la Figura 7.9(a), podemos construir un contador BCD detectando
cuándo éste alcanza la cuenta de 9 y cargando O en lugar de lO en el siguiente
ciclo de reloj . La detección se realiza mediante una puerta AND cuya salida sea
1 si el contenido del contador es 1001. La salida de la puerta AND se conecta a la
entrada de carga Load del contador, lo que permite que el contador cargue O allle-
gar el siguiente flanco ascendente de la señal de reloj.
" 10 0 l" '"0000"

"O" '"o" '"o" '"o"

"O" D 1) 12 IJ l o
E Contador D 13 12 I 1 lO
> ascendente/descendente E Contador
Load . Q) Q2 Q I Qo > ascendente/descendente
Load Q) Q2 Q I Qo

(a) Contador BCD ascendente (b) Contador BCD ascendente/descendente

FIGURA 7,9 Contadores BCD.


Componentes de memorización 2117

De forma similar podemos construir contadores BCD ascendentes/descenden-


tes. En la dirección de cuenta ascendente debemos cargar O en el contador cuan-
do alcanza el valor 9, mientras que en la dirección descendente debemos cargar 9
cuando el contador alcanza la cuenta O. Como muestra la Figura 7.9(b), necesita-
mos un selector que decida entre cargar O o 9 cuando el contador debe reiniciali-
zarse, así como una puerta AND-OR que actúe sobre la entrada Load cuando el
contador alcance una cuenta de O o de 9.
De manera similar, podemos construir contadores que comiencen en cualquier
punto y cuenten en casi cualquier secuencia. Obsérvese no obstante que cada salto
en la secuencia de salida requiere una puerta adicional para la detección y una
entrada adicional en el selector para la carga.

7.5. CONTADOR AsíNCRONO


En secciones anteriores hemos descrito diversas variantes de un contador binario,
todas ellas baciendo uso de un incrementador, de un decrementador, o de ambos.
En ocasiones, sin embargo, se puede disminuir el coste del contador construyén-
dolo sin el incrementador o el decrementador. Dicho contador se denomina con-
tador asíncrono, ya que sus biestables no están todos sincronizados por la misma
señal.
La cuenta sin incrementador/decrementador se consigue haciendo que cada
biestable cambie de estado a la mitad de frecuencia que el precedente. En otras
palabras, el biestable que está en la posición i cambiará de estado sólo la 'mitad de
las veces que lo bace el que está en la posición i-I, o dicho de otra manera, el
biestable en la posición i cambiará de estado cuando el de la posición i- I pasa de
1 a O pero no cuando pasa de O a lo
Hecbas estas observaciones generales, podríamos construir un contador asín-
crono conectando la salida complementada del biestable en la posición i-l a la
entrada de reloj del biestable en la posición i, mientras que el resto de las entra-
das de los biestables se conectan de manera que estos cambien de estado por cada
transición de O a 1 en su entrada de reloj. Un biestable T es muy conveniente para
este diseño asíncrono porque el valor 1 en su entrada hará que el biestable cam-
bie su estado con el flanco de subida de la señal de reloj. En la Figura 7.10 se
muestra un contador de 4 bits basado en biestables tipo T. Obsérvese que tiene dos
señales de control, la señal de habilitación E, que babilita la cuenta, y la señal
Clear, que pone a O el contador. El esquema lógico del contador se muestra en la
Figura 7.1 O(b), donde puede verse cómo la salida complementada de cada biesta-
ble se ba conectado a la entrada de reloj del biestable en la posición siguiente más
significativa. Como resultado, la señal de reloj Clk se utiliza sólo para sincronizar
el biestable de la posición menos significativa. El funcionamiento del contador
asíncrono de cuatro bits se ilustra en la Figura 7.1 O( c), que muestra las formas de
onda en las salidas de los distintos biestables. Como puede verse, el biestable de
la posición menos significativa (FFó) cambiará su estado con un retardo ~ tras
cada flancb de subida del reloj (es decir en los instantes lo + A ... , 17 + ~). Sin
288 Principios de diseño digital

embargo, el biestable de la siguiente posición más significativa, FF \' cambiará de


estado sólo cuando el FFo pase de 1 a O (es decir, en los instantes ti + 2.1., t 3 + 2.1.,

E Contador

(a) Símbolo gráfico

'- r , Q, ,
L- r, Q, f-- L- r, Q, 1- '- ro Qo t--
, 1>-
FF,
.-- 1>- FF, ~ 1>-
FF, , FFo
e, e, e, eo ¡-
y y i Y
Clea r

C/k

Q, Q, Q, Qo
(b) Esquema lógico

'O 8
C/k

,
Q,
- 1 4.1.
F
Q,
1
-+' 3h.
1
......
1 1
-+'1 3h.

Q, -+',2h.-
1
, I 1 ,
Q, ~h.~~tt ' I :I ' I :I :I :I
~ 1, ~ 1, 1, 1, 1, t,
(e) Diagrama de tiempos

FIGURA 7.10 Contador ascendente asfncrono de 4 bits.


Componentes de memorización 289

15 + 2D., Y 17 + 2D.). Obsérvese que el retardo se ha incrementado a 2D., ya que la


transición ha tenido que propagarse a través de dos biestables. De forma similar,
el siguiente biestable, FF2' s610 cambiará cuando pasen de 1 a O tanto FFo como
FF¡ (es decir, en los instantes de tiempo 13 + D.3 Y 17 +D.3). Por último, el biesta-
ble más significativo, FF3, cambiará de estado sólo cuando pasen de 1 a O FF2 ,
FF p Y FFo (es decir, en ~ + 4D.).
Del análisis precedente podemos concluir que el retardo de la salida del
i-ésimo biestable respecto del reloj es de iD., y en consecuencia que el contador
asíncrono puede contar a una frecuencia máxima de IInD.. En cambio, la frecuen-
cia máxima de cuenta de un contador síncrono de n bits estará sólo limitada por
la propagación de acarreo en el incrementador. En otras palabras, dado que la pro-
pagación del acarreo (retardo desde la entrada de acarreo a la salida de acarreo) a
través de la serie de HAs es mucho más rápida que la propagación del cambio de
estado (retardo de la salida Q respecto de la entrada de reloj) a través de un núme-
ro igual de biestables, el contador asíncrono descrito seria más lento que uno sín-
crono, incluso sin hacer uso de técnicas de anticipación de acarreo para acelerar
la propagación del mismo.

Enabl~

.-- E Contador
E
Contador

11r~/ea,
asÚlcrono asíncrono
Q, el, Q, Q, elear Ql Q2 Ql Qo
C/k
Glear

fI
\

(a) Contador síncrono con secciones asíncronas de 4 bits

Enable
I
r-- E Contador E
Contador

r
síncrono síncrono
Q, el, Q, Q, Crear Q, Q, Q, Q,
Glear
C/k
e/ear
----.
-\

(b) Contador asíncrono con secciones síncronas de 4 bits

FIGURA 7.11 Contador ascendente de modo mixto, de 8 bits.


290 Principios de diseño digital

...--~a que un contador asíncrono sea más rápido podemos hacerlo parcialmen-
te síncrono. Para ello, un contador grande lo dividiríamos en secciones de n bits
de manera que el funcionamiento interno de cada sección sea asíncrono, mientras
que la propagación entre secciones sea síncrona, o viceversa. Como ejemplo de
esta técnica podemos considerar los contadores de modo mixto de 8 bits mos-
trados en la Figura 7.11. En la Figura 7.1I (a) hemos construido un contador sín-
crono con secciones asíncronas de 4 bits. Obsérvese que en un contador de este
tipo, todas las secciones se activarían por la misma señal de reloj, pero la sección
más significativa estará habilitada sólo cuando la sección menos significativa esté
en su estado 1111. En la Figura 7.11 (b), por el contrario, hemos construido un
contador asíncrono con secciones síncronas de 4 bits. En esta versión del conta-
dor, todos los biestables que forman cada sección están activados por la misma
señal de reloj, pero la sección más significativa utilizará como reloj una señal que
indica cuándo la sección menos significativa está saliendo del estado 1111. En
otras palabras, siempre que la sección menos significativa pase de 1111 a 0000, la
señal de reloj de la sección más significativa efectuará una transición de O a 1,
haciendo que esta sección incremente en uno su cuenta.

7.6. BANCOS DE REGISTROS


En las secciones anteriores se han descrito diferentes tipos de registros y conta-
dores, cada uno de ellos consistente en un número m de biestables y alguna lógi-
ca combinacional adicional en sus entradas. También es posible combinar bi'esta-
bIes formando un array bidimensional que constaría de 2" filas con m biestables
cada una. En esta estructura bidimensional, denominada banco de registros, cada
fila de biestables puede considerarse como un registro. En general, un banco de
registros memorizaría la misma cantidad de información que 2" registros de m bits
cada uno. Pero la ventaja principal de utilizar un banco de registros es que, dada
su regularidad, requiere menos cableado en su diseño final. Además, cada biesta-
ble de un banco de registros puede implementarse con muchos menos transisto-
res, ya que se accede en cada instante sólo a un registro en cada columna.
En un nivel de más grado de detalle, un banco de registros consiste en un array
bidimensional de celdas de banco de registros (RFC, Register-File Cells), deco-
dificadores de lectura y de escritura, y una lógica de adaptación de las salidas.
Como se muestra en la Figura 7.l2(a), una RFC típica puede representarse
mediante un biestable D y dos puertas. Obsérvese que, además de la señal de reloj,
la celda tiene tres entradas y una salida: señales de Selección de escritura, de
Selección de lectura , de Entrada, y de Salida. En la celda, el biestable D memo-
rizaría el valor de la señal Entrada siempre que Selección de escritura valga 1; y
cuando la señal Selección de lectura sea 1, el biestable pasará a la salida, a través
de un adaptador triestado, el valor que almacena.
En la Figura 7 .12(b) presentamos el símbolo gráfico de un banco de registros
de 2" x m, y en la Figura 7 .12(c), como ejemplo, la estructura de un banco de
registros de 4 x 4, en el que por claridad se ha omitido la señal de reloj. Como
Componentes de memorización 291

puede verse en estas figuras, un banco de registros de 2" x m tiene m entradas,


Im_I, ...,10' m salidas, 0m_I'''''Oo' y 2" ftlas de biestables. El decodificador de escri-
tura sirve para seleccionar una de las filas y memorizar los valores de entrada coin-
cidiendo con el flanco de subida de la señal de reloj. Las entradas al decodificador
de escritura son n líneas de direcciones, WA,,_I' '''' WA o, y la señal de habilitación de
escritura WE. Cuando WE es 0, los valores de entrada no se memorizan.

Selección de escrilllro m

"
--+--+ RF "
Entrada -++-,-....1'-/ D Q Salida WA

Clk -r.-====-::...._-!> WE _ ¡...-- RE

C~ ----i>~_,-_~
Selección de leclII,,, m

o
(a) Celda del fichero de registros (b) Símbolo gráfico

1,

Decodificador
de lectura
de2a4

AA ,

AA o
WA ,

WA o
RE

WE

Decodificador
de escritura
de 2 a4

o) O: o, 0 0

(e) Esquema lógico

FIGURA 7.12 Banco de registros con un puerto de escritura y uno de lectura.


292 Principios de diseño digital

De forma similar al decodificador de escritura, el de lectura seleccionará la


fila cuyos valores almacenados aparecerán en las salidas del banco de registros.
El decodificador de lectura tiene n líneas de dirección de lectura, RA n_ p ··· , RAo, y
la señal de habilitación de lectura RE. Cuando RE es 1, después de un pequeño
retardo, los valores memorizados en la fila seleccionada aparecerán en las salidas.
Por otra parte, cuando RE es 0, todas las señales de salida tendrán un valor de alta
impedancia.

m
Selección de escritura

" RAA
WA "
---+--+ RF
Entrada -!.t!~::=~) o." REA
WE _ 2'- m " RAS
Qul8
elk > REB

m
Selección Selección
de lectura de lectura
(puerto A ) (puerto 8 ) A B

(a) Celda del fichero de registros (b) Símbolo gráfico

1, 1,

Decodifi- Decodifi-
,,",oc ,""',
de lectura de lectura
de 2 a4 de2 a 4
O
O

2
2
3

Decodifi-
cador
de escritura
de2a4 3
3

(e) Esquema lógico

FIGURA 7.13 Banco de registros con un puerto de escritura y dos de lectura.


Componentes de memorización 293

La limitación principal de un banco de registros es que sólo permite un acce-


so limitado a los registros que lo forman, es decir, en un instante dado, sólo se
pueden escribir datos en uno de los registros (una fila) y leer datos de sólo un
registro (una fila). Esta situación puede remediarse en parte construyendo ban-
cos de registros con más de un puerto de lectura o de escritura. Desafortu-
nadamente, el costo del registro se incrementará en proporción a su número de
puertos. Por esta razón, los bancos de registros más usuales tienen uno o dos
puertos de escritura y dos de lectura. La justificación principal de los dos puer-
tos de lectura es que la mayoría de las operaciones aritméticas y lógicas requie-
ren del uso de dos operadores al mismo tiempo. Con dos puertos de lectura es
posible captar estos dos operandos y memorizar el resultado en el mismo banco
de registros en un ciclo de reloj . Por otra parte, la justificación del uso de dos
puertos de escritura radica en la velocidad a la que se utilizan operandos: en cada ·
ciclo hacemos uso de dos operandos para producir un resultado. En consecuen-
cia, si se va a realizar una operación en cada ciclo de reloj, debemos poder dar
un nuevo operando al banco de registros y a la vez memorizar el resultado de la
operación.
En la Figura 7.13 se muestra un ejemplo de banco de registros con un puerto
de escritura y dos de lectura. Como se observa en la Figura 7.13(a), la RFC ha
sido modificada para albergar los dos puertos de lectura, y el símbolo gráfico de
la Figura 7 .13(b) refleja el puerto añadido. La Figura 7 .13(c) muestra la estructu-
ra completa del banco de registros de 4 x 4. Obsérvese que este diagrama es simi-
lar a la estructura del banco de registros de la Figura 7 .12(c), excepto que esta ver-
sión tiene un decodificador de lectura más, que añade a su vez un cable más a cada
fila y cada columna para la lectura del dato a través del segundo puerto.
Los bancos de registros son por lo general muy rápidos porque cada celda
incluye un latch o biestable completos. Sin embargo son caros porque cada latch
o biestable requiere media docena de transistores en su diseño. Por este motivo,
los ficheros de registros se emplean normalmente para cantidades limitadas de
memoria temporal en aplicaciones de alta velocidad y en microprocesadores.

7.7. MEMORIAS DE ACCESO ALEATORIO


En la Sección 7.6 hemos descrito los bancos de registros, que son de tamaño redu-
cido, rápidos, y apropiados para la memorización temporal durante los cálculos.
Por otra parte, las memorias de acceso aleatorio (RAM: Random Access
Memories) , son grandes y lentas, pero muy apropiadas para memorización a largo
plazo de programas y de los datos utilizados en los cálculos. Al igual que los
ficheros de registros, las memorias están organizadas como arrays de 2" mas con
m bits almacenados en cada fila. Por lo general, n suele estar comprendido entre
16 y 32, mientras que m es normalmente 1,4,8, 16, o 32. Una memoria típica se
ilustra en la Figura 7.14(a). Al tener 2" filas, se necesitan n líneas de direcciones
para identificar cada fila de forma unívoca. Además de las n líneas de direcciones,
se necesita también una línea de selección de chip (eS) que se emplea cuando se
294 Principios de diseño digital

quieren construir memorias grandes multi-chip. Cuando es es I la memoria del


chip opera normalmente.

Binario Decimal

0 ... 000 O 011...0100


0 ... 00 1 1 0 11.. .0100
0 ... 010 2 101. .. 1100
0 ... 0 11 3 101. ..0001
0 .. . 100 4 011. .. 0 101
0 . .. 101 5 010 ... 010 1
0 .. . 110 6 110 .. .0011
0 ... 111 7 101...0001

1...110 2" - 2
1.. .111 2" - 1

.. m bits
..
(a) Direcciones de memoria y contenidos

Im_I" ' / l /o

- A nol - An _1

- A, RAM 2"x m - A, RAM 2/1xm


- A. - A.

- es - es
- RWS - RWS

O". _ 1 ••• o, o. llOm . ¡ . JIO. 1100


...

(b) Símbolo gráfico


! !
FIGURA 7.14 Memoria de acceso aleatorio.

Sin embargo, cuando es es Ose inhabilita el funcionamiento de la memoria del


chip. Obsérvese también que cada chip de memoria tiene una línea de control,
selección de lectura/escritura (RWS), que selecciona el modo de operación de la
memoria. Cuando RWS es O, la memoria leerá el contenido de la posición indica-
Componentes de memorización 29S

da por las líneas de direcciones y lo hará disponible en su puerto de salida. Por otro
lado, cuando RWS sea 1, la memoria escribirá el contenido presente en su puerto
de entrada en la posición de memoria indicada por las líneas de direcciones.
Cada chip de memoria también dispondrá de m puertos de entrada y m de sali-
da. Para valores pequeños de m (1 o 4), el chip de memoria puede tener puertos
de entrada y de salida separados. No obstante, normalmente los puertos de entra-
da y de salida están combinados para reducir el número de patillas del encapsula-
do del chip de memoria. Por lo general, el número de patillas determina el tama-
ño del encapsulado y por lo tanto la cantidad de área de trujeta de circuito impre-
so ocupada por los chips de memoria. El símbolo gráfico para ambos tipos de
encapsulados se muestra en la Figura 7 .l4(b).
En un nivel de mayor grado de detalle, una RAM está organizada como un
array de celdas de memoria junto con un decodificador de direcciones y adapta-
dores de entrada/salida (l/O). Como se muestra en la Figura 7.15(a), una celda de
memoria (MC, Memory Cel/) puede representarse simbólicamente mediante un
latch D sincronizado, una puerta ANO, y un adaptador de salida. Cuando la señal
Selección de fila es 1, el bit memorizado en el latch aparece en la salida. Si la
señal Habilitación de escritura es también 1, el valor de la Entrada se memori-
zaría en ellatch. La señal Habilitación de escritura actúa como señal de reloj del
latch.
Aunque la MC se ha representado mediante un latch y dos puertas, como es
de imaginar en realidad se implementa con bastantes menos transistores.
Dependiendo de la forma de implementación de la MC las memorias RAM se cla-
sifican en estáticas o dinámicas. En el caso de la RAM estática (SRAM, Static
RAM), la celda de memoria se construye con entre cuatro y seis transistores,
empleando dos inversores interconectados formando un latch, e implementando
con un transistor la puerta ANO de entrada y con otro el adaptador de salida. Este
tipo de celda de memoria SRAM retendrá su contenido indefinidamente en tanto
no se reescriba y se mantenga conectada la alimentación. Sin embargo, en el caso
de la RAM dinámica (DRAM, Dynamic RAM), las celdas de memoria se imple-
mentan con sólo un transistor. El inconveniente de la DRAM es que el contenido
de la celda se pierde con cada operación de lectura, tras la cual habrá que reescri-
birlo. Además ocurre que, debido a imperfecciones de fabricación, el contenido
de la celda se pierde transcurrido un tiempo. Para contrarrestar este problema cada
posición de memoria debe accederse con cierta frecuencia, o alternativamente, el
contenido debe reescribirse o refrescarse periódicamente. Durante el refresco
todas las demás operaciones de lectura o escritura deben suspenderse, lo cual
puede resultar molesto. A pesar de ello, la mayor densidad y coste reducido de las
DRAM las hace muy populares para el diseño de productos electrónicos. Las
SRAM, por otro lado, aunque más costosas, son más rápidas y por lo tanto apro-
piadas para tiradas más pequeñas y en los casos en que se requiera un acceso a
memoria más rápido.
Tanto las SRAM como las DRAM son memorias volátiles, ya que su conte-
nido se pierde al desconectar la fuente de alimentación. Por este motivo equipos
tales como teléfonos y contestadores automáticos incluyen baterías que evitan la
296 Principios de diseño digital

pérdida de datos en memoria por un corte temporal del suministro eléctrico. Por
el contrario, las ROM y las PROM son memorias no volátiles ya que preservan
su contenido aunque se corte de la alimentación. No obstante el contenido de estas
memorias no se puede leer hasta que se restablezca la alimentación.

Selección de jila

Entrada J¡~~5~D~~Q~~~~:~1- Salida

e
Me

Habilitación de escritura
(a) Celda de memoria

A, .....-~

3 Hr;--'r-~-t--.---;-r--.---r;--,
Decodifi-
cadorde
direcciones
de2a4

RIVS'h-=J}:=-:::::J L~
es

lO, 10, lO , 10,


(b) Esquema de la memoria

FIGURA 7.15 Estructura de una RAM.


Componentes de memorización 297

En la Figura 7.l5(b) se muestra un ejemplo de memoria de 4 x 4 que consta


de 16 Me. En cada acceso a memoria, el decodificador de direcciones decodifica
la dirección y selecciona una de las filas. En ese momento, si RWS y es son
ambas 1, se escribirá el nuevo contenido en todas las celdas de la fila selecciona-
da. Aunque el contenido de las celdas de dicba fila estén disponibles en las líne-
as de salida, los adaptadores de salida estarán inhabilitados para permitir que se
escriba el nuevo dato de entrada . .sin embargo, si RWS = O Y es = 1, el dato de la
fila seleccionada pasará a los terminales 10 de entrada/salida.
La organización de la RAM impone restricciones de temporización de las
entradas y salidas para las operaciones de lectura y escritura. Por ejemplo, ya que
el camino crítico desde la entrada hasta la salida pasa a través del decodificador
de direcciones, las líneas de direcciones deben tener valores estables antes que
cualquier otra señal. Esto significa que durante el ciclo de lectura mostrado en la
Figura 7.16(a), bs líneas de direcciones se fijarán en t o' y con posterioridad, en tI'
actuará la señal es. El tiempo de retardo t2 - to se denomina tiempo de acceso a
memoria, ya que se tarda t2 - to ns en obtener el dato de la memoria. El tiempo
de retardo t 2 - tI se .denomina tiempo de habilitación de la salida, ya que repre-
senta el retardo necesario para habilitar los adaptadores de salida. Obsérvese que
después de que las líneas de direcciones hayan cambiado en t 3, el dato válido
seguirá disponible hasta t5' Este intervalo de tiempo t 5 - t 3 se denomina tiempo
de retención de la salida. Por último, la diferencia de tiempo t5 - t4 recibe el
nombre de tiempo de inhabilitación de la salida, ya que representa el retardo
necesario para inhabilitar el dato de salida. Ya que el camino de retardo desde las
líneas de direcciones hasta las salidas es más largo que el camino desde es hasta
la salida, el tiempo de acceso determina la disponibilidad del dato cuando la direc-
ción y es se fijan al mismo tiempo. Por otra parte, si la dirección y es se desac-
tivan al mismo tiempo, el tiempo de inhabilitación de la salida determina el fm de
la disponibilidad del dato.
En la Figura 7 .16(b)' pueden verse otras restricciones de temporización que
deben también satisfacerse durante una operación de escritura en la RAM. En este
dis<eño hemos supuesto que es y RWS se han activado al mismo tiempo, tI' Ya que
el retardo desde las líneas de direcciones hasta la salida es mayor que el retardo
desde es o RWS, las líneas de direcciones deben fijarse algún tiempo antes, en too
El retardo tI - t o se denomina tiempo de establecimiento de la dirección. Ya que
cada MC es un latch D sincronizado, en donde es está actuando como señal de
reloj , el valor del dato en el flanco de bajada de es (en t3 ) será memorizado en el
latch. Sin embargo, como sabemos de discusiones anteriores sobre el funciona-
miento de un latch, para un funcionamiento correcto, el dato de entrada debe estar
estable algún tiempo antes y después del flanco de bajada del reloj. Como puede
verse en la Figura 7 .16(b), estos tiempos se denominan tiempo de estableci-
miento del dato y tiempo de retención del dato, y están definidos por los inter-
valos de tiempo t 3 - t 2 Y t 4 - t 3 respectivamente.
También sabemos, del Capítulo 6, que la anchura del pulso de reloj debe ser
de una cierta duración para que se memorice el dato correctamente. La misma res-
tricción se impone a las señales es y RWS, que deben activarse durante un tiem-
298 Principios de diseño digital

po igual O mayor que la anchura del pulso de escritura, definida por el interva-
lo t3 - ti' Además, la dirección debe pennanecer estable por algún tiempo después
del flanco de bajada de es o RWS, Este tiempo, denominado tiempo de retención
de la dirección, está definido por el intervalo t5 - t3 ,
RWS ----------------------~----------------------

es

Dirección V
_-J""'------'-_ _- - "
Dirección válida X
'' - - - - - 7 - - - -

Dato
( ,
Dato válido
,
I
)t - - - -
TIempodc , ~_ _ _~_ _ _~~__~ ,
habilitaci61l1 I Tiempo da
I de la salida ' linhabilitación
' .): 1 I de la salida
, I I « J I
Tiempo ~c acceso I
I Tiempo de rete nción I
de la salida I
lE
,
I " I • I ): I

t, t, t, t,

(a) Temporización de un ciclo de lectura

RWS

es

Dirección ~
X'---T-------.---~I':\_ Dirección válida
-------J I

Dato ----.. . . ---'----4.(' - - - - - - - --1--;;;'=-'.)>:--+---


I , ,
Dato válido :
I
I Tiempo da I Tiempo de I
e!tablccimierlto Tiempo de : retención He :
de la duecci.6n \ ~~~~'J::>~'\~<;;) 1 ,~ ~......~ ,
\ t , .' ' 4 ): .. ! ):

I I I I TIempodc l I
I I . I retención I
AnchUlfl del pulso de escntura I del datQ I I
' 4 ): 1:1( .., 1
I I

t, t, t,

(b) Temporización de un ciclo de escritura

FIGURA 7.16 Temporización de una RAM,

Como se ha mencionado con anterioridad, los componentes de memoria se


fabrican siempre con tamaños de 2" x m, en donde n y m pueden variar en un
Componentes de memorización 299

amplio rango de valores. En general, no obstante, el producto 2" x m será cons-


tante para una tecnología dada y un año de fabricación concreto. Debido a esta cir-
cunstancia, cuando se necesiten memorias mas grandes deben construirse a partir
de chips de memorias más pequeñas disponibles en ese momerito. En lo que queda
de esta sección describiremos como construir memorias para palabras más largas
y memorias con mayor capacidad, mostrando cómo ampliar m y n más allá de la
capacidad ofrecida por un solo chip.
Para obtener mayor longitud en bits (palabras más largas) podemos conectar
en paralelo varios chips de memoria. Este proceso se ilustra en la Figura 7.17, en
donde se obtiene una memoria RAM de 16K x 32 conectando en paralelo cuatro
RAM de 16K x 8: M3, M 2 , Mi' Y Mo- En este caso, las líneas de direcciones, A,
así como las señales es y RWS, se conectan a todos los chips de memoria.
Obsérvese cómo los buses de datos de entrada y de salida están partidos en cua-
tro bytes, desde e) menos al más significativo, y que cada byte conecta a su corres-
pondiente memoria. Con este procedimiento podríamos construir una memoria
para datos de cualquier longitud en bits.

Bus de entrada

32

14
8 H 8 H
A

I I I I
'- A - A L- A '-- A

- es M, r- es M, - es M, - es M.

RWS r RWS RWS RWS


o o o o
es
RWS
8 8 8 8

32

Bus de salida

FIGURA 7. 17 Diseño de una RAM de 16K x 32 con RAM de 16K x 8.

Para obtener una memoria más grande necesitaríamos sin embargo conectar
varios chips de memoria en serie, de tal manera que cada chip almacene una parte
de las palabras de memoria. Este procedimiento se ilustra en la Figura 7.18, en
donde se ha construido una RAM de 64K x 8 conectando en serie cuatro RAMs
de 16K x 8, Mo' Mi' M2 , Y M3' En este caso todas las RAM comparten los mis-
mos buses de entrada y salida, así como la señal de control común RWS. Durante
el acceso a memoria, la señal de selección de chip es se utiliza para distinguir qué
300 Principios de diseño digital

A RWS Bus de entrada

1-2
- 14

Decodificador
de 2 a4
3 2 1 O
I
1
A

es M,

RWS
o
I

I
1
A

es M,

RWS
o
I
I
1
A

es M,

RWS
o
I
I
1
A

es M,

RWS
o
I

Bus de salida

FIGURA 7.18 Diseño de una RAM de 64K x 8 con RAM de 16K x 8.


Componentes de memorización 301

chip de memoria es el que contiene el dato en cuestión. Supongamos que Mo debe


contener los datos con direcciones O a 2 14 _1, M¡ los de direcciones 2 14 a 2 15_1 , en
~ desde 2 15 a la 2 15+2 14_1, y en M:, desde 2 15+2 14 hasta 2 16-1. El bus de direc-
ciones de 16 bits se divide en dos partes, de manera que los dos bits más signifi-
cativos se emplean para seleccionar el chip apropiado y los 14 bits menos signi-
ficativos se utilizan para seleccionar una posición concreta en ese chip de memo-

45

¡
Cabecera 34

Cabecera- I 23

Cabecera - 2 vacía

Cabecera - 3 vacía

(a) Contenido
de la pila
antes de insertar 45

45

34

23

vacía

(b) Contenido
de la pila
tras insertar 45

45

t
34

23

vacía

vacía

(e) Contenido
de la pila despu6s
de extraer 45

FIGURA 7.19 Operaciones con una pila de inserción/extracción.


302 Principios de diseño digital

ria. Para ello, los 14 bits menos significativos del bus de direcciones se han conec-
tado a las entradas de direcciones de todos los chips de memoria, y los dos bits
más significativos se han conectado a un decodificador de 2 a 4, que determina
cuál de los cuatro chips se seleccionará para la correspondiente operación de lec-
tura o escritura. Esta selección se implementa, como indica la Figura 7.18, conec-
tando cada salida del decodificador a la entrada CS del chip apropiado.

7.8. PILAS DE INSERCiÓN/EXTRACCiÓN


Las pilas de inserción/extracción son de uso frecuente en diseños software y hard-
ware. Por defInición, una pila de inserción/extracción es un componente de
memoria con un acceso limitado. A diferencia de la RAM, en la que cualquier
dato almacenado puede ser accedido en cualquier momento, a los datos memori-
zados en una pila cte inserción/extracción sólo se puede acceder a través de una
posición concreta: la cabecera de la pila. En otras palabras, cuando se inserta un
dato en la pila, éste se memoriza en la cabecera y todos los demás datos se des-
plazan una posición hacia el interior de la pila (inserción). Por el contrario, cuan-
do se extrae un dato de la pila, es eliminado de la cabecera y todos los demás dato
se trasladan una posición hacia arriba (extracción). En el ejemplo de pila de inser-
ción/extracción de 4 palabras mostrado en la Figura 7.19, la pila contiene inicial-
mente dos números: 34 en la posición Cabecera y 23 en la posición Cabecera -
1. En la Figura 7 .19(b) puede verse que la inserción en la pila del número 45
requiere que los números 34 y 23 se desplacen hacia abajo, a las posiciones
Cabecera - 1 Y Cabecera - 2. Por otra parte, como muestra la Figura 7.19(c), al
extraer el 45 de la cabecera de la pila, el 34 y el 23 son de nuevo desplazados hacia
arriba para volver a ocupar las posiciones Cabecera y Cabecera - l . Por supues-
to, en este caso concreto, no podemos insertar más de cuatro números en la pila
sin llenarla. La inserción de cada número adicional provoca la pérdida del situa-
do en la base de la pila.
Cuando se diseña una pila de inserción/extracción, el punto más importante a
tener en cuenta es que los datos almacenados se desplazan en una posición des-
cendente o ascendente en las operaciones de inserción y extracción, respectiva-
mente. Esta observación nos lleva a utilizar registros de desplazamiento para su
implementación, así como un contador ascendente/descendente para detectar
cuándo está llena o vacía la pila. Estos componentes se emplean en el diseño de
la pila de 4 palabras de m bits que se muestra en la Figura 7.20. Observe que esta
pila tiene m líneas de entrada INi y mlíneas de salida OUTi , en donde O:s; i:S; m- l.
También dispone de tres señales de control: Inserción/extracción (Pushlpop),
Habilitación (Enable), y puesta a cero (Reset) .
La señal Pushlpop controla la inserción y extracción de manera que, cuando
es 0, se inserta un dato en la pila, y cuando es 1 se elimina el dato de la cabecera
de la pila. La señal Enable habilita el funcionamiento de la pila, y la señal Resel
anula, cuando toma el valor 0, el contenido de los registros de desplazamiento y
del contador. Las operaciones síncronas de la pila se indican en la tabla de opera-
Componentes de memorización 303

ción de la Figura 7.20(a). Observe que la pila tiene dos señales de salida, Vacfa y
Llena, que indican el estado de la pila de la siguiente manera: Cuando Vacía toma
el valor 1 indica que la pila está vacía; por otro lado, cuando Llena es 1, la pila
está llena.
En la Figura 7.20(d) puede verse que la implementación de la pila incluye un
registro de desplazamiento con carga en paralelo (RDconCP) por cada pareja
entrada/salida (en total la pila contiene m registros de desplazamiento). Estos
registros desplazarán a la derecha cuando se pida una operación de inserción y a
la izquierda cuando sea necesaria una de extracción. Cada nuevo dato se inserta
en la pila a través de la entrada I L del registro de desplazamiento, siendo memo-
rizado en la salida Q3' que representa la cabecera de la pila. Ya que el contador
contiene el número de entradas a la pila, por cada flanco de subida del reloj, como
sabemos, o bien el registro desplazará a la derecha con la cuenta ascendente del
contador (si Push/pop = O Y Enable = 1), o desplazará a la izquierda con la cuen-
ta descendente del contador (si Push/pop = l Y Enable = 1).
Los valores de las señ[Link] de control para los registros de desplazamiento y el
contador pueden derivarse de la tabla de control de la Figura 7.20(b). De esta tabla
podemos también deducir las siguientes ecuaciones booleanas para las distintas
señales de control:
s, = Enable
So = (Push/pop) ' Enable
D = (Push/pop)Enable
E = Enable
La implementación de estas ecuaciones constituye la lógica de control de la
pila de inserción/extracción.
Según la tabla de salida de la Figura 7.20(c), la lógica de salida decodificará
los estados 000 y 100 del contador. La señal Vacía se pondrá l cuando el conte-
nido del contador sea O, y será O en cualquier otro instante. Por otra parte, cuan-
do el contenido del contador sea 4, el valor de la señal Llena será 1, siendo O el
resto del tiempo. Por tanto se pueden deducir las siguientes ecuaciones booleanas
para la lógica de salida:
Vacía = Q2'Q,'QO'
Llena = Q2Q , 'Qo'
La principal desventaja de la implementación con registros de desplazamiento es
el número elevado de registros caros que se necesitan cuando se requiere una pila
grande. Por esta razón, las pilas de inserción/extracción grandes se implementan
normalmente con RAM. Además, ya que las RAM no son capaces de desplazar
su contenido, las operaciones de inserción y extracción en estas pilas deben imple-
mentarse de una manera ligeramente diferente: cambiando la posición de la cabe-
cera de la pila. En otras palabras, al insertar datos en dicha pila, la dirección de la
cabecera se incrementará por cada inserción, y, por el contrario, se decrementará
en cada extracción. Considérese, por ejemplo, una pila que está vacía: La cabece-
ra está en la dirección O. Entonces, a medida que se van escribiendo datos en la
304 Principios de diseño digital

x O No cambia
O 1 Inserción
1 1 Extmcción

(a) Tabla de operación

X
O
O
1
O
1
O
1
X
O
O
1
O
O
O
O
O
1
O
1
O
1
O
O
-
O
O
O
O 1 1 O O
1 1 O 1 1 1 O O O 1

(h) Tabla de control (e) Tabla de salida

m
"O"
I 'í
r< Reset 1, 1,
S, RDconCP
f-- S, Q, Q, Q, Q,

/N.. _ l
I I
. "O"
OUT,

1 : 'í
1--< Reset 1, 1,
s, RDconCP
f-- s, Q, Q, Q, Q,

Pushlpop ?-J I I
FU 1--< Reset Contador
D
E'lable E ascendente/descendente
f-- Set Q, Q, Q, Q,
Lógica de control
_1 _1
1 I
): ¡.. Vacfa

Reset
Lógica
de salida 1 ... ) ¡.. U ena
(d) Esquema de la pila

FIGURA 7.20 Pila de inserción/extracción de 4 palabras.


Componentes de memorización JOS

cabecera de la pila, la dirección de dicha cabecera se incrementa con cada opera-


ción de inserción, de manera que la cabecera de la pila es siempre una posición
vacía en la que se escribirá el nuevo dato en respuesta a la siguiente operación de
inserción solicitada. Por otra parte, cuando se solicite una operación de extrac-
ción, se leerá el dato de la posición justo debajo de la cabecera, cuya dirección es
uno menos que la de la cabecera. Con esta forma de proceder, sabemos que, para
una RAM de 2" palabras, la pila estará vacía cuando la cabecera esté en la posi-
ción O, y llena cuando esté en la posición 2"-1. Obsérvese que la posición 2"_1
nunca se usa para almacenar datos, sino sólo para determinar si la pila está llena.
A pesar de que estamos con ello sacrificando una de las 2" palabras de la RAM,
se simplifica con ello la lógica de salida.
En la Figura 7.21 se muestra este tipo de implementación de la pila, con una
memoria RAM de I K Y dos contadores que apuntan a la posición de la cabecera
y a la inmediatamente inferior. Obsérvese que las señales de entrada y de salida
y las operaciones de la ¡íil"it-son las mismas que en la Figura 7.20, Y que, por con-
veniencia, se ha reproducido en la Figura 7.2l(b) la tabla de operación de la
Figura 7.20(a). Como puede verse, esta pila tiene dos contadores de 10 bits, un
selector de 10 bits, una RAM de lK, una lógica de control y otra lógica de sali-
da. Los dos contadores, denominados Cabecera y Cabecera-l, contienen res-
pectivamente la dirección de la cabecera (que representa la posición más baja sin
utilizar) y de la posición inmediatamente debajo de la cabecera (que representa
el dato insertado más recientemente en la pila). Como es de esperar, los conteni-
dos de los contadores Cabecera y Cabecera-I difieren en 1, ambos se incre-
mentarán durante una operación de inserción, y se decrementarán en una opera-
ción de extracción. Cuando se ordena una operación de inserción, se selecciona-
rá el contenido del contador Cabecera como dirección de la RAM, mientras que
para una operación de extracción será seleccionado como dirección el contenido
de Cabecera-1.
A partir de la descripción anterior hemos construido la tabla de control mos-
trada en la Figura 7.2l(c), que especifica los valores de todas las señales de con-
trol de los contadores, del selector, y de la RAM, para las operaciones de inser-
ción y de extracción. De esta tabla podemos deducir las siguientes ecuaciones
para la lógica de control:
E = CS = Enable
S = RWS = (Push/Pop)'Enable
D = (Push/Pop)Enable
La lógica de salida consta de dos puertas que indican si la pila esta vacía
o llena. Ya que la pila está vacía cuando es cero el contenido del contador
Cabecera, se ha empleado una puerta NOR de 10 entradas conectadas a la
salida de dicho contador para detectar el estado de pila vacía. De forma simi-
lar, decimos que la pila está llena cuando el contenido del contador Cabecera
es todo unos, lo que se detecta con una puerta AND de 10 entradas cuando su
salida se hace 1. En la Figura 7.21 (d) se muestra el esquema completo de la
pila.
306 Principios de diseño digital

o dato
1 dala I -+-{Cabecera 1I
2 vacla I +-f Cabecera I
x O No cambia
O 1 Inserción
1021 vado 1 I Extracción
1022 vada
1023 ~'acía (b) Tabla de operación

(a) Diseño simbólico

,....-
..
l .~ COlC1'!rlII6 ::re MFSll8
DEL [Link] DE LA:=" CONTADOR
l'USI'iPá> ENNJLE S es RWS D E

X O X O O X O
0- I 1 1 1 O 1
I 1 O 1 O 1 1
(e) Tabla de control

D L
'-- E
D

:i
f-<
-
E
Reut
>
Cabecera
1- ->S..
Cabecera - 1

Rese'
I
1 I
1 1
S Selector O I
I p..;-
Puslllpop
E- I

4 1 A
RAM de IK
Enable
es
RWS
Lógica
de control
! Bus de liD

Lógica
de salida tg .
Vada

U ella

(d) Esquema de la pila

FIGURA 7.21 Pila de inserción/extracción implementada con una RAM de 1K.

7.9. COLAS PRIMERO EN ENTRAR, PRIMERO EN SALIR


Las colas primero en entrar, pr imer o en salir (FIFO, First-In-First-Out) , se
emplean con frecuencia para «suavizar ráfagas» en las peticiones de servicio.
Considérese por ejemplo la gente que hace cola para sacar entradas de cine, para
Componentes de memorización :wn
entrar en un autobús, o para .disfrutar de un viaje en un parque de atracciones, que
debe esperar en fila hasta que les llegue el tumo para recibir un servicio.
Situaciones similares pueden surgir con diferentes procesadores, ASIC, o cuales-
quiera elementos que intercambien datos entre si, en el sentido de que cuando la
producción de datos exceda momentáneamente su consumo, debemos intercalar
una cola FIFO entre el productor de datos y el consumidor de los mismos. En tales

45

!
vacía
Cabecera

Cabecera- 1 vacía

Cabecera- 2 34
Cabecera- 3 23

(a) Contenido de la cola


antes de memorizar
eloúmero45

vacía

45

34

23

(b) Contenido de la cola


tras memorizar 45

vacía

vacfa

45

34

23
(e) Contenido de la cola
después de leer 23

FIGURA 7.22 Funcionamiento de una cola FIFO.


308 Principios de diseño digital

casos, por supuesto, la velocidad de producción no puede exceder indefinida-


mente a la de consumo, ya que se requeriría una cola infinita. Por el contrario,
ambas velocidades deben ser en media iguales. Sin embargo, ocasionalmente apa-
recerán ráfagas de producción y de consumo, y el tamaño de la cola determinará
la longitud de ráfaga que se puede tolerar.
El objetivo de una cola FIFO es memorizar los datos en exceso, que serán
eventualmente leídos de la cola en el mismo orden en el que fueron escritos. Así
pues el primer dato memorizado es leído el primero, y así sucesivamente, como
ilustra la Figura 7.22. En la Figura 7.22(a) se muestra el contenido de la cola tras
introducir los números 23 y 34 pero antes de que llegue e145. En la Figura 7.22(b)
puede verse el contenido de la cola después de introducir el número 45. Obsérvese
que cuando se lee de la cola, el número 23 sale y es descartado, haciendo que el
contenido de la cola sea desplazado en una posición hacia abajo. La Figura
7.22(c) muestva
..../
el contenido
, de la cola tras el desplazamiento .
En general, una cola tiene m líneas de entrada IN.,I y m líneas de salida OUT,I
con O $; i $; m-l. Dispone también de tres señales de control: Lectura/escritura,
habilitación (Enable), y puesta a cero (Reset) . Cuando la señal Lectura/escritura
es O, la cola dará como salida el dato que ha estado memorizado por más tiempo,
tomándolo del principio de la cola. En consecuencia, cuando la señal Lectura/
escritura sea 1, se añadirá otro dato al [mal de la cola.
Las FIFO normalmente también disponen de dos salidas de control que se
emplean para controlar los circuitos productor y consumidor. Por ejemplo, cuando
la cola esté llena, la señal Llena tomará el valor 1, avisando al productor que puede
perderse cualquier dato adicional que envíe. Cuando la cola está vacía, ia ' señal
Vacía se hace 1, avisando al consumidor que no han llegado aún nuevos datos.
Ya que la cola preserva el orden de llegada de los datos, podemos construir la
cola utilizando registros de desplazamiento junto con un contador que contabili-
ce el número de datos que contiene. Esta implementación de la cola se muestra en
la Figura 7.23, y su tabla de operación en la Figura 7.23(a). Cuando se introduce
un dato en la cola, los registros de desplazamiento desplazan su contenido a la
derecha y se incrementa el contador. Por otra parte, cuando se lee un dato, éste se
toma del principio de la cola mediante el selector, y el contador se decrementa.
Obsérvese que el dato no se descarta en ese instante, sino que, en su lugar, se inva-
lida al decrementar el contador. En la Figura 7.23(b) hemos trasladado la tabla de
operación de la Figura 7.23(a) a una tabla de control, que muestra los valores de
las distintas señales de control de los elementos de la cola. En una operación de
lectura, el contenido del registro de desplazamiento no cambia y el contador dis-
minuye en 1 su contenido. En una escritura, por el contrario, el registro desplaza
en una posición a la derecha y en contador incrementa en I su contenido. El con-
tador también controla la selección del dato apropiado durante la operación de
lectura. Como regla, el contador se pondrá a 1111 durante la inicialización, de
manera que su contenido sea cero cuando se introduzca el primer dato en la cola.
Este sesgo negativo de 1 en la cuenta es necesario para un control adecuado del
selector; que requiere uno de los valores 00, 01, 10 o 11 para seleccionar una de
las salidas del desplazador.
Componentes de memorización 309

Las ecuaciones booleanas de las señales de control, deducidas de la tabla de


control, son las siguientes:
So = SI = (Lectura/Escritura)Enable
D = (Lectura/Escritura) 'Enable
E = Enable

x O No cambia x O O O X O
O 1 Lectura O 1 O O 1 1
1 1 Escritura 1 1 1 1 O 1

(a) Tabla de operación (h) Tabla de control


)
IN.

,......, I
Resel 1, 1,
o s, RDconCP
L s. Q, Q, Q, Q(/
o
I I
• o
o
o
I
N

- .\j

OUT.
~
o l....-- M

,
úc/uro/escritura
,LJ
f-c
L
Reset
s,
I
1,
RDconCP
1, Tt- o
o
o
11, S. Q, Q, Q, Q" .----:-
R->- I I
I
o

Enable
-~
N"il
~
l....-- M

D Contador
E ascendente/descendente
Tt-
Reset S<I Q, Q, Ql Qo

Lógica de control
I 1-+
~ ¡.. Vac(a
Lógica
de salida

(e) Esquema de la cola

FIGURA 7.23 Cola FIFO de cuatro palabras.

El objetivo de la lógica de salida es especificar el valor de las señales Vacía y


Llena, indicando. que la cola está vacía cuando el contenido del contador es todo
unos, y que está llena cuando dicho contenido es 011 . Podemos decir por tanto
que:
310 Principios de diseño digital

Llena = Q2'Q¡QO
Vacía = Q2Q ¡QO
La Figura 7.23(c) muestra el esquema completo de la cola FIFO de 4 palabras.
Como ocurre con las pilas de inserción/extracción, colas más grandes se
implementan normalmente con una RAM en lugar de con registros de desplaza-
miento; e incorporan dos contadores que apuntan al principio y final de la cola.
Esta implementación se conoce con el nombre de cola circular y se muestra sim-
bólicamente en la Figura 7.24(a). Obsérvese que se emplea una RAM de lK y dos
contadores designados Inicio y Final. El contador Inicio contiene la dirección del
primer dato escrito. Cuando se solicita una operación de lectura, se transfiere al
bus de entrada/salida (110) el dato de la posición direccionada por el contador
Inicio, y el cpntenido del contador se decrementa. El contador Final contiene la
dirección de la primera posición vacía de la cola, y cuando se soHcita una opera-
ción de escritura, el dato se escribe en la posición direccionada por este .contador,
que en ese momento se incrementa. Si se leen datos de la cola con mayor fre-
cuencia de la que se escriben, el contador Inicio apuntará a la misma posición que
el Final, indicando que la cola está vacía. Por otra parte, si se están escribiendo
datos en la cola con mayor frecuencia de la que se leen, el contador Final, que está
siendo incrementado en la forma módulo 1024, apuntará eventualmente a la
misma posición que el Inicio, aunque en este caso significará que la cola está
llena. Para evitar esta ambigüedad se pueden emplear contadores de 11 bits
(módulo 2048), que indiquen si la cola está vacía cuando ambos tengan el mismo
contenido, y que está llena cuando sus contenidos difieran en sólo el bit más sig-
nificativo.

o vacía
1
2
dato
dato
--t In icio

, t-
' ...
dalo x O No cambia
¡02 ¡ vada --t Final
O 1 Lectura
1022 1 1 Escritura
1023
(a) Diseño simbólico (b) Tabla de operación

E E
S es RWS (tIi:iI) (fM)
x O X O x O O
O 1 1 1 O 1 O
1 1 O 1 1 O 1
(e) Tabla de control

FIGURA 7.24 Cola FIFO implementada con una RAM de 1K.


Componentes de memorización 311

Reset

~r>;""
I E
L. Reset Inicio Final

e/k 1 rf>
1 ,, 10 1 10
I
1I
Comparador
< - >
I ~s 1
Seleclor
O I

I I

rru I A
RAM de IK

Enable es
Lectura/eserilllm ~ RWS

t "'"\.
1 ~
B USde ~

Vado

L...j=\ U'M

(d) Esquema

FIGURA 7.24 Continuación.

En la Figura 7.24 se muestra una implementación de cola que utiliza dos con-
tadores y una memoria de l K. Esta cola emplea un selector para elegir el conte-
nido del contador Inicio o del Final, así como un comparador para contrastar sus
contenidos. La Figura 7.24(b) muestra su tabla de operación, la Figura 7.24(c)
indica su tabla de control, y por último, el esquema completo de esta implemen-
tación se muestra en la Figura 7.24(d).

7.10. CAMINOS DE DATOS SENCILLOS


Los caminos de datos (datapaths) se emplean en todas las implementaciones de
procesadores estándar y de ASIC para realizar cálculos numéricos complejos y
manipular datos. Un camino de datos consta de elementos de memoria temporal ,
además de unidades aritméticas, lógicas, y de desplazamiento. Consideremos, por
ejemplo, cómo se podría realizar la suma de 100 números :

100
suma = LX;
i= 1

Este cálculo podría realizarse iterativamente, declarando suma como variable


temporal, inicialmente puesta a O, y ejecutando el siguiente bucle:
312 Principios de diseño digital

suma = O
bucle:
para i = l a lOO
suma = suma + xi
fin de bucle
Este bucle podría ejecutarse en un camino de datos de 32 bits formado por un
registro (denominado acumulador) y una ALU. La variable suma se almacenaría
en el acumulador, y en cada ciclo de reloj se sumaría a suma, mediante la ALU,
el nuevo Xi' de manera que pueda almacenarse de nuevo en el acumulador el
nuevo valor de suma.
Por regla general, la mayoría de los diseños digitales trabajan de la misma
manera. Los valores de variables y constantes se memorizan en registros o memo-
rias, son captados de los componentes de memoria tras el flanco de subida de la
señal de reloj, transformados mediante los componentes combinacionales duran-
te el tiempo entre dos flancos de subida del reloj, y los resultados se vuelven a
almacenar en los componentes de memoria en el siguiente flanco ascendente de
la señal de reloj.
La Figura 7.25 muestra un ejemplo de camino de datos sencillo que podría
realizar la suma anterior. Contiene un selector, para seleccionar como operando de
la izquierda para la ALU o bien O o bien un dato del exterior. El operando de la
derecha será siempre el contenido del acumulador, que también puede obtenerse
a través de un adaptador triestado. El acumulador es un registro de desplaza-
miento con carga en paralelo. La Figura 7.25(a) muestra el esquema de este Gami-
no de datos, y en la Figura 7.25(b) aparece la palabra de control de 9 bits que espe-
cifica los valores de las señales que controlan el selector, la ALU, el acumulador,
y los adaptadores de salida. Todos los componentes del camino de datos son de
32 bits.
En cada ciclo de reloj , una palabra de control definirá la operación del cami-
no de datos. Para calcular la suma de los 100 números, necesitaríamos 102 ciclos.
En este caso las palabras de control para todos los ciclos de reloj son iguales,
salvo la primera y la última. En el primer ciclo debe ponerse a O el acumulador,
en cada uno de los 100 ciclos siguientes se añade un nuevo dato a la suma del acu-
mulador; y finalmente, en el último ciclo, se extrae la suma acumulada.
El camino de datos anterior sería útil para expresiones aritméticas sencillas;
para expresiones más complejas se requerirá utilizar varias variables temporales
así como un camino de datos más elaborado, que necesita de un banco de regis-
tros en lugar de un solo acumulador. En la Figura 7.26(a) se muestra un ejemplo
de camino de datos más complejo, consistente en un selector, un banco de regis-
tros con 3 puertos, una ALU, un desplazador, y adaptadores triestado. En este caso
es el banco de registros el que suministra los dos operandos, además de memori-
zar el resultado en cada ciclo de reloj. Para una descripción más completa, en las
Figuras 7 .26(b) Y (c) se incluyen las tablas de operación de la ALU y del despla-
zador, y en la Figura 7 .26( d) la palabra de control. El camino de datos se contro-
la por una palabra de 20 bits que determina todos los destinos, fuentes, y opera-
Componentes de memorización 313

ciones del camino de datos. Para una mejor comprensión del funcionamiento del
camino de datos, a continuación mostramos su uso para implementar el algoritmo
del contador de unos.

Entrada
-T ~
8 HSI Selector O I
I

--
7 t-- M A B
6 iI-- S, ALU
5 S,

4
3

S,
I
1,
I
1,
2 iI--
,.........
I S, Acumulador
e/k

O
2 t
(a) Esquema del camino de datos

8 7 6 5 4 3 2 O

1~u!1 CoouoIes
de la ALU 1'::."..:01
i
(b) Palabra de control
CoouoIes del
al "UIIdIIJdor I~i="
FIGURA 7.25 Camino de datos sencillo con un acumulador.

EJEMPLO 7.1 Implementación del contador de unos


PROBLEMA

Utilizando un camino de datos con un banco de registros de 3 puertos, diseñe un contador


de unos que cuente el número de unos de una palabra de datos de entrada y devuelva al final
el resultado.
SOLUCiÓN

Para resolver este problema suponemos que la palabra de datos se suministra desde el exte-
rior y está disponible como entrada al camino de datos. Para describir el algoritmo utiliza-
mos las variables Dato, Cuenta, Máscara, y Temp . La variable Dato almacenará la palabra
314 Principios de diseño digital

de dato, que constará de ceros y unos. El algoritmo recorrerá Dato, desde el LSB al MSB,
y sumará 1 a Cuenta por cada 1 que encuentre en Dato. Máscara contiene la constante 1, Y
Temp se empleará para memorizar temporalmente el LSB de Dato. Tras la inicialización, el
],,,,,,,

9 Is
I
I
Selector O
•I M 5, So 0I'EII'ACKlNI!I1:A
O O O Complementar A
O O 1 ANO
O l O EX-OR
16- 18
3
WA
O 1 1 OR
1 O O Decrementar A
5 WE
Banco 1 O 1 Sumar
de registros 1 1 O Restar
eIk > de8 x m 1 1 Incrementar A
3
,
RAB ~
12- 14 «AA (h) Operaciones de la ALU
II REA REB ~
8-1O 3
, I
7

Bus A BusB

M A B
6
5 S, ALU OPeRACIONES DEL
4 S, So So DElIPlA'OOOR

O O O Pasar
"U' '"U'
O O 1 Pasar
I I O
O
1
1
O
l
No usada
No usada
3 S, le IR
2 S, DesplaZtldor l O O Desplazar a la izquierda
I S, 1 O 1 ROlar a la izquierda
1 i O Desplazar a la derecha

Bus de resultado
l 1 l.. Rotar a la derecha

(e) Operaciones del desplazador

O
V
~
Outport
"

(a) Esquema del camino de dalos

19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 O

Dirección Dirección Dirección


de escritura de lectura A de lectura B

(d) Palabra de control

FIGURA 7.26 Camino de datos con un banco de registros de tres puertos.


Componentes de memorización 315

algoritmo aislará el LSB de Dato, lo almacenará en Temp, sumará Temp a Cuenta, y final-
mente, desplazará Dato una posición a la derecha. Esta secuencia se repetiría hasta que
Dato contenga sólo ceros. Con ello, este algoritmo repetiría la secuencia de operaciones
descrita un número distinto de veces para palabras de datos diferentes.
En la Figura 7.27(a) se muestra el algoritmo básico para contar el número de unos de la
palabra de datos. Las sentencias 1, 2, Y 3 se utilizan para inicializar las variables, mientras en
las sentencias 4 y 5 se suma uno a Cuenta siempre que el LSB de Dato sea igual a l , Y des-
pués, en la sentencia 6 se desplaza Dato en una posición a la derecha, introduciendo un Oen el
MSB de dicha variable. La sentencia 7 se utiliza para obtener como salida la Cuenta. Obsérvese
que se están empleando los símbolos » y « para especificar desplazamiento de datos a la
derecha o a la izquierda, indicando a la derecha del símbolo el número de desplazamientos.

l . Dato: = Inport Dato


2. Cuen ta: = O
3. Máscara: = 1
'*
while Dato : Orepeat R,: Máscara
4. Temp : = Dato ANO Máscara
5. Cuenta: = Cuenta + Temp Cuenta
6. Dato::: DalO » 1
end while
7. Outport : = Cuenta Temp

(a) Algoritmo básico para la cuenta de unos (b) Asignación de registros

=- _....
I
E

I
~ ~=A. '[Link]!:IIIM
R,
IIII!XD

X
B
X
<JIIWtII
[Link],..
X
"'1IiIfWI8OR ofi_
X
"'lE

O
2 O R, O O Sumar Pasar O
3 O ~ O X Incrementar Pasar O
4
5
6
7
O
O
O
O
R.
R,
R,
Ninguna
R,
R,
R,
R3
~
R.

O
O
AND
Sumar
Sumar
Sumar
.,Pasar
Pasar

Pasar
......
O
O
O
I
)
Repetir
mientras
DOlo '* °

(e) Palabras de control para el COntador de unos

FIGURA 7.27 Algoritmo contador de unos.

Al implementar este algoritmo debemos en primer lugar asignar las variables a registros
del banco de registros. Como indica la Figura 7.27(b), las variables Dato, Máscara, CL/ellta,
y Temp se han asignado a los registros RI' ~, R" y R., respectivamente. Una vez que
hemos asignado estas variables a los registros, estamos en disposición de deducir las pala-
bras de control adecuadas para cada sentencia, mostradas en la Figura 7.27(c), donde se
emplean nemotécnicos en los distintos campos de control para indicar las operaciones y las
direcciones de los registros de operandos y resultados. Para controlar el camino de datos
suponemos que el. contador de unos es un módulo separado, que comenzará la cuenta de
unos siempre que una señal Inicio sea 1, Y que pondrá la señal Hecho a I tan pronto como
esté disponible el resultado.
316 Principios de diseño digital

Como puede verse en la Figura 7.28, la representación FSM del contador de unos cons-
taría de ocho estados. Observe que el contador permanecerá en el estado So hasta que la
señal/nido se ponga a 1, y después, en los siete estados siguientes, s,. ... ,s7' ejecutará el
algoritmo de la Figura 7.27(a). Finalmente, en el estado S7' se obtendrá el resultado, ponien-
do la señal Hecho al, Y retornando al estado original so'
El controlador del contador de unos tiene dos señales de entrada, Inicio y Dato'" 0, y
una señal de salida, Hecho. Inicio y Hecho se utilizan para comunicar al resto del sistema
°
los instantes de comienzo y de terminación. La señal Dato '" es básicamente una señal de
estado proporcionada por el camino de datos. En cada ciclo de reloj, el controlador debe
también suministrar 20 señales en la palabra de control. Para implementar los ocho estados
se necesitan tres biestables D, que denominamos Q2' QI' y Qo' En las figuras 7.29(a), (b),
y (e) se muestran las correspondientes tablas de estado siguiente, mapas, y ecuaciones de
estado siguiente.

inicio = O

Dato = ¡npon

Cuenta:: O

Hecho:: 1 Máscara :: I
/

Temp = Dato ANO Máscara

Dato *-0 Cuenta = Cuenta + Temp

Dato = Dato> > 1 (desplazamiento a derecha)

OUlpon :::: Cuenta

FIGURA 7.28 Representación FSM del contador de unos.


Componentes de memorización 317

La lógica de salida de este contador puede deducirse de las palabras de control de la


Figura 7.27(c). En la Figura 7.30(a) se muestra una tabla para la lógica de salida, obtenida
a partir de la Figura 7.27(c) sustituyendo los valores binarios apropiados para los distintos
nemotécnicos. Las expresiones mínimas para las distintas señales de control podrran haber-
se obtenido de la tabla de la Figura 7.29(a) utilizando alguna técnica de minimización lógi-
ca. Las ecuaciones de control se dan en la Figura 7.30(b). Por último, en la Figura 7.31 se
muestra el esquema del contador de unos empleando el camino de datos introducido en la
Figura 7.26.

So O O O 000 000 001 O 01


s, O O 1 010 O1O 010 010
s, O 1 O 01 1 01 1 O1 1 01 1
s, O 1 1 100 1 OO 100 1 OO
s. 1 O O 101 101 101 1O1
s, 1 O 1 1 10 1 10 I 1O 1 10
s. 1 1 O 100 111 J OO 111
s7 I 1 1 000 000 000 000

(a) Tabla de estado siguiente

Q, Qo Q, .o Q2 :: 1

00 01 11 10 00 01 11 10
Inicio (Da 10'" O)

00 000 010 100 011 101 1 1 O 000 100

01 000 010 100 011 101 110 000 111

11 001 010 100 011 101 110 000 111

10 001 010 100 011 101 110 000 100


-
Q" Q,. Qo
(b) Mapa de Kamaugh

Q2(siguiente) =Q '[Link]+ Q2Q '] + Q2Q 'O


Q .(siguiente) = Q'IQO+ Q '2Q JQ 'O + (Dato = O)QtQ'o
Qo(sigu;ente) = Q'2Q.Q'O+ Q2Q'I Q'O + Inicio Q' IQ'O + (Dalo ::: O)Q2Q 'O

(e) Ecuaciones de estado siguiente

FIGURA 7.29 Lógica de estado siguiente para el controlador del contador de unos.
318 Principios de diseño digital

So O O O O X X X O X X X O X X X O X X X X X X O
s, O O I I O O I I X X X O X X X O X X X X X· X O
S2 O I O O O I I I X X X O X X X O I O I O O O O
S3 O I I O O I O I X X X O X X X O I I I O O O O
s. I O O O I O O I O O I I O 1 O I O O I O O O O
S5 I O I O O I I I O I I I 1 O O I I O I O O O O
S6 I I O O O O I I O O I I X X X O I O I I I O O
s, I I I O X X X O O I 1 I X X X O 1 O I O O O I

(a) Tabla de la lógica de salida

lE = Q',Q',Q. RAA 2 = O RAS2 = Qo M=Q ¡ +Qo


WA,= Q',Q'. RAA. = Qo RABI = Q 'o SI = Q'2QO
WA ] =Q2QO+ Q'2Q ] RAA o = I RABo =0 so = 1
lVAo = Q'IQO + Q]Q 'O REA = Q, REB= Q,Q', s[Link] S1 = Q 2Q]Q'O
WE = Q2Q '1 + Q'2 QO+ Q JQ'O so= O
DE = Q,Q,Q.

(b) Ecuaciones de las salidas

FIGURA 7,30 Lógica de salida para el controlador del contador de unos.


)

7.11. CAMINOS DE DATOS GENERALES


En la Sección 7.10 se han descrito algunos caminos de datos sencillos. No obstan-
te, para muchas aplicaciones de alta velocidad, estos caminos de datos simples pro-
bablemente resultarían demasiado lentos. Para mejorar sus prestaciones tendría-
mos que rediseñarlos a fm de que puedan realizarse varias operaciones concurren-
temente. Estos caminos de datos se denominan caminos de datos paralelos.
La manera obvia de paralelizar un camino de datos seóa incrementar el núme-
ro de puertos del banco de registros y utilizar varias unidades funcionales, como
se ha hecho en el camino de datos paralelo de la Figura 7.32. Este camino de datos
tiene un banco de regi stros de 6 puertos (con cuatro puertos de lectura y dos de
escritura), seis buses (cuatro buses de operandos y dos de resultados), y cuatro
unidades funcionales (una ALU, un desplazador, un multiplicador y un divisor).
Este camino de datos podóa realizar dos operaciones en paralelo, una en la ALU
o en el desplazador, y la otra en el multiplicador o en el divisor.
No obstante, este camino de datos no podóa realizar dos sumas o dos multi-
plicaciones en paralelo. En este sentido, el camino de datos de la Figura 7.32 pro-
porciona sólo un paralelismo parcial. En otras palabras, si el algoritmo que esté
procesando no requiere el tipo de paralelismo que presenta, este camino de datos
Componentes de memorización 319

Q,~, Q, 0' , Qo 0'0

Lóg;ca .
,
L~_
;->
-
0', - - P-
¡- I- D1QI

r- > 0', ~
'-
-
['-1- DoQo
L
e/k
~ Wf)n" ,o
~
Jllporl
u.
-G Bus de resultado
~o~O
lE
WA 2
h
WA ,
~

WA o

~
~ O
WE

RAA,
RAA ,
I Camino
RAAo
de datos
REA
Unidad
de control RAB,
RAB,
...2. RABo
REB
M
S,
1 So

S,
I
S,
O So
OE
I I Lóg;ca de 7,;¡;da Oulpo,", .
Q, 0', Q, 0' , Qo 0'0
~

FIGURA 7.31 Esquema del contador de unos.


320 Principios de diseño digital

no duplicaría las prestaciones del camino sencillo como sería de esperar. Además,
los componentes de este camino de datos no están totalmente conectados, lo que
implica que no se pueden explotar algunos tipos de paralelismo. Por ejemplo, no
podría ejecutar en paralelo operaciones de multiplicación y división, o realizar en
paralelo operaciones de suma y de desplazamiento, aunque puede disponerse de
ellas en el algoritmo. Como puede verse, el problema de este camino de datos es
que el multiplicador y el divisor, así como la ALU y el desplazador, deben usar
los mismos buses para sus operandos y resultados, lo que limita su capacidad para
realizar operaciones en paralelo.

Bus de resultado] Entrada ] Entrada2 Bus de resuhado z

I
Selector
II I I I
Selector I

Banco
de regisltOs

~7 Bus]

~7

I ALU I I Desplazador I IMultiplicador 1I


I Divisor
IJ
L----,~---l
~7 ~7

FIGURA 7.32 Camino de datos paralelo.

De la discusión precedente podemos concluir que la ganancia en prestacio-


nes de un camino de datos paralelo dependerá no sólo del número y tipo de uni-
dades que incluya, sino también de su conectividad y de la cantidad de parale-
[j smo de que disponga el algoritmo que se ejecute en el camino de datos. Dicho
de otra manera, para obtener la mejor relación prestaciones/coste, los tipos de
unidades y su conectividad deben casar con el parale[jsmo del algoritmo. Hay
que tener también en cuenta el hecho de que un algoritmo dado no presenta siem-
pre el mismo grado de paralelismo, ya que la cantidad de paralelismo variará
durante su ejecución.
En general, para conseguir el mejor apareamiento entre un algoritmo y un
camino de datos "a medida", se debiera utilizar un número diferente de contado-
Componentes de memorización 321

res, registros, bancos de registros, y memorias, con un número variado de puertos


que se conecten con diversos buses. Estos buses pueden utilizarse tanto para pro-
porcionar operandos a las unidades funcionales como para entregar los resultados
a las unidades de memoria. También es posible para las unidades funcionales
obtener operandos de varios buses, aunque esto exigiría utilizar selectores en las
correspondientes entradas. También es posible que cada unidad disponga de lat-
ches de entrada y de salida, utilizados para memorizar temporalmente operandos
de entrada o resultados. Este tipo de retención temporal puede acortar significati-
vamente el tiempo de uso de los buses para transferencias de operandos y de
resultados, permitiendo pues incrementar el tráfico en dichos buses.
Por otra parte, el uso de latches de entrada y de salida requiere una unidad de
control más compleja, ya que cada operación necesita más de un ciclo de reloj
para ejecutarse. Se requiere al menos un ciclo de reloj para captar los operandos
de los registros, de los bancos de registros, o de memorias, y almacenarlos en los
latches de entrada; ' al menos otro ciclo para realizar la operación y memorizar un
resultado en Un latch de salida, y al menos un ciclo para memorizar el resultado
de un latch de salida en un registro o en memoria.

1 I 1 I
I I Selector I 1 Selector I
1 Selector I I I
Banco de
M emoria
Contador Registro registros
1 11 1

Bus! 7
BUS2
,.,. ~

Bus3
,.,. ,.,.
,;:..
Bus"
'ro
1
1
Selector I 11 Latch
11
Latch
1 Selector I
I I -1
I
Latch Latch I
ALU,
I ALU2
I 1
I
1I
I

I Latch
I I Multiplicador -1

FIGURA 7.33 Ejemplo de camino de datos a medida.


322 Principios de diseño digital

En la Figura 7.33 se muestra un ejemplo de camino de datos a medida.


Obsérvese que tiene un contador, un registro, un banco de registros de 3 puertos,
y una memoria bi-puerto. Dispone también de cuatro buses y tres unidades fun-
cionales: dos ALU y un multiplicador. Como puede verse, ALU I no dispone de
latches, mientras que ALU2 los tiene tanto en las entradas como en las salidas. El
multiplicador sólo los tiene en las entradas. Con esta disposición, ALU I puede
recibir su operando izquierdo de los buses 2 y 3, mientras que el multiplicador
puede recibir su operando derecho de los buses l y 4. De manera similar, las uni-
dades de memorización pueden también recibir datos de varios buses. Este tipo de
caminos de datos a medida se emplean con frecuencia en diseños de aplicación
específica para obtener la mejor relación prestaciones/coste.

7.12. DISEÑO DE LA UNIDAD DE CONTROL


En secciones anteriores hemos supuesto que el diseño de una unidad de control
sigue el modelo FSM, que consta de la lógica de estado siguiente, un registro de
estado, y una lógica de salida. En la Figura 7.34(a) se muestra un ejemplo en el
que el registro de estado está formado por biestables D, y las lógicas de estado
siguiente y de salida tienen una implementación o bien con dos niveles AND-OR
o con redes lógicas multinivel. Este tipo de unidad de control se utilizó en el
Ejemplo 7.1. En algunos casos no obstante, una unidad de control puede tener
miles de estádos y cientos de señales de entrada, salida, y de control, en cuyo caso
la forma directa de implementación antes sugerida sería demasiado compleja. Por
este motivo, en esta sección describimos varios estilos de diseño alternativos que
ayudan a simplificar la implementación de unidades de control complejas.
Para empezar, como muestra la Figura 7.34(b), la implementación de las lógi-
cas de estado siguiente y de salida se puede simplificar utilizando un registro de
estado y un decodificador. En este diseño, cada estado se identifica mediante una
señal , que valga l cuando el registro de estado esté en un estado particular, y Oen
el resto. El decodificador adicional simplifica la implementación de las lógicas de
estado siguiente y de salida al simplificar las expresiones booleanas para las entra-
das del registro de estado, las señales de control del camino de datos, y para las
salidas de control. En aquellos casos en los que estas señales sólo dependan de los
valores del registro de estado, podrían implementarse con puertas OR de nentra-
das, siendo n el número de estados que activan las correspondientes señales.
Alternativamente, cuando estas señales dependan también de las señales de con-
dición o de entrada, podrían implementarse con una lógica AND-OR en la que las
puertas AND tendrían normalmente sólo dos entradas, una de e11as la señal de
estado y la otra un bit de condición o una señal de entrada, como muestra la Figura
7.34(b).
Podemos reducir el tamaño de la lógica de estado siguiente teniendo en cuenta
que la mayoría de las FSM presentan secuencias incondicionales de estados en las
que cada estado tiene sólo un sucesor. Además, si los estados de dicha secuencia se
codifican de manera que el código de cada estado pueda obtenerse incrementado el
Componentes de memorización 323

código de su predecesor, el registro de estado se sustituiría por un contador. Esta


forma de diseño alternativa se muestra en la Figura 7 .34{c). En este caso se añaden
dos señales más a la lógica de estado siguiente, una señal de cargar/contar, y otra de
control del selector. La señal de cargar/contar puede incrementar el contenido del
contador o cargar un cierto estado para saltar fuera de la secuencia normal.

Sdialc:s
de condición

Lógic. de! estado

Sellaks de tomtol
del camino de datOS
i~j!~~~~"~ E~% dedalos
Regisuo
siguiente d<,_ Ll-''-4:-l:::--"1'-,f-'Ti Salidas
de control

(a) Modelo de unidad de control (b) Unidad de control con registro de estado y decodificador

[Link] de ronlrol Entradas de coolml

ir====¡:====lF=SiiL [Link],
de condición
50'''''
condición
de

I ncren~nl

Se/lales de oontrol Sd ab dc control


dd camino de dalos del camino de dalos
Sa lto
uterno

(e) Unidad de control con un contador (d) Unidad de control COn registro de estado y pila
de inserción/extracción

Entradas de oomrol

r-----:ljt[~==¡==== Sci'iaks
de condición

ROM
Sd~a.k 5 de oorllrol
Ó
de l c,:nmi no de datos
PROM

Salidas
dccoolrol

(d) Unidad de control con registro de estado, ROM, y pi la de inserción/extracción

FIGURA 7.34 Formas de implementación de unidades de control.


324 Principios de diseño digital

En este último caso, el valor del estado al que se salta puede suministrarlo
internamente la lógica de estado, o puede darse externamente por medio de las
entradas de control. El valor apropiado del estado de salto se elige mediante el
selector.
Otra forma de implementar un control modular es codificando como subruti-
nas tareas usadas con frecuencia. Por ejemplo, en lugar de repetir la misma
secuencia muchas veces, podríamos sustituirla por una llamada a subrutina y
retomar de ella cuando haya terminado. Para ello necesitamos una pila de inser-
ción/extracción que preserve el estado que sigue a la llamada a la subrutina. Este
diseño se muestra en la Figura 7.34(d). Como puede verse, la pila memoriza el
sucesor del estado actual, que se cargará en el registro de estado cuando termine
la subrutina. Obsérvese que hemos añadido también una nueva señal a la lógica
de estado siguiente, diseñada para controlar la inserción y extracción en la pila.
Una última estrategia para simplificar el diseño de unidades de control requie-
re que sustituyamos' la lógica de estado siguiente por una memoria de control, nor-
malmente implementada con una ROM o una PROM. Cuando utilizamos esta
estrategia, el registro de estado actúa como registro de direcciones para la memo-
ria de control. Esta forma de diseño se ilustra en la Figura 7.34(e), y en ella es
importante que limitemos el número de señales de control y de condición utiliza-
das para seleccionar el estado siguiente, ya que el coste de la memoria de control
se duplica por cada entrada de control o señal de condición adicional. Por este
motivo se utiliza sólo una señal de entrada o de condición para seleccionar el esta-
do siguiente, lo que limita la capacidad de salto a sólo bifurcaciones. En otras
palabras, la dirección siguiente puede ser solamente o la dirección actual incre-
mentada o una de las direcciones de salto. La bifurcación se implementa median-
te dos selectores de direcciones en serie, e introduciendo un selector de condición,
que elige una de las entradas de controlo las señales de condición para utilizarla
en la selección de la dirección siguiente. La dirección siguiente se elige de entre
la dirección actual incrementada y la dirección de salto aportada por la ROM, por
la pila de inserción/extracción, o por el entorno externo. La alternativa de control
de la Figura 7.34(e) suele conocerse con el nombre de control microprograma-
do, y al proceso de convertir cartas ASM en palabras de ROM se denomina a
veces microprogramación. Los estilos de diseño más populares para el control
son el de implementación directa mostrado en la Figura 7.34(a), utilizado en dise-
ños a medida de aplicación específica y procesadores sencillos, y el control micro-
programado, empleado con frecuencia en procesadores complejos.

7.13. RESUMEN DEL CAPíTULO


En este capítulo se han definido y diseñado algunos de los componentes secuencia-
les básicos empleados en el diseño de microprocesadores y ASIC. En primer lugar
describimos los diferentes tipos de registros empleados para memorización y des-
plazamiento de datos. También definirnos varios tipos de contadores y presentamos
algunas reglas para construir contadores mayores a partir de otros más pequeños.
Componentes de memorización 32S

A continuación se han descrito algunos componentes de memorización con


estructura en array utilizados para el almacenamiento temporal y permanente de
datos. Como hemos mostrado, los bancos de registros son rápidos pero también
más costosos en comparación con las memorias. Posteriormente se ha definido
componentes de memoria específicos tales como las pilas y las colas, empleados
en muchos diseños por su eficiencia para implementar funciones de memoriza-
ción bien conocidas. Para las pilas y las colas se han descrito también posibles
implementaciones con registros de desplazamiento y con RAM.
Finalmente hemos introducido el concepto de camino de datos y hemos mos-
trado como utilizarlo para implementar algoritmos específicos, centrándonos en
el ejemplo del contador de unos. También se han discutido brevemente los cami-
nos de datos empleados en microprocesadores y en otros ASIC de altas presta-
ciones. También se han explicado brevemente distintos estilos de implementación
de unidades de control. En el siguiente capítulo formalizaremos el concepto de
camino de datos á medida y sus unidades de control, y presentaremos técnicas
actuales para la síntesis de diseño en el nivel de transferencia entre registros.

7.14. LECTURAS ADICIONALES


Mick, J. and S. Brick. Bil-Slice Microprocessor Design. New York: McGraw-Hill, 1980.
Libro. profesional que explica en detalle conceptos de caminos de datos y de unidades
de control, enseñando además cómo construir un microprocesador a partir de compo-
nentes del nivel de transferencia entre registros. Requiere un buena comprensión de los
'\ principios de diseño de computadores.
An 2900 Family Data Book. Sunnyvalle, CA: Advanced Microdevices, 1985.
Libro guía para el primer camino de datos de 4 bits y los componentes de soporte aso-
ciados.

7.15. PROBLEMAS
7.1. (Registros) Partiendo de las formas 7.2. (Registros) Diseñe un registro con
de onda mostradas en la Figura P7.l , dos señales de carga que habiliten la
dibuje la forma de onda de salida de carga de datos desde dos fuentes dife-
un biestable O con puesta a 1 (Sel) y rentes.
puesta a O(Reset).
7.3. (Registros) Explique la diferencia
entre la puesta a cero mediante un
resel y la carga de una entrada de todo
ceros en un registro.
Dal~ : L
u, Lf 7.4. (Registros) Diseñe un registro de J6
bits que pueda cargar nuevos datos y
rotar o desplazar su contenido a dere-
cha y a izquierda.
326 Principios de diseño digital

7.5. (Registros de desplazamiento) Utili- 7.14. (Contadores asíncronos) Diseñe un


zando un registro de desplazamiento contador decimal. asíncrono. módulo
de 4 bits. construya un registro de 4 100 ..
bits que pueda rotar su contenido en
7.15. (Bancos de registros) Diseñe un
una' posición a derecha o a izquierda.
banco de registros de 8 x 4 con:
7.6. (Registros de desplazamiento) Diseñe (a) Un puerto de escritura y dos de
un registro que pueda realizar dos lectura
operaciones: (1) cargar un nuevo dato (b) Dos puertos de escritura y uno
y (2) intercambiar los bytes menos y de lectura
más significativo. (e) Dos puertos de escritura y dos
de lectura
7.7. (Registros de desplazamiento) Dise-
ñe. empleando registros de desplaza- 7.16. (Memorias) Diseñe:
miento de 16 bits. un comparador (a) Una RAM de 256K x 8 utilizan-
serie que compare dos números de 16 do chips de RAM de 256K x 1
bits tras cargarlos en los registros de (b) Una RAM de 64K x 32 utili zan-
desplazantiento. El comparador serie do chips de 64K x 8
debiera tener tres salidas que indi- (e) Una RAM de 1M x 1 utilizando
quen si el primer número es mayor, chips de 256K x 1
igual. o menor que el segundo. (d) Una RAM de 256K x 8 utilizan-
do chips de 64K x 8
7.8. (Contadores) Diseñe dos contadores
binarios con cuenta ascendente de: 7.17. (Pilas) Diseñe una pila de inser-
(a) Sólo números pares (O. 2. 4. 6. ción/extracción con una RAM de 1K.
8.... ) que use todas (las 1024) palabras de
(b) Sólo números impares (l. 3. 5. la RAM.
7.9 ....)
7.18. (Colas) Diseñe. con una RAM de
7.9. (Contadores) Diseñe un circuito lógi- 1K. una cola FIFO que esté vacía
co que detecte cuándo ha alcanzado cuando los contadores de inicio y
un contador de 4 bits el valor de: final apunten a la ntisma posición. y
(a) 7 llena cuando ambos contadores
(b) 14 difieran en 1.
(e) 15
7.19. (Caminos de datos) Diseñe un camino
(d) O
de datos sencillo que pueda calcular
7.10. (Contadores) Diseñe contadores las expresiones:
módulo (a) 15. (b) 17. (e). 31. y (d)
módulo 32.
(a)
I " a ·x ·
i"'] I I

7.11. (Contadores) Diseñe un contador


(b) I " a.x. + b
;= ] I I I

decimal que cuente módulo 1000. (e) I " x · +x . +c·


i=l
2
I I I

7.12. (Contadores) Diseñe un contador que


7.20. (Carninas de datos) Desarrolle. para el
cuente según la secuencia: 1.5.9. 11 .
carnina de datos de la Figura 7.26. un
13. 15. 1.5 •...
algoritmo de inserción de campo y las
7.13. (Contadores asíncronos) Construya palabras de control para todas las sen-
un contador asíncrono de 4 bits utili- tencias. Suponga que el camino de
zando: datos es de 8 bits y que el algoritmo
(a) Biestables D inserta los cuatro bits menos significa-
(b) Biestables J-K tivos de la palabra fuente en la ntilad de
Componentes de memorización m
la palabra destino: por ejemplo, el 7.22. (Carninos de datos) Desarrolle, utili-
algoritmo de inserción de campo toma- zando el camino de datos de la Figura
ría las palabras A = lLf'6a,a4a3~a ,aO y 7.26, un algoritmo que sume dos
B = b/>6b,b4b3b2b,bO y generaría como números enteros positivos de 8 bits y
e
resultado la palabra = b/>A~,a,p,bO' genere el resultado de 9 bits. Obtenga
sustituyendo b,b4b3b2 por "J~a,ao. la palabra de control para cada sen-
tencia del algoritmo.
7.21. (Caminos de datos) Haciendo uso del
algoritmo de inserción de campo 7.23. (Caminos de datos) Defina e imple·
desarrollado en el Problema 7 .20, mente el controlador para un camino
defina e implemente un controlador . de datos que pudiera ejecutar el algo·
para un camino de datos que lo pueda . ritmo desarrollado en el Problema
ejecutar. 7.22.
Diseño al nivel
de transferencias
entre registros
Álgebra booleana Puertas lógicas
y biestables

6
Máquina de
estados finitos 4
Técnicas de
diseño lógico

Sistema binario 2
y representación
de datos

Máquinas de 8
estados fmitos
330 Principios de diseño digital

En el Capítulo 7 se diseñaron componentes de almacenamiento tales como regis-


tros, contadores, memorias, pilas, y colas; en el Capítulo 5 los componentes com-
binacionales tales como ALU, comparadores, desplazadores, selectores, buses,
ROM, y PLA. En el ámbito del diseño de circuitos integrados de aplicación espe-
cífica (ASIC, Application-Specific Integrated Circuits) y procesadores estándar,
esos componentes constituyen las unidades de control y los caminos de datos
(datapaths). Cada ASIC o procesador consta de al menos, una unidad de control
y un camino de datos, aunque muchos ASIC incluyen varias unidades de control
y caminos de datos. Para sintetizar diseños al nivel de transferencias entre regis-
tros se introduce el modelo FSM -(Finite-State-Machine, Máquina de estados fini-
tos) con camino de datos (FSMD, FSM with a Datapath), y presentamos diversas
formas de especificar los diseños a este nivel de descripción, incluyendo los popu-
lares diagramas de máquina de estado algorítmica (diagramas AS M, de
Algorithm-State-Machine). Después se explicarán las técnicas para convertir los
diagramas ASM en una implementación del diseño constituida por una unidad de
control y un camino de datos. Tamhién se describen las técnicas de diseño para
optimizar estas implementaciones en costo y prestaciones. Mientras que este capí-
tulo se centra en el diseño al nivel de transferencias entre registros, el diseño de
procesadores estándar se cubre en el Capítulo 9 como caso especial de diseño de
transferencia entre registros. Puesto que el repertorio de instrucciones del proce-
sador se puede describir mediante un tipo restringido de diagramas AS M, la arqui-
tectura del procesador también puede contemplarse como un caso especial del
modelo FSMD.

8.1. MODELO DE DISEÑO


En el Ejemplo 7.1 se implementó el algoritmo de cuenta de unos con un camino de
datos estándar y una unidad de control específica. La unidad de control tenía ocho
estados, dos señales de entrada, y 14 señales de salida. Las señales de entrada eran
la señal externa Inicio y una señal de estado del camino de datos (Dato = O). Las
señales de salida eran la señal Final ('Hecho') y las señales de control del cami-
no de datos. El camino de datos estaba constituida por un banco de registros, una
ALU, y una unidad de desplazamiento, y tenía un puerto de entrada y un puerto
de salida. El operando de 16 bits Dato se introducía en el camino de datos a tra-
vés del puerto de entrada al comienzo de la operación, y el resultado Cuenta]
(cuenta de unos) se proporcionaba al [mal, a través del puerto de salida.
De forma similar al contador de unos, un diseño digital consta de una unidad
de control y un camino de datos. Como muestra la Figura 8.l(a), el camino de
datos incluye dos tipos de puertos de E/S. Un tipo de puertos de E/S son los puer-
tos de datos, que son utilizados por el entorno exterior para enviar y recibir datos
a y desde el circuito integrado. Los datos pueden ser de tipo entero, punto flotan-
te, o carácter, y usualmente ocupan una o más palabras. Normalmente, los puer-
tos de datos tienen una capacidad para 8, 16, 32, o 64 bits. El otro tipo de puertos
de E/S son los puertos de control, utilizados por la unidad de control para ordenar
..... >

Diseño al nivel de transferencias entre registros 331

las operaciones realizadas en el camino de datos y recibir información acerca del


estado de los registros del camino de datos que han sido seleccionados.
Entradas
Entradas del camino
de control de datos

¡ Señales de
control
¡
Unidad Señales de Camino de
de control estado datos

~ ~
Salidas Salidas
de control del camino
de datos
(a) Diagrama de bloques de alto nivel
Entradas
del camino
Entradas de control de datos

I I
~ + ISeiUl"",
¡
r+ - -8e- control I Sei<ctN

..... - e,
rere --~
rere --~
--~
--~
I Re¡iwo
.6. ~7
l W1-
7 ~
1
8 ..
.--:-,
... ---, --~
~7 U 8 ...

Ef 1
-\ ..ru / \ ~
.....,
L6ak"ade
siguimle
Registro
de estado
-r
LóPcade

Señ.Io;'"
estado
.,l,.
I
I Re¡i.... I
.,l,.
/
8 ..

'" ...'"
Comino
UDidod ......uo!
.
Salidas de Salida Ikl
control ...
cam;node
,~

(b) Diagrama de bloques a nivel de transferencia entre registros

FIGURA 8.1 Modelo de diseño.

Como muestra la Figura 8.1 (b), el camino de datos contiene unidades de alma-
cenamiento tales como registros, bancos de registros y memorias, y circuitos com-
binacionales como ALU, multiplicadores, desplazadores, y comparadores. Estas
unidades están conectadas a los puertos de entrada y salida mediante buses. El cami-
no de datos toma los operandos de las unidades de almacenamiento, realiza los cál-
culos en los circuitos combinacionales, y devuelve los resultados a las unidades de
almacenamiento en el tiempo correspondiente a cada estado, que normalmente es
igual a un ciclo de reloj. La unidad de control realiza la selección de operandos, de
332 Principios de diseño digital

operaciones, y de destino para el resultado mediante la asignación de valores apro-


piados a las señales de control del camino de datos. El camino de datos también
indica, mediante sus señales de estado, cuando un valor concreto debe guardarse en
una unidad de almacenamiento concreta, o cuando se satisface una relación deter-
minada entre los valores de dos datos almacenados en el camino de datos.
Igual que el camino de datos, la unidad de control tiene un conjunto de seña-
les de entrada y de salida. Cada señal es una variable booleana que puede tomar
el valor O ó 1. Hay dos tipos de señales de entrada: las señales externas y las seña-
les de estado. Las señales externas representan las condiciones del entorno exte-
rior a las que el ASIC debe responder. La señal Inicio del Ejemplo 7.1, que indi-
ca el comienzo de la cuenta de unos, es un ejemplo de estaS señales de entrada.
Por otra parte, las señales de estado representan el estado del camino de datos. Su
valor se obtiene al comparar los valores almacenados en el camino de dato
correspondientes a ciertas variables. Por ejemplo, Dala = O en el Ejemplo 7.1 era
una señal cuyo valor es igual a l cuando el valor de Dala es igual a O y O cuando
Dato es distinto de O.
Hay además dos tipos de señales de salida: las señales externas y las señales
de control del camino de datos. Las señales externas informan al entorno que el
ASIC ha llegado a cierto estado o ha finalizado un cálculo determinado. Las seña-
les de control del camino de datos seleccionan la forma de actuar de los compo-
nentes del camino de datos.
La implementación de un ASIC se ajusta a esta arquitectura general, aunque dos
ASICs puedan diferir en el número de unidades de control y caminos de datos en el
número de componentes y conexiones en el número de estados de la unidad de con-
trol, yen el número de puertos de F/S. Para realizar un diseño, en primer lugar hemos
de conocer la forma de definir su arquitectura y especificar su comportamiento.

8.2. DEFINICiÓN DE FSMD


En la Sección 8.1 presentamos, en términos generales, la arquitectura y el mode-
lo de implementación de un diseño digital. En esta sección se describirá como
especificar su funcionamiento. Con este propósito se modifica el estilo y el for-
mato utilizado para especificar el contador de unos del Ejemplo 7.1.
El contador de unos se especificó mediante una FSM, describiendo la unidad
de control y una serie de asignaciones a las variables que representan los cambios
en el camino de datos. Por comodidad, estas especificaciones se repiten en la
Figura 8.2.
La FSM tiene ocho estados y pasa de un estado a otro bajo el control de la
señal externa Inicio y de la señal de estado (Dalo = O). En cada estado, la FSM
asigna valores al conjunto de señales de control del camino de datos que especi-
fican completamente el comportamiento de dicho camino de datos. Sin embargo,
cuando hay demasiadas señales de control es difícil darse cuenta de lo que hace
el camino de datos y de cómo lo hace. Para mejorar la comprensión de este tipo
de especificación, en el Ejemplo 7.1 hemos usado sentencias de asignación de
Diseño al nivel de transferencias entre registros 333

variables que indican los cambios en los valores de las variables almacenados en
el camino de datos.
Una sentencia de asignación de variable proporciona la expresión a utilizar
para el cálculo del nuevo valor de la variable. En cada estado, y para cada varia-
ble de asignación asociada a dicho estado, el camino de datos evalúa la expresión
del lado derecho de la sentencia de asignación y, en el siguiente flanco de subida
de la señal de reloj , carga el resultado en el registro que almacena la variable indi-
cada en el lado izquierdo de la sentencia. Es importante resaltar que aunque la
evaluación de la expresión se hace en un estado, el nuevo valor de la variable no
puede utiljzarse hasta el estado sjguiente, como muy pronto. Genera\jzando a par-
tir de la especificación del contador de unos, podemos decir que un modelo FSM
con sentencias de asignación añailidas a cada estado, normalmente designado
como FSM con camino de datos, o FSMD, permite especificar completamente
el comportamiento de un diseño digital arbitrario.
Inicio=O

Finnl=O; Data=/nport

Fi1UlI=O; CuenraJ=O

FilUJl=O; Máscara=I

Final=O; Temp=Dato ANO Mascara

Final=O ; CuenlaJ=CuentaJ + Temp


Dat~

Final=O; D010=Dalo» I

Final=l ; Outport=CuentaJ

FIGURA 8.2 Especificación del contador de unos.


334 Principios de diseño digital

Para definir formalmente una FSMD debemos ampliar la definición de una


FSM introduciendo conjuntos de variables, entradas, y salidas del camino de
datos que complementen los conjuntos de estados, entradas, y salidas de la FSM.
En el Capítulo 6 se definió una FSM como una quíntupla
<S.l,Oj,h>
donde Ses el conjunto de los estados, /y Oson los conjuntos de símbolos de entra-
da y salida, y fy h son las funciones que indican el estado siguiente y la salida de
la FSM. Más formalmente.! y h se definieron como las aplicaciones
f :S X /--7S
h:S x /--70
Normalmente se especifican mediante una tabla que proporciona los símbolos
de estado siguiente. y la salida para cada símbolo de estado y de entrada. Cada
símbolo de estado, entrada, y salida se define mediante el producto cartesiano de
variables booleanas. Más concretamente,
I=A l x A 2 x .. . x A k
S= QI X Q2 X ... x Qm
° = f l X f 2 X .. . x f"
donde A i, I $ i $ k, es una señal de entrada, Q i' I $ i $ m, es la salida de un bies-
table, e f i , 1 $ i $ n, es una señal de salida.
Para incluir el camino de datos debemos ampliar la definición anterior aña-
diendo el conjunto de variables, entradas, y salidas del camino de datos. Más for-
malmente, se define un conjunto de variables
V = VI X V2 X ... x Vq
que definen el estado del camino de datos a partir del valor que tomen dichas
variables de estado. De la misma forma, el conjunto de entradas a la FSMD está
constituido por el conjunto de entradas a la FSM, 1(;> y el conjunto de entradas al
camino de datos, ID' Así
I=ICX I D
donde l e = Al xA 2 x ... x Ak como antes, elD = BI x B2 x ... xBp '
De igual forma, el conjunto de salida consta de las salidas de la FSM, 0 (;> Y
las salidas del camino de datos, OD' En otras palabras,
0= 0 cx 0D
donde Oc = f l X f 2 X . .. X f k como antes, y 0D = ZI X Z2 x ... X Zr' No obstante,
hay que tener en cuenta que A" Qp e f k representan a variables booleanas, mien-
tras que B" Vi Y Zi corresponden a vectores booleanos, que pueden representar a
su vez a números enteros, en punto flotante, y caracteres. Por ejemplo, en un
camino de datos de 16 bits, B i, Vi YZi tendrán un tamaño de 16 bits, y si son ente-
ros positivos, podrán asumir valores entre O y 2 16-1.
Diseño al nivel de transferencias entre registros 335

Excepto en casos muy triviales, el tamaño de las variables y los puertos del
camino de datos hace muy difícil la especificación de las funciones f y h en fonna
tabular. Para poder especificar los valores de las variables de fonna eficiente y
comprensible al definir una FSMD, utilizaremos expresiones aritméticas.
Se defme el conjunto de todas las posibles expresiones, Expr, sobre el con-
junto de variables V, como el conjunto constituido por todas las constantes K del
mismo tipo tomadas como variables en V, el propio conjunto de variables V, y
todas las expresiones obtenidas combinando dos expresiones mediante operado-
res aritméticos, lógicos, o de reordenación. Más fonnalmente,
Expr(V) = K u V U {(e, O e) le" ej
E Expr, O es un operador aceptable}

Mecliante Expr(V), podemos definir los valores de las señales de estado así
como las transforn¡aciones en el camino de datos. Sea STAT = (statk = e, Ll'j le"
e. E Expr(V), Ll E {$, <, =, #, >, ~}} el conjunto de todas las señales de estado
descritas como relaciones entre variables o como expresiones de variables.
Ejemplos de señales de estado son Dato = O, (a-b) > (x+y), y (contador =0) AND
(x> lO} Las relaciones que defmen las señales de estado pueden ser ciertas (true),
en cuyo caso la señal de estado tiene el valor 1, o falsas (fa/se) , tomando enton-
ces el valor O.
Mecliante la defmición fonnal de las expresiones y las relaciones sobre un
conjunto de variables, es posible simplificar la funciónf: (S x V) x l -+ S x V clivi-
diéndola en dos partes: fe y fD' La función fe define el estado siguiente de la uni-
dad de control,
fe: S x Iex STAT-+S
en tanto que la función f D define los valores de las variables del camino de datos
en el estado siguiente,
f D : S x V x ID -+ V
En otras palabras, para cada estado s, E S se calcula un nuevo valor para cada
variable V. E V del camino de datos mecliante la evaluación de una expresión
'j E Expr(\I). De esta forma, la funciónfD se representa mecliante un conjunto de
tunciones más simples, en el que cada función del conjunto define los valores de
las variables para cada estado Si
f D: = {fD' : V x ID -+ V :
{Vj = ej I"} E V, ej E Expr(V x ID)}}
En otras palabras, la función f D se descompone en un conjunto de funciones
lo" donde cadafD' asigna una expresión ek a cada variable del camino de datos V.
en el estado si" Por consiguiente, los nuevos valores para las variables del camin6
de datos se determinan evaluando las expresiones e ., para todoj tal que l5,j 5, q.
Análogamente, se puede descomponer la funciÓn de salida h : S x V x 1 -+ O
en dos funciones cliferentes, he y hD , donde he define las salidas de control exter-
336 Principios de diseño digital

°
nas e igual que en la definición de una FSM y ho define las salidas externas del
camino de datos. Por lo tanto,
he : S x Ie x STAT --+ 0e
ho:S XVx Io--+°o
°
Obsérvese nuevamente que las variables de e son variables booleanas y que
las variables de 00 son vectores booleanos.
Una FSMD puede especificarse de forma tabular como muestra la Figura
8.3(a) para el caso del contador de unos que se definió en la Figura 8.2. Las tres
primeras columnas definen respectivamente el estado presente, el estado siguien-
te, y las salidas de control externas, mientras que las siguientes dos columnas defi-
nen las salidas y los valores de las variables del camino de datos. Como es usual,
el símbolo X se utiliza para las indiferencias (don't care conditions). A partir de la
tabla de la Figura 8.3(a) vemos que en cada estado existen nuevos valores para las
salidas de control, variables y salidas del camino de datos.
Sabemos que un camino de datos real puede almacenar cientos de variables
diferentes y que muchas de esas variables raramente cambian sus valores. Por
tanto, sería más eficiente asumir que las variables mantienen sus valores a no ser
que se especifique uno nuevo en un estado determinado. Así, la cuarta columna
de la Figura 8.3(a) se podría reescribir mediante un conjunto de sentencias de
asignación, recordando líneas de código típicas de un lenguaje de programación,
tal y como muestra la Figura 8.3(b).
También se puede utilizar el mismo formato en la columna de estado siguiente
de la Figura 8.3(b). En este caso, no tenemos que especificar el estado siguiente para
todas las posibles entradas de control y señales de estado sino sólo para aquellas que
afecten a la selección del estado siguiente. Por tanto, es posible simplificar la colum-
na de estado siguiente especificando en cada estado sólo la condición y el estado
siguiente al que pasará la unidad de control si dicha condición se verifica.
Igual que para representar las asignaciones de variables, es posible utilizar
sentencias de asignación para los puertos de salida de la unidad de control y del
camino de datos. No obstante, a diferencia de las variables del camino de datos,
los puertos de salida no mantienen sus valores más allá del estado presente pues-
to que los valores no están almacenados en registros o en memoria. Así, la unidad
de controlo el camino de datos deben proporcionar el último valor asignado a lo
puertos de salida en cada estado, aunque no se especifique explícitamente en la
tabla. Teniendo esto en cuenta, podemos obtener una tabla reducida, llamada nor-
malmente tabla de estado-acción, que contiene sólo tres columnas. Como antes,
la primera columna especifica el conjunto de estados actuales, y la segunda espe-
cifica los estados siguientes y las condiciones bajo las que la unidad de control
pasará a dichos estados. La tercera columna especifica las asignaciones de nuevos
valores a las variables correspondientes del camino de datos y las condiciones
bajo las que se producen dichas asignaciones. Las asignaciones a los puertos de
salida también se incluyen en esta columna.
Como ejemplo, en la Figura ·8.3(c) se muestra la tabla de estado-acción para
el contador de unos. Esta tabla es fácil de comprender y proporciona toda la infor-
Diseño al nivel de transferencias entre registros 337

So So So SI SI O Z X X X X
SI S2 s, s, s, O Z lnpon X X X
s, s3 s3 s3 S3 O Z Dato O X X
s3 S4 S4 S4 S4 O Z Dato Cuenta } 1
X
S4 s, s, s, s, O Z Dato Cuenta] Dato AND Máscara Máscara
s, s6 s6 s6 s6 O Z Dalo Cuenta1 + Temp X Máscara
s6 S4 S7 S4 s7 O Z Cuental X Máscara
1 Cuental Dato Cuenta1 X X

(a) Tabla de estados y salidas

_ ESos. CIMN().I)E llo\TOS


00 01

So So So SI SI O Z
SI s, s, s, s, O Z Dato =lnport
s, s3 s3 s3 s3 O Z Cuental =O
S3 S4 S4 S4 S4 O Z Máscara = 1
S4 s, s, s, s, O Z Temp =Dato AND Máscara
s, s6 s6 s6 S6 O Z Cuenta] ::: Cuental +- Temp
S6 S4 S7 S4 S7 O Z Dato =Dato» 1
S7 So So So So 1 Cuental

(h) Tabla de estados y saJidas con asignaciones de variables

So
[ Inicio = 0,
Inicio = 1,
So ]
SI [ Final =
Output =Z
°]
Dato ::: lnport

sI S2
s, s3 Cuental
s3 S4 Máscara 1 =
S4 s, Tempo =Dato AND Máscara
s, s6 Cuenta1 = Cuental + Temp
[ Dato "'0, S4 ] Dato =Dato» 1
S6 Dato =O, S7
S7 So [ Final = 1 1
Output = Cuental

(e) Tabla de Estado-acci6n

FIGURA 8.3 Especificación FSMD para el contador de unos.


338 Principios de diseño digital

mación necesaria para implementar la unidad de control y el camino de datos. Se


puede utilizar para construir el diagrama de estados de la unidad de control, sinte-
tizar la lógica de estado siguiente y de salida, y definir los componentes del cami-
no de datos y su interconexión, como explicaremos más adelante en este capítulo.

8.3. DIAGRAMAS DE MÁQUINA DE ESTADOS ALGORíTMICA


(ASM)
En la Sección 8.2, hemos definido el modelo FSMD y se ha explicado como obte-
ner una tabla de estado-acción para especificar FSMD. En esta sección presenta-
mos una forma gráfica alternativa para especificar un FSMD, que se denomina
diagrama de máquina de estados algorítmica, o diagrama ASM. En general,
un diagrama ASM es totalmente equivalente a las tablas de acción-estado descri-
tas anteriormente: es decir, para cada tabla de acción-estado, existe al menos un
diagrama ASM que describe el mismo comportamiento. No obstante, en muchos
casos los diagramas ASM presentan una cierta ventaja desde el punto de vista del
ser humano puesto que muestran explícitamente los caminos desde un estado a
otro, que son menos visibles en una tabla de estado-acción. La siguiente defini-
ción pone de manifiesto estas ventajas.
Como muestra la Tabla 8.1, un diagrama ASM representa una FSMD en tér-
minos de cuatro componentes básicos: la caja o bloque de estado, la caja de deci-
sión, la caja de salida condicional, y el bloque ASM. Cada estado en un diagrama
ASM se indica mediante una caja de estado, que contiene el conjunto de asigna-
ciones incondicionales a las variables y puertos de salida del camino de datos.
Cada caja de estado tiene un nombre que se sitúa en la parte superior izquierda de
la caja. Si se conoce, el código asignado al estado se sitúa en la parte superior
derecha. No obstante, usualmente no se conoce el código del estado en el momen-
to en que el diagrama ASM se dibuja por primera vez, y debe añadirse durante el
proceso de asignación de estados descrito en el Capítulo 6.
La caja de decisión describe la condición bajo la que la FSMD llevará a cabo
acciones específicas en el camino de datos y seleccionará el estado siguiente.
Estas condiciones pueden referirse tanto a las entradas de control externas como
a las señales de estado.
Obsérvese que cada caja de decisión tiene dos salidas posibles, una se toma
cuando la condición indicada dentro de la caja es cierta, y la otra cuando es falsa.
Estas dos salidas se indican usualmente con un 1 para el caso de condición cier-
ta, y con un O para la falsa.
La caja de salida condicional describe las asignaciones de variables o sali-
das que se realizan cuando se verifican las condiciones especificadas por una o
más cajas de decisión. Los bordes redondeados de una caja de salida condicional
permite diferenciarla de una caja de estado.
Por último, el bloque ASM es una estructura compleja que incorpora una caja
de estado y una red de cajas de decisión y cajas de salida condicional organizadas
Diseño al nivel de transferencias entre registros m
en serie y/o en paralelo. El bloque ASM se representa usualmente destacándolo
mediante un sombreado. Como se puede ver en la Tabla 8.1 , tiene Una sóla entra-
da aunque puede tener cualquier número de salidas, que son generadas por la red
COncreta de cajas de decisión.

TABLA 8.1 Srmbolos ASM

Nombre I Código del s, 011


del estado _, estado
Asignación
Caja de estado incondicional de Temp=Temp ANO Mascara
variables y salidas

Caja de decisión

Asignación
Caja de condición condicional CuenlaJ = CuenlllJ + I
de variables

Final=O

o
BloqueASM
340 Principios de diseño digital

En general, un diagrama ASM estará constituido por uno o más bloques


ASM conectados, organizados de forma que cada salida de un bloque esté conec-
tada a una única caja de estado. Cada bloque ASM describe las operaciones que
se ejecutan en un estado. En otras palabras, cada bloque es equivalente a una fila
de una tabla de estado-acción de las descritas en la Sección 8.2, siendo la forma
de presentar sus condiciones la única diferencia: En una tabla de estado-acción,
las condiciones para seleccionar el estado siguiente y para ejecutar las operacio-
nes del camino de datos estaban separadas, mientras que en un bloque ASM se
combinan en un árbol binario de cajas de decisión y condición.

BIoqueASM

...s..., _-..L._-, rS3


, - - ,_ _-.

(a) Estado siguiente no definido

BIoqueASM S, ~

s, S3

(b) Camino de salida no definido

FIGURA 8.4 Diagramas ASM incorrectos.


Diseño al nivel de transferencias entre registros 341

Cuando se describe una FSMD mediante un diagrama ASM, hay que seguir
dos reglas:
1. El diagrama debe definir un único estado siguiente para cada estado pre-
sente y conjunto de condiciones.
2. Todo camino definido por la red de cajas de condición debe conducir a
otro estado.
En la Figura 8.4, se muestran dos ejemplos de diagramas ASM incorrectos
que violan las reglas anteriores. En concreto, el diagrama de la Figura 8.4(a) viola
la primera regla, puesto que cuando Cond2 es cierta, tanto s2 como s3 están espe-
cificados como estados siguientes. De igual manera, puede verse como el diagra-
ma de la Figura 8.4(b) viola la segunda regla ya que el camino definido cuando
Condl es cierta y Cond2 es falsa forma un bucle que no lleva a ningún estado.

FiMf = I
Output = Cuenta I

FIGURA 8.5 Diagrama ASM para el contador de unos.


342 Principios de diseño digital

La Figura 8.5 muestra un diagrama ASM correctamente definido que es equi-


valente a la tabla de estado-acción del contador de unos de la Figura 8.3(c). Como
puede comprobarse, este diagrama especifica claramente todos los estados, las
transiciones a los estados siguientes, y las acciones del camino de datos (asigna-
ciones de variables) que estaban representadas en la tabla de estado-acción.
Nótese también que este diagrama ASM muestra claramente los bucles, que eran
menos visibles en la tabla de estado-acción, además de describir todos los cami-
nos condicionales como un árbol, en lugar de especificar cada camino mediante
una expresión condicional. Por supuesto, podría ocurrir que un diagrama ASM
llegue a ser demasiado voluminoso cuando la FSMD en cuestión tuviese un
número elevado de estados y condiciones.
Para entender el papel de los diagramas ASM y las tablas de estado-acción en
el proceso de diseño, volveremos al contador de unos del Ejemplo 7.1, y lo redi-
señaremos utilizando un camino de datos específico o a medida (custom) en lugar
de utilizar uno estálldar. En comparación con un camino de datos estándar, un
camino de datos específico se diseña de forma que se ajuste al algoritmo particu-
lar de que se trate y por tanto necesita menos componentes e interconexiones.
Puesto que utiliza menos componentes, el camino de datos específico también
puede proporcionar mejores prestaciones. Por estas razones, se utilizan caminos
de datos específicos en el diseño de ASIC.

EJEMPLO 8.1 Contador de unos: diseño específico.


PROBLEMA
Rediseñar el contador de unos descrito en el Ejemplo 7.1 utilizando un camino de datos a
medida.
SOLUCIÓN

En el caso del contador de unos, realmente sólo necesitamos dos variables: Dato, que alma-
cena el dato entrante, y Cuental, que almacena el número de unos que se han contabiliza-
do en ese dato. Básicamente, el algoritmo analiza el valor del bit menos significativo del
dato, DatouB (LSB, Least Significant Bit), y se suma uno a Cuenta} cuando DatouB = 1.
En ese momento, Dato se desplaza una posición a la derecha y se repite la misma secuen-
*
cia mientras que Dato O. Como antes, el contador de unos espera que Inicio pase a ser I
para introducir el dato desde el puerto de entrada Inport. Cuando Dato = O, el contador de
unos indicará que ha terminado la cuenta de unos poniendo la señal Final a uno y mostran-
do el valor de Cuental a través del puerto de salida Outport durante un ciclo de reloj.
Para diseñar un camino de datos específico, en primer lugar hay que obtener el diagra-
ma ASM para este contador de unos. En la Figura 8.6 se muestran dos versiones del mismo
contador de unos, modelado como una FSMD basada en estados (Moore) [Figura 8.6(a)] y
como una FSMD basada en entradas (Mealy) [Figura 8.6(b)]. Obsérvese que la' versión
basada en estados de la FSMD tiene seis estados puesto que todas las asignaciones a las
variables deben ejecutarse de forma incondicional y sólo los estados siguientes se seleccio-
nan de forma condicional. En el modelo basado en entradas, por contra, el número de esta-
dos se ha reducido a cuatro, puesto que las asignaciones a las variables se ejecutan condi-
cionalmente junto con la selección condicional de los estados siguientes.
Diseño al nivel de transferencias entre registros 343

Cualquiera de estos diagramas ASM puede convertirse fácilmente en una tabla de esta-
do-acción que nos permita obtener las ecuaciones booleanas para la lógica de estado
siguiente y de salida de la unidad de control. En la Figura 8.7(a) y (b), se muestran las tablas
de estado-acción correspondientes a las versiones del contador de unos basadas en estados
y en entradas, respectivamente.
La implementación de este mismo contador de unos se da en la Figura 8.8. Obsérvese
que el camino de datos es igual para ambas versiones puesto que ambos contadores sólo
almacenan dos variables y realizan únicamente dos operaciones. Es decir, ambas versiones
desplazan el valor almacenado en Dato e incrementan el valor de la variable Cuental .

Final=J
Olltput :: Cuenta I

(a) Diagrama paca FSMD basada (b) Diagrama para FSMO basada
en estados (Moore) en entradas (Mealy)

FIGURA 8.6 Diagramas ASM para el contador de unos (diseño de propósito especffico).

Dados estos dos operadores, el camino de datos sólo necesita un registro de desplaza-
miento con carga paralela, que tome los datos desde el puerto lnport, y un contador ascen-
dente/descendente con carga paralela que se haga O al comienzo de la cuenta de unos e
incremente su contenido cuando Dato LSB sea igual a 1.
344 Principios de diseño digital

L~ unidad de control de este contador de unos consta de un registro de estado y de la


lógica de estado siguiente y salida. Para la versión basada en estados, necesitaremos un
registro de estado de tres bits, mientras que para la versión basada en entradas se precisará
un registro de dos bits. La codificación de los estados también se proporciona en las tablas
de estado-acción, utilizando una codificación binaria natural para simplificar la compren-
sión del esquema de la lógica de control.

o O O [IniciO = O, so ] Final; O
So Inicio = 1, SI
O O 1 [ Dato; Inport ]
SI s, Cuental ; O
O O [DotoLSe ; 1, S3 ]
s, Dato LSe ; O, s.
O I I s3 Cuental ; Cuental + I
O O s.
[DatO,. O,
Doto; O,
:;]
s,
Doto; Dato» 1

O [ Final; 1 ]
s, So Output ; Cuental
(a) Tabla basada en estados

O O [ In~c~o = 0, So ] Final; O
So ImclO ; 1, sI
O [ Dato; Inport ]
sI s2 Cuenta} = O
O s,
[ Dato,. 0, S2 ] [ DotoLSe ; 1, Cuental ; Cuental + 1]
Dato; O, s3 Dato,. O Dato; Dato> > I
[Final; 1 ]
s3 So OutpuJ ; Cuenta I
(b) Tabla basada en entradas

FIGURA 8.7 Tablas de Estado-acción para el contador de unos.

Al implementar la lógica de control, podríamos reducir el número y tamaño de las puer-


tas si consideramos que en la versión basada en estados, los estados S2' S3' S4 y s, se pueden
definir de forma unívoca mediante QIQ 'O' QIQO' Q2Q 'O y Q2QO' Teniendo esto en cuenta,
podemos obtener las ecuaciones de estado siguiente para la versión basada en estados de la
Figura 8.8(a) directamente a partir de la tabla de estado-acción.
D2;Q,(siguiente);spato 'LSB+S3+slDato=O)=QIQ 'oVato'LSB+QIQO+Q2Q'o(Dato=O)
DI=Q ¡(siguiente)=s 1+s3DatoLSB+slDato#J)=Q'2Q ' IQO+Q 1Q' oVato LSB+Q2Q 'o!Dato#J)
Diseño al nivel de transferencias entre registros 345

Do=Qo( siguiente) = s,Inicio + S2Dato LSB+si Dato=O)= Q' 2Q' 1Q' o/llicio+Q 1Q' oDatoLSB+
Q2 Q'o!Dato=O)
Inicio ¡npon

- SI
& D2 Q2
1-
~k SRwPL
~
r So

~ t- Datoua •
~ /7

- '-li
~ DI Ql
-
"0" - D
E
Contador
ascendente/
~ ""i. descendente
~ Carga

~
lógica de atado siguiente
-Do Qo
lógico
desa/UIa
Haba/raeWn de ,alUIa

Camino
dedmos
J
~
Final Outpon
(a) Versión basada en estados

Inicio ["pon

L;::f").
-
~
SI
D I QI - l..r.- So
SRwPL

~-
DatoLSB

DatO'Ál
(}

8>l ~
Do Qo -
''0" - D
E
Contador
ascendente/
descendente
~- Carga

Lógica Camino
1
L9g~ca de estado fipienu de salida dedotw

Final Outpon
(b) Versión basada en entradas

FIGURA 8.8 Esquema lógico para el contador de unos.


346 Principios de diseño digital

Igualmente, podemos obtener las ecuaciones para la lógica de salida si recordamos, de


la Sección 7.3, que S,So = 01 carga el dato y S,So = 11 lo desplaza a la derecha:
S, = s. = Q2Q 'O
SO = s, + s. = Q '2Q',QO+ Q2 Q 'O
E = S3 = Q,Qo
Cargar = s, = Q '2 Q ' ,QO
Filial = Salida habilitada = Ss = Q2 QO
Para la versión basada en entradas del contador de unos, el mismo procedimiento per-
mite generar las siguientes ecuaciones de estado siguiente:
D, = Q,(siguiente) = s, + S2 = Q ' ,Qo + Q,Q 'o
Do = Qo(siguiente) = sc/nicio + slDato#J)'=
= Q',Q'c/nicio + Q,Q'oCDato#J)'
Obsérvese que para la versión basada en entradas, la lógica de salida es más compleja
puesto que incluye la ejecución condicional de las operaciones del cantino de datos:
S, = slDato#J) = Q,Q 'oCDato#J)
So = s, + slDato#J) = Q ', Qo + Q,Q'o(Dato#J)
E = s~[Link] =
Q,Q'[Link]
Cargar = s, = Q',Qo
Filial = Habilitación de salida = S3 = Q,Qo
Como se puede ver en la Figura 8.8, mientras que los caminos de datos son los mismos
en los dos casos, el registro de estado en la versión basada en estados tiene más bits pues-
to que esta versión utiliza más estados. De igual forma, la lógica de estado siguiente de la
versión basada en estados es más compleja. La lógica de salida, por otra parte, es más sim-
ple puesto que depende sólo del estado presente. Por contra, la versión basada en entradas
tiene menos estados pero una lógica de salida más compleja que incluye las condiciones
internas y externas.

8.4. SíNTESIS A PARTIR DE DIAGRAMAS ASM


En secciones previas se ha defInido el modelo FSMD y se han explicado los dia-
gramas ASM utilizados para su descripción. Además, tal como se muestra en el
Ejemplo 8.1, un diagrama ASM también puede utilizarse para obtener una imple-
mentación a nivel de transferencias entre registros (RT) que funcione según el
comportamiento especifIcado por el rliagrama. Sin embargo, hasta ahora no se han
intentado optimizar estas implementaciones RT en el marco de alguna métrica de
rliseño. En las tres secciones siguientes se describen varias técnicas utilizadas para
optirnizar las implementaciones que se obtienen a partir de diagramas ASM.
Puesto que cada implementación RT defme una unidad de control y un carni-
no de datos, podemos abordar la optirnización de estas unidades de forma separa-
da. EIi el Capítulo 6, por ejemplo, se rliscutieron técnicas específIcas para rnini-
rnizar las unidades de control, mostrándose primero cómo se puede reducir el
número de estados agrupándolos en estados equivalentes, y luego cómo se puede
reducir el tamaño de la lógica de estado siguiente y de salida merliante una corli-
Diseño al nivel de transferencias entre registros 347

ficación apropiada de estos estados. Además, se muestra que es posible reducir el


tamaño de la unidad de control mediante la minimización booleana y las técnicas
de mapeado a la tecnología descritas en el capítulo 4.
Para minimizar el camino de datos hay tres técnicas generales basadas en los
tres tipos principales de componentes utilizados en un camino de datos: compo-
nentes de almacenamiento, unidades funcionales , y buses. En un modelo FSMD,
el camino de datos queda definido por la asignación de variables en cada uno de
sus estados. En cada estado, se asignan nuevos valores a ciertas variables median-
te operaciones aritméticas, lógicas, y de desplazamiento que ejecutan las unida-
des funcionales. Por tanto, para ejecutar cada sentencia de asignación a una varia-
ble, el camino de datos debe tomar los datos de los componentes de almacena-
miento donde se encuentran las variables que aparecen en el lado derecho de la
sentencia de asignación, pasarlos a través de las unidades funcionales que calcu-
lan el nuevo valor, y después devolver el resultado al componente que almacena
la variable delládo izquierdo de la sentencia. De este comportamiento se deduce
que es posible abordar la optimización del camino de datos minimizando los com-
ponentes de almacenamiento, las unidades funcionales , y los buses que interco-
nectan estos componentes.
Centrándonos en los componentes de almacenamiento, por ejemplo, observa-
mos que las variables del camino de datos pueden estar almacenadas en registros,
bancos de registros, o memorias. Sin embargo, puesto que no todas las variables
están vivas al mismo tiempo, es posible que ciertas variables puedan compartir el
mismo registro, o la misma posición en el banco de registros o en memoria. En
otras palabras, podemos agrupar las variables del camino de datos de forma que
se reduzca el número de posiciones de almacenamiento necesarias. Es más, inclu-
so si ciertas variables están vivas al mismo tiempo, posiblemente no se acceda a
ellas a la vez, lo que significa que podríamos almacenarlas en un mismo banco de
registros o en memoria para que puedan compartir los mismos puertos del banco
de registros o de memoria. De esta forma, al combinar posiciones de almacena-
miento se minimiza el número de puertos en el camino de datos y con ello se redu-
ce el número de conexiones necesarias.
Por otra parte, ciertas técnicas de optimización se centran en minimizar el
número de unidades funcionales del camino de datos. Como se mencionó antes,
en cada estado se asignan nuevos valores a ciertas variables a través de operacio-
nes aritméticas, lógicas, o de desplazamiento, que pueden implementarse en uni-
dades funcionales distintas. No obstante, puesto que la mayoría de estas opera-
ciones se ejecutan en estados distintos, podrían compartir la misma unidad fun-
cional. En otras palabras, es posible reducir el número de unidades funcionales en
el camino de datos agrupando operaciones, y asignando cada uno de esos grupos
de operaciones a una única unidad funcional.
La tercera técnica básica de optimización se centra en la conectividad del
camino de datos. Como se ha mencionado, la ejecución de una sentencia de asig-
nación precisa que el dato pase desde un componente de almacenamiento a la uni-
dad funcional que calcula el nuevo valor, que a su vez retoma después a un com-
ponente de almacenamiento. En otras palabras, el dato se transfiere entre el a1ma-
348 Principios de diseño digital

cenamiento y las unidades funcionales a través de unas conexiones. Sin embargo,


puesto que en diferentes estados se utilizarán conexiones distintas, dichas cone-
xiones se pueden agrl!par en buses, permitiendo así reducir el número de líneas en
el camino de datos.
Estas tres técnicas se muestran para caso del ejemplo de ASIC de la Figura
8.9, que implementa una aproximación a la raíz cuadrada (SRA, Square-Root
Aproximation) de dos enteros con signo, a y b, mediante la siguiente fórmula:

~a2 +b 2 ~ max((O,875x +O,5y),x)


donde x = max(lal,lbl), e y = min(lal, Ibl). Según la Figura 8.9(a), este ASIC tiene
dos puertos de entrada, In l e In 2, que son utilizados por los números enteros a y
b, Y un puerto de salida Out. Como puede verse en el diagrama ASM de la Figura
8.9(b), el ASIC lee los puertos de entrada y comienza el cálculo cuando la entra-
da de control Inicio se hace igual a l. En el estado SI' se calculan los valores abso-
lutos de a y b, Y en s2 se asigna el máximo de esos dos valoreS a x y el mínimo a
y. En el estado s3 se desplaza el valor de x tres posiciones a la derecha para obte-
ner O.125x y se desplaza y una posición a la derecha para obtener O.5y. El ASIC
calcula O.875x restando O.125x de x en el estado s4' En el estado Ss se suman
O.875x y O.5y, mientras que en el estado S7 se determina el máximo de x y la
expresión O.875x+O.5y. En el estado s7' el ASIC genera el resultado y lo muestra
a través de Out durante un ciclo de reloj . Al mismo tiempo, pone a 1 la señal de
control Final, para indicar que el dato que ha aparecido en Out es un resultado
válido.
Para determinar los recursos que se precisan a partir de este diagrama ASM,
es necesario generar las tablas de uso de variables y operaciones que se muestran
en las Figuras [Link](a) y 8.1O(b). En la tabla de uso de variables, cada fila corres-
ponde a una de las variables que aparecen en el diagrama ASM y cada columna
representa un estado. Entonces, para cada variable se asigna una x en la(s) colum-
na(s) correspondiente(s) al (a los) estado(s) donde la variable está viva. Una varia-
ble se considera viva en el primer estado tras el flanco de subida de la señal de
reloj que le asigna su nuevo valor y también en todos los estados, desde el primero
al último inclusive, en los que se utiliza su nuevo valor. En la Figura 8.1O(a), por
ejemplo, se asignan los valores a 'Ias variables a y b en el flanco de subida de la
señal de reloj que indica el comienzo del estado s l' pero no se utilizan en ningún
otro estado. Por consiguiente, sólo están vivas en el estado s l' En cambio, la varia-
ble xrecibe su valor al comienzo del estado s3' pero como este valor de xtambién
se utiliza en los estados s4 y S6' la variable xestá viva en los estados S3' S4' ss' y s6'
A partir de esta tabla, podemos ver las variables que están vivas en cada estado.
Más importante aún, la Figura 8.1O(a)'lambién muestra el número máximo de
variables vivas en un estado. Así, en los estados S4 y Ss hay tres variables vivas.
Podríamos concluir que se necesitan al menos tres registros en el camino de datos
de esta implementación de la SRA. En consecuencia, debemos combinar las
variables de la Figura 8.10(a) en tres grupos de manera que cada uno de ellos con-
tenga variables que no están vivas al mismo tiempo y se puedan almacenar en el
Diseño al nivel de transferencias entre registros 349

mismo registro. A partir de este ejemplo podemos ver que una de las principales
tareas de la síntesis RT consiste en la agrupación de variables (¡nerging o grou-
ping variables) y en la asignación de estos grupos a los registros o posiciones de
'memoria de forma que se minimice el número de componentes de almacena-
miento o alguna otra métrica asociada al diseño, como las prestaciones, la poten-
cia disipada, o la testeabilidad. Puesto que cada grupo de variables comparte un
registro o una posición de memoria, frecuentemente esta tarea recibe el nombre
de compartición de registros/memoria (registerlmemory sharing~

-,1 -.1
....- 1
Inicio C_ In, In,

Final Out

t t
(a) Diagrama de bloques

(h) Diagrama ASM

FIGURA 8.9 Aproximación de la raíz cuadrada.


350 Principios de diseño digital

,., &,¡ a. s. ~ s" s.,


a x
b x
t, X

'2
X
X
X X X X
Y X

'3 X

'. X X
X
"
'. X
x
"
2 3 2

(a) Uso de variables

s;
abs
min
2
"= 2
1
max 1
» 2 2
1
+ 1
IÍImerode 2
opaaciooea
(b) Uso de operaciones

FIGURA 8.10 Uso de los recursos en la aproximación de la raíz cuadrada.

De igual forma, podríamos determinar el mínimo número de unidades nece-


sarias para ejecutar todas las operaciones del diagrama ASM. Para ello usaríamos
la tabla de la Figura [Link](b), en la que las filas representan los distintos tipos de
operador que aparecen en el diagrama ASM y las columnas, igual que antes,
corresponden a los estados. A partir de esta tabla llegamos a la conclusión de que
son necesarias dos unidades que puedan calcular los valores absolutos (indicados
mediante 11 en el diagrama ASM) y desplazar datos (operación indicada con» en
el diagrama ASM), y una unidad que pueda realizar las operaciones max, min, +,
y -. A partir de estos requisitos, el enfoque más directo para diseñar el camino de
datos para la SRA consiste en utilizar dos unidades para el cálculo de los valores
absolutos, dos desplazadores, una unidad para la determinación del máximo y otra
para la del mínimo, un sumador, y un restador. A partir de la Figura 8.11, que
muestra el diseño de cada unidad, podemos ver que esta implementación directa
Diseño al nivel de transferencias entre registros 351

necesita un sumador, cinco restadores, cuatro selectores, y varias puertas.


Obsérvese que los dos desplazadores no requieren ningún circuito lógico porque
se implementan mediante una reordenación de las líneas.
Sin embargo, el problema de esta implementación directa está en que no nece-
sariamente hace falta una unidad funcional por operación: puesto que no todos los
estados utilizan todas estas operaciones simultáneamente, la implementación
mediante una unidad funcional por operación implicará la existencia de unidades
funcionales que estarán ociosas la mayor parte del tiempo. De hecho, corno no se
necesitan más de dos operaciones en ninguno de los estados, es más eficiente
construir unidades funcionales que puedan realizar más de una operación, puesto
que esto permitiría un ahorro sustancial en hardware.
Por ejemplo, en la descripción de la SRA, la suma y la resta nunca se realizan
al mismo tiempo, lo que significa que se pueden agrupar estas dos operaciones en
una única unidad funcional llamada sumador/restador. En este caso se gana un
sumador y un complementador a expensas de una puerta lógica EX -OR, corno
muestra la Figura 8.1I(k). Por otra parte, agrupar el desplazador de 1 bit y el de 3
bits no supone un ahorro de hardware y precisa un selector adicional, corno mues-
tra la Figura 8.11 (h). A partir de estos ejemplos, se ve como podernos realizar la
segunda tarea en importancia para la síntesis RT, que consiste en la agrupación
de operadores (rnerging o grouping operators) y en el diseño de la unidad fun-
cional para cada grupo, minimizando una métrica de diseño dada como puede ser
el área, el número de puertas o transistores, o el número de unidades funcionales
en el camino de datos. Esta tarea también recibe el nombre de compartición (o
uso compartido) de unidades funcionales (functional unit sharing).
Si nuestro primer objetivo fuese minimizar el número de líneas, también con-
sideraríamos la agrupación de líneas en buses puesto que cada conexión entre dos
unidades se utiliza en muy pocos estados y permanecería inactiva gran parte del
tiempo. Por ejemplo, consideremos las conexiones del camino de datos para la
SRA que utiliza un registro por variable y una unidad funcional para cada opera-
ción. Las conexiones para este camino de datos se dan en la tabla de conectividad
de la Figura 8.12, en la que cada fila corresponde a una unidad funcional y cada
columna representa un registro. Para rellenar la tabla, utilizamos una 1 para cada
conexión entre un registro y la entrada a una unidad funcional, y para cada cone-
xión entre la salida de una unidad funcional y un registro, utilizamos la letra o.
Como puede verse en la Figura 8.12, la unidad para la SRA necesitaría 14 cone-
xiones de entrada y 9 conexiones de salida, es decir un total de 23 conexiones.
No obstante, cada estado usa muy pocas de estas 23 conexiones. De hecho, a
partir del diagrama ASM sabernos que el máximo número de conexiones se utili-
za en el estado S2' donde se necesitan cuatro conexiones de entrada, que comuni-
can los registros que almacenan las variables t, y t2 con las unidades min y mm:,
y dos conexiones de salida comunicando las unidades min y mm: con los registros
que almacenan las variables x e y. En otras palabras, el número máximo de cone-
xiones que se usan al mismo tiempo es seis.
A partir de este ejemplo se puede ver que entre las tareas principales de la sín-
tesis RT, la tercera es la agrupación de conexiones (rnerging o grouping connec-
352 Principios de diseño digital

tions) y la asignación de un bus a cada grupo de conexiones de forma que se mini-


mice el costo de conexión. Obsérvese que el costo de conexión incluye el costo de
los adaptadores de bus necesarios para conectar cada unidad al bus, y el costo de
los selectores de entrada que se necesitan siempre que dos o más buses se conec-
tan a la misma entrada de un componente de almacenamiento o de una unidad fun -
cional. Esta tarea también se denomina con frecuencia compartición de bus.
'·0" b "O" b

Ibl Ibl

(a) Cálculo del valor absoluto (b) Cálculo del valor absoluto
(versión 1) (versión 2)

a b a b a b

Control
minlmax

mil!(a,bJ max(a,b) minlmax(a,bJ

(e) Cálculo del mínimo (d) Cálculo del máximo (el Cálculo del máximo
o el mínimo

~w Coouolde

~~
desplazamiento

a» I a» 3Ja» 3

(f) Desplazamiento (g) Desplazamiento (h) Desplazamiento


de 1 bit a la derecha de 3 bits a la derecha de 163 bits a la derecha

.til
a b

a b a b
,~~~
~O ~O T
a'" a·b u+bla-b

(i) Sumador (j) Restador (k) Sumador/restador

FIGURA 8.11 Elementos sencillos de la biblioteca de componentes.


Diseño al nivel de transferencias entre registros 353

absl J O
abs2 J O
min J J O
max , J J J O J O
»3 J O
»1 I O
J J O
+ I J O

FIGURA 8.12 Tabla de conectividad.

8.5. USO [Link] DE REGISTROS (AGRUPACiÓN


DE VARIAS-LES).
Como mencionílmos en la Sección 8.2, una de las tareas principales en la optimi-
zación de un camino de datos implica la agrupación de variables de forma que
compartan un registro o una posición de memoria común. La ventaja de esta agru-
pación estriba en la reducción en el número y tamaño de los componentes de
almacenamiento, lo que a su vez supone una disminución del área de silicio y por
consiguiente del costo de fabricación del ASIC. Puesto que un registro puede ser
compartido sólo por aquellas variables cuyos tiempos de vida no se solapan, esta
técnica necesita que se conozcan los tiempos de vida de cada variable.
El tiempo de vida de una variable se define como el conjunto de estados en
los que esa variable está viva, lo que incluye el estado siguiente a aquél en el que
se asigna un nuevo valor (estado de escritura, o write state), todo estado en el que
la variable aparece en el lado derecho de una sentencia de asignación (estado de
lectura, oread state), y todos los estados en cualquier camino desde el estado de
escritura y un estado de lectura. Obsérvese también que cada variable puede tener
múltiples asignaciones y que cada valor asignado se puede utilizar varias veces.
Una vez determinado el tiempo de vida de cada variable, se pueden agrupar las
variables para las que dicho tiempo no se solapa y se asigna un registro a cada
grupo.
Al agrupar variables, uno de los objetivos usuales es intentar que haya el
menor número de registros posible, lo que significa buscar la partición de las
variables en el menor número de grupos posible asegurando que cada variable se
encuentra en uno de dichos grupos. Este objetivo puede alcanzarse mediante un
algoritmo de lado-izquierdo (Jeft-edge algorithm), que busca agrupar tantas
variables como sea posible en cada registro. Como puede verse en la Fignra 8.13,
este algoritmo empieza creando una lista de prioridad en la que las variables se
ordenan según su estado de escritura. Si dos variables tienen el mismo estado de
escritura, se da mayor-prioridad a la que tiene un tiempo de vida más largo. Si dos
variables tienen los mismos estados de escritura y el mismo tiempo de vida, la
354 Principios de diseño digital

prioridad se asigna aleatoriamente. Cuando se han ordenado todas las variables,


el algoritmo considera un nuevo registro, le asigna la variable que está al princi-
pio de la lista, y explora la lista de arriba abajo, asignando al mismo registro las
variables que no se solapen según vayan apareciendo. Cuando el algoritmo no
encuentre más variables no solapadas, termina la asignación de variables al regis-
tro considerado. Si en ese momento la lista de prioridad no está vacía, el algorit-
mo toma un nuevo registro y repite el procedimiento entero de asignación hasta
que no haya más variables en la lista de prioridad.

Detcnninar los tiem¡x>S


de vida de las variables

!
Ordenar las variables
según estado de escritura
y valor del tiempo de vida

.~

Tomar un nuevo registro

!
Asignar al registro todas
las variables no solapadas
empezando por la
cabecera de la lista

~
Eliminar de la lista las
variables asignadas

.~ . Lisla vacía'?

FIGURA 8.13 Algoritmo de lado izquierdo.

Para clarificar el comportamiento del algoritmo de lado-izquierdo, lo utiliza-


remos para agrupar variables y asignarlas a los registros del camino de datos para
la SRA. En primer lugar, se han ordenado todas las variables según sus estados de
escritura y tiempos de vida como muestra la Figura 8.14(a). Después se toma el
registro R) y le asignamos la variable a, así como la siguiente variable que no se
Diseño al nivel de transferencias entre registros 355

solapa con ella t[ y a continuación x y t7 . En este momento, puesto que no existen


más variables no solapadas en la lista, se eliminan las variables ya asignadas al
registro R[. A continuación, se toma el registro ~, y, de [Link], se le asig-
nan las variables b, t2, y, t4 , y t6 . Finalmente, asignamos las variables restantes, t3
y t5 , al registro R 3, como indica la Figura 8.14(b). Utilizando estas asignaciones,
es posible diseñar un camino de datos para la SRA que necesita tres registros,
como aparece en la Figura 8.14(c).

B. Ss Be Sr
a x
b X
t, X
t2 X
X X X X X
Y X
t. X X
t3 X
15 X
l. X
17 X

(a) Lista de variables ordenadas

RJ = [a, 11' X, 17]


R¿ = [h, 12, y. 14 , t61
R ) = [13. 'o5J

(b) Asignación de registros

In, 111 2

I - -,¡ 11 I
I Selector I L Selector I I Selector I
l
1 R, I I R, I I R, I
I 1 1 1
1
I
lal 11
1
Ibl 1 1
1 1
mú, 1 L max
I 1 1
l 1 +
I
11 - 11
1
»[ 11
I
» 3 1
LJ L- ---.l I I L-
I~
I
Output
(e) Esquema del camino de datos

FIGURA 8.14 Registros compartidos después de aplicar el algoritmo de lado izquierdo.


356 Principios de diseño digital

-T
I I I
T -,
Inicio In , In,
COIIIroI
Final Out

t t
(a) Diagrama de bloques

(b) Diagrama ASM

FIGURA 8.9 Aproximación de la raíz cuadrada.

<:;omo demuestra la Figura 8. IO(a), no podemos reducir el número de registros


·en el camino de datos a menos de tres. No obstante, puesto que hay muchos dise-
ños posibles de caminos de datos con tres registros, es cuestión de seleccionar UIlO
que minimizase una segunda métrica de diseño, tal como es el costo de conecti-
vidad. Por ejemplo, el costo de conectar puertos de E/S, registros, y unidades fun-
cionales se puede medir a llartir del número de entradas en los selectores, asu-
Diseño al nivel de transferencias entre registros 357

miendo un coste constante para todas las entradas de un selector. En el caso del
camino de datos de la SRA mostrada en la Figura 8.14(c), el número de entradas
a los selectores es 10.
Par~ desarrollar un algoritmo que minimice el número de registros junto con
el costo de conectividad, se da prioridad a la combinación de ciertas variables. La
mayor prioridad corresponde a dos variables que se utilicen como operandos a la
izquierda o a la derecha del mismo tipo de operador y a las variables cuyo valor
es generado por el mismo tipo de operador, debido a que la agrupación de tales
variables puede suponer el ahorro de una entrada a un selector. Este concepto se
muestra en la Figura 8.15(a) para el caso de dos sumas (x = a + b e y = e + d)
realizadas en diferentes estados, con operandos distintos y asignadas a variables
distintas. Si se asume que ambas sumas pueden ejecutarse en la misma unidad
funcional, la agrupación de operandos y resultados puede ocasionar un ahorro de
entradas a selectores. Por ejemplo, si se asigna cada variable a un registro distin-
to, se obtendría el diseño de la Figura 8.15(b), que necesita 10 entradas a selecto-
res. Sin embargo, si se agrupan las variables a y e, b y d, y x e y, y se asigna cada
par al mismo registro, se reduce en tres el número de entradas a selectores, como
muestra la Figura 8.15(c).

Selector Selector
I x-a+b

y=c+d

(a) Diagrama ASM parcial (h) Camino de datos sin registros (e) Camino de datos con registros
compartidos compartidos

FIGURA 8.15 Agrupación de variables con fuentes y destinos comunes.

En general, dadas n variables utilizadas como fuente o destino del mismo ope-
rador o unidad funcional, hay un ahorro potencial de n-l entradas a selectores si
esas n variables comparten el mismo registro. Para tener en cuenta el ahorro
potencial de la agrupación de variables, se presenta un nuevo algoritmo que esta-
blece una partición en un grafo de compatibilidad de variables. Este grafo de
compatibilidad (co/'[lpaJibility graph) está constituido por nodos y arcos tales que
cada nodo representa una variable y cada arco entre dos nodos representa la com-
patibilidad o incompatibilidad para la agrupación de las variables representadas
por estos dos nodos. Hay dos tipos de arcos en el grafo: un arco de incompati-
bilidad (representado por una línea discontinua) entre dos nodos indica variables
con tiempos de vida solapados, mientras que un arco prioritario entre dos nodos
indica variables con tiempos de vida no solapados que sirven como fuente o des-
358 Principios de diseño digital

tino de las mismas unidades funcionales. Cada arco prioritario tiene un peso de
prioridad que indica el número de entradas a selectores que pueden ahorrarse. El
peso de prioridad tiene la forma sld, donde s es igual al número de unidades fun-
cionales que utilizan ambos nodos como operandos a la derecha o a la izquierda,
y d es igual al número de unidades funcionales diferentes que generan resultados
para ambos nodos.
A continuación describimos un algoritmo de partición de grafos que agrupa
nodos compatibles en supernodos hasta que todos los nodos del grafo son incom-
patibles. Más concretamente, el algoritmo siempre agrupa dos nodos que están
conectados por arcos de prioridad con el peso mayor y crea un supemodo con
ellos. A continuación, se borran todos los arcos dentro del supernodo y se crean
nuevos arcos entre el supernodo y los otros nodos. Por ejemplo, se crea un arco
de incompatibilidad a cada uno de los nodos que son incompatibles con alguno de
los nodos del supe1l1odo, Y de igual forma, se crea un arco prioritario a cualquier
nodo que se utilice como fuente o destino común con al menos un nodo del super-
nodo y es compatible con todos los nodos del supernodo. El peso del nuevo arco
de prioridad se calcula como antes. Este procedimiento se resume en la Figura
8.16.

Crear el grafo de
compatibilidad

Agrupar los nodos de


prioridad más alta

Actualizar el grafo de
compatibilidad

FIGURA 8.16 Algoritmo de partición de grafos.

Si aplicamos este algoritmo al ejemplo del camino de datos para la SRA, obte-
nemos una agrupación de variables que es ligeramente diferente de la agrupación
obtenida con el algoritmo de lado-izquierdo. En primer lugar, necesitamos crear
Diseño al nivel de transferencias entre registros 359

un grafo de compatibilidad, como muestra la Figura 8.17(a). Obsérvese que todas


las variables que tienen tiempos de vida solapados se han conectado con una línea
discontinua, que significa que no pueden agruparse. Para crear los arcos de prio-
ridad que indican compatibilidad asumimos la biblioteca de componentes básicos
de la' Figura 8.10, que incluye unidades para calcular el valor absoluto, el míni-
mo, el máximo, el desplazamiento, la suma, y la resta, además de las unidades
funcionales que permiten la combinación de operaciones, tales como un suma-
dor/restador, una unidad minlmax, o un desplazador de dos vias . Si se supone que
el diseño final estará constituido por componentes de esta biblioteca, existirán
arcos prioritarios entre las variables / l' /2' Y x , Y /1' /2' Y /6 puesto que todas ellas
son entradas a la misma unidad ma.x; hay arcos prioritarios entre las variables x,
y, y /7 porque son destinos posibles de una unidad min/max; y hay arcos priorita-
rios entre /3 y /5 Y /5 Y/6 porque son entradas y salidas posibles de un sumador/res-
tador.
,..,
G) 011

0) " ,..,
y
,
~
G 111'
"

(a) Grafo de compatibilidad inicial (b) Grafo de compatibilidad después de agrupar 13, t$ Y '6

o o o
(e) Grafo de compatibilidad después de agrupar 1]> x Y'7 (d) Grafo de compatibilidad después de agrupar '2 e y

~,

(e) Grafo de compatibi lidad final

FIGURA 8.17 Algoritmo de partición de grafos para la SRA.

Tras crear este grafo de incompatibilidad, podemos empezar la agrupación de


variables y la creación de supemodos. En este caso todos los arcos prioritarios tie-
nen el mismo peso, así que primero se seleccionan aquellos nodos cuya agrupa-
ción no elimine ningún arco prioritario del grafo de compatibilidad. En otras pala-
360 Principios de diseño digital

bras, agrupamos las variables 13, 15, Y 16 con una posible disminución de dos entra-
das a selectores, y creando con ello el supemodo [t3' t5' 16l que muestra la Figura
8.17(b). A continuación, se selecciona el nodo con el máximo número de arcos de
prioridad, concretamente el.x; y lo agrupamos con 17 y luego con I I como indica la
Figura 8.17(c). Obsérvese que al agrupar x, 17, y I I se han eliminado dos arcos
prioritarios del grafo de compatibilidad, entre y y 17 Y entre 12 y x. Ahora se puede
agrupar 12 y luego y con el supernodo [13, 15,16], como muestra la Figura 8.l7(d).
Finalmente, podemos asignar aleatoriamente la variable a al supernodo [11' x, 17 l
y b al supemodo [t2' y, 13, 15, 16l para reducir más el número de registros necesa-
rios, de forma que el supemodo [a, 11' x, t71 pueda asignarse a! registro Rl' el
[b, 12, y, 13,15, 16l al registro Rz, y el [14l al registro R3'
Para comparar el costo de conectividad de las soluciones generadas por los
algoritmos de lado-izquierdo y de partición de grafos, utilizamos las mismas ocho
unidades funcionales que se usan en la Figura 8.14(c), donde se ha diseñado el
camino de datos con la asignación de registros generada por el algoritmo de lado-
izquierdo. A partir del camino de datos mostrado en la Figura 8.18, construido con
la asignación de registros obtenida mediante el a!goritmo de partición de grafos,
vemos que el número de entradas a selectores es 9, una menos que en la Figura
8.14(c). La diferencia podría haber sido mayor si se hubiesen utilizado unidades
multifuncionales para el diseño de la Figura 8.18 en lugar de unidades para una
sóla función, puesto que al haber menos unidades habría menos conexiones. La
observación anterior sugiere que se deberían combinar operaciones en unidades
multifuncionales para conseguir una mayor minimización del costo de los recursos
del camino de datos y de las conexiones, ta! y como se discute en la Sección 8.6.
R ¡ = [a, t i' x, '7]
R:¡ '" [b, 12, y, ' 3' 15, lJ
RJ = [t4]
(a) A signación de registros

I ,..----, I 111
Selector I Selector I

I R, I I R, I I R, I
I I I I I
I
I
101 II
I
Ibl I
I I
I minllmax ll
I I I
+
I I
II - 11
I
» 1 II
I
»3 I
LJ L LJ I I I
~-

(b) Esquema del camino de datos

FIGURA 8. 18 Asignación de registros generada por el algoritmo [Link]ón de grafos.


Diseño al nivel de transferencias entre registros 361

8.6. USO COMPARTIDO DE UNIDADES FUNCIONALES


(AGRUPACiÓN DE OPERADORES)
La principal fmalidad que hay tras el uso compartido de unidades funcionales o
agrupación de operadores es la minimización del número de unidades funcionales
en el camino de datos. Igual que en el uso compartido de registros, el uso compar-
tido de unidades funcionales es posible porque el camino de datos no ejecuta cual-
quier operación en cualquier estado. De esta forma, se pueden agrupar los opera-
dores similares en una única unidad multifuncional, que así se usará con mayor fre-
cuencia, incrementandose su utilización. Por supuesto, en algunos casos la agru-
pación de operaciones de esta forma no reduce el coste del camino de datos; debi-
do a que a menudo ocurre que operadores distintos requieren diseños estructural-
mente diferentes y su agrupación no produce mejoras sino incluso costos mayores.
En muchos casos, no obstante, la asociación de operaciones puede producir reduc-
ciones no despreciables en el costo, como se muestra en la Figura 8.19.

y = c- d

(a) Diagrama ASM parcial (b) Camino de dalos sin registros (e) Camino de datos con registros
compartidos compartidos

FIGURA 8.19 Compartición de unidades funcionales.

En este ejemplo hemos asumido que el camino de datos realiza dos operacio-
nes diferentes, la suma y la resta, con operandos diferentes en estados distintos,
como indica la Figura 8.19(a). Si implementarnos el diagrama ASM utilizando
unidades unifuncionales, se obtendría el diseño de la Figura 8.19(b), en el que el
camino de datos necesita tanto un sumador como un restador. Sin embargo, se
podría conseguir la misma funcionalidad mediante un sumador/restador y dos
selectores, como muestra la Figura 8.19(c). Obviamente, el segundo diseño es'
preferible cuando el costo del sumadorlrestador y los dos selectores sea menor
que el de un sumador y un restador por separado. Es en estos casos en los que
compartir unidades funcionales podría ser ventajoso. De esta forma sería cuestión
de desarrollar un algoritmo que combinase operadores en unidades funcionales de
forma que el costo total de todas las unidades multifuncionales y los selectores
necesarios sea mínimo. Para ello podemos utilizar el algoritmo de partición de
grafos presentado en la Sección 8.5. Ahora se muestra el algoritmo para la agru-
pación de operadores en el ejemplo del camino de datos para la SRA dado en el
diagrama ASM de la Figura 8.9. Para este ejemplo suponemos que están disponi-
362 Principios de diseño digital

bIes las bibliotecas de componentes simples y complejos de las Figuras 8.11 y


8.20. Obsérvese que la biblioteca de componentes complejos de la Figura 8.20
incluye varias unidades multifuncionales cada una de las cuales pueden computar
tres o más de las siguientes operaciones: valor absoluto, mínimo, máximo, suma,
y resta. Cada una de estas unidades utiliza un sumador, uno o dos selectores, puer-
tas lógicas AND y/o EX-OR, y algunas puertas de control. No obstante, por sim-
plicidad, hemos omitido las puertas de control en el cálculo del costo.
, b , b

1-

Bit de
signo o 1 Valor Absoluto Bit de sign I Sumador f-J O O Suma
1 O Mfnimo O 1 Mínimo
1 1 Máximo ~f'>-I ~lecl~r I 1 O Resta
1 1 Máximo
" I I
Selector
01
l
(a) Unidad para calcular el mínimo, (b) Unidad para calcular la suma, la resta,
el máximo y el valor absoluto el mínimo, y el máximo
, b
~ t-
, b

11. 0PBW:IClN I ~ ~
c; ~ Bil de signo Sumador
1 O Suma 001 Suma
Bit de signo
Sumador
O 1 Valor Absoluto l I O,
Selector
I 1 OO Valor Absoluto
I 1Selector
I o 11 1 Resta r- 1 O1 Resta
01 1 1O Mínimo
1
(e) Unidad para calcular la suma,
la resta, y el valor absoluto "
r> I
Selector
l
111 Máximo
(d) Unidad para calcular la suma, la resta,
el núnimo, el máximo y el valor absoluto

FIGURA 8.20 Elementos complejos de la biblioteca de componentes.

Para asociar los operadores indicados en el diagrama ASM, primero hay que
construir un grafo de compatibilidad que indique los operadores que pueden com-
binarse. Cada nodo del grafo de compatibilidad representa un tipo de operador del
diagrama ASM, aunque cada grafo puede tener varios nodos para cada tipo de
operador. Como norma, el número de nodos deberá ser igual al máximo número
de apariciones de cualquier tipo de operador en alguno de los estados. Para indi-
car la compatibilidad de los distintos operadores, es preciso conectar los nodos del
grafo mediante arcos prioritarios o arcos de incompatibilidad. Como era de espe-
rar, un arco de incompatibilidad indica que los operadores que conecta no pueden
agruparse bajo ninguna circunstancia puesto que se usan concurrentemente en el
mismo estado. Por contra, los arcos prioritarios indican preferencias para estable-
cer agrupaciones, debido a las similitudes de los operadores en cuanto a su cons-
trucción o por la sustancial reducción en el costo de conexiones del camino de
Diseño al nivel de transferencias entre registros 363

datos que producen. En la siguiente explicación de la agrupación de operadores,


se consideran ambos tipos de métricas. •
Para crear el grafo de compatibilidad mostrado en la Figura 8.21(a), exclui·
mos los operadores de desplazamiento puesto que su costo es cero y su agrupa-
ción con otros operadores sólo podría incrementar el costo del camino de datos
para la SRA. Como puede verse, incluimos dos operadores de valor absoluto en
el grafo, puesto que los valores absolutos de a y b se calculan simultáneamente en
el estado SI' Al incluir los operadores restantes, se obtiene un grafo con seis nodos
y dos arcos de incompatibilidad: uno conecta los dos operadores de valor absolu-
to que se utilizan en el mismo estado, mientras que el segundo arco conecta los
operadores máximo y mínimo que son incompatibles por la misma razón.
Si utilizamos unidades unifuncionales, entonces la implementación del cami-
no de datos para la SRA precisa dos unidades de valor absoluto y una unidad para
cada una de las operaciones de máximo, mínimo, suma, y resta. Como se mues-
tra en la Figura 8. 12(b), el costo total de estas unidades es de cinco inversores
lógicos, seis sumadores, y cuatro selectores.
Al agrupar los operadores en el grafo de compatibilidad podemos reducir el
costo del camino de datos de diferentes formas. Dos de estas formas se muestran
en las Figuras 8.21(c) y (e), con los correspondientes costos del camino de datos
en las Figuras 8.21(d) y (f). Obsérvese que las dos alternativas precisarán dos
puertas lógicas AND, un inversor lógico, una puerta lógica EX-OR, dos sumado-
res y dos selectores, con un costo total mucho menor que el de la implementación
original con unidades unifuncionales. Las conexiones del camino de datos para
estas dos alternativas se muestran en las Figuras 8.22(a) y 8.22(b). En estas figu-
ras se puede ver que cada diseño necesita nueve entradas a selectores, como ocu-
rría en el camino de datos de la Figura 8.18(b). Por otra parte, los diseños de la
Figura 8.22 tienen un costo de unidades funcionales mucho menor, lo que signi-
fica que globalmente el diseño es más eficiente en cuanto a su costo.
Además es posible reducir más el costo del camino de datos minimizando el
costo de conectividad al agrupar operadores. Para conseguirlo debemos utilizar
los arcos prioritarios del grafo de compatibilidad como se hizo en el caso de la
agrupación de variables . Aquí también, el peso de estos arcos prioritarios se basa
en el número de fuentes y destinos comunes.
Para ilustrar el cálculo de los pesos de prioridad, se considera como ejemplo
el diagrama ASM parcial de la Figura 8.23(a), en el que una operación de suma y
otra de resta se completan en estados distintos con diferentes conjuntos de ope-
randos, asignándose sus resultados a variables distintas. Además, si las variables
a y e, b y d, Yx e y comparten los mismos registros, un diseño de camino de datos
con un sumador y un restador separados precisaría cuatro selectores de dos entra-
das y un selector de 3 entradas, con un total de 11 entradas a selectores, como
muestra la Figura 8.23(b). Por otro lado, un camino de datos que utilice un suma-
dor/restador sólo precisaría dos selectores de tres entradas y un selector de dos
entradas, con un total de 8 entradas a selectores, como muestra la Figura 8.23(c).
En otras palabras, la asociación de un sumador y un restador en un circuito suma-
dor/restador proporciona un ahorro de tres entradas a selectores puesto que el
364 Principios de diseño digital

0--0
lal 1 1
Ibl J 1

8---·-----8 mín
máx
+
J
1
J
J
1

o o·
(a) Grafo de compatibilidad, (b) Tabla de costo

[Ial/mín] 1 1 2
[lbVmáx/+/-] 1 2
~".tm~

(e) Alternativa de agrupación (d) Tabla de costo

8-- -----8
[Ial/mín/+] 1 2
[lbVrnáx/-] I 2

(e) Alternativa de agrupación (f) Tabla de costo

FIGURA 8:21 Agrupación de operadores para la implementación de la SRA.


Diseño al nivel de transferencias entre registros 36S

sumador y el restador tienen dos fuentes comunes y un destino común. Podemos


extraer como regla que la agrupación de operadores que tienen n fuentes comunes
como operandos a la izquierda (derecha) permite ahorrar n-l entradas a selecto-
res. Igualmente, agrupando los operadores que tienen n destinos en común se aho-
rrarán n-l entradas a selectores. Con estas reglas en mente, la agrupación de ope-
radores puede minimizar el número de entradas a selectores si se asigna mayor
prioridad a los nodos conectados mediante un arco prioritario y con el mayor
número de fuentes y destinos comunes.

11
I

I
Selector

R,
I

1
1Sele<;tor I
1 R, 1
n
1 R, 1
1

I I
Selector I
I 1
1 »1 11
I
»3 1
I~7 I [abslm(n]
I I (abslmáv'+ /-] I I L
'"'1
(a) Esquema del camino de datos para la asignación de unidades
de la figura 8.2 1(c)

11
I Selector

1
I
R, J
I Selector I

L
I
R, 1
IL R, 1
-

I I Selector
I 1»
1
1 11
I
»3 1
I~7 ;I [abs/mfn/+] I I [abslmáv'-J I I L
(b) Esquema del camino de datos para la asignación de unidades
de la figura 8.21(e)

FIGURA 8.22 Conectividad del camino de datos.

Volviendo al grafo de compatibilidad de la Figura 8.21(a), ahora se añaden los


arcos prioritarios y se rediseña el carrúno de datos para la SRA de forma que se
366 Principios de diseño digital

reduzca el número de entradas a selectores al agrupar operadores. Por ejemplo, en la


Figura 8.24(a), hemos marcado cada arco prioritario con un peso s/d, en el que sindi-
ca el número de fuentes comunes y d el número de destinos comunes. Como puede
verse, el arco entre los operadores + y - está marcado con III puesto que dos varia-
bles fuente (operandos a la derecha), t3 y 15, Y dos variables destino, 15 y 16, compar-
ten el registro R2 . Igualmente, el arco entre los operadores min y - está marcado con
2/1 puesto que min y - tienen dos fuentes comunes y un destino común. Es decir, los
operandos a la izquierda, I I yx, comparten el registro Rl' los operandos a la derecha,
t2 y 13 , comparten el registro R2, y los resultados, y y 15' comparten el registro R 2·

I I I
Inicio ln l In,
C""""I
Fi,w{ Out

t t
(a) Diagrama de bloques

(b) Diagrama ASM

FIGURA 8.9 Aproximación de la raíz cuadrada.


Diseño al nivel de transferencias entre registros 367

s, t
I x=a +b

t
Si
~ Selector .

t ciu
(a) Diagrama ASM parcial (b) Diseño sin unidades agrupadas (e) Diseño con unidades agrupadas

FIGURA 8.23 Prioridades para la agrupación de unidades.

(a) Grafo de compatibilidad (h) Grafo de compatibilidad tras


agrupar + y-

88

(e) Grafo de compatibilidad Leas (d) Particiones finales del grafo


agrupar mín, +, y-

FIGURA 8.24 Partición del grafo asociado al camino de datos para la SRA con R, = [a, t,. x, t,l,
R2 = lb, t2 , y, 1" t5 , tsl, Y R3 = [tJ.

Ahora podemos utilizar el algoritmo de partición de grafos presentado en la


Figura 8.16 para agrupar estos operadores en las unidades funcionales apropi adas.
Según este algoritmo, primero se intentan agrupar aquellos operadores que tienen
una estructura de diseño similar, tal como la suma y la resta, los operadores min
y max, y el desplazamiento a izquierda y a derecha. En general, esta forma de
agrupación de operadores similares producirá una mayor reducción del costo. En
368 Principios de diseño digital

el caso del algoritmo para la SRA, por ejemplo, podríamos agrupar los operado-
res + y - en un único supernodo y después redibujar el grafo de compatibilidad
como muestra la Figura 8.24(b). A continuación, añadimos el operador min a este
supernodo puesto que de todos los nodos del grafo es el que tiene mayor número
de fuentes comunes (dos) y destinos comunes (uno). La nueva disposición del
grafo de compatibilidad se muestra en la Figura 8.24(c). Finalmente, añadimos a
este supernodo el operador valor absoluto de la variable a Así se llega a la parti-
ción del grafo de la Figura 8.24(d), que no se puede reducir más.

I J I
Inicio In, In,
Control
Final Ou'

t t
(a) Diagrama de bloques

(b) Diagrama ASM

FIGURA 8.9 Aproximación de la raíz cuadrada.


Diseño al nivel de transferencias entre registros 369

Como puede verse a partir de esta partición del grafo, se podría construir un
camino de datos para el algoritmo de la SRA utilizando tres registros y cuatro uni-
dades funcionales. La asignación final de variables y operadores a registros y uni-
dades funcionales se da en la Figura 8.25(a), y el esquema del camino de datos se
muestra en la Figura 8.25(b). Obsé[Link] este diseño del camino de datos sólo
necesita siete entradas a selectores, en comparación con las nueve entradas a
selectores necesarias en las soluciones de diseño previas, que no tenían en cuenta
las prioridades de agrupación.

I I I •

Inicio In, In,


Cootml
Final Oul

~ ~
(a) Diagrama de bloques

(b) Diagrama ASM

FIGURA 8.9 Aproximación de la raíz cuadrada.


370 Principios de diseño digital

AV, = [lbVminl+/-]
AV2 = (IaVmax]
SH, = [» 1]
Sil, = [»3)

(a) Asignación de registros y unidades funcionales

I Selector I Seleclor I
I --¡
1 R, 1 1 R, 1 1 R, 1

I 1
1

I I
Selector I
I I
1 »1 11 »3 1
I
I~7 I [abslmdx] I [abslmtnl+/-] I I L
(b) Esquema del camino de datos

FIGURA 8.25 Camino de datos para la SRA utilizando partición prioritaria.

8.7. USO COMPARTIDO DE BUS (AGRUPACiÓN


DE CONEXIONES)
En las secciones previas hemos visto cómo agrupar variables y operadores y cómo
asignarles registros y unidades funcionales. Sin embargo, después de la asigna-
ción, todavía se necesitan conectar los registros y las unidades funcionales para
constituir el camino de datos: cada salida de un registro se conecta con la entrada
de una unidad funcional y cada salida de una unidad funciona! como entrada a un
registro. Las salidas de los registros y de las unidades funcionales se llaman fuen-
tes de la conexión, y sus entradas destinos de la conexión. Puesto que varias
conexiones pueden tener el mismo destino, un camino de datos suele incluir selec-
tores que permiten establecer la conexión adecuada en el momento adecuado.
Puesto que las conexiones de un camino de datos ocupan normalmente un área
de silicio sustancial dentro del circuito integrado, generalmente se intenta reducir
el número de conexiones agrupándolas en buses, que ocupan menos área. Igua!
que cuando se agruparon las variables y los operadores, se agruparán todas las
conexiones que no se utilicen a! mismo tiempo y se asignará un bus a cada uno de
estos grupos. Cada fuente se conecta a un bus mediante un adaptador de bus tries-
tado que establece la conexión a! bus en los estados en que la fuente envía datos
a su destino; o bien desconecta la fuente del bus.
Diseño al nivel de transferencias entre registros 371

La técnica para agrupar conexiones es similar a las técnicas que hemos utili-
zado para agrupar variables y operadores. En primer lugar, se crea una tabla de
uso de conexiones que indica los estados en los que se utiliza cada conexión.
Después se obtiene un grafo de compatibilidad a partir de esta tabla de uso, en el
que cada conexión se representa mediante un nodo y dos nodos pueden estar
conectados mediante un arco prioritario o un arco de incompatibilidad. Como el
mismo nombre indica, dos nodos están conectados mediante un arco de incompa-
tibilidad cuando sus correspondientes conexiones no parten de la misma fuente
pero deben usarse al mismo tiempo. A la inversa, los nodos están conectados por
arcos prioritarios siempre que sus correspondientes conexiones tengan una fuen-
te común o un destino común. Una vez construido este grafo de compatibilidad,
se usa un algoritmo de partición de grafos para agrupar las conexiones de forma
que se maximice el número de arcos prioritarios incluidos en los grupos.
En la Figura 8.2p se muestra como se agrupan las conexiones en el camino de
datos para la SRA presentada anteriormente, que se repite y aclara en la Figura
8.26(a). A partir de este diagrama y del diagrama ASM de la Figura 8.9, se cons-
truye la tabla de uso de conexiones, mostrada en la Figura 8.26(b). En esta tabla,
se ha utilizado una x para designar los estados en los que se usa cada conexión.
Obsérvese que esta tabla contiene tanto las entradas de las conexiones, que comu-
nican las salidas de los registros con las entradas a las unidades funcionales, como
las salidas, que comunican las salidas de las unidades funcionales con las entra-
daos a los registros apropiados. Para simplificar la tarea de partición, resulta útil
separar estos dos tipos de conexiones y realizar independientemente la partición
de cada tipo. Separando estos dos tipos de conexiones, se definen buses distintos
para la entrada y la salida, lo que simplifica la arquitectura del camino de datos.
Una vez terminada la construcción de la tabla de uso, podemos transformarla en
los correspondientes grafos de compatibilidad asignando un nodo a cada conexión
y añadiendo los arcos apropiados entre los nodos. Los grafos de compatibilidad
para los buses de entrada y salida se muestran en la Figura 8.26(c) y (d).
Obsérvese que también existen arcos de incompatibilidad entre todos aquellos
nodos que no están eléctricamente conectados pero que se utilizan al mismo tiem-
po. En la Figura 8.26(c), por ejemplo, la conexión B es incompatible con la C y
la D, la F es incompatible con la C, la D, y la E, y la G es incompatible con la H.
Además hemos añadido los arcos prioritarios para aquellas conexiones que tienen
la misma fuente o destino, indicando, por ejemplo, que las conexiones A, C, D, y
H se originan todas en el mismo registro Rp y que las conexiones B, F, YG se ori-
ginan todas en el registro R 2 . Los nodos D y E del grafo también se han conecta-
do con un arco prioritario porque tienen el mismo destino (la entrada izquierda a
la unidad funcional AUí).
En la Figura 8.26(d) se determinan los arcos de prioridad para las conexiones
de salida procediendo de igual forma. En este momento, una vez se han determi-
nado todos los arcos prioritarios y de incompatibilidad, podemos realizar la parti-
ción de las conexiones intentado cortar todos los arcos de incompatibilidad en
tanto que se corta el menor número de arcos de prioridad posible. Como muestra
la Figura 8.26(e), se puede conseguir el número más reducido de particiones agru-
372 Principios de diseño digital

pando las conexiones A, C, D, E, Y H en el Bus, y las conexiones B, F, Y G en el


Bus2, considerando así todas las conexiones de entrada. Igualmente, se agrupan 1,
K, Y M en el Bus3, y J, L, Y N en el Bus4 , correspondiendo a las conexiones de
salida. Así, en la Figura 8.26(f) se puede ver que el camino de datos para la SRA
usa un total de cuatro buses, lo que reduce considerablemente el coste de su
implementación.

l., 1.,
M N

l Selector I I Selector I
I I rI
I R, I I R, I I R, I
I
I
I
JI E
FI GI HI
A 81 e Selector I I »1 II »3 I
I~7
1I
[abs/máx]
I
[abs/m(n/+/-]
I
IK L
1 J

Ollt
(a) Camino de datos para la SRA

A X
B X X
e X X x
D x x
E x
F x x x x
G x
H x
1 x x x
J x x x x
K x
(e) Grafo de compatibilidad para (d) Grafo de compatibilidad para
L x los buses de entrada los buses de salida
M x
N X
(b) Tabla de uso de conexiones

FIGURA 8.26 Agrupación de conexiones en el cami no de datos de la SRA.


Diseño al nivel de transferencias entre registros 373

In , In,

I
I R, J I R, I I R, I
Bus, ~ ~
Bus, I I

I [abslmdx] I I [Link]/+/-]
I
~
»3
Bus] = [A , C. D , E, H]
Bus 2= [B . F. GI Bus, ~ 7 '7
B",,= [/. K. MI '7 B.. ~7
Bus4= [l. L. N]

(e) Asignación de buses (O Organización del camino de datos según su estructura de buses

FIGURA 8.26 Continuación.

8.8. AGRUPACiÓN DE REGISTROS


En la Sección 8.5 describimos el procedimiento para agrupar variables de mane-
ra que compartieran el mismo registro. Corno se explicó, una serie de variables
comparten el mismo registro siempre que tengan tiempos de vida no solapados.
De igual forma, los registros con tiempos de vida no solapados pueden asociarse
constituyendo bancos de registros que comparten los mismos puertos de entrada
y salida, con lo que a su vez se reduce el número de conexiones en el camino de
datos al haber menos puertos. Por desgracia, esto incrementa el retardo registro-
registro puesto que existe un retardo extra debido a la decodificación de direccio-
nes que se produce en el banco de registros. No obstante, frecuentemente se acep-
ta este retardo dada la reducción en el costo que se consigue al reemplazar varios
registros con un sólo banco de registros.
Para agrupar registros se puede utilizar el mismo enfoque descrito para la
agrupación de variables, operadores, y conexiones. Primeramente se crea una
tabla de acceso a registros en base a la que, a continuación, se genera un grafo de
compatibilidad. Finalmente, se aplica un algoritmo de partición de grafos para
agrupar los registros compatibles en bancos de registros. Puesto que cada banco
de registros puede tener más de un puerto, generalmente se agrupan los registros
para que en ningún momento el número total de accesos para lectura o escritura a
los registros del grupo exceda al número de puertos de lectura o escritura del
banco de registros.
En la Figura 8.27 se describe el procedimiento de agrupación de registros uti-
lizando el ejemplo del camino de datos para la SRA. Primero creamos una tabla
de acceso a los registros, con una ftIa para cada registro del camino de datos y una
columna por cada estado del diagrama ASM. En esta tabla, la línea divisoria entre
374 Principios de diseño digital

estados indica el flanco de subida de la señal de reloj que carga los datos en los
registros. Un triángulo blanco apuntando a la línea divisoria significa que se va a
cargar un nuevo dato en el registro correspondiente en ese flanco de subida del
reloj . También se ha dibujado un triángulo negro desde la línea divisoria para
indicar el estado en el que se usará el dato.

RI ::: {a. t I' x, '7]


~ ::: (b. '2'y, '3' '5' IJ
R3 :: [14]
-------8
,
(a) Asig nación de registros ,,

(e) Grafo de compatibilidad

(b) Tabla de acceso a los registros

I R, I
I RJ I I R, I
Bus 1 .g
Bus, I I 'i7

I [ab'¡nuírJ I I [abs/mfn/+I-)
I
I »3 I I » 1 I
Bus) 'i '7 ~ '7 ~
7 Bu~.4 ~ '7 ~

Out
(d) Esquema del camino de datos

FIGURA 8.27 Agrupación de registros.

A partir de la tabla de acceso a los registros de la Figura 8.27(b) se genera el


grafo de compatibilidad. En el caso del camino de datos para la SRA, puede verse
que los registros RI y R¡ no son compatibles puesto que se escribe o se lee con-
currentemente en ellos en los estados so' sI' s2' s3' S4' y s6' Igualmente, R¡ y R3 no
son compatibles puesto que se escribe en ambos en el estado s3 y se leen en el
estado ss' Por otra parte, los registros RI y R¡ son compatibles simplemente por-
que nunca se accede a ellos al mismo tiempo. Estas conclusiones se reflejan en el
grafo de compatibilidad de la Figura 8.27(c), que muestra que podemos agrupar
Diseño al nivel de transferencias entre registros 375

los registros RI y R3 en un único banco de regi stros con un puerto de lectura y otro
de escritura. El camino de datos fInal que utiliza este banco de registros se mues-
tra en la Figura 8.27(d).

II/ icio
Control
Final Out

(a) Diagrama de bloques

(b) Diagrama ASM

FIGURA 8.9 Aproximación de la rafz cuadrada.

A partir de este esquema también puede verse que agrupando los registros R I
Y R3 , ha sido posible reducir el número de adaptadores de bus en el camino de
376 Principios de diseño digital

datos puesto que al compartir RI y ~ el mismo puerto de lectura se necesita sólo


un adaptador de bus en lugar de dos. En general, agrupando n registros que acce-
den a m buses en un sólo banco de registros con un puerto de lectura se reduce en
n-m el número de adaptadores. No obstante, si se agrupan n registros que se car-
gan desde m buses diferentes en un sólo banco de registros con un puerto de entra-
da, hay que introducir un selector de m entradas frente al puerto de entrada.
Debido al potencial ahorro de adaptadores de bus y de entradas a selectores, se da
prioridad a la agrupación de registros con una fuente o destino común, es decir, a
los registros que se cargan desde el mismo bus o actúan sobre el mismo bus.

8.9. ENCADENAMIENTO Y MULTICICLO


En la Sección 8.8 presentamos técnicas para la síntesis del camino de datos basa-
das en un modelo sencillo del mismo. Por ejemplo, en los caminos de datos con-
siderados, los registros se conectaban a las unidades funcionales mediante uno o
más buses, y las unidades funcionales a su vez se conectaban mediante uno o más
buses a los registros. En algunos casos se utilizaron selectores cuando un registro
o una unidad funcional recibía datos de más de un bus. En este tipo de camino de
datos, los registros reciben una señal de reloj cuyo ciclo es igual al mayor retardo
registro-registro. Puesto que el camino con mayor retardo registro-registro pasa a
través de la unidad funcional más lenta, las otras unidades funcionales sólo están
ocupadas durante una parte del ciclo de reloj, permaneciendo inactivas el resto del
ciclo. No obstante, si el retardo total de dos cualesquiera de estas unidades es
menor que el ciclo de reloj, es posible conectarlas en serie y realizar dos opera-
ciones en un sólo ciclo de reloj. Este mismo principio se puede extender a más de
dos unidades funcionales si el camino de datos tiene ciclos de reloj más largos.
Esta técnica de conectar unidades en serie recibe el nombre de encadenamiento
(chaining), puesto que dos o más unidades se conectan sin introducir registros
entre ellas, creando así una unidad combinacional mayor que puede calcular asig-
naciones que implican a dos o más operaciones. Siempre que se utilice esta téc-
nica, una sentencia de asignación de variables en el diagrama ASM tendrá dos o
más operadores en su término derecho.
Para mostrar la técnica de encadenamiento utilizamos el diagrama ASM de a
Figura 8.28(a), que corresponde al algoritmo para la SRA. Obsérvese que este dia-
grama ha sido modificado con respecto al diagrama de la Figura 8.9, puesto que
se han fundido dos estados (S2 y s3) en uno sólo (s2)' Como puede verse, esto sig-
nifica que en el estado s2 de la Figura 8.28(a) se ejecutarán tres sentencias de asig-
nación: la primera de ellas usa una operación binaria (máximo), mientras que las
otras dos sentencias usan dos operaciones cada una. Más concretamente, el nuevo
valor asignado a t 3 se obtiene tras calcular el máximo de tI y t 2 Y después despla-
zar el resultado tres posiciones a la derecha. Igualmente, el nuevo valor de t4 se
obtendrá tras calcular el mínimo de tI y t 2 Y después desplazar el resultado una
posición a la derecha. Puesto que desplazar a la derecha una o tres posiciones no
produce ningún retardo como se mostró en las Figuras 8.11(t) y (g), el ciclo de
Diseño al nivel de transferencias entre registros 377

reloj para este camino de datos encadenado no será mayor que el ciclo de reloj ori-
ginal. Por otra parte, puesto que este diagrama ASM sólo tiene siete estados en
lugar de los ocho del diagrama original, podemos concluir que este camino de
datos modificado puede realizar el algoritmo para la SRA un 12.5% más rápido.
El esquema del nuevo camino de datos con las unidades encadenadas se muestra
en la Figura 8.28(b). Obsérvese que para almacenar concurrentemente los tres
nuevos valores de las variables x, t3, y t4 que se generaron en el estado s2 no se ha
tenido que añadir ninguna conexión adicional desde el desplazador indicado con
»1 al registro ~ .

Inicio'" I
o
R 1-[a, tl , x, 'JI
Rz'" [b. ''l' J. ' )' t y /61
RJ',,(tJ
(e) Asignaci6n de registros
In,

I
I R, I I R, I I R, l

...
B.. -&
I
-&

I (abslmáx) I I [abslm(n/+I-J I
~~ [2>:!J
...,
.... '; Ú

Om
(a) Diagrama ASM (b) Esquema del camino de datos

FIGURA 8.28 Camino de datos para la SRA con unidades encadenadas.

Además del encadenamiento, que permite utilizar unidades más rápidas, algu-
nas veces puede que se desee utilizar unidades más lentas pero más baratas, que
precisan más de un ciclo de reloj para generar sus resultados. Esta técnica se llama
multicicIo r,nulticycling), y las unidades más lentas utilizadas, unidades multici-
cIo. Por razones obvias estas unidades sólo pueden utilizarse en los caminos no
críticos del diagrama ASM. Por ejemplo, en el diagrama ASM de la Figura
8.28(a), a la variable t4 se le asigna el nuevo valor (min(t l ,t2))»] en el estado s2'
pero este nuevo valor no se utiliza hasta el estado S4 ' En este caso, entonces, po-
drfamos utilizar una unidad que necesitase dos ciclos de reloj para calcular el
378 Principios de diseño digital

valor mínimo, y encadenar esta unidad con un desplazador a la derecha que no


consuma tiempo para generar su resultado.
Esta organización de multiciclo se muestra en la Figura 8.29. Como puede
verse en la Figura 8.29(a), el diagrama ASM se ha modificado introduciendo cor-
chetes, que indican que el resultado sólo estará disponible en algún estado
siguiente o que el cálculo de una expresión ya se inició en uno de los estados pre-
vios. Por ejemplo, la asignación de variable [/ 4]= (min(l p / 2))»1 indica que el
nuevo valor se asignará a 14 en uno de los estados siguientes. Igualmente, la expre-
sión 14 = [min(l p / 2)) » 1] indica que el nuevo valor se asigna a t 4 en el estado
presente pero el cálculo de la expresión entre corchetes se inició en uno de los
estados previos. Como se ilustra en la Figura 8.29(c), un diagrama ASM de este
tipo se traduce de manera sencilla en un camíno de datos con unidades multiciclo.
Obsérvese que se ha tenido que introducir un estado adicional puesto que la asig-
nación t 4 = min(t p / 2)) » 1 necesita dos estados durante los cuales Bus! y Bus2
se utilizan para proporcionar los operandos ti y 12, lo que a su vez retrasa la eje-
cución de la asignación 15 = X - t) al estado Sy

R I'" lo, l l"r, ' 11


Rz- lb, t? Y. t)' 'y t61
R3- (141
x= mdx(t ."2)
t 3=máx(' ..'2»>3 (e) Asignación de registros
['4 ]=m(n(r .'(2»> I

I
I " I I " I I " I
Buo ~ ~
B." '\7 I I '\7

~
I labs/nuU] I I [abs/+/-l
I
B"'l
Buo.
~ Pr,'\7
;,
» 1

(a) Diagrama ASM (b) Esquema del camino de datos

FIGURA 8.29 Camino de datos para la SRA con unidades multiciclo.


Diseño al nivel de transferencias entre registros 379

Queda por tanto probado que las prestaciones del camino de datos pueden mejo-
rarse mediante el encadenamiento de unidades funcionales y que se puede reducir
el costo del camino de datos utilizando unidades multiciclo. Como es de esperar, las
técnicas descritas anteriormente para la asociación de variables, de operadores, y de
conexiones se pueden ampliar incluyendo encadenamiento y unidades multiciclo.
No obstante, por razones de brevedad, en este libro se omite su discusión.

8.10. SEGMENTACiÓN DE LA UNIDAD FUNCIONAL


En secciones anteriores se han presentado diversas técnicas para reducir el costo
del camino de datos, principalmente mediante la reducción del número de regis-
tros, unidades funcionales, y conexiones. En esta sección la atención se centra en
la presentación de técnicas que incrementan las prestaciones del camino de datos.
La técnica más efectiva para la mejora de las prestaciones es la segmentación
(pipelining). Un camino de datos segmentado es similar a una línea de montaje de
una fábrica donde un producto se desplaza de etapa a etapa. En otras palabras, en
cada etapa se aplica la misma operación a cada producto, pero cada etapa lleva a
cabo una tarea distinta dentro del proceso de ensamblado del producto, lo que ace-
lera significativamente la fabricación del mismo.
La técnica de segmentación puede aplicarse a unidades funcionales, caminos de
datos, o unidades de control. En el caso de unidades funcionales, se divide la unidad
funcional en dos o más etapas, cada una separada por biestables para que pueda ope-
rar sobre un conjunto de operandos distinto. Por tanto, en cualquier momento exis-
ten varios conjuntos de operandos dentro de la unidad segmentada (concretamente,
el número de conjuntos en la unidad es igual a su número de etapas). El uso de uni-
dades funcionales segmentadas no afecta al tiempo necesario para generar el resulta-
do correspondiente al primer conjunto de operandos, que es el mismo que el tiempo
en una unidad no segmentada. Sin embargo, el resultado correspondiente a cada con-
junto de operandos adicional estará disponible en un tiempo igual al retardo de una
única etapa. Por ejemplo, para una unidad segmentada con dos etapas, cuyo retardo
cuando no está segmentada es de 100 ns, el resultado del primer conjunto de ope-
randos también se genera después de 100 os, pero el del segundo conjunto de ope-
randos estará disponible sólo 50 ns después, y lo mismo sucede para todos los con-
juntos de operandos siguientes. En general, si hay netapas en la unidad segmentada,
se puede reducir el tiempo necesario para generar resultados a l/n veces el tiempo de
ejecución sin segmentación, con la excepción del primer resultado.
Como ejemplo de unidad segmentada, se considera la unidad aritmética (AU,
de Arithmetic Unit) de dos estapas que se muestra en la Figura 8.30, obtenida
insertando tres biestables para los datos y un biestable para las señales de control
entre los puertos de entrada y salida de la AU no segmentada de la Figura 8.20(d).
Podríamos haber insertado biestables dentro de la AU, en lugar de entre la AU y
los selectores, para dividir el camino crítico en dos partes iguales. Si estos biesta-
bles estuvieran exactamente en mitad del camino de retardo crítico, cada estapa
necesitaría sólo la mitad de tiempo que la unidad no segmentada para generar sus
380 Principios de diseño digital

resultados. Así, la unidad segmentada puede operar con un ciclo de reloj aproxi-
madamente igual a la mitad del ciclo de reloj de la unidad no segmentada. Como
se indicó anteriormente, todavía se necesitarán dos ciclos de reloj (O estados) para
que la unidad segmentada proporcione un resultado; en el primer ciclo de reloj, el
resultado parcial se almacena en los biestables; en el segundo ciclo de reloj, se
genera el resultado fmal en la segunda etapa de la unidad segmentada, mientras
que la primera etapa está generando resultados parciales para el siguiente conjun-
to de operandos, y así sucesivamente para cada conjunto de operandos.

a b

FIGURA 8.30 Unidad aritmética segmentada.

Para comparar los resultados de las unidades con y sin segmentación, se con-
sidera el camino de datos para la SRA con una única AU no segmentada que cal-
cule el valor absoluto, el mínimo, el máximo, la suma, y la resta. Este camino de
datos y su correspondiente diagrama ASM se muestran en la Figura 8.31.
Obsérvese que este camino de datos precisa 9 estados, ó 9 ciclos de reloj, para cal-
cular la aproximación de la raíz cuadrada. Por otro lado, podríamos rediseñar el
camino de datos de la Figura 8.31(b), sustituyendo su AU no segmentada con una
AU segmentada de dos etapas, como muestra la Figura 8.32(a). Este nuevo cami-
no de datos precisa 13 estados o ciclos de reloj para calcular la aproximación de
la raíz cuadrada, como muestra el diagrama de tiempos de la Figura 8.32(b).
En ese diagrama de tiempos, la carga y la lectura de cada registro y la opera-
ción de cada unidad funcional se muestran estado a estado. El diagrama de tiem-
pos tiene una fila por cada acceso de lectura o de escritura a un registro y también
una fila por cada etapa de la AU y de las unidades de desplazamiento. Cada
colunma representa un estado de la unidad de control. Como puede verse, en el
estado So el camino de datos lee los valores de las variables a y b de los puertos
de entrada y los almacena en los registros R¡ y R¿. A continuación, en el estado
s I' se lee el valor de la variable adel registro R¡ y se calcula parcialmente el valor
absoluto de a . Este resultado parcial se almacena a continuación en los biestables
que hay entre las dos etapas de la AU segmentada. Después, en el estado S2' el
Diseño al nivel de transferencias entre registros 381

camino de datos termina el cálculo de lal y asigna su valor a la variable 1i' que
está·almacenada en el registro R¡. Al mismo tiempo, en el estado S2 el camino de
datos también comienza el cálculo de Ibl, almacenando el resultado parcial de este
cálculo en los biestables de la unidad segmentada. Así, en el estado S2 las dos eta-
pas de la AV segmentada están activas, aunque procesando operandos diferentes.
En el estado s3 el camino de datos termina de calcular Ibl y asigna el resultado a
la variable t2 almacenada en el registro ~. Obsérvese que en este momento el
camino de datos todavía no puede iniciar la siguiente operación puesto que nece-
sita el valor de 12, que todavía no se ha cargado en el registro ~. Por tanto, en S3
no se inicia ninguna operación. De forma similar, el camino de datos empieza la
ejecución de las operaciones de máximo, mínimo, y resta en los estados S4' ss' y
s 6' y completa estas operaciones, junto con los desplazamientos, en los estados ss'
s6' y sT La suma no puede iniciarse hasta el estado s8 porque debe esperar a que
el valor asignado a ts esté disponible. Igualmente, el cálculo del máximo comien-
za en el estado s 10 pero no termina hasta el estado s 11. Por último, el camino de
datos utiliza el estado s 12 para proporcionar el resultado.

Inicio:: I

s,
~ - Ibl

s,
x =máx(t.,12 )

13 =máx(1,"2»>3

S, '''
I
I
" I I .,I I I
I
" I
Bu ~ ~
o.., 'V 1

\ AU
I
C>![]
7
B..,
.....
~ 7 7 T
(a) Diagrama ASM 0"'
(b) Esquema del camino de datos

FIGURA 8.31 Camino de datos para la SRA con una única unidad aritmética (AU).
382 Principios de diseño digital

Según este diagrama de tiempos, se precisan 13 estados o ciclos de reloj para


completar este algoritmo para la SRA. No obstante, como se ha mencionado, cada
dos de estos ciclos de reloj equjvalen a un ciclo de reloj del carnmo de datos no
segmentado, lo que signjfica que el carnmo de datos con una AV segmentada cal-
cula la aproxilnación de la raíz cuadrada en 6.5 ciclos en lugar de los 9 ciclos del
caso no segmentado. Obsérvese que este camino de datos segmentado mejora
cualquiera de los illseños no segmentados descritos en las secciones previas.

I I
I R, I I R, I I R) I
Bus, ~ .&
Bus, ~7 I ~ 7
v
\ I AU de 2 etlIp8S

I »3 I I »1 I
, '7 ,7 .¿¡.
7
Bus)
Bus, , '7 '7

0 /11 (a) Camino de datos con AU segmentada

I So ~ s" s" S. S¡; S¡; Sr So So S,. S" $12 j


Leer RI a t, /1 X X /7
Leer R, b /, /2 /3 /, /,
Leer R3 /,
Etapa l de AU lal Ibl máx m(n - + máx
Etapa 2 de AU lal Ibl máx mín - + máx
Unidades de
desplazamiento »3 » 1
Escribir en R 1 a /1 x /J
Escribir en R2 b 12 /3 1, 1,
Escribir en R3 1,
Out IJ

(b) Diagrama de tiempos

FIGURA 8.32 Camino de datos con unidades funcionales segmentadas.

8.11. SEGMENTACiÓN DEL CAMINO DE DATOS


En la Sección 8.10, se mostró cómo mejorar las prestaciones del carruno de datos
mediante la segmentación de las unidades funcionales incluidas en el mismo. Sin
Diseño al nivel de transferencias entre registros 383

embargo, en el caso de un camino de datos que realice el mismo cálculo con con-
juntos de operandos distintos, estas prestaciones se pueden mejorar aún más
mediante la segmentación de todo el diagrama ASM. Para ello se divide el dia-
grama ASM en una serie de partes del mismo tamaño y luego se utilizan estados
distintos del camino de datos para ejecutar cada una de esas partes. Con este dise-
ño, todas las etapas podrían trabajar simultáneamente con conjuntos de operandos
distintos, generando cada una un resultado parcial que puede ser utilizado por la
siguiente etapa.

...
In,

I I
I R, I I R, I
Bus .tl
Bus, '\7 1
I
AU ,

x= mtfx(t¡,t2J Bus)
C>;D, 7' 7 ,.
, ,7 S Bus,
t 3:=.máx(tl't2J»3
,7
s,
I R, I I R, I I R, I
-& Bus~ ¿
'7 I Bus6

",. AU 2
I
& Bus.,

Out
(a) Diagrama ASM (b) Camino de datos segmentados

R ¡= la, t i] R) = [r)' t5' 16' '7]


R,= lb. /, 1 R4 = [x)
AU]= [abs/mínlmáx] R5= ['4]
AU2= [+I-Imáx]

(e) Asignación de registros


y unidades funcionales

FIGURA 8.33 Segmentación del camino de datos.


384 Principios de diseño digital

Leer RI a ti ti
LeerR, b t, t,
Etapa l deAU lal Ibl mín máx ETAPA l
Unidades de
desplazamiento »1 »3
Escribir en RI a ti
Escribir en R2 b t,
Leer R, t, t, t. t7
Leer R4 x x
Leer R,
Etapa 2 deAU -
'+4 máx ETAPA 2
Escribir en R, t, t, t. t7
Escribir en R4 x
Escribir en R, t.
par n
(d) Diagrama de tiempos

FIGURA 8.33 Continuación.

Como ejemplo de esta segmentación ASM. considérese el diagrama ASM de


la Figura 8.33(a). que describe el algoritmo para la SRA. En el diagrama asumi-
mos que el bucle se ejecuta indefinidamente y que hay un nuevo conjunto de ope-
randos disponible en los puertos de entrada cada 10 ciclos de reloj. En este caso.
podemos dividir fácilmente el diagrama ASM en dos partes: la primera parte
consta de los estados So hasta S4' y la segunda parte constaría de los estados Ss
hasta ss. En la Figura 8.33(a) se muestra esta división mediante una línea gruesa
entre los estados S4Y ss' que indica que el algoritmo para la SRA se ejecutará en
dos partes en dos etapas separadas del camino de datos.
En la Figura 8.33(b) puede verse que la primera etapa del camino de datos
incluye los registros R¡ y Rz. una AV y dos desplazadores. mientras que la segun-
da etapa incluye los registros R:J. R4' Y Rs' y también otra AV. La asignación de
variables a registros se da en la Figura 8.33(c).
La Figura 8.33(d) proporciona el diagrama de tiempos para el camino de datos
segmentado. Igual que antes. este diagrama de tiempos muestra todos los accesos
de lectura y escritura a los registros R, hasta Rs. y también todas las operaciones
que se realizan en las unidades funcionales en cada estado. Como puede verse. la
primera etapa necesitará 5 ciclos para leer a y b de los puertos de entrada. asignar
los valores apropiados a las variables tI' t 2• t 3• x. y t 4• Y almacenar las 3 últimas
variables en los registros R:J. R4' Y R5' que pueden considerarse como los biesta-
bles entre las dos etapas del camino de datos. Es más. la segunda parte del dia-
grama ASM necesita sólo 4 ciclos puesto que los registros R3' R4' YRs ya han sido
cargados en la primera etapa. En conjunto. se necesitan 9 ciclos de reloj para cada
Diseño al nivel de transferencias entre registros 385

iteración del bucle correspondiente al algoritmo para la SRA; no obstante, es


importante tener en cuenta que la primera etapa está lista para introducir un nuevo
conjunto de datos cada 5 ciclos de reloj puesto que ambas etapas del camino de
datos trabajan concurrentemente. Más concretamente, la primera etapa calculará
los resultados parciales del conjunto de operandos (n+ 1) al mismo tiempo que la
segunda etapa está calculando los resultados finales para el conjunto de operan-
dos n Así, se necesitarán 5n+4 ciclos de reloj para calcular la SRA de n pares de
operandos. En comparación, un camino de datos no segmentado con una AU y
dos desplazadores precisa 9n ciclos de reloj para obtener los mismos resultados.
Si combinamos este camino de datos segmentado con las unidades funciona-
les segmentadas, aún se podrían mejorar más las prestaciones. Por ejemplo, se
pueden utilizar AU segmentadas con dos etapas en el camino de datos que se
acaba de desarrollar, obteniéndose el camino de datos correspondiente al diagra-
ma de tiempos d~ la Figura 8.34. En este diagrama se indica que cada etapa de
este nuevo camino de datos segmentado necesitaría siete estados para calcular su
resultado; sin embargo, puesto que cada estado de este diagrama es s6lo la mitad
de largo que los estados de la Figura 8.33, nuestro nuevo camino de datos calcu-
lará la SRA en (7/2)n+(7/2)=3,5n+3,5 ciclos de reloj en lugar de en los 5n+4
ciclos de reloj que se necesitan si no se utilizan unidades funcionales segmenta-
das. En otras palabras, al segmentar el camino de datos en dos etapas y utilizar
unidades funcionales segmentadas con dos etapas en cada una de dichas etapas,
reducimos el tiempo de ejecución del camino de datos a aproximadamente un ter-
cio del tiempo original, mejorando las prestaciones en un factor de 3.

l' "'"
SO ... •
..
.... "-""'e Sr , ~..... ~ lIwr- ttrt "-
Leer RI a t, t,
Leer R, b t, t,
Etapa 1 de AU, lal Ibl mín m1ÍX
Etapa 2 de AU, lal Ibl m(n máx
Unidades de
desplazamiento » 1 » 3
Escribir en R, a ti
Escribir en R, b t,
Leer R3 t3 t, t. t7
Leer R_ x x
Leer R, t_
Etapa 1 deAU - + máx
Etapa 2 deAU - + m1ÍX
Escribir en R3 t3 t, t. t7 t3
Escribir en R_ x x
Escribir en Rs t_ t_
Out t7

FIGURA 8.34 Diagrama de tiempos para el camino de datos segmentado con un idades fun-
cionales segmentadas.
386 Principios de diseño digital

8.12. SEGMENTACiÓN DE LA UNIDAD DE CONTROL


En la Sección 8.11 , se discutieron dos métodos para mejorar las prestaciones a tra-
vés de las técnicas de segmentación. Como se ha visto, la segmentación del cami-
no de datos permite operar concurrentemente con conjuntos de datos diferentes,
reduciendo así el tiempo total necesario para ejecutar un algoritmo determinado.
Además, la segmentación de los componentes-permite incrementar la utilización
de diversos componentes de los caminos de datos, y acortar el ciclo de reloj, redu-
ciendo el retardo de las transferencias entre registros (retardo registro-registro).
Sin embargo, es importante tener en cuenta que el mayor retardo registro-registro
se produce de registro de estado a registro de estado. Por supuesto, este retardo
variará según las señales de control dependan de las señales de estado o no, como
muestran las líneas de estado discontinuas de la Figura 8.35(a). Si las señales de
estado se utilizan sólo para seleccionar el estado siguiente, el camino crítico va
desde la señal de reloj a la salida del registro de estado y luego a través de la lógi-
ca de salida, RE. y ALU, Y vía la señal de estado a través de la lógica de estado
siguiente, de vuelta al registro de estado, incluyendo el tiempo de establecimien-
to (setup time) del registro de estado. Por otra parte, si algunas señales de estado
se utilizan para controlar una parte del camino de datos, el camino crítico es más
largo puesto que pasa dos veces a través del camino de datos: la primera vez para
determinar las señales de estado, y la segunda vez para realizar una operación con
valores almacenados en los registros del camino de datos. En este caso el camino
crítico va desde la señal de reloj a la salida del registro de estado y luego a través
de la lógica de salida, RF. ALU, lógica de salida de nuevo, RF o memoria, mul-
tiplicador/divisor, y vuelta al registro o RF, incluyendo el tiempo de estableci-
miento del registro o RF.
En cualquier caso, el camino crítico a través de la unidad de control determi-
na la longitud del ciclo de reloj (periodo de reloj). Consecuentemente, si se quie-
ren mejorar las prestaciones reduciendo el ciclo de reloj, tendría sentido dividir el
camino crítico en trozos e insertar registros entre ellos. En la Figura 8.35(b), por
ejemplo, se insertan registros en tres lugares diferentes. Primero, se introduce un
registro de estado entre el camino de datos y la unidad de control para que todas
las señales de estado que salgan del camino de datos se guarden en el registro, que
tiene un biestable por cada señal de estado. En segundo lugar, se inserta un regis-
tro de control entre la unidad de control y el camino de datos para que todas las
señales de control generadas por la lógica de salida se guarden en ese registro,
que tiene un biestable por cada señal de control. Finalmente, se segmenta el cami-
no de datos mismo insertando biestables de segmentación (pipeline latches)
entre las unidades de almacenamiento (registros, RF, y memoria) y las unidades
funcionales (ALU, multiplicador/divisor), como se muestra en la Figura 8.35(b) y
se explicó en la Sección 8.11.
En general, cuando se pretende utilizar unidad de control y camino de datos
segmentados en las implementaciones de una FSMD, hay que construir los dia-
gramas ASM de forma que reflejen las decisiones relativas a la segmentación.
Para ilustrarlo, considérese el diagrama ASM de la Figura 8.36(a), que en su
Diseño al nivel de transferencias entre registros 387

forma original tiene tres estados. En el primer estado, sI' se comprueba si a > b,
Y se pasa a s3 si la desigualdad es cierta o a S2 si no 10 es. En el estado S2 se reali-
za la asignación x = e * d, Y en el estado S3 la asignación y = x - 1. En este dia-
grama ASM no se asume la posibilidad de una implementación segmentada.
Entradas de control Entradas del camino de datos

Señales
de control

Lógica
de estado Registro Lógica
. . de estado de salida

1!'~~"~·'~"~""~~~~~~~~~~ll~SC~ñ:a:l~~.:L:-~~:1--~~---'r---~------
r~ de estado
Unidad de control Camino de datos
Salidas de control Salidas del camino de datos

(a) Implememación estándar de la FSM

Entradas de control Entradas del camino de datos

Señales
de control

....'"
",,_ Registro
deesUldo
siguiente
SeñaJes
de estado

Unidad de control L'::;:::':':J Camino de dato

Salidas de contro Salidas del camino de datos

(b) Implementación de la FSM con unidad de conlrol y de datos segmentados

FIGURA 8.35 Implementación de una FSMO segmentada.

Sin embargo, si introducimos un registro de estado para el control segmenta-


do en la implementación de la FSMD, es necesario modificar este diagrama ASM
en consecuencia, añadiendo una nueva variable de estado, Stat, así como la sen-
388 Principios de diseño digital

tencia de asignación, Stat = (a > bJ. Además, en un único estado, no se podría


asignar un valor a una variable de estado y tomar una decisión de ramificación a
partir de dicho valor, puesto que se necesita un ciclo de reloj para calcular el valor
de la variable de estado y cargarla en el registro de estado, y un segundo ciclo de
reloj para comprobarla y seleccionar el estado siguiente. Estos requisitos adicio-
nales se reflejan en la Figura 8.36(b), donde el registro de estado se carga en s,
pero la ramificación a uno u otro estado no se ejecuta hasta el estado S2'
Igualmente, si se introducen registros de control y de estado, tenemos que inser-
tar dos nuevos estados como muestra la Figura 8.36(c), donde se usarían dos
ciclos de reloj para cargar los registros de estado antes de la ramificación según
la señal de estado.

l a) Diagrama ASM (b) Diagrama ASM para (e) Diagrama ASM para (d) Diagrama ASM para
la unidad de control la unidad de control la unidad de control
segmentada con registro segmentada con registro y camino de datos
deeslado de estado y control segmentados

FIGURA 8.36 Diagramas ASM para las implementaciones segmentadas.

Finalmente, si introducimos registros de control y estado, y unidad de control


y camino de datos segmentados como se hizo en la Figura 8.35(d), hay que aña-
dir 4 nuevos estados. Más concretamente, en primer lugar se necesitan 3 ciclos de
reloj para cargar el registro de estado, puesto que no se puede producir la ramifi-
cación a uno u otro estado hasta el estado s4' como muestra la Figura 8.36(d).
Segundo, se debe introducir otro estado vacío, s6' entre los estados Ss y s7 puesto
Diseño al nivel de transferencias entre registros 389

que el cálculo de y = x - 1 a realizar en S7 necesita el nuevo valor de x, que a su


vez requiere ahora 2 ciclos de reloj para su calculo. Como se ve a partir de estos
ejemplos, los diagramas ASM necesitan una serie de modificaciones cuando se
utilizan para describir implementaciones segmentadas de FSMD.

8.13. PLANIFICACiÓN (SCHEDULlNG)


En las secciones anteriores se ha mostrado cómo sintetizar un diagrama ASM para
un diseño específico que consta de un camino de datos y una unidad de control.
En general, la síntesis de estos diagramas ASM está basada en el modelo de la
FSMD, que explícitamente especifica los estados, las transiciones de estado, y las
asignaciones de variables a realizar en cada estado. Desgraciadamente, los dise-
ños normalmente están basados en algoritmos que no se especifican mediante dia-
gramas ASM sino que se describen mediante algún lenguaje de programación o
se representan mediante un diagrama de flujo. Ninguna de estas formas contem-
pla el concepto de estado, aunque proporcionan el orden en el que deben reali-
zarse las asignaciones de variables. Por tanto, la principal diferencia entre los len-
guajes de programación o los diagramas de flujo y los diagramas ASM es que los
primeros no especifican los estados, ni asocian las asignaciones de variables a los
estados particulares en los que se producen.
Para transformar un algoritmo ordinario o un diagrama de flujo en un diagra-
ma ASM habría que dividir su tiempo de ejecución en una serie de intervalos de
tiempo llamados estados y asociar cada operación de asignación de variables a un
estado particular. En otras palabras, hay que planificar (schedule) el acceso y las
operaciones con las variables distribuyéndolas entre los estados, bajo ciertas res-
tricciones de recursos o de tiempo. En esta sección consideran ambos tipos de pla-
nificación, la planificación con restricciones de recursos (RC, resource-constrai-
ned scheduling) y la planificación con restricciones de tiempo (TC, time-cons-
trained scheduling), proporcionándose un algoritmo de planificación para cada
tipo.
Para realizar la planificación, primeramente hay que convertir un programa o
un diagrama de flujo en un grafo de control/flujo de datos (CDFG, control/data-
flow graph), que muestra explícitamente las dependencias de control entre las
sentencias y las dependencias de datos entre los valores de las variables. En otras
palabras, un CDFG contiene la estructura de control de un diagrama de flujo pero
además debe representar las asignaciones de variables como grafos de flujo de
datos, en los que cada nodo corresponde a un operador mientras que cada arco
entre dos nodos representa el resultado que es generado por el primer operador y
es utilizado depués como operando por el segundo operador.
Puesto que un diagrama de flujo es una estructura recursiva de conexiones
serie-paralelo entre cajas de asignación y cajas de decisión, un CDFG se diferen-
cia de un diagrama de flujo sólo en la representación de una caja de asignación:
mientras que una caja de asignación en un diagrama de flujo contiene una secuen-
cia de sentencias de asignación, el CDFG representa la misma secuencia median-
390 Principios de diseño digital

te un grafo de flujo de datos. En la Figura 8.37 se compara un diagra~


. e-flujo
y su correspondiente CDFG: la Figura 8.37(a) muestra el diagrama d flujo para
el algoritmo para la SRA, y la Figura 8.37(b) el correspondiente CD G .

. t. = lal
' 2 = Ibl
:c=mdx(t ."2)
y =m(n(t¡.t2)
'3=x»3
'4=Y» I
t~ =x - ')
'6='4 + '5
'1=máx(tó>xJ
Final=l
Out=t7

(a) Diagrama de flujo (a) Grafo de control y flujo


de datos

FIGURA 8.37 Grafo de control y de flujo de datos para la SRA.

Los algoritmos de planificación utilizan frecuentemente una representación


CDFG de un diagrama de flujo o un programa, puesto que un CDFG una vez pla-
nificado es equivalente a un diagrama ASM. Como se mencionó anteriormente,
un CDFG puede panificarse de acuerdo con restricciones de recursos o de tiem-
po. Las restricciones de recursos se especifican mediante el número y tipo de uni-
dades funcionales y de almacenamiento a utilizar en el camino de datos, mientras
que las restricciones de tiempo se especifican a través del número de estados que
necesitará el camino de datos para ejecutar todas las operaciones del camino más
largo del CDFG. Antes de explicar la planificación RC y TC, presentamos los
algoritmos de planificación "tan-pronto-como-sea-posible" (ASAP, as-soon-as-
possible), y "Io-más-tarde-posible" (ALAP, as-late-as-possible), que son frecuen-
temente utilizados por otros algoritmos de planificación para determinar la prio-
ridad y el rango de las operaciones a planificar.
Diseño al nivel de transferencias entre registros 391

En primer lugar, los algoritmos AS~)\P suponen que cada operación


necesita exactamente un ciclo de reloj p ejecutarse, y en segundo lugar, que se
dispone de un número ilimitado de unida ' es funcionales o recursos para cada una
de las operaciones a realizar en cada estado. Debido a la anterior asunción pode-
mos considerar ambos algoritmos como restringidos únicamente por las deperi-
dencias de datos. Dentro de este contexto, el algoritmo ASAP planifica cada ope-
ración asociándola al primer estado en el que todos los operandos estén disponi-
bles. En otras palabras, se explora el grafo de control/flujo de datos desde su ini-
cio hasta su fmal y se asignan a cada estado todos los nodos del grafo cuyos nodos
predecesores, o padres, hayan sido ya asignados a estados previos. Así, el algorit-
mo ASAP proporciona una planificación con el mínimo número de estados o, en
otras palabras, el tiempo de ejecución más corto.
A diferencia de la aproximación ASAP, el algoritmo ALAP planifica cada
operación asignándola al último estado posible antes de que su resultado sea nece-
sario, en el caso de que se haya especificado una longitud máxima (en términos
de número de estados) como restricción para la planificación obtenida finalmen-
te. En otras palabras, se explora el grafo de control/flujo de datos desde su final
hasta su inicio y se asignan a cada estado todos los nodos cuyos nodos sucesores,
o hijos, han sido ya asignados a estados posteriores. Si la longitud de la planifi-
cación obtenida es igual al número de estados obtenido por el algoritmo ASAP, el
algoritmo ALAP planifica todas las operaciones del camino más largo, o camino
crítico, del grafo de flujo de datos a los mismos estados que el algoritmo ASAP.
Las operaciones que no están en el camino crítico se ejecutan antes de ser nece-
sarias en el algoritmo ASAP y después de ser posible su ejecución en la planifi-
cación ALAP.
En I~ Figura 8.38 las planificaciones ASAP y ALAP se aplican a la mayor de
las dos cajas de asignación de la Figura 8.37. Se ha considerado sólo una caja por
simplicidad. Las dos planificaciones de la Figura 8.38 requieren siete estados.
Además se comprueba que todas las operaciones excepto min y »1 están en el
camino crítico. Estas dos operaciones se asignan tan pronto como sea posible
(estados 5 2 y 5 3) en la planificación ASAP y tan tarde como sea posible (estados
53 y 54) en la planificación ALAP.
El hecho de que los algoritmos de planificación ASAP y ALAP asignen las
operaciones del camino crítico a los mismos estados puede utilizarse para separar
las operaciones críticas de las no críticas en los algoritmos de planificación gene-
rales. La prioridad se da siempre a aquellas operaciones que se encuentran en el
camino crítico, puesto que retardar una de estas operaciones en un estado puede
aumentar la planificación en un estado e incrementar el tiempo de ejecución. Por
otra parte, la menor prioridad se confiere a las operaciones que no están en el
camino crítico puesto que se dispone de mayor flexibilidad para su planificación
en estados diferentes y pueden retardarse sin afectar al tiempo de ejecución del
CDFG.
La prioridad de una operación en el proceso de planificación puede medirse
mediante diferentes métricas. Una de estas métricas es la movilidad de la opera-
ción, que es igual a la distancia en número de estados entre los estados asignados
392 Principios de diseño digital

a una operación particular en las planificaciones ASAP y ALAP. En otras pala-


bras, si una operación, op, se asigna al estado sien la planificación ASAP y al esta-
do sk en la planificación ALAP, su movilidad, M(opJ, será igual a k-i. Así, la
movilidad define la capacidad de una operación para ser pospuesta sin ningún
impacto en el tiempo de ejecución total, y puede utilizarse para asociar priorida-
des a las operaciones. Es decir, los estados con movilidad más alta pueden, en
consecuencia, tener prioridades más bajas.

a b a b

Out Out

(a) Planificación ASAP (a) Planificación ALAP

FIGURA 8.38 Planificaciones básicas.

Como medida de prioridad alternativa, podemos utilizar el criterio de la


urgencia de una operación, que es igual a la distancia en número de estados
entre el estado en el que la operación puede asignarse y el estado en el que se pro-
duce'la operación en su planificación ALAP. En otras palabras, si una operación,
op, está disponible en el estado s . pero no se asigna hasta el estado sk en su plani-
ficación ALAP, la urgencia de ó'peraci6n, U( opJ, será igual a k-jo Como tercera
medida de prioridad para una operaci6n podríamos considerar el número de ope-
raeiones· que utilizan su resultado como operando. Esta medida da mayor priori-
dad a las operaciones que incrementan el número de operaciones disponibles para
Diseño al nivel de transferencias entre registros 393

ser asignadas en el futuro . Hay otras medidas de prioridad además de éstas, pero
ninguna de ellas resulta adecuada en todos los casos. En teoría, podríamos utili-
zar cualquier número de métricas de p~n cualquier orden.

Planificación ASAP

Planificación ALAP

Detennmar
movilidades

FIGURA 8.39 Algor~mo de planificación con lista.

Uno de los algoritmos más populares para la planificación Re es el algorit-


mo de planificación de lista (!ist-scheduling algorithm), que debe su nombre a
394 Principios de diseño digital ~

que utiliza una lista de as operaciones que están disponibles para ser asignadas
(lista de preparadas). En te algoritmo, las operaciones con la lista de preparadas
se ordenan según sus movilidades, de forma que las operaciones con movilidad
cero se sitúan al principio de la lista mientras que las operaciones con mayor
movilidad se sitúan al final. En los casos en los que dos operaciones tengan la
misma movilidad, se da mayor prioridad a la operación con menor valor de urgen-
cia. Si estos números también son iguales, se asigna la prioridad de forma aleato-
ria. Al aplicar este algoritmo de planificación de lista se realizan los siguientes
pasos en cada estado: se asignan, una a una, las operaciones con prioridades más
altas de la lista de preparadas a las unidades funcionales disponibles, después se
borran de la lista todas las operaciones asignadas, y se insertan en la lista, en las
posiciones que les correspondan según sus movilidades y urgencias, las nuevas
operaciones que pasan a estar disponibles para su planificación. Este algoritmo de
planificación de lista se resume en la Figura 8.39.
El algoritmo de planificación de lista actuando sobre el grafo de flujo de datos
de la caja de asignación de la Figura 8.37(b) asume que se dispone de una única
unidad aritmética, que puede calcular el valor absoluto, el mínimo, el máximo, la
suma, y la resta, y de dos unidades de desplazamiento más. En primer lugar, gene-
ramos las planificaciones ASAP y ALAP, como muestran las Figuras 8.40(a) y
(b). Después creamos una lista de preparadas para el primer estado como muestra
la Figura 8.40(c) y calculamos las movilidades para las operaciones de dicha lista.
En nuestro caso, sólo las operaciones lal y Ibl están disponibles en el primer esta-
do. Puesto que estas operaciones tienen la misma movilidad [M(lal}=M(lbl}=O],
se ordenan aleatoriamente y se asigna lal en primer lugar. Puesto que la asignación
de Id no libera nuevas operaciones para la planificación no se cambia la lista de
preparadas en este momento. Por tanto, hay que asignar Ibl al estado s2' lo que per-
mite añadir los operadores max y min a la lista. Puesto que el operador max está
en el camino crítico, tienen una movilidad M(max}=O, que le da una prioridad
mayor con respecto al operador min, que tiene una movilidad M(min}=l. Así, se
planificaría max en el estado s3' que nos permite añadir »3 a la lista de opera-
ciones preparadas. Puesto que su movilidad es M(»3}=O, este operador debe
situarse al comienzo de la lista. En este momento hay una AU y dos desplazado-
res disponibles, por lo que se pueden planificar las dos operaciones, (»3) y min,
en el estado S4 . Después actualizamos la lista de preparadas añadiendo - y »1,
ya que ambos pueden planificarse en el estado s5" En este momento se puede asig-
nar + al estado s6 y max al estado S7' y finalmente, proporcionar el resultado en el
estado S8. La planificación RC final se muestra en la Figura 8.40(d).
Como se ha visto, el objetivo del algoritmo de planificación RC es asignar a
cada estado tantas operaciones como sea posible dado el número de unidades fun-
cionales disponibles. Cuando haya más operaciones disponibles que unidades
funcionales debemos utilizar una medida de prioridad, tal como la movilidad o la
urgencia. En nuestro ejemplo se ha obtenido una planificación que requiere un
estado más que las planificaciones ASAP y ALAP pero con un coste menor ya
que se utiliza sólo [Link] y dos desplazadores, mientras que las planificaciones
ALAP y ASAP precisan dos AU y dos desplazadores.
Diseño al nivel de transferencias entre registros 395

" @ ® .,
9_ ~

" ®E
" ee o - 1.. __
'. e e,
o •
" o
- .Q -
8,
" 0o
" e o
0" Out
©
'.
0"
(al ASAP (bl ALAP (e) Lisia de preparadas (d) Planificación Re
con movilidades

FIGURA 8.40 Planificación con restricciones de recursos.

En muchos casos el objetivo principal en la optimización de un diseño no es


el costo sino las prestaciones puesto que el camino de datos debe ejecutar un algo-
ritmo determinado en un intervalo de tiempo prefijado. Cuando el tiempo de eje-
cución está acotado se utiliza la planificación con restricciones de tiempo (TC,
Time-Constrained scheduling), que proporciona una planificación con un número
determinado de estados intentado además minimizar el número de unidades fun-
cionales necesarias en el camino de datos. Este objetivo se consigue creando un
grafo de distribución de probabilidades, y asignando las operaciones a los estados
una a una, de manera que se minimice el valor máximo de las suma de probabili-
dades de cada operador.
Para utiljzar la planificación TC, tal y como indica la Figura 8.41 , se aplican
primero los algoritmos de planificación ASAP y ALAP para determinar el rango
de movilidad de cada operación. Después de haber establecido dichos rangos, se
asigna igual probabilidad para la planificación de una operación dada en alguno
de los estados de su rango. Obviamente, para cada operación, la suma de proba-
bilidades dentro de su rango es igual a uno.
Una vez calculadas estas probabilidades, se pueden obtener los grafos de dis-
tribución de probabilidades, que definen las sumas de probabilidades para cada
conjunto de operaciones compatibles en cada estado. En otras palabras, estas
sumas de probabilidades determinan el número de unidades funcionales de cada
tipo que se necesitan en cada estado. A partir de este momento se intenta mini-
396 Principios de diseño digital
~
mizar el número de unidades funcionales seleccionando una operación y asignán-
dola al estado que reduzca, en el grafo de distribución, la suma de probabilidades
mayor para este tipo de operación. Si la reducción no es posible, se selecciona un
estado y se asigna al estado para el que el incremento en la suma de probabilida-
des es menor. El algoritmo sólo termina cuando se han asignado todas las opera-
ciones, tal y como se indica en la Figura 8.41.

Planificación ASAP

Definir rangos
de movilidades

Crear grafos
de distribución
de posibilidades

Asignar la operación
con ganancia máxima

Asignar la operación
con perdida m1nima

FIGURA 8.41 Planificación con restricciones de tiempo.

La planificación TC se muestra sobre el grafo de flujo de datos de la caja de


asignación de la Figura 8.37(b). Para poder establecer una comparación, se ha
fijado corno objetivo una asignación final con 8 estados, puesto que éste fue el
número de estados que se obtuvo en la planificación RC utilizando una AU y dos
unidades de desplazamiento. En el primer paso se obtienen las planificaciones
ASAP y ALAP como muestran las Figuras 8.42(a) y (b).
Diseño al nivel de transferencias entre registros 397

A partir de estas planificaciones se pueden obtener los rangos de movilidad,


llegándose a que dicho rango es 2 para todos los operadores excepto para »1 y
para mino Es decir que la probabilidad de que cada uno de esos operadores sea
asignado a uno de los estados de su rango es 0.5. Puesto que los operadores min
y »1 tienen cada uno un rango de 3 estados, la probabilidad de ser asignados a
algún estado determinado dentro de ese rango es 0.33. En la Figura 8.43(a), estas
probabilidades individuales se combinan en dos grafos de distribución que se uti-
lizan para minimizar el número de A U Y de unidades de desplazamiento.

'J

'1

Out
(a)ASAP (b) ALAP (e) Planificación TC

FIGURA 8.42 Planificación Te para el algoritmo de la SRA.

Como puede verse a partir de los grafos de distribución para las AU y las unida-
des de desplazamiento, la planificación de una operación en un estado concreto
incrementa la suma de probabilidades en ese estado y en consecuencia el número de
unidades necesarias, excepto en el estado s7' donde la suma de probabilidades es sólo
0.5. Por tanto, se asigna el operador mm: al estado s7' lo que incrementa su suma de
probabilidades a 1.0. Por la misma razón, se asigna + al estado s6 y - al estado Sy En
este momento se tiene la opción de asignar mm: o min al estado s3. Sin embargo,
como puede verse, la asignación de mm: hace disminuir la suma de probabilidades
del estado s2 a 1.33, mientras que la de min haría decrecer la suma de probabilidades
a 1.5. Por ello, se asigna mm: al estado s3 para reducir lo más posible su suma de pro-
babilidades. Una vez asignada max al estado s3' hay que asignar »3 al estado S4
puesto que »3 utiliza el resultado de la operación mm: como entrada. En la Figura
8.43(b) pueden verse los grafos de distribución correspondientes a la planificación
398
/
Principios de diseño digital

parcial que se ha desarrollado hasta este punto del algoritmo. Utilizando el mismo
criterio de antes, se asigna la operación min al estado s4 y la operación» 1 al estado
ss' obteniéndose el grafo de distribución que muestra la Figura 8.43(c) .
... ;

~,~ ·1 I
....
" ,!!!.' -
·..JIII . . -~ ,--
-- ..
lE. 1m
III\IE
~
I
lE
.,. . . .0_.
lIIMIfli
1&
SlMIl
S\IOO lIiIIIlIIIIIIO ~. I

s,

S2
~-t>
1,0

1,83
s,

s2
JJ
' 1'
1,0

1,33
~
1; ~
s, .~

E
,83 ,83 s, máx E ." 1,33 ,33
'"A
_A
s. ,83 A
A
,83 s4 ,33 } »31 1,33
I

s, 1,0 ,33 s, - 1,0 ,33


+
s6 1,0 s6 + 1,0

S7
i ,5 S7 máx 1,0

(a) Grafo de distribución de probabi lidades inicial (h) Grafo de distribución de probabilidades después de
planificar max. + y -

l · mm

s,

s2
lIIMIfli
mérAI
141

,·,1,·1
SlMIE
IIIJI/,'WIB
S\IOO

1,0

1,0
lIIMIfli
Il:
lIBIIlIiBRl
-
SlMIl:
tsWIlI

s,

S2
lIIMIfli
mérAI lUIiIIIIB
~

lal

Ibl
- -
SlMIE

1,0

1,0
lIIMIfli
11
lEMIJBIlI
SlMIl

s, máx 1,0 s, máx 1,0

s. mín 1,0 »3 1,0 S4 m{n 1,0 »3 1,0

s, - 1,0 »1 1,0 s, - 1,0 » 1 1,0

s6 + 1,0 s6 + 1,0

S7 máx 1,0 s7 máx 1,0


.
(e) Grafo de distribución de probabilidades después de (d) Grafo de distribución para la planificación final
planificar máx, mín, +, -, »3 y» I .

FIGURA 8.43 Grafo de distribución de probabilidades antes, durante, y después de la planifICación Te.
~ Diseño al nivel de transferencias entre registros 399

Como puede verse, tanto al intentar planificar lal como Ibl se incrementan la
suma de probabilidades de s I o S2' pero este incremento es sólo temporal, puesto
que cuando se hayan planificado ambas operaciones, la suma de probabilidades .
en cada estado es 1.0 tanto para la AU como para la unidad de desplazamiento. Es
decir, se ha mostrado que el CDFG de la Figura 8.37(b) puede planificarse en 9
estados utilizando únicamente una AU y una unidad de desplazamiento, aunque
eventualmente se utilicen dos unidades de desplazamiento en lugar de una, por-
que su costo y retardo son iguales a cero.
Aunque en este caso el algoritmo TC proporciona la misma planificación que
el algoritmo RC, en casos más complejos estos dos algoritmos generalmente pro-
porcionan planificaciones diferentes. Como regla, se seleccionará el algoritmo '
que mejor se ajuste al objetivo principal de nuestro diseño, utilizando la planifi-
cación RC si se han de satisfacer restricciones de costo y la planificación TC si
hay que [Link] relativas a prestaciones.

8.14. RESUMEN DEL CAPíTULO


En este capítulo se ha explicado cómo especificar y obtener implementaciones de
descripciones arbitrarias dadas a partir de diagramas ASM. Presentamos una des-
cripción formal llamada FSMD y después se describen dos formas para la especi-
ficación de ASIC al nivel de transferencias entre registros, las tablas de estado-
acción y los diagramas ASM. Además se ha mostrado cómo obtener una imple-
mentación a partir de un diagrama ASM. También se han descrito varios procedi-
mientos para optimizar dicha implementación, indicando cómo agrupar variables
y asignarlas a registros, cómo agrupar registros formando bancos de registros o
memorias, cómo agrupar operadores y asignarlos a unidades funcionales, y cómo
agrupar conexiones y defmir buses para cada uno de estos grupos de conexiones.
También se ha mostrado cómo optimizar una implementación para unidades fun-
cionales de diferentes velocidades mediante el encadenamiento de unidades fun-
cionales rápidas y la técnica de multiciclo en el caso de las unidades funcionales
lentas que necesitan más de un ciclo de reloj para proporcionar resultados.
En secciones posteriores del capítulo se introdujo el concepto de segmenta-
ción y se mostró cómo mejorar las prestaciones mediante la segmentación bien de
las unidades funcionales , las unidades de control , o el camino de datos completo.
En la última sección, se describe cómo transformar los programas ordinarios
o los diagramas de flujo en grafos ASM mediante la planificación de las senten-
cias de asignación en distintos estados. Para ello, se describieron dos tipos de
algoritmos de planificación que reflejan objetivos de optimización diferentes,
mostrándose cómo utilizar la planificación con restricciones de recursos para
minimizar el tiempo de ejecución, dado un conjunto de recursos, y la planifica-
ción con restricciones de tiempo, para minimizar los recursos necesarios para un
tiempo de ejecución prefijado.
Como conclusión, en este capítulo se presenta una metodología general para
especificar comportamientos arbitrarios mediante diagramas ASM y obtener
400 Principios de diseño digital

implementaciones con arreglo al modelo FSMD. En el capítulo siguiente aplica-


remos esta metodología para diseñar unOs circuitos integrados específicos, corno
son los procesadores, cuyo comportamiento se describe de forma sucinta median-
te sus repertorios de instrucciones.

8.15. LECTURAS ADICIONALES


CIare, C. R. Designing Logic Systems Using State Machines. New York: McGraw-Hill,
1973.
Presenta los diagramas de máquina algorítmica de estados (ASM) y muestra los pasos
esenciales en el diseño de distintos tipos de FSMD.
DeMicheli, G. Synthesis and Optimization 01 Digital Circuits. New York: McGraw-Hill,
1994.
Presenta una buena revisión de los resultados en la planificación y en la síntesis de des-
cripciones de comportamiento de ASIC.
Gajski, D. D., N. Dut!, A. e -H. Wu, y S. Lin. High-Level Synthesis: Introduction lo Chip
and System Design. Bastan: Kluwer Academic Publishers, 1992.
Describe los modelos y algoritmos para la optimización y la planificación ASM. Para
su lectura se requieren conocimientos relativos a algoritmos y estructuras de datos.

8.16. PROBLEMAS
8.1. (Modelo FSMD) Determine el ciclo cuando Dato ha sido leído del banco
de reloj mínimo (de flanco de subida de registros y ha pasado a través de la
a flanco de subida) para el modelo ALU y de la unidad de desplazamien-
FSMD de la Figura 8.2, cuando se to.
comporta como:
(a) Un FSMD basado en estados. 8.3. (Descripción FSMD) Obtenga (a) el
(b) Un FSMD basado en entradas. diagrama ASM y (b) la Tabla de esta-
Pista: El ciclo de reloj mínimo es do-acción, para la solución del
igual al retardo registro-registro más Problema 8.2.
largo. Así, se necesita identificar el 8.4. (Diagramas ASM) Obtenga una des-
camino de la Figura 8.2 con mayor cripción con un diagrama ASM para
retardo. Normalmente se denomina un contador de decenas que tiene tres
camino crítico. salidas que indican si la cuenta es
8.2. (Descripción FSMD) Reescriba la menor que cinco (LS), igual a cinco
descripción del contador de unos de la (ES), o mayor que cinco (G5).
Figura 8.1 sin utilizar las variables 8.5. (Diagramas ASM) Obtenga un dia-
Máscara y Temp. Utilice el bit menos grama .ASM para un contador que
significativo de Dato para incremen- contará en módulo 4 si la señal rango
tar CuentaI. La implementación debe es igual a O y en módulo 7 si es igual
utilizar el camino de datos de la
al.
Figura 7.25.
Pista: El bit menos significativo está 8.6. (Diagramas ASM) Determine un dia-
disponible en el bus de resultado grama ASM (a) basado en estados y
Diseño "",;];¡¡vel de transferencias entre registros 401

(b) basado en entradas, que pueda (a) Valor absoluto y desplazamiento


simular un jugador de Black Jack, tres posiciones a la derecha.
suponiendo que las cartas toman valo- (b) Valor absoluto y desplazamien-
res desde dos a diez y que los ases to a la derecha una y tres posi-
toman el valor uno u once. El jugador ciones.
debe actuar como se indica a conti- (c) Suma y desplazamiento tres
nuación : posiciones a la derecha.
1. Poner la variable Marcador a (d) Suma y desplazamiento a la
cero y borrar el indicador, flag , derecha una y tres posiciones.
de JI puntos de as.
8.10. (Algoritmo de lado-izquierdo) Asigne
2. Aceptar una carta y sumar su
las variables /, a /8 al mínimo número
valor a Marcador.
de registros utilizando el algoritmo de
3. Sumar 10 más a Marcador si la
lado-izquierdo. Los tiempos de vida
carta es un as y borrar el indica-
se dan en la Figura P8.1O.
dor flag de 11 puntos de as. Poner
a 1 el indicador flag de JI puntos.
4. Ir a 2 si Marcador es menor o
igual a 16.
/, X X X X
S. Activar Stand e ir a 1 (empezar
/2 X X X
una nueva partida) si Marcador
/3 X X X X
es menor o igual a 21. X X
/.
6. Restar 10 a Marcador, borrar X X X
/5
flag, e ir a 4 si flag estaba a 1. l. X X
7. Activar Broke e ir a 1 (comenzar /7 X X
una nueva partida). /8 X X

8.7. (Diagramas ASM) Obtenga un dia- FIGURA PB. l0


grama ASM para el siguiente algorit-
mo: 8.11. (Partición de grafos) Agrupe los
whilex < a do nodos del grafo de compatibilidad de
x , = x + dx la Figura P8.11. Asuma que el peso de
u, = u - 3xudx - 3ydx un arco prioritario a un supernodo es
Y, = Y + udx igual a los pesos de los arcos priorita-
x=x¡ rios a cada uno de los nodos del
u= u¡ supemodo.
y = Y,
end while
,.,
8.8. (Diagramas ASM) Determine un dia-
grama ASM para un multiplicador de
desplazamiento-y-suma que sume el
multiplicando (MD) al producto par-
cial (PP) si el bit menos significativo 'd
~-=-"",,-~-¡¡¡-:>....J
del multiplicador (MR) es 1, y despla-
ce el producto parcial y el multiplica-
dor un bit a la derecha.
8_9. (Biblioteca de componentes) Diseñe
unidades que puedan realizar las
siguientes operaciones. FIGURA PB.l l
402 Principios de diseño digital (

8.12. (Encadenamiento) Obtenga un dia- no de datos con control segmentado


grama ASM para el algoritmo de la con:
SRA en el que: (a) Un registro de estado
(a) Se pueden encadenar cuales- (b) Un registro de control
quiera dos operadores. (e) Un registro de estado y control
(b) Las operaciones + y - se pueden 8.17. (Control segmentado) Obtenga los
encadenar, y >> puede encade- diagramas ASM para un contador de
narse con cualquier otra opera- unos (a) basado en estados y (b) basa-
ción. do en entradas, que utilicen unidades
(e) Se pueden encadenar cuales- de control segmentadas con registros
quiera tres operaciones. de control y estado.
8.13. (Multiciclo) Obtenga un diagrama 8.18. (Diseño de la unidad de control) Para
ASM para el algoritmo de la SRA en la versión basada en estados del con-
el que: tador de unos de la Figura 8.9(a) dise-
(a) las operaciones min, max, y ñe la unidad de control utilizando:
valor absoluto utilizan dos (a) Un registro de estado y un deco-
ciclos de reloj. dificador.
(b) max necesita dos ciclos de reloj . (b) Un contador y un decodificador.
(e) min necesita dos ciclos de reloj . (e) Una unidad de control micropro-
8.14. (Unidades Funcionales Segmentadas) gramada (indique también el
Determine el diagrama ASM y el dia- contenido de la ROM).
grama de tiempos para el algoritmo 8.19. (Diseño de la unidad de control)
de la SRA con dos unidades segmen- Repita el problema 8.1 8 para la ver-
tadas, en el que: sión basada en entradas del contador
(a) La unidad [abs/min/max] tiene de unos de la Figura 8.9(b).
dos etapas, y la unidad
[+/-/» V»3] tiene tres eta- 8.20. (planificación) Obtenga la planifica-
pas. ción (a) ASAP y (b) ALAP para el
(b) La unidad [min/max/> > 1] tiene cuerpo del bucle del problema 8.7.
dos etapas, y la unidad 8.21. (Planificación) Para el cuerpo del
[abs/ +/- ] tiene dos etapas. bucle del Problema 8.7, obtenga una
(e) La unidad [abs/max/»Y-] tiene planificación TC con (a) cuatro esta-
dos etapas, y la unidad dos, (b) cinco estados, y (e) seis esta-
[min/+/> > 1] tiene dos etapas. dos.
8.15. (Camino de Datos Segmentado) 8.22. (Planificación) Obtenga una planifi-
Obtenga un camino de datos segmen- cación RC para el cuerpo del bucle
tado dividiendo el algoritmo de la del Problema 8.7 dados:
SRA en (a) tres, y (b) cuatro etapas. (a) Tres multiplicadores y dos
Proporcione los diagramas de tiempo sumadores/restadores.
para cada caso. ¿Cuál es la ganancia (b) Dos multiplicadores y dos
en cuanto a prestaciones? sumadores/restadores.
8.16. (Control segmentado) Utilizando el (e) Dos multiplicadores y un suma-
contador de unos descrito en el dia- dor/restador.
grama ASM de la Figura 8.6, obtenga (¡'ista: Utilice un restador para com-
el diagrama de tiempos para un cami- parar los valores de dos variables).
(
e L o

El diseño
del procesador

Puertas lÓ~iC':;
3
Álgebra booleana
.!
I
Máquina de
6
estados finitos ~
Técnicas de
diseño lógico
4 .
4-
Técnicas de
6

, ,
diseño digital

Sistema binario 2
I
y representación
de datos
t
5 ./
r,

I I
. ,?iseño ~~n~re
Máquinas de · 8
estados finitos
generalizadas registros

r,
e del
406 Principios de diseño digital

En el Capítulo 8, se han presentado técnicas para la síntesis de ASIC. En este capí-


tulo nos centramos en el diseño de procesadores de uso general que, junto con las
memorias y los ASIC, son los componentes principales en la mayoría de las com-
putadoras y productos electrónicos de consumo. En ellos, el procesador controla
el funcionamiento de todo el sistema, supervisando dispositivos de entrada/salida
(E/S) tales como teclados, discos, cintas, monitores, etc., y sincronizando la trans-
misión de datos entre los distintos componentes del sistema. Además, el procesa-
dor realiza la mayoría de las tareas de cómputo, con la excepción de ciertos cál-
culos computacionalmente intensivos que requieren unas prestaciones más allá de
las capacidades del procesador, y que deben realizarse en componentes específi-
cos para ese tipo de operaciones.
Comparado con un procesador, un circuito de aplicación específica (ASIC,
Application-Specific Integrated Circuit) puede realizar muy eficazmente una tarea
o un algoritmo detellÍ1inado, pero no dispone de la programabilidad y generalidad
de un procesador. Junto con los procesadores y los ASIC, la mayoría de las com-
putadoras incluyen la memoria pr incipal, que almacena los datos que necesitan
con mayor urgencia los procesadores y los ASIC. El resto de datos se almacena
en dispositivos de E/S tales como discos, CD ROM, o cintas, y se llevan a la
memoria cuando son necesarios para el procesamiento en curso. Normalmente,
estos componentes de la computadora están conectados al sistema mediante un
bus, como muestra la Figura 9.1.

Procesador ASIC ASIC

1 1 Bus

¡ 1 1
Memoria Dispositivo Dispositivo
principal de PlS de E/S

FIGURA 9. 1 Computador genérico.

Como se indicó en el Capítulo 8, los ASIC se especifican mediante descrip-


ciones de comportamiento en forma de algoritmos, programas, o diagramas de
flujo. Un procesador, por otra parte, queda completamente especificado por su
repertorio de instrucciones (IS, Instruction Set), en el que cada instrucción
representa la unidad indivisible de cómputo más pequeña. Para calcular una
expresión matemática o cualquier otra tarea de cómputo se necesita una secuen-
cia de instrucciones. Una tarea se especifica usualmente mediante un lenguaje de
programación que es traducido mediante un compilador a una secuencia de tales
El diseño del procesador 407

instrucciones. Así, el repertorio de instrucciones debe ser lo bastante general


como para permitir una compilación eficiente de diferentes lenguajes de progra-
mación, pero lo suficientemente simple para permitir un diseño de procesador
rápido y factible en la práctica.
En este capítulo se discute la relación entre los repertorios de instrucciones y
el diseño del procesador y se muestra cómo diseñar un procesador para un reper-
torio de instrucciones dado. Además, se utilizan algunas de las técnicas presenta-
das en el Capítulo 8 y se muestra la forma de diseñar un procesador sencillo de 16
bits con repertorio complejo de instrucciones (CISC, Complex Instruction-Set
Computer), así como el correspondiente procesador de repertorio reducido de ins-
trucciones (RISC, Reduced Instruction-Set Computer).

9.1. REPERTORIOS DE INSTRUCCIONES


Como se ha mencionado anteriormente, un procesador se diseña para ejecutar
secuencias de instrucciones, llamadas programas. Cada instrucción realiza una
pequeña parte del procesamiento, tal como almacenar un dato en memoria, cargar
datos en los procesadores y en los dispositivos de E/S desde la memoria, realizar
una operación aritmética, lógica, o de desplazamiento, o decidir la instrucción que
se ejecuta a continuación. Cada repertorio de instrucciones tendrá una cierta
variedad de instrucciones y formatos de instrucción, que se interpretan en la uni-
dad de control del procesador y se ejecutan en su camino de datos. Una instruc·
ción es en si una cadena de bits, que se se agrupan en distintas subcadenas, o cam-
pos, con tamaños diferentes.
Los campos que se encuentran más frecuentemente son el código de opera-
ción (codop), que especifica la operación a realizar, y el campo de dirección, que
especifica dónde encontrar los operandos necesarios para dicha operación. Para
representar cada instrucción, usualmente se utiliza una notación especial para pro-
gramas que especifica el codop en primer lugar, seguido por las direcciones nece-
sarias. Por ejemplo, considérese una instrucción para realizar la operación
a = b + e, con a, b, y e almacenadas en las posiciones A, B, Y C; respectivamen-
te. Para representar esa instrucción, se escribiría
AddA, B, C
Alternativamente, podríamos representar la misma instrucción mediante una
notación matemática similar a la de asignación a variables utilizada en los len-
guajes de programación. En este caso escribimos
Mem[AJ f---Mem[BJ + Mem[CJ
en donde Mem es un array y a, b, y e son elementos de dicho array Mem[AJ,
Mem[BJ, y Mem[CJ, donde los símbolos entre corchetes indican los índices del
array.
Además es posible que las variables a, b, y e estén almacenadas en un banco
de registros dentro del camino de datos, en cuyo caso se escribe
408 Principios de diseño digital

Add RA, RB, RC


para indicar que las direcciones RA, RB, YRC son direcciones del banco de regis-
tros. En notación matemática, la misma instrucción podría representarse con la
expresión
RF[A] ~RF[B] + RF[C]
Además de los campos de codop y de dirección, en cada instrucción se encuen-
tra frecuentemente un campo de tipo de instrucción. Los tipos de instrucciones más
frecuentes son instrucciones con registros, que operan con valores almacenados
en registros, instrucciones de transferencia (¡nove instructions~ que transfieren
datos entre la memoria y los registros, y las instrucciones de salto condicional
IPranch instructions), que seleccionan una de las dos posibles instrucciones a eje-
cutar a continuación de la actual en función del estado del camino de datos.
Las instrucciones con registros típicas, como la instrucción Add considerada
anteriormente, realizan operaciones aritméticas, lógicas, y de desplazamiento con
operandos almacenados en el banco de registros. Como ejemplos de instrucciones
de transferencia frecuentemente usadas están las instrucciones de carga (load) ,
tales como
Load R2,A (RF[2] ~ Mem[Aj)
que carga el dato almacenado en memoria, en la posición A, en el registro RF[2],
incluido en el banco de registros, y las instrucciones de almacenamiento f!¡tore)
como
Store A, R2 (Mem[A] « RF[2j)
que almacena el valor del registro RF[2] en la posición de memoria A.
Una instrucción de salto condicional típica compara los valores de dos regis-
tros y decide qué hacer a continuación en base a dicha comparación. Por ejemplo,
una instrucción de saItar-si-igual, Beq (de branch-on-equaf), determina si los dos
valores son iguales y, si son iguales, decide ejecutar la instrucción situada en la
dirección de memoria especificada en el campo de dirección de la instrucción, o
bien, si no son iguales, ejecutar la siguiente instrucción de la secuencia. Así, la
instrucción
Beq R2,R:)A
indica que si los valores de RF[2] y RF[3] son iguales, el procesador ejecutará la
instrucción situada en Mem[A].
Además de los campos de tipo, una instrucción puede incluir un campo de
modo que especificaría la forma de obtener la dirección efectiva de los datos a
partir de la información proporcionada por el campo de dirección. Por ejemplo, si
el campo de modo indica que la instrucción proporciona una dirección indirecta,
se tiene que el campo de dirección de la instrucción especifica una dirección de
memoria donde se encuentra la dirección real del operando. Considere, por ejem-
plo, la siguiente instrucción:
El diseño del procesador 409

Lind R2,A (RF[2) f- Mem[Mem[AJ])


Según el campo de modo de la instrucción, se cargará el dato de memoria
situado en la posición Mem[A}, y no desde la dirección especificada por A
Por último, una instrucción también puede incluir un campo de constante,
que contiene el valor de una constante que se utiliza como operando. Por ejem-
plo, la instrucción
Add R2,R3,l (RF[2) f- RF[3}+ 1)
indica que el procesador sumará 1 al valor del tercer registro del banco de regis-
tros y lo almacenará en el segundo registro. El campo de constante también puede
utilizarse para especificar un índice cuando se está accediendo a los elementos de
un array.
Al definir un repertorio de instrucciones, uno de los factores más importantes
a tener en cuenta es el número de campos de dirección que tendrán las instruc-
ciones, puesto que el número de campos de dirección afecta de manera importan-
te al tamaño de los programas y a las prestaciones del procesador. Es decir, cuan-
tos más campos de dirección tenga una instrucción, mayor será el tamaño de las
instrucciones pero los programas serán más cortos debido a que tendrán menos
instrucciones. En cambio, las instrucciones con menos campos de dirección son
más cortas pero se necesitan programas más largos para ejecutar una tarea deter-
minada. Cuando se utilizan instrucciones más largas, el procesador realiza más
accesos a memoria por instrucción para captar las instrucciones y los operandos.
Sin embargo, el número total de accesos a memoria puede no ser diferente en el
caso de instrucciones más cortas, puesto que el programa necesitaría más instruc-
ciones. Si el número total de accesos a memoria se usa sin más como una medida
de prestaciones, debemos diseñar el repertorio de instrucciones de manera que por
término medio los programas necesiten el mínimo número de accesos a memoria.
A continuación se muestran varias opciones con un ejemplo sencillo.
Considérense instrucciones con distintos tipos y número de direcciones para
el cálculo de la expresión e = a2 - Jil = (a + b) * (a - by. En general, las instruc-
ciones con tres direcciones son las más potentes porque pueden ejecutar una asig-
nación completa a las variables que intervienen en una operación de dos operan-
dos. Concretamente, una instrucción con tres direcciones contendría las posi-
ciones de los dos operandos y la del resultado, además de especificar la operación
binaria a realizar. Por ejemplo, el cálculo de (a + b) * (a - b) podría especificar-
se mediante las siguientes tres hipotéticas instrucciones, en las que asumimos que
las variables a, b, e y una variable temporal x están almacenadas en memoria, en
las posiciones A, B, e, y X. respectivamente:
1. Add X, A, B (Mem[X] f- Mem[A] + Mem[BJ)
2. Sub e, A, B (Mem[C] f- Mem[A]- Mem[B])
3. Mul e, X, e (Mem[C] f- Mem[X] * Mem[C])
El ejemplo anterior muestra un punto débil de las instrucciones con tres ope-
randos: aunque son muy convenientes, también son muy largas si se tienen en
410 Principios de diseño digital

cuenta los estándares actuales en las tecnologías de memorias y procesadores. Si


se asume que los tamaños actuales para la memoria están entre 16 y 256 millones
de palabras, cada dirección precisaría entre 24 y 28 bits, y una instrucción con tres
direcciones necesitaría de 80 a 90 bits, incluyendo el campo de código de opera-
ción. Si además asumimos que las instrucciones con tres direcciones se ejecutan
en procesadores de 32 bits con palabras de memoria de 32 bits, cada instrucción
ocupará tres palabras de memoria. En otras palabras, un procesador debe realizar
tres accesos a memoria para captar una instrucción y tres más para ejecutarla. Con
todo esto, para ejecutar el programa anterior, el procesador tenqría que acceder
nueve veces a memoria para captar las instrucciones y otras nueve más para acce-
der a los operandos y almacenar los resultados.
Una estrategia que puede mejorar las prestaciones del programa consiste en
reducir el número de direcciones de tres a dos, utilizando instrucciones con dos
direcciones que asumen que el primer operando y el resultado comparten las
misma posición de memoria. Por ejemplo, si utilizamos instrucciones con dos
direcciones, el programa para calcular e = (a + b) * (a - b) necesitaría cinco ins-
trucciones, como se indica a continuación:
1. Move X,A (Mem[X] f- Mem[A])
2. Add X,B (Mem[X] f- Mem[X] + Mem[B])
3. Move C,A (Mem [C] f- Mem[A])
4. Sub C, B (Mem[C] f- Mem[C] - Mem[B])
5. Mul C,X (Mem[C] f- Mem[C] * Mem[X])
Asumiendo nuevamente que cada dirección necesita entre 24 y 28 bits, cada una
de las instrucciones de dos direcciones podría caber en sólo dos palabras de memo-
ria, en lugar de tres. Sin embargo, ahora necesitaríamos cinco instrucciones para cal-
cular el mismo resultado. Es decir, el procesador accedería en este caso 10 veces a
memoria para captar las instrucciones, y otras 13 veces para obtener los operandos y
almacenar los resultados. Con esta situación, el programa anterior tendría un tiempo
de ejecución mayor que el del programa con instrucciones de tres direcciones, pues-
to que ahora se necesitan dos instrucciones Move extra para cargar los datos en las
posiciones adecuadas para su uso por las instrucciones con dos operandos siguientes.
No obstante, podríamos reducir el número de direcciones a una si se dedica un
registro específico del camino de datos para almacenar el resultado de cada ope-
ración así como uno de los operandos. Usualmente, ese registro recibe el nombre
de acumulador (ACC). Usando un acumulador en el ejemplo anterior se podría
calcular e = (a + b) * (a - b) mediante las siete instrucciones siguientes:
1. LoadA (ACC f- Mem[A])
2. AddB (ACC f- ACC + Mem[B])
3. Sto~e X (Mem[X] f- ACC)
4. LoadA (ACC f- Mem[A])
5. Sub 8 (ACC f- ACC - Mem[B])
6. MulX (ACC f- ACC * Mem[X])
7. Store C (Mem [C] f- ACC)
El diseño del procesador 411

Con las suposiciones anteriores, cada instrucción sólo necesitaría ahora una
palabra de memoria, lo que significa que el procesador accedería a memoria siete
veces para captar las instrucciones y otras siete más para acceder a los operandos
y almacenar los resultados. Según esto, este programa se ejecutaría en un tiempo
menor que cualquiera de los anteriores puesto que el acumulador permite guardar
los operandos y los resultados temporalmente para que el procesador no tenga que
acceder tanto a memoria.
Este concepto de almacenamiento temporal también puede ampliarse y apli-
carse a más de un registro, de manera que llegamos a una segunda estrategia para
mejorar las prestaciones de un programa: se puede incrementar el número de
registros del camino de datos introduciendo un banco de registros. Puesto que este
banco de registros contiene varios registros, tendríamos que incluir en las ins-
trucciones campos de direcciones adicionales para estos registros. Entonces, para
ejecutar el programa anterior, se utilizan instrucciones con dos direcciones en las
que una de las direcciones especifica una posición particular dentro del banco de
registros. Si, por ejemplo, se usa un banco de registros (RF) con tres o más regis-
tros, se podría calcu]ar e = (a + b) * (a - b) con la siguiente secuencia de ins-
trucciones de dos direcciones:
1. Load Rl ,A (RF[l] Mem[AJ)
f--
2. LoadR2, B (RF[2] M em[BJ)
f--
3. Load R3, RI (RF[3] f-- RF[lJ)
4. AddRI, R2 (RF[ I]f-- RF[I] + RF[2J)
S. SubR3, R2 (RF[3] f-- RF[3] - RF[2J)
6. Mili Rl , R3 (RF[I] f-- RF[IJ) * RF[3J)
7. Store e, RI (Mem[C] f-- RF[lJ)
Como puede verse a partir de este programa, el procesador todavía tendría que
acceder siete veces a memoria para captar las instrucciones pero accedería sólo
tres veces para captar los operandos y almacenar el resultado. Puesto que el pro-
cesador tendría que cargar las variables a y b Y almacenar e en cualquier progra-
ma, estos tres accesos constituyen el número mínimo para el cálculo de
e = (a + b) * (a - by.
Una importante característica de este último programa es el hecho de que sólo
se necesitan instrucciones de carga (load) y almacenamiento (sto re) para acceder
a memoria, mientras que las instrucciones aritméticas sólo accederán a los regis-
tros, necesitando campos de dirección más cortos. A partir de esta modificación,
podríamos utilizar intrucciones con tres direcciones para aquellas instrucciones
con operandos y resultado en registros, e instrucciones con dos direcciones para
cargar datos desde memoria a los registros y para volver a almacenarlos en la
memoria. De hecho, la mayoría de los procesadores actualmente en el mercado
utilizan esta estrategia, puesto que implica instrucciones más cortas y una menor
frecuencia de accesos a memoria. Por ejemplo, si utilizamos esta estrategia, se
podría calcular e = (a + b) * (a - b) con sólo seis instrucciones, como en el
siguiente programa:
412 Principios de diseño digital

1. Load RI, A (RF[I] Mem[A])


f-
2. LoadR2, B (RF[2] f- Mem[B])
3. Add R3, RI, R2 (RF[3] f- RF[I] + RF[2])
4. Sub R4, RI, R2 (RF[4] f- RF[l]- RF[2])
S. MuZ 85, R3, R4 (RF[5] f- RF[3] * RF[4])
6. Store e, R5 (Mem[C] f- RF[5])
Un procesador podría ejecutar el programa previo accediendo a memoria seis
veces para captar las instrucciones y tres veces para cargar y almacenar los datos.
Utilizaremos esta estrategia para el diseño de repertorios de instrucciones en el
resto de este capítulo.
En el ejemplo anterior, se han mostrado varias soluciones para satisfacer los
objetivos contrapuestos que aparecen al utilizar el máximo número posible de
direcciones por instrucción para acelerar la ejecución de los programas. Como
pone de manifiesto la última opción, se llega a un compromiso si se utiliza un
pequeño banco de registros como almacenamiento temporal, que permite utilizar
instrucciones con tres direcciones para las operaciones con datos contenidos en
dicho almacenamiento temporal, dado que las direcciones del banco de registros
necesitan menos bits, y usar además instrucciones de carga y almacenamiento con
una dirección de memoria para transferir datos entre el banco de registros y la
memoria principal. Esta estrategia de dividir las intrucciones en instrucciones de
carga/almacenamiento e instrucciones con registros se basa en el hecho de que
cada variable del programa se utiliza más de una vez, y el acceso a dichas varia-
bles en un banco de registros de acceso rápido con direcciones cortas reduce los
accesos a memoria principal. Puesto que todos los procesadores comerciales
actuales utilizan esta estrategia, en el resto del capítulo también se utilizará para
el diseño de repertorios de instrucciones.

9.2. MODOS DE DIRECCIONAMIENTO


Como se describió en la Sección 9.1 , mientras que el codop de una instrucción
especifica la operación a realizar, el campo de dirección contiene la información
necesaria para determinar la situación de los operandos y el resultado de la ope-
ración. Dentro de este campo de dirección, el modo de direccionamiento especi-
fica la forma de interpretar la información que aparece en el campo de dirección,
es decir, indica cómo calcular la dirección real o efectiva de los datos necesarios.
Se pueden utilizar distintos modos de direccionamiento para reducir el tamaño del
campo de dirección, permitiendo especificar sólo parte de la dirección mientras
que el campo de modo defme la técnica para calcular la dirección completa. En
general, se necesitan diferentes modos de direccionamiento para implementar las
distintas construcciones propias de los lenguajes de programación, estructuras de
datos, y tareas del sistema operativo, tales como bucles, sentencias condicionales,
indexado de vectores, punteros a datos, reubicación de programas, y conmutación
de contextos. Así, el disponer de una cierta variedad de modos de direcciona-
El diseño del procesador 413

miento permite escribir programas que serán eficientes en cuanto al número de


instrucciones y al tiempo de ejecución. En el resto de esta sección se describen los
modos de direccionamientos utiliz<ldos con más frecuencia, y que se muestran en
la Figura 9.2.
En el modo de direccionamiento implícito, Figura 9.2(a), se tiene que una
instrucción no necesita un campo de dirección explícito puesto que la posición del
operando o del resultado se especifica mediante el propio código de operación.
Una instrucción que actúe sobre un registro específico, tal como el registro de bits
de condición o el acumulador de un camino de datos, no necesita un campo de
dirección puesto que esos registros son únicos y por consiguiente están indicados
implícitamente en el propio codop. Este tipo de instrucciones de modo implícito
eran 'comúnmente utilizadas por los primeros computadores orientados a pila, en
los que todos los operandos siempre debían estar en la cabecera de la pila y el
resultado también se introducía automáticamente en la cabecera de la pila.
En el modo de direccionamiento inmediato, que se muestra en la Figura
9 .2(b), el campo de dirección especifica el propio operando, de forma que en rea-
lidad una instrucción con modo inmediato tiene un campo de operando en lugar
de un campo de dirección. Este campo de operando se utiliza para especificar las
constantes usadas como operandos en la operación que especifica el codop. Este
modo de direccionamiento es particularmente útil cuando se incrementan o decre-
mentan índices de un bucle o de un vector, o cuando se calculan expresiones que
tienen muchos coeficientes, puesto que los índices y los coeficientes se pueden
proporcionar en el campo de dirección en lugar de estar almacenados en la memo-
ria como datos, lo que además ahorra accesos innecesarios a memoria pór parte
del procesador.
En el modo de direccionamiento directo, Figura 9 .2(c), el campo de direc-
ción especifica la posición de un operando o del resultado, que puede estar situa-
do en la memoria o en el banco de registros. Obsérvese que una dirección de
memoria es mucho más larga que una dirección de registro, debido a que los
tamaños de la memoria varían entre 16 millones y 256 millones de palabras, en
tanto que los tamaños de los bancos de registros van desde 8 a 128 palabras, lo
que significa que se necesitan de 24 a 28 bits para una dirección de memoria en
lugar de los 3 a 7 bits para una dirección de registro.
En el modo de direccionamiento indirecto, que corresponde a la Figura
9 .2(d), el campo de dirección especifica la posición de la dirección de un operan-
do o del resultado. Así, en el modo indirecto a través de memoria (memory-indi-
rect) el procesador tiene que acceder dos veces a memoria: una vez para captar la
dirección, y otra para captar el operando o almacenar el resultado. En el modo
indirecto a través de registro (register-indirect), el campo de dirección contiene la
dirección de un registro determinado del banco de registros donde se encuentra la
dirección del operando o el resultado. De esta forma, para utilizar el modo indi-
recto con registro, el programador necesita asegurarse de que la dirección de
memoria se ha colocado en el registro adecuado antes de acceder a él. La princi-
pal ventaja de utilizar el modo de direccionamiento indirecto a través de registro
es que la dirección del registro necesita menos bits que una dirección de memo-
414 Principios de diseño digital

tia, y que el acceso al banco de registros es mucho más rápido, como se discutió
en el párrafo anterior.

(a) Implícito Codap

~b) Inmediato Codap Operando I


(e) Directo I COdop I Dirección I I Codop I Dirección I
Memoria
RF
4 Operando Lo Operando

( d) Indirecto r, Collop 1 Dirección 1 I Codop I Direccióll I


Memoria
RF
Dirección Operando

, ~ Ope rando Memoria

I Opertmdo

(e) Relativo I Codop IDirección l Desplawmienlo

L
Memoria
RF
+ Operando Lo Operanl!o
Memo ria

L..0-- Operando

(f) Indexado

M emoria

Indice
+)+---'----- Operando Memoria

Operando

FIGURA 9.2 Modos de direccionamiento.

En el modo de direccionamiento relativo, que se muestra en la Figura 9 .2( e),


el contenido del campo de dirección, frecuentemente llamado desplazamiento
El diseño del procesador 415

(offset), se suma al contenido de un registro que se especifica, tal como el conta-


dor de progama o un registro del banco de registros. Este desplazamiento es nor-
malmente un entero pequeño que puede ser positivo o negativo. Cuando el ente-
ro se suma al contenido del contador de programa, el resultado es la dirección de
una instrucción en la vecindad de la instrucción a la que apuntaba el contador de
programa. Por tanto, este modo de direccionamiento relativo se utiliza en las ins-
trucciones de ramificación, puesto que la dirección a la que se se produce el salto
está normalmente en las proximidades de la propia instrucción de ramificación.
Además, el direccionamiento relativo se puede utilizar también con respecto a un
registro del banco de registros, como muestra la Figura 9.2(e). En este caso se uti-
liza para realizar búsquedas en tablas; usualmente el registro contiene el comien-
zo de la tabla y el desplazamiento se utiliza para apuntar a un elemento específi-
co de la misma. El direccionamiento relativo también se puede utilizar para la reu-
bicación de código, en cuyo caso el registro contiene la primera instrucción y el
desplazamiento se utiliza para apuntar a la siguiente instrucción a ejecutar. La reu-
bicación de código permite mover programas dentro de la memoria de la compu-
tadora, conmutar entre un programa y otro, y alternar la ejecución de varios pro-
gramas al mismo tiempo. La principal ventaja de este modo de direccionamiento
es que da lugar a un formato de instrucción con un campo de dirección más corto,
puesto que el desplazamiento normalmente necesita menos bits que la dirección
de memoria completa.
El modo de direccionamiento indexado, ilustrado en la Figura 9.2(f), gene-
ralmente se utiliza cuando se necesita acceder a datos almacenados en arrays,
matrices, pilas, o colas. El campo de dirección de la instrucción especifica la
dirección de comienzo, llamada base, mientras que el índice del dato se encuen-
tra en un registro índice específico o mediante un registro del banco de registros.
Para calcular la dirección efectiva, se suman los valores de la base y del registro
índice. En algunas instrucciones, además, el valor del registro índice se incre-
menta o decrementa después, de forma automática, para acceder al siguiente ele-
mento del vector, la pila, o la cola. Este tipo particular de instrucción, en el que el
registro se incrementa o decrementa automáticamente, se denomina instrucción
con autoincremento o autodecremento. El direccionamiento indexado también
contribuye a reducir el número de bits necesarios en el campo de dirección, ya que
las direcciones de las bases suelen ser múltiplos de 2", conteniendo (n-l) ceros.
Puesto que estos (n-l) ceros no necesitan almacenarse en el campo de dirección,
la instrucción precisa menos bits.
Obsérvese que el direccionamiento indexado es similar al direccionamiento
relativo, ya que los dos valores, incluidos en el campo de dirección y en el regis-
tro específico, tienen que sumarse para obtener la dirección efectiva. Estos dos
modos de direccionamiento se diferencian sólo en la situación de la base y del
índice o desplazamiento: en el direccionamiento relativo, la base está en el regis-
tro dedicado y el 'desplazamiento se sitúa en el campo de dirección, mientras que
en el direccionamiento indexado, la base está en el campo de dirección y el índi-
ce en un registro dedicado. Generalmete, la disponibilidad de varios modos de
indexado en un repertorio de instrucciones hace que los programas que ejecuta el
416 Principios de diseño digital

procesador sean más cortos, pero esto también hace que la implementación del
procesador sea más compleja, corno se verá en el resto del capítulo.

9.3. DISEÑO DEL PROCESADOR


Aunque cada repertorio de instrucciones dado puede contener instrucciones dife-
rentes, con campos y modos de direccionamiento distintos, al ejecutar una ins-
trucción todo procesador realiza los mismos cinco pasos generales. Estos cinco
pasos, indicados en la Figura 9.3, constituyen el ciclo de ejecución de instruc-
ción. El ciclo comienza cuando el procesador busca una instrucción desde la
memoria y la carga en el registro de instrucción (IR, Instruction Register) , que
almacena la instrucción mientras se está ejecutando en el camino de datos del pro-
cesador. En este primer paso, el procesador también incrementa el contenido de
otro registro, Uamado contador de programa (pe, Program Counter), que alma-
cena la dirección de la siguiente instrucción a ejecutar. En el segundo paso, des-
pués de haber buscado la instrucción, el procesador debe tener en cuenta el modo
y los campos de dirección de la instrucción para determinar la dirección efectiva
de todos los operandos que intervienen en la operación y del resultado de la
misma. En el tercer paso, el procesador debe buscar estos operandos desde la
memoria y almacenarlos temporalmente en el banco de registros o en algún otro

!
Buscar
instrucción

~
Calcular
dirección efectiva

+
Buscar
operandos

¡
Ejecutar
operación

¡
Almacenar
resultado

I
FIGURA 9.3 Ciclo de ejecución de instrucción.
El diseño del procesador 417

registro del camino de datos. Después de buscar los operandos, el procesador eje-
cutará la operación especificada en el codop, completando así al cuarto paso del
ciclo de instrucción. Finalmente, en el quinto paso, el procesador almacena el
resultado de la operación en la memoria, o lo guarda temporalmente en el banco
de registros para su uso en instrucciones siguientes.
Aunque es posible identificar estos cinco pasos en una instrucción típica,
diversas instrucciones precisan acciones ligeramente diferentes dentro de alguno
de estos pasos, y algunas instrucciones pueden incluso saltarse alguno de ellos.
Así, para diseñar un procesador, hay que diseñar en primer lugar su repertorio de
instrucciones, especificando las operaciones que realiza cada instrucción. Corno
se indica en la Figura 9.4, el diseño del repertorio de instrucciones es el primer
paso del diseño de un procesador. Una vez definido el repertorio de instrucciones,
se puede describir sucintamente con un diagrama de flujo de repertorio de ins-
trucciones (diagrama IS, Instruction Set), que indica de manera precisa todas las
operaciones que se realizan en cada instrucción. El diagrama de flujo IS se utili-
za como punto de partida para asignar los componentes en el camino de datos,
donde se ejecutan todas las instruciones. Sin embargo, puesto que el diseño del
camino de datos depende del repertorio de instrucciones, y el diseño del reperto-
rio de instrucciones del camino de datos, el proceso de diseño del repertorio de
instrucciones, elaboración del diagrama de flujo, y asignación de componentes se
debe repetir varias veces. Después, una vez determinados los componentes bási-
cos del camino de datos del procesador, se obtiene el diagrama ASM del proce-
sador, que divide cada instrucción en una serie de ciclos de reloj y especifica
todas las transferencias que tienen lugar en cada ciclo. A partir de este momento
se pueden deducir fácilmente las conexiones del camino de datos para completar
su diseño. Finalmente, el último paso consiste en el diseño de la unidad de con-
trol. Es importante tener en cuenta, sin embargo, que esta secuencia de pasos será
siempre en cierto modo iterativa ya que el diseño del repertorio de instrucciones
y el del camino de datos son interdependientes y no se conocerán las prestaciones
del procesador hasta que se termine. Antes de obtener un diseño satisfactorio,
habrá que repetir el proceso de diseño entero, o alguno de sus pasos, varias veces.

9.4. DISEÑO DEL REPERTORIO DE INSTRUCCIONES


Al diseñar un repertorio de instrucciones, hay que considerar diversos aspectos y
establecer un compromiso entre la eficiencia y el tamaño de los programas por un
lado, y el costo y las prestaciones del procesador por otro. Los tipos y formatos
de instrucciones en el repertorio siempre representan un compromiso entre el
tamaño de los programas y el tamaño del procesador. De una parte, por ejemplo,
nos gustaría tener un repertorio versátil de instrucciones potentes con varios tipos
de instrucción, campos de direcciones, modos de direccionamiento, y diversidad
de operaciones. Tal repertorio de instrucciones, normalmente denominado reper-
torio de instrucciones complejo, hace que los programas sean más pequeños,
puesto que se necesitan menos instrucciones para computar cada expresión o tarea
418 Principios de diseño digital

incluida en un programa. Sin embargo, este repertorio complejo también precisa


un camino de datos complejo para la ejecución de las instrucciones, con múltiples
unidades, registros, y conexiones complejas. En cambio, un repertorio de instruc-
ciones simple, denominado usualmente repertorio de instrucciones reducido, es
más fácil de implementar puesto que necesita menos componentes en el camino
de datos. No obstante, sus programas son más largos ya que cada programa nece-
sita una secuencia más larga de estas instrucciones más simples.

Obtener
el diagrama ASM

Diseñar la unidad
de control

no

sr

FIGURA 9.4 Proceso de diseño.

Otro aspecto a considerar cuando se diseña el repertorio de instrucciones es el


tiempo de ejecución de un programa típico. Concretamente, necesitamos tener en
cuenta que los programas con instrucciones complejas son más cortos, pero que
en cambio pueden no ejecutarse más rápido que los programas con instrucciones
más simples debido a que una instrucción compleja puede necesitar más ciclos de
reloj para ejecutarse. De hecho, en la mayoría de los casos, las instrucciones sim-
ples requieren menos ciclos de reloj , de forma que el procesador es capaz de eje-
El diseño del procesador 419

cutar varias instrucciones simples eD el mismo número de ciclos de reloj que se


necesitaría para ejecutar una única instrucción compleja. Además, el ciclo de ins-
trucción de un camino de datos sencillo es normalmente más corto que el de los
caminos de datos complejos ya que los retardos registro-registro son menores. UD
ciclo de reloj más corto permite que se pueda ejecutar iDcluso un número mayor
de instrucciones simples en el mismo tiempo que una iDstrucción compleja.
El tercer y último aspecto a considerar en el diseño de un repertorio de ins-
trucciones es la posibilidad de segmeDtar (pipelining) el ciclo de ejecución de iDs-
truccióD de cara a mejorar las prestaciones del procesador. Esta segmentación del
ciclo de ejecución es difícil de implementar en el caso de instrucciones complejas
puesto que cada paso precisa un número de ciclos de reloj difereDte para cada ins-
truccióD, de forma que la ejecución segmentada va a la velocidad de la etapa más
lenta, que está determinada por la instrucción que necesita un mayor número de
ciclos de reloj en dicha etapa. En camhio, puede hacerse que las instrucciones
simples ejecuten cada etapa del ciclo de instrucción en el mismo Dúmero de ciclos
de reloj, normalmente en un único ciclo de reloj, permitiendo así UDa implemen-
tación segmentada del camino de datos.
Las diferencias que se han descrito en los párrafos precedentes se ilustran COD
dos ejemplos. ED el ejemplo 9.1 se diseña un repertorio complejo de instruccio-
nes para un procesador de 16 bits; en el Ejemplo 9.5 se convierte este repertorio
complejo en un repertorio reducido de instrucciones para un procesador de 32
bits.

EJEMPLO 9.1 Repertorio complejo de instrucciones.


PROBLEMA

Diseñar un repertorio de instrucción para un procesador de 16 bits.


SOLUCIÓN

Un procesador de 16 bits puede acceder a 64K de memoria con una palabra de datos. Para
reducir el número de accesos a memoria durante la búsqueda de instrucciones, se limita el
tamaño de una instrucción a dos palabras de memoria como mucho, lo que significa que
sólo podremos utilizar instrucciones de una dirección para acceder a memoria. Por tanto,
cada instrucción consta de una o dos palabras de 16 bits; la segunda palabra, en caso de que
se utilice, sería una dirección de memoria, mientras que las primera palabra especificaría el
tipo de instrucción, el código de operación, y las direcciones dentro del banco de registros.
Para acomodar tres direcciones del banco de registros, hay que dividir la instrucción de 16
bits en cinco campos: el campo de TIpo (2 bits), el campo Op (5 bits), y tres direcciones del
banco de registros identificadas con Dest (3 bits), SrcJ (3 bits), y Src2 (3 bits) (Src de
"Source", Fuente en inglés).
En la Figura 9.5 se muestran algunos ejemplos de instrucciones del repertorio obteni-
do a partir de estas premisas. Este repertorio incluye cuatro tipos de instrucciones dife-
rentes: instrucciones con registros, de memoria, de control, y misceláneas. El tipo de ins-
trucciones con registro, que se muestra en la figura 9.5(a), incluye instrucciones de una
palabra que realizan la operación aritmética, lógica, o de desplazamiento indicada en el
codop, con dos operandos almacenados en los registros indicados en los campos SrcJ y
420 Principios de diseño digital

Src2 . El resultado de la operación se almacena en el registro indicado en el campo Dest


de la instrucción. -

15 14 13 12 11 10 9 8 7 6 5 4 3 2 O
(a) Instrucciones con registros: TIpo Op Des! Srcl Src2
aritméticas, Denominación Acción
lógicas,
Op Des" Srcl, Src2 RF(Dest) +- RF(Srcl) Op RF(Src2)
de transferencia,
y de desplazamiento

15 14 13 12 11 10 9 8 7 6 5 4 3 2 O
(b) Instrucciones con memoria: TIpo Op Dest Src l Src2
load (cargar) Direcci6n
y store (almacenar)
Denominación Acción
Linm Dest RF{Dest] ~ Di~cción
L dir Des' RF{Dest] f-Mem[Dirección]
L rel Dest, Src2 RF[Dest] +- Mem{RF[Src2] + Direcci6n]
L in Des' RF{Desl} +- Mem{Mem{DirecciónJ]
S dir Srcl Mem{DirecciónJ f-RF[Src l}
S reJ Src l , Src2 Mem[RF[Srcl] + DirecciónJ +- RF[Srcl]
S in Src J Mem(Mem{DirecciónJJ f- RF[SrclJ

15 14 l3 12 11 10 9 8 7 6 5 4 3 2 O
(e) Instrucciones de control: Tipo Op Dest Srcl Src2
jump (sallar), Dirección
branch (salto condicional),
call (llamada a subrutina) Denominación Acción
y retum (retomo de subrutina) lump Dirección PC f- Dirección

Brel Dirección pe
[ PC
f- PC + I s; Statusfrel] = o J
f- D;rección s; Status[rel} = I

Call Dirección, Src 1


MemlSrc l] f- pe + 1; PC f- Dirección;
RF{S",I{ f- RF{S",I} + 1
PC f-MemfSrcl}; RF[Srcl} f- RFISrcl} - 1
Retunl

15 14 13 12 11 10 9 8 7 6 5 4 3 2 O
(d) Instrucciones misceláneas: TIpo Op Dest Srcl Src2
no-op, Dirección
clear,
status, Denominación Acción
set. No-op No hacer nada
y resel Clear Dest RF[Dest] f- O >
Lstat Src 1, Src2 Status f- R[Src l] = RF[Src2]
Sstat Dest Status[Dest] f- 1 <
."
Rstat Dest Status[Dest} f- O

FIGURA 9.5 Repertorio de instrucciones de un procesador de 16 bits.

Las instrucciones de memoria, en la Figura 9.5(b), son las instrucciones de carga (load)
y almacenamiento (store), encargadas de transferir datos entre un registro del banco de
El diseño del procesador 421

registros y la memoria. Obsérvese que la dirección de memoria se especifica en la segunda


palabra de la instrucción, mientras que la dirección del registro puede especificarse bien con
el campo Dest en el caso de las instrucciones de carga, bien con el campo Srcl en el caso
de instrucciones de a1mancenamiento. Obsérvese también que las instrucciones de memo-
ria pueden utilizar cuatro modos diferentes de direccionamiento, que incluyen el inmedia-
to, directo, relativo, e indirecto. En el modo relativo, el desplazamiento se almacena en un
registro indicado por el campo de instrucción Src2.
Como muestra la Figura 9.5(c), las instrucciones de control también están compuestas
por dos palabras y pueden especificar instrucciones de salto incondicional, de salto condi-
cional, de llamadas a subrutinas, y de retorno de subrutinas. Cuando el procesador ejecuta
una instrucción de salto incondicional (jump), por ejemplo, carga el PC con la dirección de
salto especificada en la segunda palabra de la instrucción y en el siguiente ciclo de instruc-
ción ejecuta la instrucción almacenada en la dirección de salto. La instrucción de salto con-
dicional (branch) tiene el mismo efecto si el correspondiente bit de condición es igual al;
en caso contrano, el procesador ejecuta hr siguiente instrucción de la secuencia. Los seis
bits de relación corresponden a las seis operaciones relacionales: igual, mayor que, mayor
o igual que, menor que, menor o igual que, y distinto de. Las instrucciones de tipo misce-
lánea ponen a uno o a cero estos bits, depués de comparar los contenidos de dos registros.
Cuando el procesador ejecuta una instrucción de llamada (ca/f), salta a la subrutina cuya
primera instrucción se encuentra en la posición especificada en el campo de dirección.
Además, también decrementa el valor de PC y lo almacena en la posición superior de la pila
cuya dirección se encuentra en el puntero de pila indicado en el campo Srcl. Como puede
esperarse, la instrucción call también incrementa el valor del puntero de pila. La instrucción
de retorno de subrutina (return) es la opuesta a la instrucción de llamada: carga la dirección
de retorno en el pe y decrementa el puntero de pila que está almacenado en el registro indi-
cado en el campo Srcl .
Por último, las instrucciones de tipo misceláneo, que se muestran en la Figura 9.5(d),
incluyen tanto a la instrucción No-op como a aquellas instrucciones necesarias para poner
a uno o borrar un registro concreto del camino de datos. La instrucción más importante de
este grupo es la instrucción Lstat, que permite comparar los valores de los registros indica-
dos en los campos Srcl y Src2 y modificar los seis bits de relación del registro de estado
con los valores correspondientes. Como se indicó anteriormente, las instrucciones de salto
condicional comprueban el bit correspondiente después de que este haya sido modificado
por una instrucción Lstat.

9.5. DISEÑO CISC


Como se ha indicado, un repertorio de instrucciones, cerno<- el definido en la
Sección 9.4, especifica completamente el comportamiento del procesador, y en
ese sentido, puede considerarse una descripción de comportamiento del procesa-
dor. Una de las formas utilizadas frecuentemente para representar tal comporta-
miento es el diagrama de flujo IS, que describe los ciclos de ejecución de todas
las instrucciones. Obsérvese que el diagrama de flujo lS sólo especifica el com-
portamiento del procesador, sin incluir ningún detalle relativo a la arquitectura,
salvo en lo que respecta a la existencia de memoria (Mem), el banco de registros
(RE) , el contador de programa (PC>, el registro de instrucción (IR) , y el registro
422 Principios de diseño digital

de estado (Status). En el ejemplo siguiente se muestra la forma de construir un


diagrama de flujo IS.

EJEMPLO 9.2 Diagrama de flujo de repertorio de instrucciones (IS)


PROBLEMA

Obtener un diagrama de flujo de repertorio de instrucciones para el repertorio de instruc-


ciones presentado en la Figura 9.5.
SOLUCIÓN
Como' se mencionó anteriormente, el diagrama de flujo IS no presupone ningún detalle en
cuanto a la arquitectura, ni ningún camino de datos particular para el procesador. Es más,
no se considera ninguna restricción temporal, ni la duración de los ciclos de reloj . El único
propósito del diagrama de flujo es proporcionar el orden en el que se han de ejecutar las
operaciones especificadas por cada instrucción.
En la Figura 9.6 se presenta el diagrama de flujo IS para el repertorio de instrucciones
de la Figura 9.5. Obsérvese que cada instrucción se ha especificado en dos partes. En la pri-
mera parte, que se aplica a todas las instrucciones, el procesador busca la instrucción y la
introduce en IR e incrementa el registro PC. En la segunda parte, el procesador decodifica
el campo de tipo para determinar el tipo de instrucción y luego ejecuta la instrucción cal-
culando la dirección efectiva (EA, Effectil'e Address), realizando la operación especificada
en el código de operación, e incrementando PC en el caso de instrucciones de memoria o
control.

Una vez que se ha completado el diagrama de flujo IS , el siguiente paso para


diseñar un procesador es asignar sus componentes seleccionando el número ade-
cuado y el tipo de unidades funcionales a incluir en el camino de datos. En un pro-
cesador se necesita incluir al menos una ALU con capacidad para desplazar datos
una posición a la derecha o a la izquierda. En los procesadores de altas prestacio-
nes, sin embargo, se debería añadir un desplazador en bloques «<barrel shifter»),
un multiplicador, y un sumador/restador y multiplicador/divisor en punto flotan-
te. En este caso, también se debe incluir una unidad funcional para el cálculo de
las direcciones efectivas.
En este momento de la etapa de asignación, hay que determinar además e l
tamaño de memoria necesario y la mejor forma de organizarla. Después hay
que determinar cuantos buses se necesitan, junto con el número de bits de
ancho y e l protocolo que va a utilizarse. Además, es preciso establecer la forma
de implementar la interfaz que permitirá la comunicación con la memoria y
otros ASIC. Por último, se considera la posibilidad de añadir registros de uso
especial, tales como punteros de pila, registros base, contadores de bucles, y
registros de interfaz, que simplifican la transferencia de datos y aumentan las
prestaciones del procesador. La etapa de asignación se muestra en el siguiente
ejemplo.
El diseño del procesador 423


IR f- Mem{PCJ
PCt-PC+ 1

Instrucciones
miscelánea
Á3 2
nI
nstrucciones de ramificación
I O
Instrucciones con registros

I
Instrucciones

oo"m:1~ Modo
I RF(Dest) t- RF{Src l } O" R{Src2}
I

3 2 1 O

l I
Inmediato

~~~
Directo
1 (cargar)
Load

~~~
RF[Destl t- Mem(PC¡
PCt- PC +! 1-
11 (cargar)
Load EA t- M em[ PC)
RF{Destl t- Mem{EA]
PCt-PC+l
Relativo Slore

/~
(almacenar) EA +- Mem( PC}
Mem{EAI t- RF{Src l j
PC+-PC+ 1

I Load
(cargar) EA +- Mem[PCI + RFISrc2]
- RFIDeslJ t- Mem/EAI
PC+-PC+I
Slore

Wi/,~ (almacenar) AR +- Mem{ PC¡ + RFfSrc21


MemfAR} t- RFISrc l J
PC+-PC+I

Load
(cargar) EA +- MemfMem[PCJ I
RFfDestl +- Mem{EAl
PC +- PC+\
Slote
(almacenar) EA +-Mem[Mem(PCJ]
Mem{[Link] +- RF{Src IJ
PC+- PC+ I

FIGURA 9.6 Diagrama de flujo de repertorio de instrucciones.

EJEMPLO 9.3 Asignación de componentes en un procesador de 16 bits


PROBLEMA
Asignar los componentes del camino de datos para el repertorio de instrucciones dado en
las Figuras 9.5 y 9.6.
424 Principios de diseño digital

~
IR ~ MtnrI PCI

I pc+- pc + [
I

Instrucciones miscelánea
A 3 2

11
I
1
o Instrucciones con registros
Instrucciones con mell10ria
Instrucciones de ramificad6n

6 4 3 2 1O A 3 2 [ O
1
Jump (saIIO) 1

I
I
No almacenar
1
I I pe +- Mem{PCj
~
A~ (~"O"''''';dO''')
1 RFf lnsrJ +- O
1 UlIUS
1 1 1 O

: 510111$ +- RF¡Src l / - RF{Src2j ~ L{ PC+- PC + 1


~
~
1 Stotus/Des,} +- 1
1 I PC+- Mem/PCj
1 1 1
1 1 Call (llamada. subrutina)
S/alUs{Du tl +- O
1 1 Mt mISrcl }+- PC+ 1
- pe +- Mt"" {PC¡
RFfSrc lf +- {RF(Src l/ + 1

Retum (retorno de subrutina)

L-- pe +- MenrfSre l 1
RFfSrc l J +- RFfSrc l} - I

FIGURA 9.6 Continuación.

SOLUCIÓN
Durante el diseño del repertorio de instrucciones, asumimos la existencia de una memoria
de 64K, Mem, un banco de registros con 8 registros, RF, y los registros de uso específico
pe, IR, y Status. Si nuestro único objetivo fuera obtener un procesador de costo reducido,
no deberíamos añadir ningún componente adicional a este conjunto básico.
Sin embargo, si se tienen en cuenta las prestaciones, podemos mejorar la eficacia del
procesador añadiendo dos registros más. En el procesador, la memoria es el componente
más lento, por lo que no debemos encadenar los accesos a memoria con una operación en
alguno de los otros componentes, puesto que se requerirían ciclos de reloj de mayor longi-
tud. Por esta razón hemos de añadir un registro de dirección (AR, Address Register) y un
&

El diseño del procesador 425

registro de datos (DR, Data Register) , como muestra la Figura 9.7. Al añadir estos regis-
tros, en la ejecución de una instrucción de carga (load) podremos calcular la dirección efec-
tiva en un ciclo de reloj, almacenándola en AR, y después buscar el operando correspon-
diente en un segundo ciclo de reloj . Igualmente, en la ejecución de una instrucción de alma-
cenamiento (store) se puede cargar, en un sólo ciclo de reloj, la dirección efectiva en AR y
el dato correspondiente en DR, y después almacenar el dato en memoria en el siguiente
ciclo de reloj . Así, al añadir estos dos registros, se puede reducir el período de reloj nece-
sario y se mejoran las prestaciones del procesador.

Unidad
de control

D
StalUS
G
11 AR DR
1I

! Bus

Dispositivos
M'm
de E/S

FIGURA 9. 7 Asignación de componentes en el procesador de t6 bits.

Después de decidir los componentes que van a incluirse en el camino de datos,


el siguiente paso del diseño de un procesador es la obtención del diagrama ASM
a partir de la información presente en el diagrama de flujo IS. Para esta tarea se
podrían utilizar los métodos de planificación expuestos en la Sección 8.14. Por
otra parte, también se podría planificar el diagrama de flujo manualmente, puesto
que cada ciclo de instrucción del diagrama IS está descrito con muy pocas sen-
tencias de asignación.
Durante la planificación manual, es crucial la detección de cualquier conflic-
to entre los datos y los recursos y asegurar su resolución asignando las operacio-
nes o las transferencias de datos conflictivas a estados distintos o a ciclos de reloj
diferentes. Por ejemplo, es posible leer un valor almacenado en un registro y
escribir un nuevo valor en ese registro durante el mismo ciclo de reloj puesto que
las lecturas de registros pueden reducirse en cualquier instante de dicho ciclo que
426 Principios de diseño digital

sea posterior al flanco de subida de la señal de reloj, mientras que las escrituras
sólo se producen al final del ciclo de reloj en el siguiente flanco de subida de la
señal de reloj. Sin embargo, no es posible escribir un valor en un registro y leer el
nuevo valor en el mismo ciclo de reloj ya que la escritura sólo puede ocurrir al fmal
de cada ciclo de reloj. Igualmente, dentro de un mismo ciclo, se puede leer o escri-
bir en una posición de memoria, pero no se pueden hacer ambas cosas puesto que
la memoria sólo tiene un decodificador de direcciones. Por lo mismo, cada unidad
funcional o bus sólo se pueden utilizar una vez en un ciclo de reloj. Siguiendo estas
indicaciones adecuadamente, el proceso de transformación del diagrama de flujo
de instrucciones en un diagrama ASM es relativamente directo.

EJEMPLO 9.4 Diagrama ASM del Procesador


PROBLEMA
Obtener el diagrama ASM a partir del diagrama de flujo IS dado en la Figura 9.6.
SOLUCIÓN
El diagrama ASM se muestra en la Figura 9.8. Obsérvese que es similar al diagrama de flujo
IS excepto por el hecho de que la ejecución de la instrucción se ha dividido en varios ciclos
de reloj para eliminar las dependencias entre recursos.
Como se muestra en la Figura 9.8, las instrucciones con registros se ejecutan en dos
ciclos. En el primer ciclo de reloj, el procesador busca la instrucción y la almacena en el
'registro IR, mientras que en el segundo ciclo realiza la operación especificada en el campo
de código de operación.
Las instrucciones con memoria precisan tres o cuatro ciclos de reloj . Considérese, por
ejemplo, la instrucción de carga indirecta, Lil!, que necesita cuatro ciclos de reloj para eje-
cutarse. En el primer ciclo de reloj, el procesador busca la primera palabra de instrucción y
la guarda en IR, mientras que en el segundo ciclo, busca la segunda palabra de instrucción
y la almacena en AR. Después, en el tercer ciclo de reloj, busca la dirección real del dato y
la carga en AR. Por último, en el cuarto ciclo de reloj, el procesador busca el dato de memo-
ria y lo guarda en el banco de registros, RF.
Las instrucciones de control utilizan dos O tres ciclos de reloj para su ejecución. Por
ejemplo, una instrucción de salto condicional necesitaría dos ciclos de reloj. En el primer
ciclo de reloj, el procesador busca la instrucción, y en el segundo comprueba el bit de
condición correspondiente e incrementa el contador de programa, PC, si el bit de condi-
ción es igual a 0, ó carga la segunda palabra de instrucción en PC si el bit de condición
es 1.
De igual forma, las instrucciones de tipo misceláneo utilizan dos ciclos de reloj . En el
primer ciclo se busca la instrucción, como siempre, mientras que el segundo ciclo se utili-
za para modificar un registro o uno de los bits de ese registro. Como ejemplo, se considera
la instrucción Lstat. En el segundo ciclo de reloj, el procesador compara dos valores que
están almacenados en el banco de registros, RF, restando un valor a otro y disponiendo con-
venientemente los seis bits del registro de estado en los valores. Por ejemplo, si el valor de
RF{SrcJ] es mayor que el valor almacenado en RF{Src2], la instrucción Lstat pondrá a uno
los bits que corresponden a las relaciones mayor que, mayor o igual que, y distinto de, y
mantendrá a cero los restantes bits, que representan las condiciones menor que, menor o
igual que, e igual a.
El diseño del procesador 427

Para terminar, a partir del diagrama ASM se puede ver que el procesador necesita entre
dos y cuatro ciclos de reloj para ejecutar una instrucción, Además, como se mostró en el
Capítulo 8, es posible obtener fácilmente el camino de datos y la unidad de control a partir
de este diagrama ASM.

Una vez se ha obtenido el diagrama ASM, el paso final en el diseño de un pro-


cesador consiste en interconectar todos los recursos insertando selectores y adap-
tadores de bus cuando sea necesario y determinar la lógica de la unidad de con-

+
IR +- Mem{PCJ I
I PC+-PC+l

Instrucciones miscel!inea
I n~trucciones de ramificación
A 3 2

I
1 o
Instrucciones con re ¡SIroS
1
Instrucciones con memoria l
I RF{Des/} E- RFISrclJOp RF{Src2/

~~
l

Inmediato

/us~
~
Directo RF/DesrJ +- Menr{PC]
...
/us~
PC+-PC+I

1 Load (cargar) 1 AR +- Mem{ PC]


PC+-PC+I
Relativo
RF{Desl} +- Mem/ARJ
~
Indirecto
/~ SIOft (almacenar) DF +- RF[Srr:1J
AR +- Memf pc¡

/us~
PC+-PC+1

store (almacenar) I )I
Load (earlzar)
~
(cargar)
t- MenrfPC¡
RF{Desf]
PC+-PC+ I

AR +- RF[Deslj + RFfSrc2J
MemfAR} +- DR
r
~ AR +- Mem[PCj
PC +- PC+ 1 I
Store
RF(Dest} t- Mem{ARJ

1 AH E- MemfARj 1 almacenad RF{DeSI} +- Mem{PCJ


PC+-PC+ 1
1 RF{Dest] +- Menr/ARJ t---
AR (- RFIDest] + RFfSrr:2J

-
DR +- RF[Srcl)
y AR +- Mem{PC}
PC4-PC+ I I Mem/ARJ 4- DR
DR 4-RF/Src l /
I AR ~ Mem{ARJ I
1 Mem/ARJ 4- DR ~

FIGURA 9.8 Diagrama ASM para el procesador de 16 bits.


428 . Principios de diseño digital

Leyenda:
~ IR . RegistrO de instrucción

I I
IR t- M~mIPCJ RF .. Banco de registros
PCt-PC.l PC .. Conwlor de programa
AR .. Registro de dirección

6
DR .. Registro de datos
Status:. Registro de estado (de la ALSU)

3 2 1 O Insuuccioroes con regi$ll'QS


Insuucciooc:s con memoria
Instrucciones misccUnca 1l' Instrucciones de rammCaciÓfl

A 432 I O A 3 2 1 O

I
[Link] I
I NoalmtJunar ,I B~h l PCt-Mem{PC¡
f---
I
I
RFI [kst J+-O ,I ft"~
: SUlflUf:-RF(Srrl} - RFISrc2} ~ l J PC+-PC+ I
L
I SUllru/Cksl! +- I
I
PC+-Mem/PCj
J-..
Subru tina
I I
DR +- Mem( PCJ
I StalU#Cksl/+-O I '- AR +- RF(Srrl}
I I PC+-PC+ I

Mem{ARj t- Pe "
PC+--DR
RF{Srdl+-RF(Srdj + 1

RelUm

y AR t- Mem{ARI

pe t- Mem{ARl
RFfSrr l J +- RFfSrc l } + I

FIGURA 9.8 Continuación.

trol. La Figura 9.9 muestra un esquema de un procesador completo basado en el


diagrama ASM de la Figura 9.8. Se ha obtenido añadiendo las conexiones nece-
sarias para ejecutar cada sentencia de asignación del diagrama ASM.
Para ello, se añaden buses de datos, direcciones, y control. El bus de datos se
utiliza para transferir datos entre la memoria y los registros del procesador.
Permite cargar datos de memoria en los registros IR, pe, AR, DR, Y en el banco
de registros. También se utiliza para almacenar datos de pe o DR en memoria. La
dirección específica de memoria para almacenar o cargar un dato de memoria se
obtiene de pe o AR a través del bus de dirección. El bus de control incluye las
señales para el control de la memoria. Obsérvese que en este diseño y en el dia-
El diseño del procesador 429

grama ASM de la Figura 9.8 se asume que la carga o el almacenamiento en


memoria sólo requiere un ciclo de reloj. Si el tiempo de acceso a memoria fuese
más de un ciclo, el diagrama ASM se tiene que ajustar pero el diseño básico de la
Figura 9.9 no cambiará, excepto en que se necesitarán dos o más ciclos de reloj
para almacenar en memoria datos desde DR o para cargar datos en DR desde
memoria.
Además de estos tres buses, también se añaden conexiones desde ALS U a los
registros pe, AR, DR, Y al banco de registros, así como conexiones desde ALSU
al registro de bits de condición y desde el registro de bits de condición e IR a la
lógica de control, que genera las señales de control para la operación de ALSU, y •
para todos los registros, el banco de registros, y la memoria.

i ! ~
I Registro,
de estado
I RF

i
~ Señales
'-
Lógica
de control
~ decontrol
! !
+-----i Status r- ALSU

I IR
I I pe
rI I ! rI AR
I DR
rI
Bus de datos n ,
, 7

l,
Bus de direcciOnes ,7 7 In

Mem
Ú Bus de control

Out

FIGURA 9.9 Esquema del procesador.

Obsérvese que la unidad de control que se muestra en el esquema posee un


registro de estado y una lógica de control y que puede implementarse utilizando
cualquiera de los estilos de control considerados en la Figura 7.34(a), (b), o (c).
El estilo más natural sería implementar el registro de estado como un contador
430 Principios de diseño digital

módulo 11, donde n representa el máximo número de estados en cualquiera de los


caminos que pudiésemos seguir en el diagrama ASM. Para el procesador de 16
bits se puede ver a partir del diagrama ASM de la Figura 9.8, que no se necesitan
más de cuatro estados en ninguno de los caminos, incluyendo el estado para bus-
car la instrucción. Por tanto, podemos asumir que el registro de estado de la
Figura 9.9 sea un contador módulo 4, capaz de pasar al estado O desde los estados
1, 2, Y 3, según la instrucción que se esté ejecutando.
La lógica de control puede especificarse mediante una expresión booleana en
forma de suma de productos para cada línea de control. Alternativamente, cada
una de las expresiones de control posee un término producto por cada estado y por
cada instrucción en la que esa línea de control particular está activa. Así, en cada
término producto intervienen los bits que definen el tipo de instrucción, el código
de operación de la instrucción, y el estado del procesador. Puesto que la obtención
de las expresiones de control es directa, se ha dejado como ejercicio para el lec-
tor al final del capítulo.

9.6. REPERTORIO REDUCIDO DE INSTRUCCIONES


En la Sección 9.5 se ha diseñado un procesador con repertorio complejo de ins-
trucciones (CISC), en el que las instrucciones necesitaban un número diferente de
palabras de memoria, y un número distinto de ciclos de reloj para su ejecución.
Para mejorar las prestaciones de dicho procesador, se podría utilizar una de las
siguientes estrategias:
1. Una tecnología más rápida, que permitiera acortar el ciclo de reloj .
2. Un repertorio de instrucciones rediseñado, que hiciera posible la segmen-
tación del ciclo de instrucción.
Como podría esperarse, la primera estrategia no encierra ningún cambio con-
ceptual sino que sólo requiere una lógica más reducida y un diseño físico más
compacto. La segunda estrategia, sin embargo, precisa que se redefina el ciclo de
ejecución de instrucción, di vidiendo el ciclo completo en una serie de etapas de
igual longitud y asegurándose de que cada instrucción pase á través de cada etapa
a la misma velocidad para que se mantenga una secuencia ininterrumpida de ins-
trucciones durante la ejecución del programa.
Al intentar dividir el ciclo de instrucción que se muestra en la Figura 9.3, se
observa que aunque consta de cinco etapas diferentes, ninguna de las instruccio-
nes de la Figura 9.5 necesita que se calcule una dirección de memoria efectiva en
las operaciones con la ALSU. Concretamente, las instrucciones de memoria y con-
trol necesitan que se calcule una dirección de memoria efectiva, pero no indican
niguna operación en la ALSU con sus operandos. Por otra parte, ni las instruccio-
nes con registros, ni las de tipo misceláneo necesitan calcular una dirección efec-
tiva, aunque implican realizar una operación en la ALSU según indique su campo
de código de operación. A partir de estas observaciones, tiene sentido combinar
el cálculo de la dirección efectiva y la operación en la ALSU en una única etapa.
El diseño del procesador 431

Es más, si ambas comparten la misma etapa, se puede utilizar la misma ALSU


para realizar las dos tareas. Como puede verse en la Figura [Link](a), al combinar
estas dos tareas en una, se obtiene un ciclo de ejecución de instrucción que puede
ejecutarse fácilmente en un camino de datos segmentado con cuatro etapas.

+
Buscar
instrucción

!
Buscar operandos
o direcciones

!
Ejecutar operaciones o
calcular dirección efectiva

!
AJmacenar
resultado

I
(a) Ciclo de ejecución de instrucción

Ciclo
de reloj o 2 345

Captar
II 1, 1, 1, 1, 1,
instrucción

Captar
operandos o II /, 1, /, /,
direcciones

Ejecutar
operación
o calcular /1 /, /, 1,
clirección
efectiva

Almacenar
resultado II /, 1,

(b) Ejecución segmentada

FIGURA 9.10 Ciclo de repertorio reducido de instrucciones.

Esta ejecución segmentada se muestra en la Figura 9-1 O(b), en la que cada fila
representa una etapa de la segmentación y cada columna corresponde a un ciclo
de reloj. Se ve que cada instrucción necesita cuatro ciclos de reloj para ejecutar-
432 Principios de diseño digital

se. Por ejemplo, la instrucción I I se busca de memoria en el ciclo 0, en el ciclo 1


se busca un operando o una dirección, el cálculo de una dirección efectiva o una
operación con un operando se realiza en el ciclo 2, y el resultado se almacena en
el ciclo 3. La instrucción 12 sigue la misma secuencia con un retardo de un ciclo
de reloj, y de igual forma las instrucciones 13, 14 , Y siguientes. Puesto que se eje-
cutan cuatro instrucciones concurrentemente en las cuatro etapas distintas del
ciclo de instrucción segmentado, podemos esperar que las prestaciones de esta
segmentación de cuatro etapas se incrementen en un factor de cuatro, si se asume
que se puede iniciar una instrucción en cada ciclo de reloj. Por otra parte, cuando
una instrucción necesita datos que son generados por la instrucción previa, hay
que retardar tres ciclos de reloj el comienzo de dicha instrucción, hasta que el dato
que necesita esté almacenado en memoria. Esta interrupción en la ejecución seg-
mentada recibe el nombre de detención (pipeline slal/). Para minimizar el núme-
ro de detenciones, se pueden reordenar las instrucciones de manera que ninguna
instrucción necesité datos generados por las tres instrucciones previas. Cuando
esto no es posible, se deben insertar instrucciones no-op (no operar) en la secuen-
cia de instrucciones para asegurar el funcionamiento correcto.
Para usar la ejecución segmentada de instrucciones, es necesario además redi-
señar el repertorio de instrucciones de forma que todas las instrucciones sean
similares y cada instrucción consuma un tiempo aproximadamente igual en cada
etapa. En otras palabras, tenemos que garantizar que cada instrucción contenga el
mismo número y tipo de campos. Sin embargo, para satisfacer este requisito se
necesita ampliar el tamaño de palabra del procesador a 32 o más bits y limitar los
modos de direccionamiento, utilizando sólo los modos inmediato y relativo, que
utilizan menos bits de la palabra de instrucción que los modos de direcciona-
miento directos o indirectos. Además, recuérdese que el modo de direcciona-
miento indirecto viola automáticamente el segundo requisito, es decir, que todas
las instrucciones consuman el mismo tiempo en cada etapa. Por estas razones, los
demás modos de direccionamiento deben implementarse mediante una secuencia
de las instrucciones disponibles. En el siguiente ejemplo, se muestra el diseño de
este repertorio reducido de instrucciones.

EJEMPLO 9.5 Repertorio reducido de instrucciones


PROBLEMA
Diseñar un repertorio reducido de instrucciones para un procesador de 32 bits que utilice el
ciclo de ejecución de instrucción segmentado de la Figura 9.10.
SOLUCIÓN
Para utilizar instrucciones de 32 bits en lugar de las de 16 bits, se puede ampliar el forma-
to de 16 bits presentado en la Figura 9.5 con un campo de desplazamiento de 16 bits que
además puede contener un operando inmediato en las instrucciones con registros. En la
Figura 9.11 se ilustra esta ampliación. Así, cada instrucción tiene dos partes de 16 bits.
Como puede verse, los 16 bits menos significativos contienen la constante que se utilizará
como operando o como desplazamiento para una dirección, y los 16 bits más significativos
contienen un campo de tipo de instrucción de dos bits, cinco bits para el código de opera-
El diseño del procesador 433

ción, tres bits para la dirección del registro destino del resultado (Dest), y dos campos de
tres bits cada uno para las direcciones de los registros utilizados por los operandos (Src1 y
Src2). .

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 O
(a) Instrucciones con registros: Tipo Op Dest Srcl Src2 I Constante I
aritméticas. Denominación Acción
lógicas,
OP Dest, Src 1, Src2 RF(Dest) f- RF{Srcl} Op RF[Src2]
de transferencia,
OP Dest, Src l , Constante RF(Dest) f- RF{Srcl} Op COllstanle
y de desplazamiento
Move Dest, Src J RF(Dest) f- RF{Srcl] •
Shift Dest, Src l . Constante RF(Dest) f- RF{Srcl¡ desplazar Constante

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 O
(b) Instrucciones con memoria: Tipo Op Des' Srcl Src2 [Link]/az¡lmitnlo I
load (cargar) Denominación Acción
y stQre (almacenar)
LimmU Dest RF(Desf)(31 . . 16) f- Desplazamiento
LimmL Dest RF(Dest)( 15 .. .0) f- Desplazamiento
Lre' Des!, Src2, Desplazamiemo RF(Dest) f-Mem{RFfSrc2] + Desp/azmniento}
S re' Src 1, Src2, Desplazamiento Mem[RF{Src2J + DesplazamiellloJ f- RFISn::l}

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 O
(e) Instrucciones de control: TIpo I Op Des' Srcl Src2 I/lt¡p/a¡¡¡mjent, I
jump (saltar), y Denominación AcciÓn
branch (salto condicional)
Jump Desplazamiento PC ~ PC + Desplazamiento
Jump Src2, Desplazamiento PC ~ RF{Src2J + Despla?,amiento
PC ~PC + I si RF{SrcIJ rel RF{Src2) J
Brel Src2, Desplazomiento [ PC f- pe + Desplazamiento si RF{Srcl Jno rel RF{Src21

31 30 29 28 27 26 25 24 23 22 2 1 20 19 18 17 16 15 O
(d) Instrucciones misceláneas: TIpo Op Des' Srcl Src2 ID<>pio<!lmitlll, I
no-op, DenominaciÓn AcciÓn
clear,
No-op No hacer nada
sel,
Clear Dest RF{DestJ f-O
y resel
Sstat Dest Status{DestJ ~ 1
Rstat Dest Status{DestJ ~O

FIGURA 9.11 Repertorio reducido de instrucciones.

Obsérvese que este repertorio de instrucciones tiene los mismos cuatro tipos de ins-
trucciones que el repertorio CISC de la Figura 9.5. Las instrucciones con registros que
muestra la Figura 9. Il (a) realizan diversas operaciones con los operandos almacenados en
alguno de los ocho registros del banco de registros y después devuelven el resultado a otro
registro del mismo fichero. Cualquier instrucción puede utilizar el valor del campo de cons-
tante como uno de los operandos.
Las instrucciones de memoria, que se muestran en la Figura 9. Il (b), cargan datos de
memoria en el banco de registros, y almacenan datos de los registros en memoria. En este
repertorio de instrucciones, el modo de direccionamiento principal es el relativo donde la
434 Principios de diseño digital

dirección de base se encuentra en el registro cuya dirección se indica en el campo Src2, y


el desplazamiento está contenido en el campo de Desplazamiento (campo de Offset). Puesto
que este campo de Desplazamiento sólo tiene 16 bits, es posible direccionar 64k posiciones
de memoria en tomo a la dirección de base. Cuando se necesite cambiar la base, hay que
utilizar dos instrucciones de carga (load) distintas para almacenar los 16 bits superiores e
inferiores de la nueva base en uno de los registros del banco de registros. Concretamente,
se utiliza la instrucción LimmU para cargar el valor de su campo de Desplazamiento en los
16 bits superiores del registro indicado por el campo Dest, y la instrucción LimmL para car-
gar los 16 bits inferiores de dicho registro.
Las instrucciones de control se presentan en la Figura [Link](c), que muestra las instruc-
ciones de salto condicional e incondicional. Las instrucciones de salto incondicional (jump)
pueden transferir el control a una posición relativa al contador de programa pe o bien a una
posición indicada en el campo Src2. De igual forma, las instrucciones de salto condicional
(branch) pueden transferir el control a una posición relativa al pc. En realidad, hay seis ins-
trucciones de salto condicional diferentes: Beq, Bgre, Bgoeq, Bless, Bloeq, y Bneq, que se
denominan Brel en la figura. Cada instrucción de salto condicional compara los valores de
los registros indicados en los campos Srcl y Src2 y después, si se verifica la relación espe-
cificada, da lugar al salto a la dirección de memoria que se obtiene añadiendo el valor alma-
cenado en el campo de Desplazamiento al valor del pc. En cambio, si la relación no se veri-
fica, el procesador ejecuta la instrucción siguiente. Como antes, las instrucciones de tipo
miscelánea, mostradas en la Figura 9. 1l(d), se utilizan para inicializar los distintos registros
y realizar ciertas funciones específicas.

9.7. DISEÑO RISC


En general, el flujo de diseño de un procesador con tepertorio reducido de ins-
trucciones (RISC) se corresponde con el presentado en la Figura 9.4, siendo la
diferencia primordial el hecho de que, en este caso, el camino de datos y la uni-
dad de control están segmentados. Sin embargo, al utilizar esta técnica de seg-
mentación se introducen los siguientes cambios en la arquitectura del procesador:
1. Separación de las memorias de instrucciones y datos.
2. Se añade un registro de control en cada etapa, en lugar de una única uni-
dad de control.
3. Vaciado de la segmentación (pipeline f/.!lshing) en las instrucciones de
control.
La separación de las memorias para instrucciones y para datos es necesaria
para mantener lleno el cauce segmentado de forma que se ejecute una instrucción
por ciclo. Es decir, el procesador debe poder captar una instrucción por cada ciclo
de reloj. Sin embargo, puesto que algunas de estas instrucciones también necesi-
tarán acceder a la memoria para cargar o almacenar datos, hay que separar las
memorias de datos y de instrucciones para permitir que se puedan captar concu-
rrentemente instrucciones y datos.
La incorporación de un registro de control en cada etapa es una consecuencia
natural de la ejecución segmentada de instrucciones, simplemente porque en un
El diseño del procesador 435

ciclo segmentado, cada etapa ejecuta una instrucción distinta, de forma que hay
que dividir la unidad de control en cuatro unidades de control. Cada unidad de
control tiene sólo un estado en el que se recibe una instrucción decodificada, o una
parte, desde la etapa anterior, y utiliza una parte de la instrucción proporcion·a da
para controlar la ejecución de su propia etapa, y pasa la parte no utilizada a la uni-
dad de control de la siguiente etapa. En otras palabras, la unidad de control se
reduce a una serie de registros de control y a una pequeña lógica de decodifica-
ción en la segunda etapa.
El último cambio en la estructura del procesador es consecuencia de la seg-
mentación. Siempre que aparezca una instrucción de ramificación, el procesador
debe esperar varios ciclos de reloj para determinar donde saltar. Por tanto, no se
debe iniciar la ejecución de instrucciones durante estos ciclos de reloj, o si ya se
ha iniciado la ejecución de alguna deben descartarse en el caso de que se produz-
ca el salto. Este proceso, llamado detención de la segmentación (pipeline sta-
lling), se explica éon más detalle en las secciones siguientes.

EJEMPLO 9.6 Diseño de un procesador RISC


PROBLEMA

Diseñar un procesador de 32 bits para el repertorio de instrucciones de la Figura 9.11.


SOLUCIÓN
Para resolver este problema se sigue el mismo procedimiento de diseño que antes,
comenzando por construir un diagrama de flujo , asignando los recursos del camino de
datos, y obteniendo el diagrama ASM del procesador. Se omiten estos pasos puesto que
son muy similares a los descritos para el procesador de 16 bits que se presentó anterior-
mente. La única diferencia significativa aparece en el diagrama AS M, en el que en este
caso. cada instrucción consume exactamente cuatro ciclos de reloj para ejecutarse. A
partir de este diagrama ASM revisado se puede obtener el esquema del procesador RISC
de la Figura 9.12, en la que las conexiones indicadas con líneas de puntos se discuten en
la Sección 9.8.
En este esquema puede verse que este procesador de 32 bits tiene un registro IR, un PC,
un AR, un DR, un registro de bits de condición, Status, y un registro RF como el procesa-
dor de 16 bits. Sin embargo, a diferencia del procesador de 16 bits, tiene también una
memoria para instrucciones y otra para datos. También se han añadido dos registros, A y B,
que almacenarán los operandos después de que se bayan leído del banco de registros y antes
de que se introduzcan en la ALSU. Este procesador tiene además un registro de control, un
registro de destino, y un registro de desplazamiento entre la segunda y la tercera, y entre la
tercera y cuarta etapas de la segementación. Estos registros adicionales contienen la direc-
ción del registro de destino, el desplazamiento para el cálculo de la dirección efectiva, y los
valores de las señales de control para la tercera y la cuarta etapas del cauce.
El procesador de la Figura 9.12 ejecuta cada instrucción en cuatro pasos, que corres-
ponden a las cuatro etapas de la segmentación. Cada etapa toma los datos de un conjunto
de registros y proporciona sus resultados en el conjunto de registros siguiente. En esta figu-
ra, el (los) registro(s) de entrada a cada etapa se identifica(n) mediante su número de etapa
en la parte inferior derecha del símbolo de registro. Siguiendo estos indicadores de etapa,
se puede ver que en la primera etapa, el contenido de PC se utiliza como dirección para la
436 Principios de diseño digital

memoria de instrucciones, y después se almacena una nueva instrucción en IR. El conteni-


do de PC también se incrementa en esta etapa.
En la segunda etapa, la instrucción contenida en IR es primero decodificada por la lógi-
ca de decodificación y luego se buscan sus dos operandos desde RF y se almacenan en los
registros A y B. Además, los valores de los campos de instrucción Dest y Desplazamiento
se copian en el registro de Destino y en el registro de Desplazamiento para su uso posterior.
Igualmente, la parte decodificada del código de operación que se utilizará para el control de
las etapas tercera y cuarta de la segmentación se almacena en el registro de Control.

Lógica
de RF
decodificación

! r···· ........ .....................


....... : ~

1 IR
I= JI-t:::.-JI':=JI.: ,11 • , I
1

~+-----t---'~ ~:~ I
Memoria
de
instrucciones
¡
r···· ·········r: -S,-]oo'-,-o" 1
I pe
1
I
,1 ·Registro de
I1desplazamiento .11
,-J
11 Registro 11 Registro de 1
de control~11 destino .1
~R j i
I Selector L
t
Memoria
de datos

FIGURA 9.12 Esquema RISC.

La tercera etapa de la segmentación realiza diversas operaciones según los distintos tipos
de instrucción. En el caso de operaciones con registros, por ejemplo, realiza la operación
especificada en el codop, utilizando los operandos almacenados en los registros A y B. y
almacena después el resultado en DR. En el caso de operaciones de memoria, la tercera etapa
suma el valor de base almacenado en el registro B al valor del registro de Desplazamiento y
almacena la dirección efectiva en AR. Además, si la instrucción de memoria es una instruc-
ción de almacenamiento, esta etapa transfiere el dato a ser almacenado desde el registro A al
DR. En el caso de una instrucción de control, la tercera etapa resta la constante 3 del valor
de desplazamiento puesto que el contenido de PC se habrá incrementado tres veces antes de
que la instrucción de salto se haya procesado en la cuarta etapa del cauce.
El diseño del procesador 437

Finalmente, la cuarta etapa de la segmentación, o bien lee el dato de la memoria de datos


y lo guarda en el registro de RF cuya dirección está en el registro de Destino, o bien alma-
cena el dato de DR en la memoria de datos. Al mismo tiempo, la cuarta etapa también cal-
cula las direcciones de salto, sumando los valores de PC y del registro de Desplazamiento.
Además, esta etapa incrementa PC y lo carga con la dirección de salto, según sea el valor
del bit correspondiente en el registro de bits de condición. El bit de condición en cuestión
se determina a través de un selector que está controlado por el valor del registro de control,
que se obtuvo inicialmente a partir del código de operación de la instrucción.

Para mostrar el funcionamiento de este procesador RISC, se describe su fun-


cionamiento ciclo a ciclo con una secuencia de tres instrucciones:
x=a+b
y =b+ c
z = c +d
La Figura 9. 13(a) proporciona las instrucciones en ensamblador para el pro-
grama anterior. Para simplificar se han utilizado los símbolos a, b, e, d, x , y, z,
base, y off para indicar las direcciones correspondientes. En la Figura 9.13(b) se
da un diagrama de ciclos de reloj en el que horizontalmente aparecen las cuatro
etapas de la segmentación, y verticalmente un conjunto de ciclos de reloj o esta-
dos. En este esquema cada línea vertical indica el flanco de subida de la señal de
reloj , que origina la carga de datos en los registros del procesador y del banco de
registros. Cada fila del diagrama indica el registro o el valor de memoria que se
escribe al final del ciclo de reloj correspondiente y que estará disponible en el
ciclo de reloj siguiente.
Como puede verse, este diagrama de tiempos comienza con cuatro instruccio-
nes Load, que cargan los valores a, b, e, y den el banco de registros. Obsérvese
que los valores a, b, e, y destarán disponibles para su lectura cuatro ciclos de reloj
después de que sus direcciones de instrucción se hayan cargado en pe, es decir,
en los ciclos de reloj 4, 5, 6, Y 7, respectivamente. En los ciclos de reloj 4, 5, Y 6,
el procesador accede a las instrucciones aritméticas que almacenarán los resulta-
dos x, y, y z en RF cuatro ciclos de reloj después. Por último, el procesador acce-
de a tres instrucciones Store para almacenar en memoria los valores x, y, y z. Así,
el valor de z estará disponible 13 ciclos de reloj después de que la instrucción
almacenada en la dirección 100 se cargara en pe.
A partir de este diagrama de tiempos, puede verse como un procesador seg-
mentado, que ejecute cuatro instrucciones concurrentemente, puede conseguir
unas prestaciones que son casi cuatro veces las prestaciones de un procesador que
ejecute las instrucciones secuencialmente, incluso aunque cada instrucción siga
necesitando cuatro ciclos de reloj. En general, este procesador necesitará n+3
ciclos para ejecutar n instrucciones, en comparación con los 4n ciclos que necesi-
taría si se ejecutaran secuencialmente. Obsérvese, no obstante, que en el cálculo
anterior se ha asumido que ninguna instrucción utiliza los resultados de las pre-
cedentes. Cuando esto no se verifica, las prestaciones del procesador se reducirán,
como se muestra en la siguiente sección.
438 Principios de diseño ¡ligital

~ ~ Ao"W.' ~" v."~.~~',,J


;.1., ....,. -._ .: . _. . ':--1-.~

lOO Load a, base, off


101 Load b, base, off
102 Load c, base, off
103 Lopd d, base, off
104 Add x. a. b
105 Sub y, b, C
106 Add z, c, d
107 Store x, base, off
108 Stor. y, base, off
109 Store z, base. off
110
(a) Programa en lenguaje ensamblador

Escribir en B
Escribir en AR

. Escribir en DR
a b e d x y z
x y z
lO! 102 103 104 105 106 107 108 109 llO 111 112 11 3 114
(b) Diagrama de tiempos

FIGURA 9.13 Operación RISC ciclo a ciclo.

9.8. AVANCE DE DATOS


En las secciones anteriores hemos diseñado un procesador RISC y se ha mostra-
do la ejecución segmentada de un pequeño programa. No obstante, es importante
destacar que ese programa no tenía ninguna dependencia de datos ni de control,
ya que las prestaciones del procesador son distintas si no se da esta situación.
Concretamente, un dependencia de datos se produce siempre que una instruc-
ción genera un valor que es utilizado por alguna de las instrucciones siguientes.
En el caso de nuestro procesador RISC, este tipo de dependencia de datos entre
una instrucción y alguna de las dos instrucciones anteriores impide que el proce-
sador obtenga los resultados correctos, puesto que el dato adecuado no está dis-
ponible en el momento en que se precisa. En otras palabras, no se pueden ejecu-
tar estas instrucciones dependientes una tras otra, tal como se ha indicado, puesto
El diseño del procesador 439

que el dato necesario no puede devolverse ar RE a tiempo para que pueda ser leído
por la siguiente instrucción dependiente.
En estos casos el problema puede solucionarse retrasando la instrucción
dependiente durante uno o dos ciclos de reloj insertando instrucciones No-op en
la secuencia de instrucciones. Estas instrucciones No-op pueden ser introducidas
por el compilador en el momento de la compilación o bien ser la unidad de con-
trol la que detenga la ejecución de instruccione& el tiempo necesario tras detectar
una dependencia de datos entre dos instrucciones. Considérese, por ejemplo,
como podría actuarse frente a una dependencia de datos en el pequeño programa
que calcula la suma de tres variables a, b, y c; utilizando el registro temp de RF
como almacenamiento temporal, y guardando después el resultado en la variable
total:
temp=a+b
total = temp + e
En la Figura 9.14(a) se muestra el-programa en ensamblador para este cálcu-
lo. Obsérvese que se ha insertado una instrucción No-op después de la tercera ins-
trucción porque el valor b no puede obtenerse desde RF hasta dos instrucciones
después. Igualmente, también se han insertado dos instrucciones No-op después
de cada instrucción Add, puesto que los valores de temp y. total no estarán dispo-
nibles durante dos ciclos de reloj.
La pérdida de prestaciones ocasionada por estas instrucciones No-op se pone
claramente de manifiesto en el diagrama de la Figura 9.14(b). Según este diagra-
ma, se buscan tres instrucciones Load en los tres primeros ciclos de reloj. No obs-
tante, puesto que el valor b no se escn'be en RF hasta el firtal del ciclo de reloj 4,
no puede leerse desde RF hasta el ciclo de reloj 5. Por eso se inserta una instruc-
ción No-op, que comienza en el ciclo 3. Igualinente, los valores de temp y total se
escriben en RF al final de los ciclos 7 y 10, respectivamente. Por tanto, hay que
insertar dos instrucciones No-op después de cada una de las instrucciones Add,
para que el procesador espere a que los valores de temp y total estén disponibles
en los ciclos 8 y 11 , respectivamente. Teniendo todo esto en cuenta, el diagrama
indica que serán necesarios un total de 11 instrucciones y 14 ciclos de reloj para
sumar a, b, y c. Sin embargo, puesto que cinco (o el 45 %) de estas 11 instruccio-
nes son No-op, queda claro que las dependencias de datos han reducido sustan-
cialemte las prestaciones del procesador segmentado. Es posible mejorar las pres-
taciones si se reordenan las instrucciones de forma que se evite la introducción de
instrucciones No-op en la medida de lo posible. Es decir, se insertan otras ins-
trucciones independientes en lugar de las iQstrucciones No-op.
Para aumentar las prestaciones del procesador se pueden introducir en el pro-
cesador caminos para el avance de datos (data forwarding), permitiendo que el
dato avance una o más etapas de la segmentación y «salte» hacia una etapa futu-
ra. Por ejemplo, en la Figura 9.12, el primero de estos caminos (indicado median-
te líneas de puntos) proporciona el dato directamente desde la salida de ALSU al
registro A, acortando en dos etapas la transferencia de datos : la etapa que trans-
fiere el dato desde DR a RF, y la que lo transfiere desde RF al registro A
440 Principios de diseño digital

Utilizando este camino, se asegura que el resultado generado por una instrucción
pueda ser usado por la siguiente. El segundo camino transfiere datos directamen-
te desde DR o desde la memoria de datos al registro B, evitando la etapa que escri-
be los datos en RF, desde donde se transferían al registro B. Utilizando este cami-
no, se consigue que el dato generado por una instrucción pueda ser utilizado dos
instrucciones más tarde.

lOO Load a, base, alfa


101 Load b, base, ojJb
102 Load e, base, alfe
103 No·op
104 Add sum oa, b
105 No·op
106 No-op
107 Add total, e, sum
108 No-al'
109 No-op
110 Store total, base , offt
(a) Programa en lenguaje ensamblador

Escribir en A
Escribir en B
Escribir en AR

a b
Escribir en
Escribir en pe 101 102 103 104 105
(b) Diagrama de tiempos

FIGURA 9.14 Ejecución de instrucciones con dependencia de datos.

Volvamos al ejemplo del programa que calculaba la suma de a, b, y e para


mostrar la utilidad de la técnica de avance de datos. Corno se muestra en la Figura
9.15(a), el programa en ensamblador correspondiente consta ahora de sólo seis
instrucciones sin ninguna instrucción No-op adicional que haga el programa más
extenso. En la figura puede verse que las tres primeras instrucciones cargan a, b,
y e en el banco de registros RF igual que antes. Sin embargo, en el ciclo de reloj
4, el valor de b se carga concurrentemente en RF y en el registro B a través de un
El diseño del procesador 441

segundo camino de avance. De igual manera, en el ciclo de reloj S, se utilizan


ambas caminas de avance de forma que e se carga en RF y en el registro B (a tra-
vés del segundo camino de avance), y a + b se carga en DR y en el registro A (a
través del primer camino de avance). A continuación, en el ciclo de reloj 6, el
valor a + b se almacena en el registro que contiene la variable temp , mientras que
temp se suma a la variable e en ALSU y el resultado se almacena en DR y en el
registro A En el ciclo de reloj 7, el valor temp + e se almacena en RF y, al mismo
tiempo, se transfiere desde el registro A al DR. Después, en el siguiente ciclo de
reloj, este valor se almacena finalmente en la memoria de datos, en la dirección
asignada a la variable total.

100 Load a, base, off


10 1 Load b, base, off
102 Load e, base, off
103 Add sum, a, b
104 Add 101al, e, sum
105 Store lolal, base, off
(a) Programa en lenguaje ensamblador

Escribir en IR
Escribir en A
Escribir en B
EscribirenAR

Escribir en DR
Escribir en
Escribir en RF a b e
Escribir en Mem 10lal
Escribir en pe 101 102 103 104 105 106 107 108 109
(b) Diagrama de tiempos

FIGURA 9.15 Funcionamiento del procesador RISC con avance de datos.

Como puede verse a partir de este ejemplo, el avance de datos permite que el
procesador segementado funcione a pleno rendimiento, eliminando la necesidad
de insertar instrucciones No-op que retrasan las instrucciones con dependencias
de datos. El avance de datas se utiliza de una u otra forma en todos los procesa-
dores comerciales actuales.
442 Principios de diseño <ligital

9.9. PREDICCiÓN DE SALTO


En general, utilizando avance de datos es posible usar con éxito la segmentación
con todas las instrucciones excepto con las de control. Cuando se utilizan ins-
trucciones de control tales como instrucciones de salto condicional, el procesador
no puede determinar la dirección de la siguiente instrucción hasta la cuarta etapa
de la segmentación, donde se toma la decisión de si se produce el salto o no. De
igual forma, siempre que se utilicen instrucciones de salto incondicional (Jump),
también se necesitarán cuatro ciclos de reloj para cargar pe con una nueva direc-
ción. En ambos casos, es preciso insertar tres instrucciones No-op después de cada
instrucción de control.
La necesidad de insertar estas instrucciones se ilustra en la Figura 9.16, que
presenta los diagramas de tiempo para un programa que calcula el máximo y el
mínimo de dos valores almacenados en las variables ay b. En la Figura 9.l6(a)
puede verse el programa en ensamblador, que compara a y b, y si a es mayor o
igual que b, hará max = a y min = b; yen caso contrario hará max = by min = a.
Puesto que este procesador no puede determinar la dirección de la instrucción
siguiente hasta pasados tres ciclos de reloj, hay que insertar tres instrucciones No-
op después de la instrucción de salto condicional, Bgoeq. Igualmente, se han
insertado tres instrucciones No-op más después de la instrucción Jump de la posi-
ción 106. La Figura 9.l6(b) muestra el diagrama de tiempos correspondiente a la
ejecución del programa cuando no se produce el salto, y la Figura 9 .l6( c) mues-
tra lo que ocurre cuando se produce el salto.
Considérese el primer caso, en el que no se produce el salto cuando el proce-
sador ejecuta Bgoeq seguida de tres instrucciones No-op . Como puede verse,
hasta el ciclo de reloj 3 el procesador no determina que el salto no se va a produ-
cir, momento en el que carga la dirección 104 en pe. A continuación se ejecutan

100 Bgoeq a, b, +10


101 No-op
102 No-op
103 No-op
104 Move //lax, b
105 Move min, a
106 Jump +6
107 No-op
108 No-op
109 No-op
110 Move max, a
111 Move min , b
112

(a) Programa en lenguaje ensamblador

FIGURA 9.16 Funcionamiento del procesador RISC con salto simple.


El diseño del procesador 443

Escribir en A
Escribir en B
Escribir en AR
Escribir en DR

Escribir en RF
Escribir en Mem
Escribir en pe
(b) Diagrama de tiempos cuando no se produce el salto

Escribir en A
Escribir en B

b
Escribir en
min

(e) Diagrama de tiempos cuando se produce el sallo

FIGURA 9.16 Continuación.

dos instrucciones Move y una instrucción Jump . Como en la instrucción de salto


condicional, la instrucción Jump también viene seguida por tres instrucciones No-
op, puesto que el instante más próximo en el que el procesador puede cargar la
dirección de salto 112 es el ciclo de reloj 9. Luego, en este caso, se necesitan 10
ciclos de reloj para realizar el cálculo completo puesto que el procesador debe eje-
cutar seis instrucciones No-op.
Cuando el salto es efectivo, el procesador ejecuta la instrucción Bgoeq, que
viene seguida por tres instrucciones No-op. Después, en el ciclo de reloj 3, el pro-
cesador puede cargar la dirección de salto en pe y ejecutar las dos instrucciones
Move y el resto del programa. Como en el caso precedente en el que no se pro-
ducía el salto, el procesador ejecuta seis instrucciones, incluyendo las tres ins-
trucciones No-op. Si se asume que hay igual probabilidad de que se produzca el
salto y de que no, el procesador ejecuta el programa precedente en una media de
ocho ciclos de reloj.
444 Principios de diseño digital

~; 7f'-

-, - ,.- ' ..
100 Bgoeq a, b, +4
101 Move max, b
\02 Move min, a
103 Jump +3
104 Move max, a
105 Move min, b
106
(a) Programa en lenguaje ensamblador

Escribir en A a b a
Escribir en B b
Escribir en AR
Escribir en DR b a

Escribir en max
Escribir en
Escribir en pe 101 \02 103 104 lOS 106

de la segmentación

(b) Diagrama de tiempos cuando no se produce el salto

Escribir en IR
Escribir en A b
Escribir en B

a b

min

101 102

Vaciado de la segmentación

(e) Diagrama de tiempos c uando se produce el salto

FIGURA 9.1 7 Funcionamiento del procesador RISC con predicción de salto.


El diseño del procesador 445

Es posible mejorar las prestaciones del procesador si se sustituyen las ins-


trucciones No-op que hay tras las instrucciones de salto por otras instrucciones
del programa que siempre se ejecutan. Otra alternativa para no insertar ins-
trucciones N o-op después de cada instrucción de control consiste en modificar
el diseño del procesador mediante la técnica de predicción de salto, que per-
mite que el procesador ejecute instrucciones que siguen a la instrucción de
salto como si no se produjese el salto. Si el procesador determina que se debe
producir el salto, en ese momento se abandona la ejecución de las instruccio-
nes cuya ejecución se había iniciado de forma especulativa y la segmentación
se vacía.
En la Figura 9.17 se ilustra esta técnica comenzando con la secuencia de ins-
trucciones en ensamblador de la Figura 9.17(a). Obsérvese que este programa en
ensamblador es equivalente al programa de la Figura 9.16(a) excepto por el hecho
de que no incluy.e instrucciones No-op. El diagrama de tiempos de la Figura
9.17(b) muestra la ejecución del programa cuando no se produce el salto, mien-
tras que la Figura 9.17(c) muestra la situación alternativa en la que debe produ-
cirse el salto. Como puede verse, en el primer caso, el procesador ejecuta las ins-
trucciones de las direcciones 101 , 102, Y 103, asumiendo que no se va a producir
el salto. Después, cuando se confirma esta predicción en el ciclo 3, el procesador
continúa buscando la siguiente instrucción, en la dirección 104, sin tener en cuen-
ta que la instrucción previa es una instrucción Jump. Cuando, en el ciclo 6, el pro-
cesador determina que el valor de la dirección de salto es 106, cargará dicho valor
en PC y buscará esa instrucción en el ciclo 7, cargándola en IR. En este momen-
to, las tres instrucciones previas que comenzaron en los ciclos 4, 5, Y 6, incluyen-
do la instrucción de la dirección 106, se eliminan para evitar que almacenen datos
en los registros o en la memoria.
En este caso, el procesador necesitará siete ciclos de reloj para calcular el
mínimo y el máximo de a y b.
En el segundo diagrama se ve lo que sucede cuando se produce el salto. Al
comienzo, el procesador ejecuta las cuatro primeras instrucciones como antes. No
obstante, cuando en el ciclo de reloj 3 encuentra que debe producirse el salto,
carga la dirección de salto 104 en PC y vacía la segmentación; esto es, abandona
la ejecución de las instrucciones de direcciones 101, 102, Y 103. Obsérvese que la
dirección 104 debe cargarse en cualquier caso, puesto que es la siguiente instruc-
ción de la secuencia. Después, el procesador continúa ejecutando las instruccio-
nes de direcciones 104, 105, y 106. En este caso el procesador necesita seis ciclos
de reloj para realizar el mismo cálculo. Nuevamente, si se asumen probabilidades
iguales para saltar o no saltar, el procesador necesitará, en media, 6.5 ciclos de
reloj para determinar el mínimo y el ' máximo de dos números, si se utiliza pre-
dicción de salto. Es decir, aproximadamente un 28% más rápido que el procesa-
dor sin predicción de salto.
A partir de la discusión precedente, resulta· evidente la ventaja de utilizar la
técnica de predicción de salto, puesto que un procesador con estos mecanismos de
predicción desaprovecha, por término medio, menos ciclos que un procesador sin
ellos.
446 Principios de diseño digitai

9.10. RESUMEN DEL CAPíTULO


En este capítulo se han aplicado las técnicas para la síntesis a nivel de transferen-
cias entre registros al diseño de procesadores de uso general defInidos por su
repertorio de instrucciones. Para ello, se han considerado distintos tipos de ins-
trucciones, con sus campos y modos de direccionamiento, y se ha mostrado la
estrecha relación existente entre el diseño del repertorio de instrucciones y la
arquitectura del procesador. También se ha descrito el flujo de diseño de un pro-
cesador y se ha ilustrado mediante el diseño de un procesador CISC de 16 bits y
un procesador RISC de 32 bits.
Para ello, se han introducido los diagramas de flujo IS y se ha mostrado cómo
refinarlos para determinar diagramas ASM a partir de los que obtener la arquitec-
tura del procesador. Finalmente, se han presentado los conceptos de avance de
datos y predicción de saltos, utilizados en los procesadores actuales para mejorar
sus prestaciones.

9.11. lECTURAS ADICIONALES


Hayes, J. P. Compwer Architecture and Organization, 2nd ed. New York: McGraw-Hill,
1988.
Buena rev isión de la arquitectura de computadoras, el procesamiento paralelo, y la
metodología de diseño.
Hennessy, J. L. , Y D. A. Patterson. Computer Organization and Design: The Hardware!
Software Interface. San Mateo, CA: Morgan Kaufmann, 1993.
Explicación detallada del diseño de procesadores basado en la arquitectura MIPS,
escrita por los pioneros de la tecnología RISC, con excelentes explicaciones de las
razones que hay detrás de cada decisión de diseño.
Hwang, K. Advanced Computer Architecture: Parallelism , Scalabilty, Programmability.
New York: McGraw-Hill, 1993.
Una completa revisión de las arquitecturas avanzadas de computadoras y de sus apli-
caciones.
Kain, R. Y. Computer Architeclltre: Software and Hardware, Vols. 1 and ll. Englewood
Cliffs, NJ: Prentice Hall , 1989.
Proporciona una excelente explicación de las relaciones software/hardware en el dise-
ño de una computadora.
Katevenis, M. G. H. Reduced Instruction Set Computer Architecture for VLSI, Boston:
M.I.T. Press, 1985.
Uno de los primeros libros donde se discute la arquitectura y el diseño RISC. Requiere
conocimientos de diseño físico y de la tecnología VLSJ.
Kogge, P. M. The Architecture of Pipelined Computers. New York: McGraw-Hill, 1989.
Un excelente texto de introducción a la segmentación del camino de datos y de control
haciendo énfasis en los principios de la segmentación.
El diseño del procesador 447

9.12. PROBLEMAS
9.1. (Formatos de instrucción) Escriba teniendo el valor del dato y la segun-
una secuencia de instrucciones que da con la dirección del siguiente ele-
permita calcular el valor de y = x2 + mento de la lista. Utilice sólo instruc-
2x + 3 para un valor de x dado utili- ciones de tres direcciones, con:
zando: (a) Direccionamiento directo
(a) Instrucciones de tres direcciones (b) Direccionamiento indirecto
(b) Instrucciones de dos direcciones
9.6. (Modos de direccionamiento) Escriba
(e) Instrucciones de una dirección
Asuma que no hay banco de registros la secuencia de instrucciones para cal-
en el procesador. tan sólo puede supo- cular 2::~a;x;.donde A=[a¡.a2....a IOol
ner la existencia de un único acumula- y X=[x¡,x2''',x¡ool representan vecto-
dor para la parte (c). Indique el núme- res almacenados en la memoria prin-
ro de instrucciones y de accesos a cipal. Utilice instrucciones de dos
memoria en cada caso. direcciones, con:
(a) Direccionamiento directo
9.2. (Formatos de instrucción) Resuelva el (b) Direccionamiento indirecto
problema 9.1 suponiendo que hay un (e) Direccionamiento indexado con
banco de registros. Tanto para las modo de autoincremento.
direcciones del banco de registros
como para las de memoria utilice: 9.7. (Diseño del repertorio de instruccio-
(a) Instrucciones de una dirección nes) Modifique el repertorio de ins-
(b) Instrucciones de dos direcciones trucciones de la Figura 9.5 ampliando
(e) Instrucciones de tres direcciones el campo de dirección a 22 bits. Esto
Minimice el número de direcciones de puede conseguirse utilizando s6lo una
memoria en cada caso. dirección del banco de registros en las
instrucciones de memoria y control y
9.3. (Formatos de instrucción) Utilizando asumiendo que los seis bits más signi-
instrucciones de tres direcciones, ficativos están en los campos Src1 y
desarrolle la secuencia de instruccio- Src2. Considere que el registro RF(O)
nes para leer y escribir: siempre contiene la base en el modo
(a) Una pila creciente hacia direc- de direccionamiento relativo.
ciones mayores.
(b) Una cola FIFO 9.8. (Diseño del repertorio de instruccio-
(e) Una pila UFO nes) Asuma que RF(O) es el contador
de programa PC. Muestre que las ins-
9.4. (Modos de direccionamiento) Escriba trucciones Call y Return no son nece-
los procedimientos de lectura y escri-· sarias al poder ser implementadas
tura en una cola FIFO. utilizando un mediante una secuencia de otras ins-
formato de dos direcciones. con: trucciones.
(a) Direccionamiento directo
(b) Direccionamiento indirecto 9.9. (Diagrama de flujo IS) Considere que
(e) Direccionamiento relativo PC se encuentra en RF(O~ Modifique
en consecuencia el diagrama de flujo
9.5. (Modos de direccionamiento) Escriba
IS de la Figura 9.6 y el diagrama ASM
los procedimientos para borrar y aña-
mostrado en la Figura 9.8.
dir elementos a una lista. Asuma que
cada elemento de la lista utiliza dos 9.10. (Repertorio de instrucciones) Añada
palabras de memoria. la primera con- un registro de base específico (BR) al
448 Principios de diseño digital

procesador de 16 bits de la Figura 9.15. (Diagrama de flujo IS) Obtenga el dia-


9.10 y muestre los cambios que se grama de flujo IS para el repertorio redu-
deben realizar en el repertorio de ins- cido de instrucciones de la Figura 9.11.
trucciones y en el esquema del proce-
9.16. (Diagrama ASM) Obtenga el diagra-
sador.
ma ASM para el repertorio reducido
9.11. (Recursos del procesador) Utilizando de instrucciones de la Figura 9.11.
el mismo procesador de 16 bits, indi-
9.17. (Procesador RISC) Escriba un progra-
que los cambios a realizar en el dia-
ma para el procesador RISC de la
grama ASM si se dispone de:
(a) Un registro de base específico Figura 9.12 que calcule y;;(2 + 2x + 3
(BR)
para un x dado. Asuma además que la
(b) Un registro específico como ALSU puede realizar la multiplica-
puntero de pila (SR) ción en un ciclo de reloj. Obtenga el
diagrama de tiempos para este proce-
9.12. (Recursos del procesador) Utilizando sador utilizando como modelo el de la
el mismo procesador de 16 bits, mues- Figura 9.13.
tre los cambios que requiere el disgra-
9.18. (predicción de salto) Escriba un pro-
ma ASM si los accesos a memoria uti-
grama para el procesador RISC de la
lizan: ,
(a) Dos ciclos de reloj Figura 9.1 2 que calcule el valor abso-
(b) Tres ciclos de reloj
luto. Obtenga el diagrama de tiempos
para este procesador:
(e) Cuatro ciclos de reloj
(a) Sin predicción de saltos
9.13. (Repertorio reducido de instruccio- (b) Con predicción de saltos
nes) Utilizando el repertorio reducido
9.19. (Avance de datos/predicción de sªlto)
de instrucciones de la Figura 9.11,
proponga los cambios que le permiti- Escriba un programa en lenguaje
rían utilizar un banco de registros
ensamblador para un procesador
con:
RISC que calcule la aproximación de
(a) 16 registros la raíz cuadrada (presentada en el
Capítulo 8):
(b) 32 registros
(e) 64 registros (a) Sin avance de datos ni predic-
(d) 256 registros ción de saltos.
(b) Con avance de datos pero sin
9.14. (Repertorio reducido de instruccio- predicción de saltos.
nes) Indique los cambios a realizar en (e) Sin avance de datos pero con
el repertorio de instrucciones de la predicción de saltos.
Figura 9.11 para incrementar el (d) Con avance de datos y predic-
campo de desplazamiento. ción de saltos.
Apéndice:
Prácticas
de laboratorio
En los capítulos anteriores mostramos cómo diseñar circuitos digitales a nivel de'
puerta, registro y' procesador. Después de acabar el diseño en cualquiera de estos
niveles, debemos aseguramos de que los circuitos diseñados se comportan como
se pretende, además de satisfacer las restricciones impuestas por algunos paráme-
tros de calidad. Como hemos mencianado antes, los parámetros de calidad más
conocidos son el coste, las prestaciones (la velocidad) y el consumo de energía.
El coste se puede medir mediante el número de transistores, puertas, registros
o procesadores usados en el diseño. Una medida alternativa del coste es el área
del microchip o de la tarjeta de circuito impreso usada para albergar estos com-
ponentes. El coste total se obtiene sumando el número de transistores, puertas o
registros de cada componente en el esquema final. Por otra parte, la medida del
área es más difícil de obtener, ya que requiere calcular el área usada por los cables
y estimar la posición o situación de cada componente en un microchip o en una
tarjeta de circuito impreso.
La velocidad se mide de manera diferente en los distintos niveles de abstrac-
ción. En los niveles de transistor y de puerta, se mide el tiempo (retardo de pro-
pagación) que se necesita para llevar el cambio de la entrada a los conectores de
salida. En el nivel de transferencia entre registros, se mide con el número de ciclos
de reloj o número de estados, mientras que en el nivel de procesador se mide el
número de instrucciones por segundo o el tiempo de ejecución con los programas
de referencia (benchmarks) seleccionados.
La disipación de potencia es igual al producto de la tensión de la fuente por el
consumo medio de corriente. Como la fuente de tensión normalmente es constan-
te para todo el microchip o tarjeta de circuito impreso, la disipación de potencia
es proporcional a la corriente media que suministra la fuente de tensión. En tec-
nología bipolar, como es la familia TIL, las puertas utilizan poca corriente cuan-
do están en corte (off) y mucha más corriente cuando están en conducción (on) .
Por ello, la disipación de potencia es proporcional al número de puertas en esta-
do de conducción y en estado de corte. Con tecnología MOS, las puertas condu-
cen corriente sólo en la transición de O a l y de I a O. Así, la disipación de poten-
cia es proporcional al número medio de puertas que cambian su valor de salida en
un intervalo de tiempo concreto. En cualquier caso, el número de puertas conrnu-
450 Principios de diseño digital

tando depende principalmente de los datos de entrada y en menor medida del dise-
ño del circuito. De este modo, para medir la disipación de potencia tenemos que
contar el número de puertas en estado "on" o el número de puertas conmutando
considerando un gran número de datos de entrada aleatorios, calcular la media, y
luego multiplicar la corriente nominal de puerta por la tensión de la fuente.

A.1. EQUIPO DE PRÁCTICAS


Como hemos explicado en la sección anterior, utilizamos las prácticas para com-
probar el funcionamiento y otros índices de calidad una vez concluido el diseño.
El funcionamiento del diseño se puede comprobar de varias formas.

A.1.1. Placa de pruebas


El modo más tradicional, llamada de prueba en placa, utiliza una placa de
pruebas Q:>readboard) que contiene varias tiras de orificios para montar circui-
tos integrados (lC) de pocas puertas, biestables, o 'pequeños componentes de
transferencia entre registros tales como registros de 4 bits, contadores, ALU, o
ficheros de registro de 4 palabras. En las Figuras 3.18 y 3.1 9 se mostraron varios
ejemplos de tales circuitos integrados de la familia TIL. El resto de los circuitos
se pueden encontrar en Libros de características TIL y CMOS editados por los
fabricantes.
La placa de pruebas también contiene indicadores luminosos de diodos emi-
sores de luz (LEO), para mostrar los valores de salida, conmutadores para dar
valores O y l a las señales de entrada, y tomas de corriente para los circuitos inte-
grados. El resto del equipo necesario para la placa de [Link] cables de
conexión, y herramientas para cortar y pelar los cables. Durante la prueba en
placa, los diseñadores insertan los IC necesarios en los orificios, cortan los cables
con la longitud adecuada e interconectan los IC de la placa de. pruebas de acuer-
do con los esquemas generados durante la fase de diseño. Los conmutadores se
conectan a las entradas del circuito de modo que se pueda observar el comporta-
miento del circuito para cualquier combinación de valores de entrada. Para obser-
var los valores de salida tenemos que conectar los indicadores LEO a las salidas
del circuito. La comprobación del diseño se lleva a cabo observando los valores
de salida para cada combinación de valores de entrada. En otras palabras, se com-
prueba el funcionamiento de cada fila de la tabla de verdad del circuito. Aunque
comprobar cada fila de la tabla de verdad es posible en circuitos pequeños, con
pocas entradas y salidas, eso no se puede hacer en un tiempo razonable con cir-
cuitos grandes. Para evitar una fase de verificación larga y exhaustiva, los dise-
ñadores seleccionan normalmente un conjunto pequeño de patrones de entrada,
llamados vectores de test, de modo que cada patrón conmute la salida de al menos
una puerta o biestable, y que cada salida de una puerta o biestable sea conmutada
por al menos un patrón.
Apéndice: Prácticas de laboratorio 451

Este proceso de generación de patrones de test no es sencillo en los casos en


los que los componentes estén profundamente ocultos en el diseño, es decir, en los
que las entradas sean difíciles de controlar y sus salidas difíciles de observar. Para
que cambie el valor de salida de un puerta o biestable tenemos que poder inducir
el cambio en alguna de sus entradas. Para inducir este cambio de entrada, tenemos
que encontrar uno o más caminos que conduzcan desde los terminales de entrada
del circuito a las entradas de la puerta o biestable concreto y crear un patrón de
entrada que propague este cambio de entrada hasta la entrada de la puerta o bies-
table en cuestión. Del mismo modo tenemos que encontrar el camino desde la
salida de la puerta o biestable que estamos observando a los terminales de salida
del circuito y crear un patrón de entrada que propague este cambio de salida hasta
los conectores de salida del circuito donde podamos observarlo con los indicado-
res LEO. Muchas veces no es posible encontrar estos patrones, particularmente en
circuitos secuenciales con lazos de realimentación internos complejos.
Para medir el retardo de propagación necesitamos un generador de pulsos y un
osciloscopio multicana!. El generador de pulsos se conectará a una o más entra-
das que permitan la propagación de la secuencia de pulsos a la puerta o biestable
. concreto. Las sondas del osciloscopio (una para cada canal) se conectan a las sali-
das de las puertas o biestables que están bajo observación. De esta forma, pode-
mos comparar las señales de entrada y salida en la pantalla del osciloscopio y
medir el retardo entre ellas.
La estimación de la potencia es más difícil de calcular. Para circuitos peque-
ños se pueden encontrar el estado o frecuencias de conmutación de cada puerta a
partir de su tabla de verdad. Además, si suponemos que a cada patrón de ·entrada
le sigue otro patrón de entrada con la misma frecuencia, podremos obtener la
corriente de cada puerta y promediarla para todas las puertas y para todos los
patrones con objeto de obtener la disipación media de potencia. En el caso de cir-
cuitos grandes, tenemos que seleccionar un conjunto de patrones de entrada repre-
sentativo y usar herramientas CAD para medir el estado o frecuencia de conmu-
tación de las puertas y biestables para lograr la potencia media. Obsérvese que la
potencia media depende del conjunto de patrones de entrada seleccionado, ya que
algunos patrones pueden provocar muchos cambios en el circuito mientras que
otros pueden producir sólo cambios mínimos.

A.1.2. Tarjetas FPGA


Una tarjeta FPGA es parecida a una placa de pruebas con la diferencia de que
las tiras de orificios de conexión y los lC de pequeña escala se sustituyen por
una o más FPGA. Cada FPGA contiene hasta varios miles de puertas como se
describió en la Sección 3.11 y en la Figura 3.23. La otra diferencia importante
es que los diseñadores no pueden conectar las puertas individualmente, ya que
están encapsuladas dentro de la FPGA , y en su lugar tienen que programar las
conexiones. Por esta razón necesitamos una herramienta de captura de esque-
mas que convierta el esquema creado por los diseñadores en la pantalla del com-
452 Principios de diseño digital

putador en un formato interno llamado lista de conexionado (netlist) que con-


tiene todas las conexiones, con sus fuentes y destinos. Como las fuentes y los
destinos son puertas o biestables, la lista de conexionado equivale a la captura
de esquema. Sin embargo, no es posible regenerar el esquema a partir de la lista
de conexionado, ya que ésta no contiene ninguna información sobre la posición
de las puertas y otros componentes en la pantalla. Para regenerar el esquema a
partir de la lista de conexionado se necesitan herramientas de ubicación y
encaminamiento.
La segunda herramienta CAD que se necesita en la tarjeta FPGA es una herra-
mienta de implementación de un diseño que traslada (carga) el esquema captura- •
do en los bloques lógicos de la arquitectura de la FPGA, determina la ubicación
óptima de los bloques lógicos y selecciona los canales de interconexionado que
conectan la lógica con los bloques de E/S.
Para medir la velocidad y la potencia podemos usar, como en el caso de la
placa de pruebas, generadores de pulsos y el osciloscopio para medir el retardo de
propagación de la entrada a la salida y la actividad de conmutación.

A.1.3. Prácticas de captura y simulación.

En vez de placas de pruebas o tarjetas FPGA podemos usar simuladores dirigi-


dos por eventos para validar el funcionamiento y las prestaciones, y utilizar cap-
tura de esquemas o lenguajes de descripción hardware (HDL) para especificar
diseños digitales. Los simuladores dirigidos por eventos calculan el valor de 'sali-
da a partir de los valores de entrada de cada puerta, biestable o cualquier otro
componente digital cuyo modelo esté en la biblioteca del simulador o haya sido
especificado por el diseñador. Los simuladores también determinan los instantes
de tiempo en los que el valor calculado de antemano para cada salida debe asig-
narse a la misma. Además, cada simulador hace un seguimiento del tiempo de
simulación y planifica la asignación de nuevos valores, llamados eventos, a las
señales de salida, de acuerdo con los instantes de tiempo que se han determinado
para cada valor. Un simulador dirigido por eventos repite los siguientes cuatro
pasos para cada evento.
1. Asigna nuevos valores a una o más señales de salida de acuerdo con la
planificación que se ha establecido.
2. Calcula los nuevos valores de salida de cada uno de los componentes
cuyas entradas hayan cambiado después de la asignación hecha en
(1).
3. Determina el instante de tiempo futuro para la asignación del nuevo valor
(nuevo evento) obtenido en (2) a la señal de salida correspondiente, cal-
culándolo a partir del modelo del componente.
4. Incrementa el tiempo de simulación hasta el siguiente evento planificado.
Un simulador que sigue los cuatro pasos indicados arriba se puede usar para
la verificación funcional y la validación de velocidad/potencia. Además de obte-
Apéndice: Prácticas de laboratorio 453

ner los valores de salida correctos para cada señal de salida, un simulador tam-
bién indica cuando la señal de salida alcanzará este valor de salida con respecto
al instante en que cambien los valores de entrada. Contabilizando todos los cam-
bios de los valores de salida de todos los componentes dentro de algún intervalo
de tiempo también podemos calcular la disipación de potencia. Como se men-
cionó anteriormente en esta sección, cada simulador requiere una descripción del
circuito digital, que se puede obtener con una herramienta de captura de esque-
mas o mediante un HDL. Una herramienta de captura de esquemas permite intro-
ducir el esquema gráficamente mientras que con un HDL se hace mediante texto.
Escribir la descripción del diseño en un HDL determinado, como el estándar
VHDL del IEEE o con el lenguaje Verilog se llama modelado. La ventaja prin-
cipal de los lenguajes HDL es que permiten a los diseñadores describir circuitos
digitales con diferentes niveles de abstracción. Por ejemplo podemos diseñar un
circuito digital y describirlo especificando todas sus puertas y biestables y sus
conexiones. Por otra parte, podemos describirlo usando expresiones booleanas
para cada entrada del biestable o especificando todas las transferencias entre
registros en cada ciclo de reloj. Incluso en los niveles más altos de abstracción
podemos describir un procesador usando su conjunto de instrucciones. En este
caso el modelo es un lazo infinito que contiene una sentencia CASE cuya varia-
ble CASE es el tipo de instrucción y los campos del código de operación. En este
modelo de procesador cada iteración del lazo representa un ciclo de ejecución de
una instrucción.
La ventaja de modelar a alto nivel de abstracción es la reducción del tiempo
de ejecución de una simulación. Al acortarse los tiempos de sirnulacióh se puede
usar un modelo de conjunto de instrucciones del procesador para depurar un
ensamblador, un compilador o un sistema operativo, mientras se diseña y se fabri-
ca el procesador.

A.1.4. Prácticas de descripción-síntesis


Como el uso de los lenguajes HDL permite a los diseñadores describir circuitos
digitales en niveles de abstracción más altos, podemos aprovechar la ventaja de
estas descripciones más cortas, eficientes y legibles y sintetizar automáticamente
diseños de menor nivel usando distintas herramientas de síntesis.
Por ejemplo, las herramientas de síntesis lógica convierten las expresiones
booleanas en puertas y optimizan el diseño a nivel de puerta para un determinado
coste, velocidad, potencia y biblioteca de puertas, utilizando métodos parecidos a
los explicados en el Capítulo 4. Además, las herramientas de síntesis secuencial
minimizan los estados y los codifican para la lógica secuencial y generan expre-
siones booleanas para las descripciones ASM y FSM, como se explicó en el
Capítulo 6. Por otra parte, las herramientas de síntesis de comportamiento llevan
a cabo la síntesis de transferencia entre registros, incluyendo memoria comparti-
da, unidad funcional compartida y bus compartido, así como su planificación que
se explicó en el Capítulo 8.
454 Principios de diseño digital

A.2. TIPOS DE PRÁCTICAS


El equipo y las herramientas descritas en la sección anterior permiten crear di s-
tintas prácticas como se muestra en la Tabla A.l , en la que cada práctica resulta
adecuada para una o más tareas del proceso de diseño.
La práctica más tradicional es la de placa de pruebas en la que los estudian-
tes diseñan circuitos digitales, conectan puertas, biestables y pequeños compo-
nentes a media escala. En esta práctica verifican el funcionamiento de compo-
nentes combinacionales y secuenciales. (Esta materia se vio en los Capítulos 5 y
7). Para medir la velocidad, podemos mejorar la práctica de la placa de pruebas
con generadores de pulsos y osciloscopios de modo que los estudiantes puedan
observar formas de onda de distintas señales y medir el retardo y la potencia.

TABLA A.1 Tipos de prácticas

Prueba en placa orientada


a mejorar la velocidad x x
Práctica FPGA x x
Práctica FPGA orientada
a mejorar la velocidad x x x
Práctica de simulación x x
Práctica de modelado x x
Práctica de síntesis lógica x x x
Práctica de síntesis del
comportamiento x x x x
Práctica de diseño típica x x x x x

Una práctica más moderna sería con FPGA, en la que se reemplazarían las
placas de pruebas por tarjetas FPGA y software adicional para trasladar los esque-
mas de diseño a FPGA, que normalmente facilita el fabricante de la FPGA. Esta
práctica también se puede usar para medir la potencia y la velocidad, si añadimos
generadores de pulsos y osciloscopios.
También podemos practicar el diseño de componentes digitales usando herra-
mientas de simulación que pueden albergar fácilmente diseñus mayores que los
de placas de pruebas. Una práctica de simulación utilizaría al menos una herra-
mienta de captura de esquemas conectada a un simulador. Para enseñar HDL y
modelado, acudimos a las prácticas de modelado, en las que los estudiantes
aprenden cómo describir los distintos componentes en distintos niveles de abs-
Apéndice: Prácticas de laboratorio 455

tracción y como escribir los modelos para verificar el funcionamiento, los proto-
colos de comunicación, prestaciones, potencia y verificabilidad entre otros. Estas
prácticas de modelado necesitarían una herramienta de simulación con un len-
guaje estándar como VHDL o Verilog como procesador frontal.
En cursos más avanzados podríamos utilizar herramientas de síntesis para
diseñar circuitos digitales. En una práctica de síntesis lógica los estudiantes des-
cribirían modelos a niveles más altos y diseñarían circuitos digitales a partir de
modelos descritos. Con objeto de poder comparar, cada circuito puede diseñarse
primero manualmente y luego sintetizarlo automáticamente. (Esta materia se vio
en los Capítulos 4 y 6). En las prácticas de síntesis del comportamiento los
estudiantes harían lo mismo que en las prácticas de síntesis lógica con la diferen-
cia de que podrían trabajar a partir de conjuntos de instrucciones para sintetizar
procesadores o a partir de descripciones algorítmicas para sintetizar ASIC. (Esto
se vió en los Capítulos 8 y 9).
En resumen, un laborator io de diseño típico que se pueda usar en distintos
cursos incluiría un simulador basado en HDL con una herramienta de captura de
esquemas para los cursos introductorios, y una entrada HDL para los cursos avan-
zados o de modelado. También incluiría tarjetas FPGA con algunos generadores
y osciloscopios para que los estudiantes se hicieran una idea de lo que es el hard-
ware real y el proceso de fabricación. Las herramientas de síntesis lógica y de
comportamiento serían un útil añadido para los centros de enseñanza con progra-
mas densos en diseño y fabricación .

A.3. EXPERIMENTOS PARA PRÁCTICAS CON PLACAS


DE PRUEBAS Y FPGA.
A.l . Diseñe los circuitos de suma completa puertas, minimizando el retardo entre
y resta completa dados en las Tablas las salidas. Compruebe el funciona-
2.3 y 2.4, Yutilice su biblioteca propia. miento del diseño y encuentre el
Implemente el diseño en una placa de camino crítico del diseño comparan-
pruebas y compruebe que funciona do todos los retardos entrada/salida.
correctamente. Después, encuentre
cuál es el peor caso de retardo entra- A.4. Diseñe los siguientes circuitos com-
dalsalida para cada salida. binacionales usando la biblioteca de
puertas que quiera, y determine los
A.2. Busque el generador de paridad
retardos críticos entrada/salida.
par/impar de 9 bits que se muestra en
(a) Sumador con acarreo en casca-
la Figura 3.19, y encuentre cuál es el
da de 4 bits (Sección 5.1)
peor caso de retardo entrada/salida.
(b) Generador de acarreo anticipa-
Calcule también la disipación de
do de 4 bits (Sección 5.2)
potencia para los componentes de la
(e) Unidad lógica de 4 bits (Sec-
biblioteca que elija.
ción 5.4)
A.3. Rediseñe la función de acarreo anti- (d) ALU de 4 bits (Sección 5.5)
cipado de 4 bits a partir del Ejemplo (e) Decodificador de 3 en 8 (Sec-
4.10, usando su propia biblioteca de ción 5.6)
456 Principios de diseño digital

(1) Selector de 8 a l (Sección 5.7) (a) Registro de 4 bits (Sección 7.1)


(g) Codificador de prioridad de 8 á (b) Registro de desplazamiento de
3 (Sección 5.9) 4 bits (Sección 7.2)
(h) Comparador de magnitudes de (e) Contador de 4 bits (Sección 7.3)
4 bits (Sección 5.10) (d) Contador ascendente/descen-
(i) Desplazador/rotador de izquier- dente de 4 bits (Sección 7.3)
da/derecha de 4 bits (Sección (e) Contador BCD (Sección 7.4)
5.11) (1) Contador asíncrono de 4 bits
(j) Desplazador en bloques a (Sección 7.5)
izquierda/derecha de 8 bits (g) Fichero registro con dos puer-
(Sección 5.11 ) tos (Sección 7.6) •
(h) RAM 4 x 4 (Sección 7.7)
A.5. Diseñe los siguientes elementos de
(i) Pila de inserción/extracción
almacenamiento usando la biblioteca
de puertas que quiera, verifique su (Sección 7.8, Figura 7.20)
comportamiento .y cree los diagra- (j) Cola FIFO de 4 palabras
mas de tiempo para cada transici ón (Sección 7.9, Figura 7.23)
de un estado a otro. (k) Camino de datos de 8 bits
(a) Latch SR (Sección 6.1) (Sección 7.10, Figura 7.26)
(b) Latch SR con puertas (Sección A.S. Usando los componentes combina-
6.2) cionales y secuenciales diseñados en
(e) Latch D con puertas (Sección 6.3) los Experimentos A.4, A.5 Y A.7
(d) Biestable SR maestro/esclavo diseñe las siguientes unidades de
(Sección 6.4) control y determine el retardo del
(e) Biestable JI( maestro/esclavo peor caso.
(Sección 6.4) (a) Control cableado (Figura
(1) Biestable D maestro/esclavo 7.34(a))
(Sección 6.4) (b) Unidad de control con un regis-
(g) Biestable T maestro/esclavo tro de estado y un decodificador
(Sección 6.4) (Figura 7 .34(b))
(h) Biestable D disparado por flan- (e) Unidad de control con un con-
co (Sección 6.4) tador (Figura 7.34(c))
(i) Biestable D maestro/esclavo (d) Unidad de control con una pila
con puesta a uno y puesta a cero de inserción/extracción(Figura
(Sección 6.5) 7.34(d))
(j) Biestable disparado por flanco (e) Unidad de control microprogra-
con puesta a uno y puesta a cero mada (Figura 7.34(e))
(Sección 6.5)
A.9. Usando su propia biblioteca rediseñe
A.6. Diseñe el controlador de un semáfo- el contador de unos del Ejemplo 7.1
ro (Problema 6.22), compruebe su Ydetermine el menor periodo de reloj
comportamiento y detennine el retar- operacional (la mayor frecuencia del
do del peor caso entrada/salida. periodo de reloj) para los siguientes
A.7. Usando su propia biblioteca diseñe casos:
los siguientes circuitos secuenciales, (a) Camino de datos (Figura 7.26)
defina sus diagramas de estado, com- Y unidad de control (Figura
pruebe su comportamiento y deter- 7.34(a))
mine el mínimo periodo de reloj (b) Camino de datos (Figura 7.26)
necesario para su funcionamiento: y (Figura 7.34(c))
Apéndice: Prácticas de laboratorio 457

(e) Camino de datos (Figura 7.26) [Link]. Diseñe un camino de datos y una uni-
y (Figura 7.34(e)) dad de control para el algoritmo de
(d) Camino de datos a medida y inserción de campo descrito en el
unidad de control (Figura Problema 7.20. Determine también la
7.34(a)) frecuencia operacional mayor para su
(e) Camino de datos a medida y uni- diseño (el menor periodo de reloj
dad de control (Figura 7.34(c)) posible).
(1) Camino de datos a medida y uni-
dad de control (Figura 7.34(e))

A.4. EXPERIMENTOS DE SIMULACiÓN


A.H-20. Repita los experimentos de la sec- eventos para validar el funciona-
ción anterior. En vez de la placa de miento, y detennine retardos, cami-
pruebas use una herramienta de cap- nos críticos, el retardo entrada/salida
tura de esquemas para especificar el del peor caso y la mayor frecuencia
diseño y un simulador dirigido por operacional.

A.5. EXPERIMENTOS PARA MODELAR


A.21. Desarrolle modelos a nivel de com- Desarrolle un conjunto de test y vali-
portamiento (expresiones aritméti- de modelos para probar el funciona-
cas), lógico (expresiones booleanas) miento y la tempori zación·.
y estructural (listas de conexionado
de puertas) para los siguients compo- A.22. Desarrolle modelos de comportamien-
nentes : to, transferencia entre registros (ciclo
(a) Sumador con acarreo en casca- de reloj), y estructural a nivel de puer-
da de 8 bits (Sección 5.1) tas para los siguientes componentes:
(b) Generador de acarreo anticipa- (a) Latch SR (Sección 6.1)
do de 8 bits (Sección 5.2) (b) Latch SR con puertas (Sección
(e) Unidad lógica de 8 bits 6.2)
(Sección 5.4) (e) Latch D con puertas (Sección
(d) ALU de 8 bits (Sección 5.5) 6.3)
(e) Decodificador de 3 á 8 (Sección (d) Biestable SR maestro/esclavo
5.6) (Sección 6.4)
(1) Selector de 8 á l (Sección 5.7) - (e) Biestable JI< maestro/esclavo
(g) Codificador de prioridad de 8 á (Sección 6.4)
3 (Sección 5.9) (1) Biestable D maestro/esclavo
(h) Comparador de magnitud de 8 (Sección 6.4)
bits (Sección 5.10) (g) Bies table T maestro/esclavo
(i) Rotador/desplazador de iz- (Sección 6.4)
quierda a derecha de 8 bits (h) Biestable D disparado por flan-
(Sección 5.11) co (Sección 6.4)
(j) Desplazador en bloques a (i) Biestable D maestro/esclavo
izquierda/derecha (Sección con puesta a uno y puesta a cero
5.11) (Sección 6.5)
458 Principios de diseño digital

(j) Biestable disparado por flanco dad de control se compone de la


con puesta a uno y puesta a cero orden y las asignaciones al siguiente
(Sección 6.5) estado y vectores de control, mien-
Desarrolle un conjunto de test y vali- tras el modelo estructural contiene
de modelos para probar el funciona- biestables y expresiones booleanas
miento y la temporización. para cada entrada del biestable o cada
A.23. Desarrolle generadores de modelos salida de la señal de control. Del
mismo modo, el modelo de compor-
ampliando los modelos desarrollados
tamiento del camino de datos está
en los dos experimentos previos para
trabajar con cualquier .número de bits formado por varias sentencias CASE,
entre I y 64. En otras palabras, el mientras que el modelo estructural
número de bits ndebe ser un paráme- contiene cinco componentes distin-
tro del generador de modelos que tos, a saber, el selector, el fichero de
produzca el modelo adecuado al registros, la ALU, el desplazador y el
número de bits ·especificado por el adaptador del bus. Cada componente,
parámetro n. Verifique su generador a su vez, se define por sus propios
para 4, 7, 14,29 Y 60 bits. modelos estructurales o de comporta-
miento.)
A.24. Desarrolle modelos de comporta-
miento y estructural para: A.26. Desarrolle el modelo para el diseño a
(a) Pila de inserción/extracción con medida de un contador de unos
registros de desplazamiento (Figura 8.6) a partir de su diagrama
(Figura 7.20) ASM y compárelo con el modelo
(b) Pila de inserción y extracción desarrollado a partir de su implemen-
con memoria (Figura 7.21) tación (Figura 8.8).
(e) Cola FIFO con registros de des- A.27. Desarrolle los modelos de comporta-
plazamiento (Figura 7.23) miento, de transferencia entre regis-
(d ) Cola FIFO con memoria tros (diagrama ASM) y estructural
(Figura 7.24) para la máquina de Black-Jack des-
(Ayuda: el modelo de comportamien- crita en el Problema 8.6.
to describe la función de la pila o la
cola pero no sus componentes, mien- A.28. Desarrolle los modelos de conjunto
tras el modelo estructural está forma- de instrucciones (diagrama de flujo
do por todos los componentes inter- del conjunto de instrucciones de la
conectados con cada componente Figura 9.6) y de transferencia entre
descrito por su modelo de comporta- registros (diagrama ASM de la Figura
miento o estructural desarrollado en 9.8) para el procesador CISC defmido
los Experimentos A.21 y A.22.) por el conjunto de instrucciones de la
Figura 9.5. Desarrolle también los
A.2s. Desarrolle modelos de comporta- dos modelos anteriores para el proce-
miento y estructural para el contador sador RISC defmido por el conjunto
de unos que se muestra en la Figura
de instrucciones de la Figura 9. 11 Y
7.31.
compare ambos modelos.
(Ayuda: el modelo estructural se
compone de la unidad de control y A.29. Desarrolle modelos estructurales de
los componentes del camino de datos los procesadores CISC (Figura 9.9) y
que tienen sus propios modelos de RISC (Figura 9. 12) y pásele los test
comportamiento y estructurales. El con el código de referencia dado en
modelo de comportamiento de la uni- las Figuras 9.13, 9.14. 9.15 Y 9.16.
Apéndice: Prácticas de laboratorio 459

Compare los tiempos de ejecución de funcionar los procesadores CISC y


cada código de referencia haciendo RISC.

A.6. EXPERIMENTOS DE SíNTESIS LÓGICA


Y DE COMPORTAMIENTO
A.30. Use los modelos lógicos (expresio- (e) Contador BCD (Sección 7.4)
nes booleanas) desarrollados en el (1) Contador asíncrono de 4 bits
Experimento A.21 con componentes (Sección 7.5)
combinacionales y sintetice cada (g) Fichero registro con 2 puertos
componente con herramientas de sín- (Sección 7.6)
tesis lógica. Compare los resultados (h) RAM 4 x 4 (Sección 7.7)
de la síntesis lógica con los diseños (i) Pila de inserción/extracción de 4
del Capítulo S para : palabras (Sección 7.8, Figwa 7.20)
(a) Sumador con acarreo en casca- (j) Cola FIFO de 4 palabras
da de 4 bits (Sección 5.1) (Sección 7.9, Figura 7.23)
(b) Generador de acarreo anticipa- (k) Camino de datos de 8 bits
do de 4 bits (Sección 5.2) (Sección 7.10, Figura 7.26)
(e) Unidad lógica de 4 bits
(Sección 5.4) A.32. Sintetice las versiones basadas en
(d) ALU de 4 bits (Sección 5.5) estados y basadas en entradas del
(e) Decodificador de 8 a 3 (Sección contador de unos a partir de sus
5.6) modelos de transferencia entre regis-
(1) Selector de 8 a l (Sección 5.7) tros (diagramas ASM) d~dos en la
(g) Codificador de priorida~ de 8 a Figura 8.6.
3 (Sección 5.9) A.33. Sintetice las versiones basadas en
(h) Comparador de magnitud de 4 estados y basadas en entradas del
bits (Sección 5.10) contador de unos a partir de sus
(i) Desplazador/rotador de izquier- modelos de comportamiento.
da/derecha de 4 bits (Sección 5.11) (Ayuda: Los modelos de comporta-
ül Desplazador en bloques de miento no tienen variables de reloj).
izquierda/derecha de 8 bits
(Sección 5.11) A.34. Sintetice la máquina de Black-Jack a
partir de sus modelos de comporta-
A.3i. Usando los modelos de transferencia miento, de transferencia entre regis-
entre registros (ciclo de reloj) desa- tros y estructural desarrollados en el
rrollados en el Experimento A.22 Experimento A.27 usando herra-
para componentes secuenciales, sin- mientas de síntesis de comporta-
tetice cada componente con herra- miento, secuencial, y lógica.
mientas de síntesis secuencial.
Compare los resultados con los dise- A.35. Sintetice el algoritmo de aproxima-
ños manuales de : ción a la raíz cuadrada (Figura 8.9) a
(a) Registro de 4 bits (SecCión 7.1) partir de sus modelos de comporta-
(b) Registro desplazador de 4 bits miento y de transferencia entre regis-
(Sección 7.2) tros (diagramas ASM ). Repita la sín-
(e) Contador de 4 bits (Sección 7.3) tesis para (a) la sencilla biblioteca de
(d) Contador ascendente/descen- la Figura 8.1\ , y (b) la compleja
dente de 4 bits (Sección 7.3) biblioteca de la Figura 8.20.
460 Principios de diseño digital

A.7. LECTURAS DE AMPLIACiÓN


The TTL Data Base, Dalias, Texas: Texas The Programmable Logic Data Book, San
Instruments, 1988. Jose, CA: Xilinx, Inc., 1995.
CMOS Logic Data Book, Dalias, Texas: J. Duckworth, Workview Office: Stl/dent
Texas lnstruments, 1990. Editioll, Upper Saddle River, New
Jersey: Prentice Hall, 1997.
,/

Indice
A banco de registros, 290 circuitos lógicos, 94
basado en estado, 243, 248 circuitos secuenciales
acarreo anticipado, 183 basado en la entrada, 243, 248 asíncronos, 222
acumulador, 312, 410 base,30 , codificación del uno caliente,
adaptador tri estado, 200 base biltV!,! 3 1 261
álgebra booleana, 73 biblioteca ae componentes, 13 codificadores de prioridad, 200
álgebra de conmutación, 73 , 76 biblioteca de puertas, 94 código, 54
algoritmo ALAP, 391 biestable disparado por flanco , código biquinario, 56
algoritmo ASAP, 39 1 232 código de detección de errores,
algoritmo de lado izquierdo, biestable JK, 235 59
353 biestable SR, 235 código de 3 en exceso, 56
algoritmo de planificación de biestables maestro/esclavo, código de operación, 407
lista, 393 230-23 1 código de paridad impar, 60
almacenar instrucciones, 408 biestables sensibles al nivel, código de paridad par, 60
alto activo, 223 229 codigo 242 1, 56
bits de infonnación, 60 código Harnming, 62
ampliador de memoria, 189
bits de relación, 421 código 8421, 56
ampliador lógico, 189
bloque ASM, 338 código ponderado, 56
análisis, 240
booleana bi valuada álgebra, 74 códigos de corrección de
ancho del pulso de escritura,
bus, 199 errores, 62
298
códigos de paridad de 1 bit, 60
aproximación a medida, 120
cola, 307
aproximación semi-a-medida,
12 1
e colector abierto, 112
coma binario, 3 1
arco de incompatibilidad, 359 caja de decisión, 338 coma de la base, 30
arco prioritario, 359 caja de estado, 338 comparadores, 203
array de puertas , 121 caja de salida condicional, 338 compartición del bus, 353
arrays lógicos programables cambio de bit mínimo, 259 compartición de
(PLAs), 2l3 camino crítico, 167 memoria/registro, 349
ASCII, 56 camino de datos paralelas, 318 compartición de una unidad
ASIC,406 campo constante, 409 funcional, 35 1
asociación o agrupación de campo de direcciones, 407 compilador, 406
conexiones, 35 1 campo de modo, 408 complemento a 10,4 1
asociación o agrupación de campo programable complemento a dos, 42
operadores, 351 aproximación de, 123 completamente especificado, 147
asociación o agrupación de captura de esquema, 17 componentes analógicos, 9
variables, 349 característica, 52 comportamiento, 4, 18
asociatividad, 72 carga estándar, 107 condiciones de indiferencia,
autocomplementación, 56 carrera crítica, 225 148
autodecremento, 415 celda, 10 conectividad de salida (jan
autoincremento, 415 celda de memoria, 295 out) , 107
avance de datos, 441 celdas del banco de registros, conjunto, 72
axiomas, 72 290 conjunto de instrucciones, 406,
chip, 117 422
ciclo útil, 223 conmutatividad, 73
B cierre, 72 contador, 283
circuito integrado de aplicación contador
bajo activo, 223 específica (ASIC), 406 ascendente/descendente, 28 ~
462 Principios de diseño digital

contador asíncrono, 287 E guía de. modelado, 17


contador con puesta a uno, 286
contador de programa, 416 ecuación característica, 236
contadores BCD, 286 ecuaciones de excitación, 241 H
contadores en modo mixto, 290 ecuaciones del siguiente
control microprogramado, 324 estado, 291 herramientas de
conversor, 9 ejecución de una instrucción encaminamiento, 19
coste de fabricación, 15 ciclo de, 41 7 herramientas de ubicación, 19
cubo de orden n, 58, 132 elemento identidad, 72 hexadecimal sistema de
elemento inverso, 73 numeración, 3 1
encadenamiento, 376
entradas asíncronas, 238
equivalencia de
o comportamiento, 254
equivalencia de estados, 255 impücante primo, 134
decodificador de corrección de error, 57 implicante primo esencial, 90,
errores, 62 escala de integración grande, 134
decodifi cadores, 193 118 impücante primo generación de
decodificando, 62 escala de integración media, la, 144
demultiplexores, 193 11 8 impücaÍltes, 89
dependencia de los datos, 438 escala de integración pequeña, implicar, 89
desbordamiento, 44, 51 11 7 incompletamente especificado,
desbordamiento en coma especificación del producto, 12 147
flotante, 54 esquema, 17 instrucción, 407
descomposición de términos, establecimiento de los datos, instrucción de salto, 408
160 297 instrucciones de carga, 408
descripción del hardware estado de puesta a cero, 223 instrucciones de dos
lenguaje de, 17 estado del conjunto, 223-224 direcc iones, 410
desplazador en bloque, 209 evaluación del test, 20 instrucciones de movimiento,
desplazadores, 207 extensión del signo, 43 408
destinos de conexión, 370 expresiones booleanas, 79 instrucciones de tres
detención del cauce, 435 direcciones, 409
diagrama ASM, 340 instrucciones registro, 408
diagrama de bloques, 13 F integración a muy gran escala,
diagrama de fluj o, 5, 421 ll 8
diagrama de flujo de un final de lazo, 311
conjunto de instrucciones, fonna canónica, 87
417 fonna estándar, 89 L
diagrama de máquina frecuenc ia del reloj, 223
algorítmica de estados FSM con camino de datos, 333 latch D, 235
(AS M),338 FSM de Mealy, 248 latch O sincronizado, 227
di agramas ASM de FSM Moore, 248 latch sincronizado, 226
procesadores, 417 fuentes de conexión, 370 latch SR, 223
digital analógico (P/A), 9 funciones, 79 latch SR sincronizado, 227
dígito más significante, 31 latch T, 235
dígito menos significante, 3 1 literal, 79
dígitos decimales codificados G lógica, 114
en binario, 55 lógica diodo-transistor, III
dirección actual, 412 generación de mapas, 143 lógica transistor-transistor, 111
dirección efectiva, 412 generación de patrones de test,
disipación de potencia, 109 19
dispositivos de E/S, 406 generador, 183 M
distancia, 59 gráfico de controVdiagrama de
distancia de Hamming. 59 flujo, 389 mapa, 134
distributividad, 73 grafo de compatibilidad, 357 mapa de cinco variables, 139
Índice 463

mapa de cuatro variables, 139 p riesgo I estático , 170


mapa de Kamaugh, 134 riesgos dinámicos, 173
mapa de tres variables, 138 palabra del código, 54-55 ROMs programables, 2 10
mapas de seis variables, 140 palabras que nó pertenecen al rotadores, 206-207
margen de ruido, 106 código, 59 ruido, 106
matriz de conmutación, 124 paridad, 60
maxtenn, 85 partición de grafos algoritmo,
maxtenns O, 86 358 s
maxterms 1, 86 período del reloj , 222
medidas de testeabilidad, 15 peso, 30 secuenciaLde tipo Moore
memoria, 406 pila inserción-extracción, 302 circuito, 243
memoria de sólo lectura, 209 predicción de saltos, 445 secuencial tipo Mealy circuito,
memorias de acceso directo, primero en entrar primero en 243
293 salir, 306 secuenciales síncronos
memorias no volátiles, 296 principio de dualidad, 78 circuitos, 222
memorias volátiles, 295 prioridad en adyacencia segmentación, 380
método de tabulación, 150 estrategia, 260 selección del implicante
metodología de diseño, 12 proceso de diseño, 12 esencial, 144
microprogramación, 324 producto, 89 selector, 195
mintenn, 83 producto de sumas, 89 selector o multiplexor, 196
mintenns 0, 83 programa, 407 semiconductor metal-óxido,
mintenns indiferentes, 148 puerta cableada AND, 113 114
mintenns 1, 83 puerta lógica, 94 semisumadores, 285
modo de direccionamiento puertas complejas, 100 señal digital , 9
directo, 413 puertas estándar, 94 señales de puesta a cero (clear),
modo de direccionamiento puesta a uno (preset) asíncrona, 279
implicado, 4 13 279 sesgo, .52
modo de direccionamiento pulso de l reloj, 223 simulación, 18
indexado, 415 pulso espúreo, 170 síntesis de alto nivel, 18
modo de direccionamiento síntesis de arquitectura, 14
indirecto, 413 síntesis del sistema, 14
modo de direccionamiento R síntesis lógica, 16
inmediato, 413 síntesis secuencial, 14, 18
modo de direccionamiento RAM dinámica, 295 sistema posicional, 30
relativo, 414 RAM estática, 295 sistema digital, 9
módulos, II rango, 52 sistema de numeración octal, 3 1
MaS complementario, 114 realización del producto, 15 sistema en complemento base,
movilidad, 394 redes lógicas, 94 41
multicicJo, 377 registro, 278 sistema en signo y magnitud,
registro de carga paralela, 280 39
registro de control, 386 sistema lógico negativo, 104
registro de desplazamiento, 281 sistema lógico positivo, 104
N registro de estado, 386 subcubos de orden m, 58
registro instrucción, 4 16 subida, 112
nivel de registro, 11 reloj, 222 suma , 89
nivel de procesador, II representación estructural, 4 suma de productos, 89
nivel de transistor, 10 representación física, 5 sumador con acarreo en
nivel de puerta, 11 representación funcional , 4 cascada, 181
números en coma flotante, 51 restricción de tiempo. 395 sumador completo, 180
restricción de tiempo sumador/restador, 187
planificación con, 395
retardo de propagación, l 10
o retemporizac ión, 162 T
riesgo, 171
operador binario, 72 riesgo Oestático, 170 tabla característica , 236
464 Principios de diseño digital

tabla de estado-acción, 336 tiempo de inhabilitación de u


tabla de excitación, 236 salida, 279
tabla del siguiente estado, 242 tiempo de mantenimiento de unidad aritmético-lógica
tabla funcional , 191 direcciones, 298 (ALU), 189
teoremas, 76 tiempo de mantenimiento de unidad lógica, 188
ténnino OR, 79 los datos, 297 unidades, 11
términos AND, 79 tiempo de mantenimiento de la unidades multiciclo, 377
ténninos de la suma, 89 salida, 297
términos del producto, 89 tiempo de subida, 109
tiempo de bajada, 110 tiempo de vida, 353
tiempo de acceso a memoria, transistor bipolar, 111
297
tiempo de establecimiento de
transistor-resistor lógico, 111
transistores de bajada, 112
v •
direcciones, 297 traslación a la tecnología, 157 verificadores de equivalencia,
tiempo de habilitación de tri-estado, 113 18
salida, 279 truncaci6n del signo, 43 verificadores temporales. 18

Common questions

Con tecnología de IA

En un circuito secuencial tipo Moore, el estado siguiente se determina a partir del estado presente y las entradas actuales, mientras que la salida depende únicamente del estado actual. Para definir completamente el comportamiento del circuito, se generan ecuaciones de excilación que describen cómo las entradas afectan las transiciones de estado y se convierten en ecuaciones características del biestable correspondiente . Una máquina de estados finitos tipo Moore puede describirse mediante una tabla de estados-siguientes/salidas, en la que se mapea cada estado actual a un estado siguiente, y se asigna la salida correspondiente a cada estado . Así, el estado presente define la salida del circuito independientemente de las entradas .

La forma no estándar de una expresión booleana presenta ventajas sobre la forma canónica en la implementación debido a que generalmente requiere un menor número de operadores, lo que implica menos puertas y entradas por puerta, facilitando implementaciones más eficientes .

En un circuito secuencial tipo Moore, la salida depende únicamente del estado actual del sistema y no de las entradas. En contraste, en un circuito tipo Mealy, la salida depende tanto de las entradas actuales como del estado actual del circuito .

El diseño de un repertorio de instrucciones que minimice accesos a memoria mejoraría el rendimiento del procesador, ya que reduciría el tiempo de ejecución global de los programas al disminuir la cantidad de ciclos necesarios para completar las instrucciones, optimizando el uso de la memoria caché y mejorando la eficiencia del procesador .

Los tres criterios principales son la frecuencia de uso en diseños lógicos típicos, la ampliabilidad del operador a más de dos variables, y la sencillez de construcción definida por el número de transistores necesarios y el tiempo de propagación de la señal a través de la puerta .

La generalización de la ley de De Morgan para más de dos variables en el álgebra booleana se expresa como \((X_1 + X_2 + ... + X_n)' = X'_1 X'_2 5 X'_n\).

El número de campos de dirección en una instrucción impacta directamente en el tamaño de los programas y las prestaciones del procesador. Cuantas más direcciones tenga una instrucción, mayor será el tamaño de las instrucciones, haciendo los programas más cortos al requerir menos instrucciones para completar una tarea . Sin embargo, esto conlleva un mayor consumo de memoria por instrucción y más complejidad en la implementación del procesador, debido al aumento de modos de direccionamiento y el procesamiento de instrucciones más complejas . Las instrucciones con menos campos de dirección son más compactas pero requieren un mayor número de ellas para ejecutar una tarea, lo que puede aumentar la cantidad total de accesos a memoria, afectando potencialmente las prestaciones del procesador . Un diseño eficiente debe minimizar el número de accesos a memoria, combinando adecuadamente la longitud de las instrucciones y la cantidad de ellas que se ejecutan .

Para optimizar el uso compartido de buses en el diseño de caminos de datos, es crucial diseñar caminos de datos paralelos que permitan realizar múltiples operaciones simultáneamente a través del uso de múltiples buses, puertos y unidades funcionales. Incrementar el número de puertos en los bancos de registros y emplear varias unidades funcionales permite realizar operaciones en paralelo, lo que resulta en un mejor rendimiento . Además, el uso de latches de entrada y salida en las unidades funcionales ayuda a reducir el tiempo de uso de los buses al proporcionar un almacenamiento temporal para los operandos y resultados, incrementando así el tráfico de datos y optimizando el uso compartido de buses . Finalmente, es esencial que las unidades y su conectividad coincidan con el paralelismo del algoritmo ejecutado para maximizar la eficiencia del uso compartido de buses .

Las puertas de Inhibición e Implicación no se utilizan frecuentemente en el diseño lógico, a pesar de ser conmutativas, porque no son asociativas, lo que limita su ampliabilidad a más de dos variables. Esto las hace menos prácticas para su uso en bibliotecas de puertas que buscan construir redes lógicas de manera eficiente y con mínimo coste, al requerir más operadores o técnicas adicionales para extender su funcionalidad . En contraste, las puertas como NAND y NOR, que son más comunes, permiten implementaciones con menos transistores, resultando más baratas y rápidas, y son preferidas en las bibliotecas de diseño lógico .

Para minimizar el tamaño de la lógica de control en un diseño FSMD (Finite State Machine with Datapath), se pueden utilizar varias técnicas: 1. **Registro de Estado y Decodificador:** Una implementación clásica consiste en usar un registro de estado junto con un decodificador, que simplifica la lógica de estado siguiente y de salida a través de expresiones booleanas más sencillas, dado que cada estado está representado por una señal única. Esto ayuda a reducir la complejidad de las funciones de control necesarias para determinar el estado siguiente . 2. **Contadores:** En secuencias de estados incondicionales, donde cada estado tiene solo un sucesor, se puede reemplazar el registro de estado con un contador. Esto simplifica la lógica de control ya que los estados se pueden gestionar simplemente con operaciones de carga e incremento . 3. **Memoria de Control:** La lógica de estado siguiente también puede ser gestionada usando una memoria de control (ROM o PROM), donde el registro de estado actúa como registro de direcciones, minimizando así la necesidad de numerosas señales de entrada o condiciones adicionales. Este enfoque reduce el costo de implementación ya que la memoria de control se ve afectada por el número de entradas y señales adicionales . Estas técnicas en conjunto ayudan a simplificar la implementación y reducen el tamaño de la lógica de control en un diseño FSMD.

También podría gustarte