f. segura-quijano —— biblioteca de componentes

44
F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Upload: others

Post on 21-Jul-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

F. Segura-Quijano——

BIBLIOTECA DE COMPONENTES

Page 2: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

PUBLISHED BY UNIVERSIDAD DE LOS ANDES - COLOMBIA

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives4.0 International License.September 2, 2020

Page 3: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Contenido

1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1 Licenciamiento 7

1.2 Elementos de la biblioteca 7

1.3 Estructura directorio de trabajo 8

1.4 Nombre de señales 8

2 COMPONENTE COMBINACIONAL. Compuerta lógica AND. . . . . 11

2.1 Compuerta lógica: AND (1) 11

2.1.1 Descripción del componente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1.2 Símbolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1.3 Diagrama caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1.4 Funcionalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1.5 HDL: Caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.1.6 Definición vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.1.7 HDL: Vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.1.8 Diagrama caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1.9 HDL: Caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.1.10 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.1.11 Simulación temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.1.12 Diagramas QUARTUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.1.13 Resultados y lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2 Compuerta lógica: AND (2) 18

2.2.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Page 4: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

3 COMPONENTE COMBINACIONAL. Sumador de 1 bit o FULLADDER.21

3.1 Sumador de 1 bit: FULLADDER (1) 213.1.1 Descripción del componente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.1.2 Símbolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1.3 Diagrama caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1.4 Funcionalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1.5 HDL: Caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.6 Definición vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.7 HDL: Vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.8 Diagrama caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.9 HDL: Caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.10 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.11 Simulación temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.12 Diagramas QUARTUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.13 Resultados y lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2 Sumador de 1 bit: FULLADDER (2) 273.2.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.3 Sumador de 1 bit: FULLADDER (3) 283.3.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.4 Sumador de 1 bit: FULLADDER (4) 293.4.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.5 Sumador de 1 bit: FULLADDER (5) 313.5.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4 COMPONENTE COMBINACIONAL: Multiplexor 4 a 1. . . . . . . . . . . 33

4.1 MUX41 (1) 334.1.1 Descripción del componente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.1.2 Símbolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.3 Diagrama caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.4 Funcionalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.5 HDL: Caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.1.6 Definición vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.1.7 HDL: Vectores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.1.8 Diagrama caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.1.9 HDL: Caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.1.10 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.1.11 Simulación temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.1.12 Diagramas QUARTUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.1.13 Resultados y lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2 MUX41 (2) 384.2.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.3 MUX41 (3) 394.3.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.4 MUX41 (4) 404.4.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Page 5: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

5

4.5 MUX41 (5) 404.5.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.6 MUX41 (6) 414.6.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.7 MUX41 (7) 424.7.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.8 MUX41 (8) 434.8.1 HDL: bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

F.Segura-Quijano y C.Quintero Peña

Page 6: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES
Page 7: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

LicenciamientoElementos de la bibliotecaEstructura directorio de trabajoNombre de señales

1. Introducción.

ALBERT EINSTEIN

La formulación de un problema es másimportante que la solución.

En este capítulo se presentan algunas generalidades del lenguaje y de la metodología detrabajo.

1.1 LicenciamientoTodos los códigos desarrollados en Verilog para soportar esta librería de componentes están bajolicencia:

1 / * ######################################################################2 / / # G0B1T : HDL EXAMPLES. 2018 .3 / /######################################################################4 / / # C o p y r i g h t (C) 2018 . F . E . Segura−Qui j ano ( FES ) f s e g u r a @ u n i a n d e s . edu . co5 / / #6 / / # Th i s program i s f r e e s o f t w a r e : you can r e d i s t r i b u t e i t and / o r modify7 / / # i t unde r t h e t e r m s of t h e GNU G e n e r a l P u b l i c L i c e n s e as p u b l i s h e d by8 / / # t h e F ree S o f t w a r e Founda t ion , v e r s i o n 3 of t h e L i c e n s e .9 / / #

10 / / # Th i s program i s d i s t r i b u t e d i n t h e hope t h a t i t w i l l be u s e f u l ,11 / / # b u t WITHOUT ANY WARRANTY; w i t h o u t even t h e i m p l i e d w a r r a n t y o f12 / / # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See t h e13 / / # GNU G e n e r a l P u b l i c L i c e n s e f o r more d e t a i l s .14 / / #15 / / # You s h o u l d have r e c e i v e d a copy of t h e GNU G e n e r a l P u b l i c L i c e n s e16 / / # a l o n g wi th t h i s program . I f not , s e e < h t t p : / / www. gnu . o rg / l i c e n s e s / >17 / /#################################################################### * /

Todo el contenido de este trabajo está bajo licencia:

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives4.0 International License.

1.2 Elementos de la bibliotecaPara la presentación de cada componente que conforma esta biblioteca se utiliza una plantillaque permite tener una documentación completa y estructurada de cada uno de ellos. El objetivo

Page 8: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 1. Introducción.

final de esta biblioteca de componentes es identificar componentes genéricos que puedan serutilizados mas adelante en proyectos mas complejos. Los elementos que conforman la plantillason:

• Descripción del componente. Presenta restricciones, especificaciones y búsqueda eidentificación de contextos en donde se utiliza dicho componente.

• Símbolo. Presenta un símbolo para representar el componente y se basa en símbolos denaturaleza similar presentados en la literatura de componentes electrónicos.

• Diagrama de caja negra. Presenta un diagrama con todas las señales de entrada y salidacon sus correspondientes nombres estructurados (In/Out) y tamaños (bit/bus).

• Funcionalidad. Presenta una ecuación y/o Tabla de Verdad y/o macro-algoritmo segúnfuncionalidad del componente.

• HDL: Caja negra. Presenta códigos fuente.• Definición de vectores de prueba. Presenta una estrategia explícita y claramente definida

para la selección de vectores de prueba. Estos vectores permiten comprobar totalmente lafuncionalidad del componente.

• HDL: Vectores de prueba. Presenta códigos fuente.• Diagrama caja blanca. Presenta un diagrama de sub-componentes, señales e interconex-

iones.• HDL: Caja blanca. Presenta códigos fuente.• HDL: bloques. Presenta códigos fuente.• Simulación temporal. Presenta resultados de simulación para el componente.• Diagramas QUARTUS. Presenta diagramas obtenidos en la herramienta seleccionada:

Quartus.• Resultados y lecciones aprendidas. Presenta resultados y/o lecciones aprendidas para el

componente correspondiente.

1.3 Estructura directorio de trabajoPara la organización de los componentes se han creado cuatro directorios de trabajo así:

• 0COMBINATIONALGATES: Directorio que contiene componentes básicos basados encompuertas lógicas (GateAND, GATES).

• 0COMBINATIONALBLOCKS: Directorio que contiene componentes combinacionales(FULLADDER, ADDER, MUX, EUCLIDEANDIST).

• 0SEQUENTIALBLOCKS: Directorio que contiene componentes secuenciales (RegGEN-ERAL, RegSHIFTER, RegSHIFTERwPARITY).

• 0SYSTEMS: Directorio que contiene componentes o sistemas mas complejos (LEAPYEAR,MULTIPLIER, PARALLEL2SERIAL, STONEPAPERSCISSORS,WALKINGMETER).

Cada directorio de trabajo internamente tiene una estructura de la siguiente manera:• ./simulation/modelsim/TB_SYSTEM.vt: Archivo Verilog con vectores de prueba.• ./simulation/modelsim/TB_SYSTEM.do: Script para visualización de señales en el simu-

lador.• ./BB_SYSTEM.v: Archivo Verilog que contiene la caja negra del componente.• ./rtl/CC_ADDER.v: Archivo Verilog, CC representa que es un bloque combinacional.• ./rtl/SC_STATEMACHINE.v: Archivo Verilog, SC representa que es un bloque secuencial.

1.4 Nombre de señalesEn general todos los componentes buscan tener una estructura similar para nombrar sus señales,de manera que la identificación de posibles errores se hace más sencilla. Para señales donde se

F.Segura-Quijano y C.Quintero Peña

Page 9: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

9

pueda identificar si su activación es activa alta o baja se propone usar el siguiente sufijo: InLoW,InHigh, OutLow, OutHigh. (In corresponde a entradas, Out a salidas).

Algunos ejemplos de como se nombran señales se presentan a continuación:

Señales de control.• TB_SYSTEM_RESET_InHigh: Señal de vector de prueba (TB: test bench), entrada,

activa alta.• TB_SYSTEM_som_InLow: Señal de vector de prueba, entrada, activa baja.

Buses de datos.• CC_BLOQUE_nombreseñal_OutBUS• CC_BLOQUE_nombreseñal_InBUS

Señales generales con buses.• SC_BLOQUE_nombreseñal_OutBUS• CC_BLOQUE_nombreseñal_InBUS

Señales internas.• CC_ADDER_data_BUS_wire

F.Segura-Quijano y C.Quintero Peña

Page 10: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES
Page 11: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Compuerta lógica: AND (1)Descripción del componenteSímboloDiagrama caja negraFuncionalidadHDL: Caja negraDefinición vectores de pruebaHDL: Vectores de pruebaDiagrama caja blancaHDL: Caja blancaHDL: bloquesSimulación temporalDiagramas QUARTUSResultados y lecciones aprendidas

Compuerta lógica: AND (2)HDL: bloques

2. COMPONENTE COMBINACIONAL. Compuerta lógica AND.

HENRY FORD

Si le hubiera preguntado a la gente lo queellos querían, ellos habrían dicho caballos

más rápidos.

En este capítulo se presenta la implementación en lenguaje HDL de la compuerta lógicaAND. Se presentan diferentes formas de implementación ya sea a partir de la ecuación lógica o apartir de una implementación funcional usando elementos del lenguaje como sentencias if, else.

2.1 Compuerta lógica: AND (1)

A continuación se presenta el componente combinacional Compuerta Lógica AND mostrandosu descripción con ecuación lógica.

2.1.1 Descripción del componentePRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante identifica las especificaciones y restricciones (enunciadas y no enunciadas delcomponente) para comprender el requerimiento solicitado.ENTREGABLES: Contiene máximo dos párrafos (claros, precisos y coherentes) que explican: restricciones, especifica-ciones y búsqueda e identificación de contextos en donde se utiliza dicho componente.

a. La descripción del componente está redactada en palabras propias de los estudiantes, organizada lógica y clara-mente.

b. Las especificaciones y restricciones responden totalmente al componente solicitado, demostrando originalidad yaportes propios.

c. La búsqueda e identificación de características similares de proyectos base utilizados como referencia es clarajustificando su utilidad para el desarrollo del proyecto.

d. El lenguaje disciplinar es preciso y adecuado, las frases son gramaticalmente correctas y no hay errores ortográ-ficos.

La compuerta lógica AND es uno de los elementos más simples de la electrónica digital.Una compuerta AND de 2 entradas toma a la salida un valor de uno (1-lógico, nivel alto) cuandolas dos entradas están en valor de uno. Así mismo, las compuertas AND pueden tener más dedos entradas en donde la salida toma un valor de 1-lógico si todas las entradas tiene valor de

Page 12: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 2. COMPONENTE COMBINACIONAL. Compuerta lógica AND.

1-lógico en cualquier otro caso la salida toma un valor de 0-lógico.

Una compuerta AND así como todas las compuertas básicas forman parte de cualquier cir-cuito digital, sin embargo, una compuerta AND no es un componente funcionalmente completo,lo que quiere decir que solo con compuertas AND no se puede construir toda la electrónicadigital, porque con la compuerta AND no se pueden implementar las demás compuertas.

2.1.2 SímboloPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de relacionar el componente a diseñar con un símbolo genérico parapoder usarlo en un diagrama arquitectural.ENTREGABLES: Diagrama correcto y completo.

a. El símbolo propuesto para representar el componente se basa en símbolos de naturaleza similar presentados en laliteratura de componentes electrónicos.

CC_GateAND_z_OutCC_GateAND_a_In

CC_GateAND_b_In

2.1.3 Diagrama caja negraPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de realizar un diagrama de caja negra para identificar señales deentrada/salida del producto.ENTREGABLES: Diagrama correcto y completo.

a. El diagrama de caja negra muestra todas las señales de entrada y salida con sus correspondientes nombres estruc-turados (In/Out) y tamaños (bit/bus).

b. El diagrama de caja negra relaciona dicho componente con el diagrama de caracterización (test-bench).

2.1.4 FuncionalidadPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de proponer macroalgoritmos descomponiendo el problema en unconjunto de pasos para detallar la funcionalidad esperada del componente.ENTREGABLES: Ecuación / Tabla de Verdad / Macro-algoritmo correcto y completo según funcionalidad del compo-nente.

a. El macro-algoritmo de solución describe correctamente la funcionalidad del producto y se representa adecuada-mente con una explicación detallada en donde cada paso es menos complejo que el producto solicitado.

b. En cada paso del macro-algoritmo se detalla correctamente un pseudo-algoritmo que describe una posible imple-mentación.

F.Segura-Quijano y C.Quintero Peña

Page 13: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

13

, Ecuación característica

CC_GateAND_z_Out <= CC_GateAND_a_In and CC_GateAND_a_In;

, Tabla de verdad

INPUTS OUTPUTSCC_GateAND_a_In CC_GateAND_b_In CC_GateAND_z_Out

0 0 00 1 01 0 01 1 1

, Macro algoritmo

Algorithm 1: Compuerta lógica ANDData: CC_GateAND_a_In, CC_GateAND_b_In (0, 1)Result: CC_GateAND_z_Out (0, 1)CC_GateAND_z_Out = CC_GateAND_a_In and CC_GateAND_b_In

2.1.5 HDL: Caja negraPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de describir lo solicitado en lenguajes de HDL para identificar loselementos básicos de la herramienta de diseño y del lenguaje.ENTREGABLES: Códigos fuente.

a. La descripción en lenguajes hardware (complejidad del código, diferencia combinacional y secuencial) es cor-recta y corresponde al producto solicitado.

b. Se incluye documentación completa para estructurar y/o entender el código claramente (indentación y sintaxis delos lenguajes), nombrando correcta y adecuadamente todas las señales, variables y demás elementos relevantes.

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module BB_SYSTEM (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 BB_SYSTEM_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 BB_SYSTEM_a_In ,

F.Segura-Quijano y C.Quintero Peña

Page 14: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 2. COMPONENTE COMBINACIONAL. Compuerta lógica AND.

11 BB_SYSTEM_b_In12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================16 / / =======================================================17 / / PORT d e c l a r a t i o n s18 / / =======================================================19 o u t p u t BB_SYSTEM_z_Out ;20 i n p u t BB_SYSTEM_a_In ;21 i n p u t BB_SYSTEM_b_In ;22 / / =======================================================Q/23 / /

Archivo 2.1: BB_SYSTEM.v

2.1.6 Definición vectores de pruebaPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de proponer una estrategia de identificación de vectores de pruebapara validar la funcionalidad del componente.ENTREGABLES: Estrategias claras de selección. Explicación clara de funcionamiento.

a. Los vectores de prueba se seleccionan a partir de una estrategia explícita y claramente definida expresada en unpárrafo. Estos vectores permiten comprobar totalmente la funcionalidad del componente. Se realizan simula-ciones funcionales que validan esos vectores de prueba.

En este caso como son pocas entradas se debe validar toda la tabla de verdad. Los vectoresde prueba corresponden entonces a dichas combinaciones así:

INPUTS OUTPUTSCC_GateAND_a_In CC_GateAND_b_In CC_GateAND_z_Out

0 0 ?0 1 ?1 0 ?1 1 ?

2.1.7 HDL: Vectores de pruebaPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de describir lo solicitado en lenguajes de HDL para identificar loselementos básicos de la herramienta de diseño y del lenguaje.ENTREGABLES: Códigos fuente.

a. La descripción en lenguajes hardware (complejidad del código, diferencia combinacional y secuencial) es cor-recta y corresponde al producto solicitado.

b. Se incluye documentación completa para estructurar y/o entender el código claramente (indentación y sintaxis delos lenguajes), nombrando correcta y adecuadamente todas las señales, variables y demás elementos relevantes.

3 ‘ t i m e s c a l e 1 ns / 1 ns4 module TB_SYSTEM ( ) ;5 / / c o n s t a n t s6 / / ============================================7 / / P a r a m e t e r ( may d i f f e r f o r p h y s i c a l s y n t h e s i s )8 / / ============================================9 / / g e n e r a l p u r p o s e r e g i s t e r s

10 r e g eachvec ;

12 / / t e s t v e c t o r i n p u t r e g i s t e r s13 / / ============================================14 / / INTERNAL WIRE AND REG DECLARATIONS15 / / ============================================16 / / w i r e s (OUTPUTS)17 wi r e TB_SYSTEM_z_Out ;18 / / r e g ( INPUTS )19 r e g TB_SYSTEM_a_In ;20 r e g TB_SYSTEM_b_In ;2122 / / a s s i g n s t a t e m e n t s ( i f any )23 BB_SYSTEM BB_SYSTEM_u0 (24 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s

F.Segura-Quijano y C.Quintero Peña

Page 15: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

15

25 . BB_SYSTEM_z_Out ( TB_SYSTEM_z_Out ) ,26 . BB_SYSTEM_a_In ( TB_SYSTEM_a_In ) ,27 . BB_SYSTEM_b_In ( TB_SYSTEM_b_In )28 ) ;29 i n i t i a l30 b e g i n31 / / code t h a t e x e c u t e s on ly once32 / / i n s e r t code h e r e −−> b e g i n

34 / / −−> end35 $ d i s p l a y ( " Running t e s t b e n c h " ) ;36 end37 a lways38 / / o p t i o n a l s e n s i t i v i t y l i s t39 / / @( e v e n t 1 o r e v e n t 2 o r . . . . e v e n t n )

41 b e g i n42 / / code e x e c u t e s f o r e v e r y e v e n t on s e n s i t i v i t y l i s t43 / / i n s e r t code h e r e −−> b e g i n44 #0 TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;45 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;46 #100000 TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;47 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;48 #100000 TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;49 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;50 #100000 TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;51 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;52 #100000 TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;53 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;54 #100000 TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;55 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;56 #100000 TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;57 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;58 #100000 TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;59 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;60 #100000 TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;61 $ d i s p l a y ( " Time : %2d TB_SYSTEM_a_In : %2d , TB_SYSTEM_b_In : %2d , TB_SYSTEM_z_Out : %2d " , $t ime , TB_SYSTEM_a_In ,

TB_SYSTEM_b_In , TB_SYSTEM_z_Out ) ;62 @eachvec ;63 $ f i n i s h ;64 / / −−> end65 end66 endmodule

Archivo 2.2: TB_SYSTEM.vt

2.1.8 Diagrama caja blanca

PRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de realizar un diagrama con sub-componentes, señales e interconex-iones para mostrar un diseño estructurado que permita llegar a una implementación del componente.ENTREGABLES: Diagrama de sub-componentes, señales e interconexiones, descripción de componente o componentea componente.

a. El diagrama de caja blanca es correcto y corresponde con el componente solicitado.b. Se muestran todas las señales de entrada/salida e internas con sus correspondientes nombres estructurados (In-

/Out) y tamaños (Bit/Bus) para todos los componentes internos del sistema.c. El diagrama de caja blanca corresponde a una solución eficiente en cuanto a recursos, número de bloques y

elementos y algoritmo de solución. Los componentes internos son menos complejos que los de mayor jerarquía.d. Se presenta una descripción (qué es y cómo funciona) de cada uno de los componentes constitutivos del compo-

nente solicitado, describiendo sus señales.

En este caso el diagrama corresponde solamente a la compuerta.

F.Segura-Quijano y C.Quintero Peña

Page 16: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 2. COMPONENTE COMBINACIONAL. Compuerta lógica AND.

2.1.9 HDL: Caja blancaPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de describir lo solicitado en lenguajes de HDL para identificar loselementos básicos de la herramienta de diseño y del lenguaje.ENTREGABLES: Códigos fuente.

a. La descripción en lenguajes hardware (complejidad del código, diferencia combinacional y secuencial) es cor-recta y corresponde al producto solicitado.

b. Se incluye documentación completa para estructurar y/o entender el código claramente (indentación y sintaxis delos lenguajes), nombrando correcta y adecuadamente todas las señales, variables y demás elementos relevantes.

3 / /

5 / / /A=======================================================6 / / REG/ WIRE d e c l a r a t i o n s7 / / =======================================================

9 / / =======================================================10 / / S t r u c t u r a l co d i ng11 / / =======================================================12 CC_GateAND CC_GateAND_u0 (13 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s14 . CC_GateAND_z_Out ( BB_SYSTEM_z_Out ) ,15 . CC_GateAND_a_In ( BB_SYSTEM_a_In ) ,16 . CC_GateAND_b_In ( BB_SYSTEM_b_In )17 ) ;18 endmodule19 / / =======================================================A/

Archivo 2.3: BB_SYSTEM.v

2.1.10 HDL: bloquesPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de describir lo solicitado en lenguajes de HDL para identificar loselementos básicos de la herramienta de diseño y del lenguaje.ENTREGABLES: Códigos fuente.

a. La descripción en lenguajes hardware (complejidad del código, diferencia combinacional y secuencial) es cor-recta y corresponde al producto solicitado.

b. Se incluye documentación completa para estructurar y/o entender el código claramente (indentación y sintaxis delos lenguajes), nombrando correcta y adecuadamente todas las señales, variables y demás elementos relevantes.

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_GateAND (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_GateAND_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_GateAND_a_In ,11 CC_GateAND_b_In12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s

F.Segura-Quijano y C.Quintero Peña

Page 17: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

17

15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t CC_GateAND_z_Out ;21 i n p u t CC_GateAND_a_In ;22 i n p u t CC_GateAND_b_In ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a s s i g n CC_GateAND_z_Out = CC_GateAND_a_In & CC_GateAND_b_In ;

33 endmodule34 / / =======================================================A/

Archivo 2.4: CC_GateAND.v

2.1.11 Simulación temporal

PRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de relacionar la funcionalidad según las especificaciones propuestascon diversos tipos de pruebas para comprobar el funcionamiento del componente según lo solicitado.ENTREGABLES: Diagramas temporales donde se demuestre funcionalidad según las especificaciones propuestas y endiversos tipos de pruebas.

a. Se presentan resultados de simulación para el producto solicitado, explicando tres o más casos de funcionamientosobre el diagrama de simulación. La simulación contiene marcadores en la gráfica que señalan situaciones es-pecíficas del producto.

A continuación se presenta un diagrama de lo que se espera obtener del sistema. En estecaso que es sencillo se puede hacer un diagrama de tiempos inicial para ver el comportamientoesperado.

t0 t1 t2 t3 t4 t5 t6 t7 t8 t9

CC_GateAND_a_In

CC_GateAND_b_In

CC_GateAND_z_Out

Por otro lado, se presenta el diagrama de tiempos obtenido en la herramienta Quartus deAltera. En este caso podemos ver como coincide con lo esperado. Es muy importante resaltar loscasos de simulación, marcando los vectores de prueba en los resultados de simulación.

se repite0 1 2 3

F.Segura-Quijano y C.Quintero Peña

Page 18: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 2. COMPONENTE COMBINACIONAL. Compuerta lógica AND.

2.1.12 Diagramas QUARTUSPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de identificar elementos de la Herramienta Quartus para comprendermejor el proceso de diseño.ENTREGABLES: Diagramas obtenidos en la herramienta.

a. Se presentan diagramas obtenidos por QUARTUS.

CC_GateAND:CC_GateAND_u0

CC_GateAND_a_In

CC_GateAND_b_InCC_GateAND_z_Out

BB_SYSTEM_b_InBB_SYSTEM_z_Out

CC_GateAND_z_Out

BB_SYSTEM_a_In

2.1.13 Resultados y lecciones aprendidasPRODUCTO DE CALIDAD:

OBJETIVO PEDAGÓGICO: El estudiante es capaz de discutir el proceso de diseño para evidenciar problemas, mejorasdel componente diseñado.ENTREGABLES: Contiene máximo dos párrafos (claros, precisos y coherentes).

a. Se proponen nuevas especificaciones y aplicaciones del trabajo realizado (ejemplo: mayores niveles de compleji-dad y usos en otros contextos).

b. En caso de no lograr el item de funcionamiento glogal; identifica y argumenta las razones principales del nofuncionamiento.

c. El lenguaje disciplinar es preciso y adecuado, haciendo uso de frases gramaticalmente correctas, sin erroresortográficos.

La compuerta lógica AND es uno de los elementos más simples de la electrónica digitaly se pude implementar a partir de su ecuación lógica. Además, se pueden realizar unadescripción a nivel funcional como se va presentar en la siguiente sección.

2.2 Compuerta lógica: AND (2)

A continuación se presenta el componente combinacional Compuerta Lógica AND mostrandosu descripción de manera funcional. Solo se muestra la descripción del bloque que implementala compuerta, dado que toda la demás documentación se mantiene igual. Nótese como se usansentencias if/else para hacer la descripción.

Funcionalidad

, Macro algoritmo

Algorithm 2: Compuerta lógica ANDData: CC_GateAND_a_In, CC_GateAND_b_In (0, 1)Result: CC_GateAND_z_Out (0, 1)if (CC_GateAND_a_In == 1) && (CC_GateAND_b_In == 1) then

CC_GateAND_z_Out = 1else

CC_GateAND_z_Out = 0end

F.Segura-Quijano y C.Quintero Peña

Page 19: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

19

2.2.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_GateAND (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_GateAND_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_GateAND_a_In ,11 CC_GateAND_b_In12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_GateAND_z_Out ;21 i n p u t CC_GateAND_a_In ;22 i n p u t CC_GateAND_b_In ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( * )32 b e g i n33 i f ( ( CC_GateAND_a_In == 1 ’ b1 ) && ( CC_GateAND_b_In == 1 ’ b1 ) )34 CC_GateAND_z_Out = 1 ’ b1 ;35 e l s e36 CC_GateAND_z_Out = 1 ’ b0 ;37 end38 endmodule39 / / =======================================================A/

Archivo 2.5: CC_GateAND.v

F.Segura-Quijano y C.Quintero Peña

Page 20: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES
Page 21: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Sumador de 1 bit: FULLADDER (1)Descripción del componenteSímboloDiagrama caja negraFuncionalidadHDL: Caja negraDefinición vectores de pruebaHDL: Vectores de pruebaDiagrama caja blancaHDL: Caja blancaHDL: bloquesSimulación temporalDiagramas QUARTUSResultados y lecciones aprendidas

Sumador de 1 bit: FULLADDER (2)HDL: bloques

Sumador de 1 bit: FULLADDER (3)HDL: bloques

Sumador de 1 bit: FULLADDER (4)HDL: bloques

Sumador de 1 bit: FULLADDER (5)HDL: bloques

3. COMPONENTE COMBINACIONAL. Sumador de 1 bit o FULLADDER.

THOMAS ALVA EDISON

No fracasé, sólo descubrí 999 maneras decómo no hacer una bombilla.

En este capítulo se presentan el diseño de un sumador completo de un bit o llamado FUL-LADDER. Se plantean diferentes tipos de descripción para poder hacer una comparación de laspotencialidades del lenguaje.

3.1 Sumador de 1 bit: FULLADDER (1)

A continuación se presenta el componente combinacional Sumador de 1 bit: FULLADDERmostrando una primera descripción a partir de las ecuaciones simplificadas.

3.1.1 Descripción del componente

Un sumador de un bit o FULLADDER es un circuito digital que realiza la suma de números.Este componente se utiliza en todos los procesadores que utilizan sumadores de varios bits enlas unidades aritmético lógicas. También se puede utilizar en otras partes del procesador pararealizar cálculo de direcciones, índices de tablas, incrementos, decrementos entre otros.

Un sumador completo o FULLADDER suma números binarios con las cantidades de acarreo,en donde el acarreo corresponde de una etapa previa de suma Para implemetar un sumadorde 8 bits por ejemplo, podemos colocar en cascada 8 sumadores completos o FULLADDERdebidamente conectados.

Page 22: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

3.1.2 SímboloCC_FULLADDER_a_In CC_FULLADDER_b_In

CC_FULLADDER_cin_In CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

3.1.3 Diagrama caja negra

3.1.4 Funcionalidad

, Ecuación característica

CC_FULLADDER_cout_Out,CC_FULLADDER_sum_Out <= CC_FULLADDER_cin_In +CC_FULLADDER_a_In + CC_FULLADDER_b_In;

, Tabla de verdad

INPUTS OUTPUTSCC_FULLADDER_cin_In CC_FULLADDER_a_In CC_FULLADDER_b_In CC_FULLADDER_cout_Out CC_FULLADDER_sum_Out

0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1

, Macro algoritmo

Algorithm 3: FULLADDERData: CC_FULLADDER_cin_In, CC_FULLADDER_a_In, CC_FULLADDER_b_In (0, 1)Result: CC_FULLADDER_cout_Out, CC_FULLADDER_sum_Out (0, 1)CC_FULLADDER_sum_Out = CC_FULLADDER_a_In xor CC_FULLADDER_b_In xor CC_FULLADDER_cin_In;CC_FULLADDER_cout_Out = (CC_FULLADDER_cin_In and CC_FULLADDER_a_In) or

(CC_FULLADDER_cin_In and CC_FULLADDER_b_In) or (CC_FULLADDER_a_In andCC_FULLADDER_b_In);

F.Segura-Quijano y C.Quintero Peña

Page 23: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

23

3.1.5 HDL: Caja negra

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module BB_SYSTEM (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 BB_SYSTEM_cout_Out ,9 BB_SYSTEM_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 BB_SYSTEM_a_In ,12 BB_SYSTEM_b_In ,13 BB_SYSTEM_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s17 / / =======================================================18 / / =======================================================19 / / PORT d e c l a r a t i o n s20 / / =======================================================21 o u t p u t BB_SYSTEM_cout_Out ;22 o u t p u t BB_SYSTEM_sum_Out ;23 i n p u t BB_SYSTEM_a_In ;24 i n p u t BB_SYSTEM_b_In ;25 i n p u t BB_SYSTEM_cin_In ;26 / / =======================================================Q/27 / /

Archivo 3.1: BB_SYSTEM.v

3.1.6 Definición vectores de pruebaEn este caso como son pocas entradas se debe validar toda la tabla de verdad. Los vectores deprueba corresponden entonces a dichas combinaciones así:

INPUTS OUTPUTSCC_FULLADDER_cin_In CC_FULLADDER_a_In CC_FULLADDER_b_In CC_FULLADDER_cout_Out CC_FULLADDER_sum_Out

0 0 0 ? ?0 0 1 ? ?0 1 0 ? ?0 1 1 ? ?1 0 0 ? ?1 0 1 ? ?1 1 0 ? ?1 1 1 ? ?

3.1.7 HDL: Vectores de prueba

3 ‘ t i m e s c a l e 1 ns / 1 ns4 module TB_SYSTEM ( ) ;5 / / c o n s t a n t s6 / / ============================================7 / / P a r a m e t e r ( may d i f f e r f o r p h y s i c a l s y n t h e s i s )8 / / ============================================9 / / g e n e r a l p u r p o s e r e g i s t e r s

10 r e g eachvec ;

F.Segura-Quijano y C.Quintero Peña

Page 24: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

12 / / t e s t v e c t o r i n p u t r e g i s t e r s13 / / ============================================14 / / INTERNAL WIRE AND REG DECLARATIONS15 / / ============================================16 / / w i r e s (OUTPUTS)17 wi r e TB_SYSTEM_cout_Out ;18 wi r e TB_SYSTEM_sum_Out ;19 / / r e g ( INPUTS )20 r e g TB_SYSTEM_a_In ;21 r e g TB_SYSTEM_b_In ;22 r e g ;2324 / / a s s i g n s t a t e m e n t s ( i f any )25 BB_SYSTEM BB_SYSTEM_u0 (26 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s27 . BB_SYSTEM_cout_Out ( TB_SYSTEM_cout_Out ) ,28 . BB_SYSTEM_sum_Out ( TB_SYSTEM_sum_Out ) ,29 . BB_SYSTEM_a_In ( TB_SYSTEM_a_In ) ,30 . BB_SYSTEM_b_In ( TB_SYSTEM_b_In ) ,31 . BB_SYSTEM_cin_In ( TB_SYSTEM_cin_In )32 ) ;33 i n i t i a l34 b e g i n35 / / code t h a t e x e c u t e s on ly once36 / / i n s e r t code h e r e −−> b e g i n

38 / / −−> end39 $ d i s p l a y ( " Running t e s t b e n c h " ) ;40 end41 a lways42 / / o p t i o n a l s e n s i t i v i t y l i s t43 / / @( e v e n t 1 o r e v e n t 2 o r . . . . e v e n t n )

45 b e g i n46 / / code e x e c u t e s f o r e v e r y e v e n t on s e n s i t i v i t y l i s t47 / / i n s e r t code h e r e −−> b e g i n48 #10000 $ m o n i t o r ( " TB_SYSTEM_cin_In = %b " , TB_SYSTEM_cin_In , " | TB_SYSTEM_a_In = " , TB_SYSTEM_a_In , " |

TB_SYSTEM_b_In = " , TB_SYSTEM_b_In , " | TB_SYSTEM_cout_Out = " , TB_SYSTEM_cout_Out , " | TB_SYSTEM_sum_Out= " , TB_SYSTEM_sum_Out ) ;

49 #0 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;50 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;51 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;52 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;53 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;54 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;55 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;56 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;57 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;58 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;59 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;60 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;61 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;62 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 1 ;63 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 0 ;64 #20000 TB_SYSTEM_cin_In <= 1 ; TB_SYSTEM_a_In <= 1 ; TB_SYSTEM_b_In <= 1 ;65 #20000 TB_SYSTEM_cin_In <= 0 ; TB_SYSTEM_a_In <= 0 ; TB_SYSTEM_b_In <= 0 ;66 @eachvec ;67 $ f i n i s h ;68 / / −−> end69 end70 endmodule

Archivo 3.2: TB_SYSTEM.vt

3.1.8 Diagrama caja blancaInicialmente se puede dibujar los bloques manteniendo su jerarquía.

Posteriormente si entramos en la implementación funcional del sumador de 1 bit. En este

F.Segura-Quijano y C.Quintero Peña

Page 25: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

25

caso el diagrama corresponde a las ecuaciones simplificadas para las salidas del sumador de unbit.

CC_FULLADDER_a_In

CC_FULLADDER_cout_Out

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_sum_Out

3.1.9 HDL: Caja blanca

3 / /

5 / / /A=======================================================6 / / REG/ WIRE d e c l a r a t i o n s7 / / =======================================================

9 / / =======================================================10 / / S t r u c t u r a l co d i ng11 / / =======================================================12 CC_FULLADDER CC_FULLADDER_u0 (13 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s14 . CC_FULLADDER_cout_Out ( BB_SYSTEM_cout_Out ) ,15 . CC_FULLADDER_sum_Out ( BB_SYSTEM_sum_Out ) ,16 . CC_FULLADDER_a_In ( BB_SYSTEM_a_In ) ,17 . CC_FULLADDER_b_In ( BB_SYSTEM_b_In ) ,18 . CC_FULLADDER_cin_In ( BB_SYSTEM_cin_In )19 ) ;20 endmodule21 / / =======================================================A/

Archivo 3.3: BB_SYSTEM.v

3.1.10 HDL: bloquesLos bloques del sistema son:

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_FULLADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_FULLADDER_cout_Out ,9 CC_FULLADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_FULLADDER_a_In ,12 CC_FULLADDER_b_In ,13 CC_FULLADDER_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s17 / / =======================================================

19 / / =======================================================20 / / PORT d e c l a r a t i o n s21 / / =======================================================22 o u t p u t CC_FULLADDER_cout_Out ;23 o u t p u t CC_FULLADDER_sum_Out ;24 i n p u t CC_FULLADDER_a_In ;25 i n p u t CC_FULLADDER_b_In ;26 i n p u t CC_FULLADDER_cin_In ;27 / / =======================================================Q/28 / / /A=======================================================29 / / REG/ WIRE d e c l a r a t i o n s30 / / =======================================================

F.Segura-Quijano y C.Quintero Peña

Page 26: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

32 / / =======================================================33 / / S t r u c t u r a l co d i ng34 / / =======================================================35 / / SIMPLIFIED EQUATIONS36 a s s i g n CC_FULLADDER_sum_Out = CC_FULLADDER_a_In ^ CC_FULLADDER_b_In ^ CC_FULLADDER_cin_In ;37 a s s i g n CC_FULLADDER_cout_Out = ( CC_FULLADDER_cin_In & CC_FULLADDER_a_In ) | ( CC_FULLADDER_cin_In & CC_FULLADDER_b_In

) | ( CC_FULLADDER_a_In & CC_FULLADDER_b_In ) ;38 endmodule39 / / =======================================================A/

Archivo 3.4: CC_FULLADDER.v

3.1.11 Simulación temporalt0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

Por otro lado, se presenta el diagrama de tiempos obtenido en la herramienta Quartus deAltera. En este caso podemos ver como coincide con lo esperado. Es muy importante resaltar loscasos de simulación, marcando los vectores de prueba en los resultados de simulación.

se repitetodas las posibles combinaciones

3.1.12 Diagramas QUARTUSCC_FULLADDER:CC_FULLADDER_u0

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

BB_SYSTEM_b_InBB_SYSTEM_cin_In

BB_SYSTEM_cout_OutBB_SYSTEM_sum_Out

CC_FULLADDER_sum_Out

CC_FULLADDER_cout_Out~0

CC_FULLADDER_cout_Out~1

CC_FULLADDER_cout_Out~2

CC_FULLADDER_cout_Out~3

BB_SYSTEM_a_In

3.1.13 Resultados y lecciones aprendidas

Un sumador de un bit es uno de los elementos más simples de la electrónica digital y apartir de la unión de varios sumadores de un bit se puede formar un sumador mas grande.Su implementación se puede realizar de diferentes maneras como se presenta en lassiguientes secciones.

F.Segura-Quijano y C.Quintero Peña

Page 27: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

27

3.2 Sumador de 1 bit: FULLADDER (2)

A continuación se presenta el componente combinacional Sumador de 1 bit: FullAddermostrando otra forma de descripción.

Diagrama caja blancaEn este caso el diagrama corresponde a la función expresada con todos los minitérminos sinsimplificar.

CC_FULLADDER_a_In

CC_FULLADDER_cout_Out

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_sum_Out

3.2.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_FULLADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_FULLADDER_cout_Out ,9 CC_FULLADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_FULLADDER_a_In ,12 CC_FULLADDER_b_In ,13 CC_FULLADDER_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s17 / / =======================================================

19 / / =======================================================20 / / PORT d e c l a r a t i o n s21 / / =======================================================22 o u t p u t CC_FULLADDER_cout_Out ;23 o u t p u t CC_FULLADDER_sum_Out ;24 i n p u t CC_FULLADDER_a_In ;25 i n p u t CC_FULLADDER_b_In ;26 i n p u t CC_FULLADDER_cin_In ;27 / / =======================================================Q/28 / / /A=======================================================29 / / REG/ WIRE d e c l a r a t i o n s30 / / =======================================================

32 / / =======================================================33 / / S t r u c t u r a l co d i ng34 / / =======================================================

F.Segura-Quijano y C.Quintero Peña

Page 28: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

35 / / MINTERMS36 a s s i g n CC_FULLADDER_sum_Out = (~CC_FULLADDER_a_In & ~CC_FULLADDER_b_In & CC_FULLADDER_cin_In ) | (~CC_FULLADDER_a_In

& CC_FULLADDER_b_In & ~CC_FULLADDER_cin_In ) | ( CC_FULLADDER_a_In & ~CC_FULLADDER_b_In & ~CC_FULLADDER_cin_In) | ( CC_FULLADDER_a_In & CC_FULLADDER_b_In & CC_FULLADDER_cin_In ) ;

37 a s s i g n CC_FULLADDER_cout_Out = (~CC_FULLADDER_a_In & CC_FULLADDER_b_In & CC_FULLADDER_cin_In ) | ( CC_FULLADDER_a_In& ~CC_FULLADDER_b_In & CC_FULLADDER_cin_In ) | ( CC_FULLADDER_a_In & CC_FULLADDER_b_In & ~CC_FULLADDER_cin_In )| ( CC_FULLADDER_a_In & CC_FULLADDER_b_In & CC_FULLADDER_cin_In ) ;

38 endmodule39 / / =======================================================A/

Archivo 3.5: CC_FULLADDER.v

Diagramas QUARTUSCC_FULLADDER:CC_FULLADDER_u0

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

BB_SYSTEM_b_InBB_SYSTEM_cin_In

BB_SYSTEM_cout_OutBB_SYSTEM_sum_Out

CC_FULLADDER_sum_Out~3

CC_FULLADDER_cout_Out~0

CC_FULLADDER_cout_Out~1

CC_FULLADDER_cout_Out~2

CC_FULLADDER_cout_Out~3

CC_FULLADDER_cout_Out~4

CC_FULLADDER_cout_Out~5

CC_FULLADDER_cout_Out~6

CC_FULLADDER_cout_Out~7

CC_FULLADDER_sum_Out~0

CC_FULLADDER_sum_Out~1

CC_FULLADDER_sum_Out~2

BB_SYSTEM_a_In

3.3 Sumador de 1 bit: FULLADDER (3)A continuación se presenta el componente combinacional Sumador de 1 bit: FullAddermostrando otra forma de descripción.

Diagrama caja blancaEn este caso el diagrama corresponde a una implementación con codificador.

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_InCC_FULLADDER_sum_Out

CC_FULLADDER_cout_Out

3.3.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_FULLADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_FULLADDER_cout_Out ,9 CC_FULLADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_FULLADDER_a_In ,12 CC_FULLADDER_b_In ,13 CC_FULLADDER_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s

F.Segura-Quijano y C.Quintero Peña

Page 29: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

29

17 / / =======================================================

19 / / =======================================================20 / / PORT d e c l a r a t i o n s21 / / =======================================================22 o u t p u t r e g CC_FULLADDER_cout_Out ;23 o u t p u t r e g CC_FULLADDER_sum_Out ;24 i n p u t CC_FULLADDER_a_In ;25 i n p u t CC_FULLADDER_b_In ;26 i n p u t CC_FULLADDER_cin_In ;27 / / =======================================================Q/28 / / /A=======================================================29 / / REG/ WIRE d e c l a r a t i o n s30 / / =======================================================31 wi re [ 2 : 0 ] CC_FULLADDER_q_node ;32 / / =======================================================33 / / S t r u c t u r a l co d i ng34 / / =======================================================35 / / CASE FORMAT (MUX)36 a s s i g n CC_FULLADDER_q_node = {CC_FULLADDER_cin_In , CC_FULLADDER_a_In , CC_FULLADDER_b_In } ;37 a lways @( * )38 c a s e ( CC_FULLADDER_q_node )39 0 : CC_FULLADDER_sum_Out = 0 ;40 1 : CC_FULLADDER_sum_Out = 1 ;41 2 : CC_FULLADDER_sum_Out = 1 ;42 3 : CC_FULLADDER_sum_Out = 0 ;43 4 : CC_FULLADDER_sum_Out = 1 ;44 5 : CC_FULLADDER_sum_Out = 0 ;45 6 : CC_FULLADDER_sum_Out = 0 ;46 7 : CC_FULLADDER_sum_Out = 1 ;47 d e f a u l t : CC_FULLADDER_sum_Out = 0 ;48 e n d c a s e49 a lways @( * )50 c a s e ( CC_FULLADDER_q_node )51 3 ’ b011 : CC_FULLADDER_cout_Out = 1 ;52 3 ’ b101 : CC_FULLADDER_cout_Out = 1 ;53 3 ’ b110 : CC_FULLADDER_cout_Out = 1 ;54 3 ’ b111 : CC_FULLADDER_cout_Out = 1 ;55 d e f a u l t : CC_FULLADDER_cout_Out = 0 ;56 e n d c a s e57 endmodule58 / / =======================================================A/

Archivo 3.6: CC_FULLADDER.v

Diagramas QUARTUSCC_FULLADDER:CC_FULLADDER_u0

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

BB_SYSTEM_b_InBB_SYSTEM_cin_In

BB_SYSTEM_cout_OutBB_SYSTEM_sum_Out

WideOr1Decoder0

IN[2..0] OUT[7..0]

WideOr0

BB_SYSTEM_a_In

7

6

5

3

4

2

1

7

3.4 Sumador de 1 bit: FULLADDER (4)A continuación se presenta el componente combinacional Sumador de 1 bit: FullAddermostrando otra forma de descripción.

Diagrama caja blancaEn este caso el diagrama corresponde a una implementación con bloques de menor jerarquía.

F.Segura-Quijano y C.Quintero Peña

Page 30: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

3.4.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_FULLADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_FULLADDER_cout_Out ,9 CC_FULLADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_FULLADDER_a_In ,12 CC_FULLADDER_b_In ,13 CC_FULLADDER_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s17 / / =======================================================

19 / / =======================================================20 / / PORT d e c l a r a t i o n s21 / / =======================================================22 o u t p u t CC_FULLADDER_cout_Out ;23 o u t p u t CC_FULLADDER_sum_Out ;24 i n p u t CC_FULLADDER_a_In ;25 i n p u t CC_FULLADDER_b_In ;26 i n p u t CC_FULLADDER_cin_In ;27 / / =======================================================Q/28 / / /A=======================================================29 / / REG/ WIRE d e c l a r a t i o n s30 / / =======================================================31 wi re HALFADDER_2_HALFADDER_node1 ;32 wi r e HALFADDER_2_GateOR_node2 ;33 wi r e HALFADDER_2_GateOR_node3 ;34 / / =======================================================35 / / S t r u c t u r a l co d i ng36 / / =======================================================37 / / STRUCTURAL38 CC_HALFADDER CC_HALFADDER_u0 (39 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s40 . CC_HALFADDER_cout_Out ( HALFADDER_2_GateOR_node3 ) ,41 . CC_HALFADDER_sum_Out (HALFADDER_2_HALFADDER_node1) ,42 . CC_HALFADDER_a_In ( CC_FULLADDER_a_In ) ,43 . CC_HALFADDER_b_In ( CC_FULLADDER_b_In )44 ) ;45 CC_HALFADDER CC_HALFADDER_u2 (46 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s47 . CC_HALFADDER_cout_Out ( HALFADDER_2_GateOR_node2 ) ,48 . CC_HALFADDER_sum_Out ( CC_FULLADDER_sum_Out ) ,49 . CC_HALFADDER_a_In (HALFADDER_2_HALFADDER_node1) ,50 . CC_HALFADDER_b_In ( CC_FULLADDER_cin_In )51 ) ;52 a s s i g n CC_FULLADDER_cout_Out = HALFADDER_2_GateOR_node2 | HALFADDER_2_GateOR_node3 ;53 endmodule54 / / =======================================================A/

Archivo 3.7: CC_FULLADDER.v

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_HALFADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_HALFADDER_cout_Out ,9 CC_HALFADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_HALFADDER_a_In ,12 CC_HALFADDER_b_In13 ) ;14 / / =======================================================15 / / PARAMETER d e c l a r a t i o n s16 / / =======================================================

18 / / =======================================================19 / / PORT d e c l a r a t i o n s20 / / =======================================================21 o u t p u t CC_HALFADDER_cout_Out ;22 o u t p u t CC_HALFADDER_sum_Out ;23 i n p u t CC_HALFADDER_a_In ;24 i n p u t CC_HALFADDER_b_In ;25 / / =======================================================Q/26 / / /A=======================================================27 / / REG/ WIRE d e c l a r a t i o n s28 / / =======================================================

30 / / =======================================================31 / / S t r u c t u r a l co d i ng32 / / =======================================================33 a s s i g n CC_HALFADDER_sum_Out = CC_HALFADDER_a_In ^ CC_HALFADDER_b_In ;34 a s s i g n CC_HALFADDER_cout_Out = CC_HALFADDER_a_In & CC_HALFADDER_b_In ;

F.Segura-Quijano y C.Quintero Peña

Page 31: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

31

35 endmodule36 / / =======================================================A/

Archivo 3.8: CC_HALFADDER.v

Diagramas QUARTUSCC_FULLADDER:CC_FULLADDER_u0

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

CC_HALFADDER:CC_HALFADDER_u2

CC_HALFADDER_a_In

CC_HALFADDER_b_InCC_HALFADDER_cout_Out

CC_HALFADDER_sum_Out

BB_SYSTEM_cin_In

BB_SYSTEM_cout_OutBB_SYSTEM_sum_Out

CC_HALFADDER_sum_Out

CC_FULLADDER_cout_Out

CC_HALFADDER:CC_HALFADDER_u0

CC_HALFADDER_a_In

CC_HALFADDER_b_In

CC_HALFADDER_cout_Out

CC_HALFADDER_sum_Out

CC_HALFADDER_cout_Out

BB_SYSTEM_b_InBB_SYSTEM_a_In

3.5 Sumador de 1 bit: FULLADDER (5)A continuación se presenta el componente combinacional Sumador de 1 bit: FullAddermostrando otra forma de descripción.

Diagrama caja blancaEn este caso el diagrama corresponde a una implementación con codificador, pero es la her-ramienta quartus quien decide obtener el circuito simplificado, dado que solo escribimos laecuación del sistema.

3.5.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_FULLADDER (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_FULLADDER_cout_Out ,9 CC_FULLADDER_sum_Out ,

10 / / / / / / / / / / / / INPUTS / / / / / / / / / /11 CC_FULLADDER_a_In ,12 CC_FULLADDER_b_In ,13 CC_FULLADDER_cin_In14 ) ;15 / / =======================================================16 / / PARAMETER d e c l a r a t i o n s17 / / =======================================================

19 / / =======================================================20 / / PORT d e c l a r a t i o n s21 / / =======================================================22 o u t p u t CC_FULLADDER_cout_Out ;23 o u t p u t CC_FULLADDER_sum_Out ;24 i n p u t CC_FULLADDER_a_In ;25 i n p u t CC_FULLADDER_b_In ;26 i n p u t CC_FULLADDER_cin_In ;27 / / =======================================================Q/28 / / /A=======================================================29 / / REG/ WIRE d e c l a r a t i o n s30 / / =======================================================

32 / / =======================================================

F.Segura-Quijano y C.Quintero Peña

Page 32: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 3. COMPONENTE COMBINACIONAL. Sumador de 1 bit oFULLADDER.

33 / / S t r u c t u r a l co d i ng34 / / =======================================================35 / / SIMPLIFIED EQUATIONS36 a s s i g n {CC_FULLADDER_cout_Out , CC_FULLADDER_sum_Out} = CC_FULLADDER_a_In + CC_FULLADDER_b_In + CC_FULLADDER_cin_In ;37 endmodule38 / / =======================================================A/

Archivo 3.9: CC_FULLADDER.v

Diagramas QUARTUSCC_FULLADDER:CC_FULLADDER_u0

CC_FULLADDER_a_In

CC_FULLADDER_b_In

CC_FULLADDER_cin_In

CC_FULLADDER_cout_Out

CC_FULLADDER_sum_Out

BB_SYSTEM_b_InBB_SYSTEM_cin_In

BB_SYSTEM_cout_OutBB_SYSTEM_sum_Out

+

Add1CIN1'h0A[1..0]

B[1..0]

OUT[1..0]

+

Add0CIN1'h0A[1..0]

B[1..0]

OUT[1..0]

BB_SYSTEM_a_In

1

0

F.Segura-Quijano y C.Quintero Peña

Page 33: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

MUX41 (1)Descripción del componenteSímboloDiagrama caja negraFuncionalidadHDL: Caja negraDefinición vectores de pruebaHDL: Vectores de pruebaDiagrama caja blancaHDL: Caja blancaHDL: bloquesSimulación temporalDiagramas QUARTUSResultados y lecciones aprendidas

MUX41 (2)HDL: bloques

MUX41 (3)HDL: bloques

MUX41 (4)HDL: bloques

MUX41 (5)HDL: bloques

MUX41 (6)HDL: bloques

MUX41 (7)HDL: bloques

MUX41 (8)HDL: bloques

4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

THOMAS ALVA EDISON

No fracasé, sólo descubrí 999 maneras decómo no hacer una bombilla.

En este capítulo se presentan el diseño de un multiplexor de 4 a 1 o MUX41. Se planteandiferentes tipos de descripción para poder hacer una comparación de las potencialidades dellenguaje.

4.1 MUX41 (1)

A continuación se presenta el componente combinacional Multiplexor 4 a 1: MUX41 mostrandouna primera descripción a partir de la funcionalidad del componente.

4.1.1 Descripción del componente

Un multiplexor es un circuito con varias entradas y una única salida de datos. Tiene entradaspara poder seleccionar una y solo una de las entradas de los datos para permitir llevar los datosde la entrada seleccionada a dicha salida. Los multiplexores funcionan como conmutadoresque accionan rápidamente para gestionar varias líneas de entrada llamadas canales, los cualesconectan solo uno de esos canales a la salida.

Un multiplexor se puede utilizar por ejemplo como un serializador, es decir un sistemaque puede convertir datos de forma paralela a forma serial. Otro campo de utilización delos multiplexores es en la transmisión multiplexada, en donde utilizando las mismas líneasde conexión se transmiten diferentes datos de distinta procedencia. Adicionalmente con unmultiplexor se pueden implementar cualquier función lógica.

Page 34: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

4.1.2 Símbolo

CC_MUX41_data_InBUS[0]

CC_MUX41_select_InBUS[0]

CC_MUX41_z_Out

CC_MUX41_data_InBUS[1]

CC_MUX41_data_InBUS[2]

CC_MUX41_data_InBUS[3]

CC_MUX41_select_InBUS[1]

4.1.3 Diagrama caja negra

4.1.4 Funcionalidad

, Ecuación característica

CC_MUX41_z_Out <= CC_MUX41_data_InBUS[CC_MUX41_select_InBUS] ;

, Tabla de verdad

Dada la cantidad de variables, hacer una tabla de verdad ya no resulta interesante ni eficiente. Poresta razón procedemos a hacer mejor el Macro algoritmo que nos permite ver el funcionamientodel componente.

, Macro algoritmo

Algorithm 4: Multiplexor 4:1Data: CC_MUX41_data_InBUS, CC_MUX41_select_InBUS (0, 1)Result: CC_MUX41_z_Out (0, 1)if (CC_MUX41_select_InBUS == 0) then

CC_GateAND_z_Out =CC_MUX41_data_InBUS[0]else if (CC_MUX41_select_InBUS == 1) then

CC_GateAND_z_Out =CC_MUX41_data_InBUS[1]else if (CC_MUX41_select_InBUS == 2) then

CC_GateAND_z_Out =CC_MUX41_data_InBUS[2]else

CC_GateAND_z_Out =CC_MUX41_data_InBUS[3]

F.Segura-Quijano y C.Quintero Peña

Page 35: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

35

4.1.5 HDL: Caja negra

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module BB_SYSTEM (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 BB_SYSTEM_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 BB_SYSTEM_select_InBUS ,11 BB_SYSTEM_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================16 p a r a m e t e r MUX41_SELECTWIDTH = 2 ;17 p a r a m e t e r MUX41_DATAWIDTH = 4 ;18 / / =======================================================19 / / PORT d e c l a r a t i o n s20 / / =======================================================21 o u t p u t BB_SYSTEM_z_Out ;22 i n p u t [MUX41_SELECTWIDTH−1:0 ] BB_SYSTEM_select_InBUS ;23 i n p u t [MUX41_DATAWIDTH−1:0 ] BB_SYSTEM_data_InBUS ;24 / / =======================================================Q/25 / /

Archivo 4.1: BB_SYSTEM.v

4.1.6 Definición vectores de pruebaPara el caso del multiplexor de 4 a 1, con un total de 6 entradas sería poco eficiente hacertoda la tabla de verdad. Se pueden plantear alternativas para generación de vectores de pruebade forma automática a través de programación y/o se pueden identificar algunos casos quepermitan validar el comportamiento de la mayoría de posibles combinaciones. En este caso sepropone tener un contador de 4 bits de de 0 a 15 conectado al bus de entrada de datos; y en cadatiempo de simulación se hace una selección de cada entrada correspondiente del multiplexor

F.Segura-Quijano y C.Quintero Peña

Page 36: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

(por medio de la señal de selección) para tener dicho valor en binario a la salida. En la siguientedescripción podemos ver como se generan los vectores de prueba usando sentencias for. Estetipo de sentencias no es recomendada para describir funcionalmente el comportamiento de uncomponente, pero si es muy útil en la definición de los vectores de prueba. Para descripcionesfuncionales la sentencia for es útil solamente para concatenación de bloques/componentes.

4.1.7 HDL: Vectores de prueba

3 ‘ t i m e s c a l e 1 ns / 1 ns4 module TB_SYSTEM ( ) ;5 / / c o n s t a n t s6 / / ============================================7 / / P a r a m e t e r ( may d i f f e r f o r p h y s i c a l s y n t h e s i s )8 / / ============================================9 p a r a m e t e r MUX41_SELECTWIDTH = 2 ;

10 p a r a m e t e r MUX41_DATAWIDTH = 4 ;11 i n t e g e r i i =0 ;

13 / / g e n e r a l p u r p o s e r e g i s t e r s14 r e g eachvec ;

16 / / t e s t v e c t o r i n p u t r e g i s t e r s17 / / ============================================18 / / INTERNAL WIRE AND REG DECLARATIONS19 / / ============================================20 / / w i r e s (OUTPUTS)21 wi r e TB_SYSTEM_z_Out ;22 / / r e g ( INPUTS )23 r e g [MUX41_SELECTWIDTH−1:0 ] TB_SYSTEM_select_InBUS ;24 r e g [MUX41_DATAWIDTH−1:0 ] TB_SYSTEM_data_InBUS ;2526 / / a s s i g n s t a t e m e n t s ( i f any )27 BB_SYSTEM BB_SYSTEM_u0 (28 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s29 . BB_SYSTEM_z_Out ( TB_SYSTEM_z_Out ) ,30 . BB_SYSTEM_select_InBUS ( TB_SYSTEM_select_InBUS ) ,31 . BB_SYSTEM_data_InBUS ( TB_SYSTEM_data_InBUS )32 ) ;33 i n i t i a l34 b e g i n35 / / code t h a t e x e c u t e s on ly once36 / / i n s e r t code h e r e −−> b e g i n

38 / / −−> end39 $ d i s p l a y ( " Running t e s t b e n c h " ) ;40 end41 a lways42 / / o p t i o n a l s e n s i t i v i t y l i s t43 / / @( e v e n t 1 o r e v e n t 2 o r . . . . e v e n t n )

45 b e g i n46 / / code e x e c u t e s f o r e v e r y e v e n t on s e n s i t i v i t y l i s t47 / / i n s e r t code h e r e −−> b e g i n48 #10000 $ m o n i t o r ( " TB_SYSTEM_data_InBUS = %b " , TB_SYSTEM_data_InBUS , " | TB_SYSTEM_select_InBUS = " ,

TB_SYSTEM_select_InBUS , " | TB_SYSTEM_z_Out = " , TB_SYSTEM_z_Out ) ;49 f o r ( i i = 0 ; i i <= 1 5 ; i i = i i + 1 )50 b e g i n51 TB_SYSTEM_data_InBUS = i i ;52 TB_SYSTEM_select_InBUS = 0 ; #10000;53 TB_SYSTEM_select_InBUS = 1 ; #10000;54 TB_SYSTEM_select_InBUS = 2 ; #10000;55 TB_SYSTEM_select_InBUS = 3 ; #10000;56 $ d i s p l a y ( "−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−" ) ;57 end58 @eachvec ;59 $ f i n i s h ;60 / / −−> end61 end62 endmodule

Archivo 4.2: TB_SYSTEM.vt

4.1.8 Diagrama caja blancaEn este caso vamos a graficar el diagrama correspondiente con todos los niveles de jerarquíadel componente. Como su implementación interna empieza a tener diagramas de compuertasextensos, no vale la pena mostrarlos. Para ello dejamos que el sintetizador de la herramientaQuartus se encargue de hacer las simplificaciones y los circuitos. De ahora en adelante dejaremoseste diagrama de caja negra para representar componentes o sistemas compuestos por varios

F.Segura-Quijano y C.Quintero Peña

Page 37: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

37

componentes de librería.

4.1.9 HDL: Caja blanca

3 / /

5 / / /A=======================================================6 / / REG/ WIRE d e c l a r a t i o n s7 / / =======================================================

9 / / =======================================================10 / / S t r u c t u r a l co d i ng11 / / =======================================================12 CC_MUX41 # ( . MUX41_SELECTWIDTH(MUX41_SELECTWIDTH) , .MUX41_DATAWIDTH(MUX41_DATAWIDTH) ) CC_MUX41_u0 (13 / / p o r t map − c o n n e c t i o n between m a s t e r p o r t s and s i g n a l s / r e g i s t e r s14 . CC_MUX41_z_Out ( BB_SYSTEM_z_Out ) ,15 . CC_MUX41_select_InBUS ( BB_SYSTEM_select_InBUS ) ,16 . CC_MUX41_data_InBUS ( BB_SYSTEM_data_InBUS )17 ) ;18 endmodule19 / / =======================================================A/

Archivo 4.3: BB_SYSTEM.v

4.1.10 HDL: bloquesEn este caso se presenta una descripción funcional basada en sentencias if/else.

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( CC_MUX41_data_InBUS or CC_MUX41_select_InBUS )32 b e g i n33 i f ( CC_MUX41_select_InBUS == 0)34 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 0 ] ;35 e l s e i f ( CC_MUX41_select_InBUS == 1)36 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 1 ] ;37 e l s e i f ( CC_MUX41_select_InBUS == 2)38 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 2 ] ;39 e l s e40 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 3 ] ;41 end

F.Segura-Quijano y C.Quintero Peña

Page 38: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

43 endmodule44 / / =======================================================A/

Archivo 4.4: CC_MUX41.v

4.1.11 Simulación temporalDado que conocemos la funcionalidad del componente y sabiendo la complejidad que em-piezan a tener los mismos; dejamos la presentación de la simulación temporal posterior a laimplementación de la herramienta Quartus y presentamos los resultados de simulación.

0 2 5Se recorren todas las entradas

con el selector. La salida toma

el valor correspondiente.

4.1.12 Diagramas QUARTUS

4.1.13 Resultados y lecciones aprendidas

Un multiplexor es uno de los elementos más simples de la electrónica digital. Es demucha utilizad para poder seleccionar una de entre varias señales. Su implementación sepuede realizar de diferentes maneras como se presenta en las siguientes secciones. Esimportante revisar todos los tipos de implementación lo cual nos ayuda a comprendermejor el lenguaje.

4.2 MUX41 (2)A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

4.2.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,

F.Segura-Quijano y C.Quintero Peña

Page 39: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

39

11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( CC_MUX41_data_InBUS or CC_MUX41_select_InBUS )32 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ CC_MUX41_select_InBUS ] ;

34 endmodule35 / / =======================================================A/

Archivo 4.5: CC_MUX41.v

Diagramas QUARTUS

4.3 MUX41 (3)

A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

4.3.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a s s i g n CC_MUX41_z_Out = CC_MUX41_data_InBUS [ CC_MUX41_select_InBUS ] ;

33 endmodule34 / / =======================================================A/

Archivo 4.6: CC_MUX41.v

F.Segura-Quijano y C.Quintero Peña

Page 40: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

Diagramas QUARTUS

4.4 MUX41 (4)

A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

4.4.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( CC_MUX41_data_InBUS or CC_MUX41_select_InBUS )32 b e g i n33 c a s e ( CC_MUX41_select_InBUS )34 0 : CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 0 ] ;35 1 : CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 1 ] ;36 2 : CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 2 ] ;37 3 : CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 3 ] ;38 d e f a u l t : CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 3 ] ;39 e n d c a s e40 end

42 endmodule43 / / =======================================================A/

Archivo 4.7: CC_MUX41.v

Diagramas QUARTUS

4.5 MUX41 (5)

A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

F.Segura-Quijano y C.Quintero Peña

Page 41: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

41

4.5.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a s s i g n CC_MUX41_z_Out = ( CC_MUX41_select_InBUS == 0 ) ? CC_MUX41_data_InBUS [ 0 ] : ( CC_MUX41_select_InBUS == 1 ) ?

CC_MUX41_data_InBUS [ 1 ] : ( CC_MUX41_select_InBUS == 2 ) ? CC_MUX41_data_InBUS [ 2 ] : CC_MUX41_data_InBUS [ 3 ] ;

33 endmodule34 / / =======================================================A/

Archivo 4.8: CC_MUX41.v

Diagramas QUARTUS

4.6 MUX41 (6)A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

4.6.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s

F.Segura-Quijano y C.Quintero Peña

Page 42: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( CC_MUX41_select_InBUS or CC_MUX41_data_InBUS )32 b e g i n33 CC_MUX41_z_Out = ( ~CC_MUX41_select_InBUS [ 0 ] & ~CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS [ 0 ] )34 | ( CC_MUX41_select_InBUS [ 0 ] & ~CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS [ 1 ] )35 | ( ~CC_MUX41_select_InBUS [ 0 ] & CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS [ 2 ] )36 | ( CC_MUX41_select_InBUS [ 0 ] & CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS [ 3 ] ) ;37 end

39 endmodule40 / / =======================================================A/

Archivo 4.9: CC_MUX41.v

Diagramas QUARTUS

4.7 MUX41 (7)A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción.

4.7.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================27 wi re CC_MUX41_q1_node , CC_MUX41_q2_node , CC_MUX41_q3_node , CC_MUX41_q4_node , CC_MUX41_NOTselect0_node ,

CC_MUX41_NOTselect1_node ;28 wi r e [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_NOTSelect_BUS_node ;29 / / =======================================================30 / / S t r u c t u r a l co d i ng31 / / =======================================================32 a s s i g n CC_MUX41_NOTSelect_BUS_node [ 0 ] = ~CC_MUX41_select_InBUS [ 0 ] ;33 a s s i g n CC_MUX41_NOTSelect_BUS_node [ 1 ] = ~CC_MUX41_select_InBUS [ 1 ] ;

35 a s s i g n CC_MUX41_q1_node = CC_MUX41_NOTSelect_BUS_node [ 0 ] & CC_MUX41_NOTSelect_BUS_node [ 1 ] &CC_MUX41_data_InBUS [ 0 ] ;

36 a s s i g n CC_MUX41_q2_node = CC_MUX41_select_InBUS [ 0 ] & CC_MUX41_NOTSelect_BUS_node [ 1 ] & CC_MUX41_data_InBUS[ 1 ] ;

37 a s s i g n CC_MUX41_q3_node = CC_MUX41_NOTSelect_BUS_node [ 0 ] & CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS[ 2 ] ;

38 a s s i g n CC_MUX41_q4_node = CC_MUX41_select_InBUS [ 0 ] & CC_MUX41_select_InBUS [ 1 ] & CC_MUX41_data_InBUS[ 3 ] ;

F.Segura-Quijano y C.Quintero Peña

Page 43: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

43

40 a s s i g n CC_MUX41_z_Out = CC_MUX41_q4_node | CC_MUX41_q3_node | CC_MUX41_q2_node | CC_MUX41_q1_node ;

43 endmodule44 / / =======================================================A/

Archivo 4.10: CC_MUX41.v

Diagramas QUARTUS

4.8 MUX41 (8)A continuación se presenta el componente combinacional Multiplexor 4 a 1 mostrando otraforma de descripción la cual es NO RECOMENDADA debido a que se usan una sentenciaif incompleta en vez de sentencias if/else. Adicionalmente Se debe completar siempre el ifcon la sentencia default al final para que le sintetizador pueda reconocer la lógica en cadauno de los casos que se quieren seleccionar. Nótese que luego de realizar la compilación delcódigo aparece el siguiente mensaje: Warning (10240): Verilog HDL Always Construct warningat CC_MUX41.v(45): inferring latch(es) for variable CC_MUX41_z_Out, which holds itsprevious value in one or more paths through the always construct. La presencia de un latch escompletamente indeseada como lo veremos en clase mas adelante.

4.8.1 HDL: bloques

3 / / /Q=======================================================4 / / MODULE D e f i n i t i o n5 / / =======================================================6 module CC_MUX41 #( p a r a m e t e r MUX41_SELECTWIDTH=2 , p a r a m e t e r MUX41_DATAWIDTH=4) (7 / / / / / / / / / / / / OUTPUTS / / / / / / / / / /8 CC_MUX41_z_Out ,9 / / / / / / / / / / / / INPUTS / / / / / / / / / /

10 CC_MUX41_select_InBUS ,11 CC_MUX41_data_InBUS12 ) ;13 / / =======================================================14 / / PARAMETER d e c l a r a t i o n s15 / / =======================================================

17 / / =======================================================18 / / PORT d e c l a r a t i o n s19 / / =======================================================20 o u t p u t r e g CC_MUX41_z_Out ;21 i n p u t [MUX41_SELECTWIDTH−1:0 ] CC_MUX41_select_InBUS ;22 i n p u t [MUX41_DATAWIDTH−1:0 ] CC_MUX41_data_InBUS ;23 / / =======================================================Q/24 / / /A=======================================================25 / / REG/ WIRE d e c l a r a t i o n s26 / / =======================================================

28 / / =======================================================29 / / S t r u c t u r a l co d i ng30 / / =======================================================31 a lways @( CC_MUX41_data_InBUS or CC_MUX41_select_InBUS )32 b e g i n33 / / LATCH GENERATED. VIEW RTL VIEWER . VERY BAD DESCRIPTION34 i f ( CC_MUX41_select_InBUS == 0)35 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 0 ] ;36 i f ( CC_MUX41_select_InBUS == 1)37 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 1 ] ;38 i f ( CC_MUX41_select_InBUS == 2)

F.Segura-Quijano y C.Quintero Peña

Page 44: F. Segura-Quijano —— BIBLIOTECA DE COMPONENTES

Capítulo 4. COMPONENTE COMBINACIONAL: Multiplexor 4 a 1.

39 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 2 ] ;40 i f ( CC_MUX41_select_InBUS == 3)41 CC_MUX41_z_Out = CC_MUX41_data_InBUS [ 3 ] ;42 end

44 endmodule45 / / =======================================================A/

Archivo 4.11: CC_MUX41.v

Diagramas QUARTUS

F.Segura-Quijano y C.Quintero Peña