CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS 
            DEL INSTITUTO POLITÉCNICO NACIONAL 
 

 

 

ELECTRÓNICA DIGITAL

Unidad 1
Descripción y Simulación de 
Circuitos Digitales Utilizando VHDL

Agosto, 2014. 

CENTRO DE INVESTIGACION Y DE ESTUDIOS AVANZADOS DEL IPN
DEPARTAMENTO DE INGENIERIA ELECTRICA

ELECTRÓNICA DIGITAL

Unidad 1: Descripción y Simulación de Circuitos Digitales Utilizando VHDL

Profesor Titular: Dr. Mario Alfredo Reyes Barranca
Profesores Auxiliares: Dr. Oliverio Arellano Cárdenas
M. en C. Luis Martín Flores Nava

Revisión 5.0, Agosto 2014.

CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS AVANZADOS DEL
IPN
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA

ELECTRÓNICA DIGITAL
Unidad 1: Descripción y Simulación de Circuitos Digitales Utilizando VHDL

Profesor Titular: Dr. Mario Alfredo Reyes Barranca
Profesores Auxiliares: Dr. Oliverio Arellano Cárdenas
M. en C. Luis Martín Flores Nava

Objetivo
Proporcionar al alumno una herramienta de descripción de circuitos digitales para
el proceso de diseño y simulación, así como implementar estos circuitos en dispositivos
programables.

Temario

Capítulo 1 Estado actual de la lógica programable
1.1 Conceptos fundamentales
1.2 Dispositivos lógicos programables simples (SPLD’s)
1.3 Dispositivos lógicos programables complejos (CPLD’s)
1.4 Arreglo de compuertas programables en campo (FPGA’s)

Capítulo 2 Sintaxis del lenguaje
2.1 Introducción a la descripción en VHDL de circuitos digitales
2.2 Estilos de programación en VHDL
2.3 Operadores y expresiones
2.4 Objetos de datos
2.5 Tipos de datos
2.6 Declaración de entidad y arquitectura

Capítulo 3 Circuitos Lógicos combinatorios
3.1 Declaraciones concurrentes
3.1.1 La construcción when-else y with-select-when
3.2 Declaraciones secuenciales
3.2.1 La construcción if-then-else y case

Capítulo 4 Circuitos Lógicos secuenciales
4.1 Diseño lógico secuencial
4.2 Elementos de memoria
4.3 Registros
4.4 Contadores
4.5 Máquinas de estado

Capítulo 5 Diseño jerárquico en VHDL
5.1 Metodología para el diseño jerárquico
5.2 Partición de la estructura global
5.3 Creación de un paquete de componentes
5.4 Diseño del programa de alto nivel
5.5 Subprogramas
5.6 Llamadas a subprogramas

Capítulo 6 VHDL para simulación
6.1 Asignación de retardos
6.2 Notificación de sucesos
6.3 Descripción de un banco de pruebas
6.3.1 Método tabular
6.3.2 Utilización de archivos
6.3.3 Metodología algorítmica

Bibliografía

1. Circuit Design with VHDL
Volnei A. Pedroni
Massachussets Institute of Technology, 2004.

2. HDL Chip Design
Douglas J. Smith
Doone Publications, Madison, AL, USA 1996.

3. Analysis and Design of Digital Systems with VHDL
Allen M. Dewey
PWS Publishing Company, Boston, MA 1997.

4. VHDL: Lenguaje para síntesis y modelado de circuitos
Fernando Pardo y José A. Boluda
Alfaomega, 2000.

CENTRO DE INVESTIGACION Y
ESTUDIOS AVANZADOS DEL
I.P.N.

Departamento de Ingeniería Eléctrica
Curso:
Electrónica Digital

Departamento de Ingeniería Eléctrica 1 Electrónica Digital

Unidad 1

Descripción y Simulación de
Circuitos Digitales Utilizando VHDL

Profesor Titular: Dr. Mario Alfredo Reyes Barranca

Profesores Auxiliares: Dr. Oliverio Arellano Cárdenas
M. en C. Luis Martín Flores Nava

Departamento de Ingeniería Eléctrica 2 Electrónica Digital

Capítulo 1
Estado Actual de la Lógica Programable

Departamento de Ingeniería Eléctrica 3 Electrónica Digital

PLD’s
DISPOSITIVOS LOGICOS
PROGRAMABLES

Una alternativa en el Diseño de
Sistemas Digitales

Departamento de Ingeniería Eléctrica 4 Electrónica Digital

Introducción  La realidad del diseño lógico actual: – Complejidad creciente – Tiempos menores de introducción al mercado – Disminución de costos  Las exigencias que plantea son: – Confiabilidad – Accesibilidad para pruebas  La meta principal es: – Contar con una solución de uso universal Departamento de Ingeniería Eléctrica 5 Electrónica Digital .

Beneficios de una solución universal  Fácil adaptabilidad a cambios de diseño: – Aumento de la vida comercial útil del producto  Mayor desempeño: – Rápido. confiable y fácil de armar  Mejora en cuanto al aprovechamiento de los recursos de ingeniería: – Menor costo de desarrollo Departamento de Ingeniería Eléctrica 6 Electrónica Digital . pequeño.

¿ Qué es un PLD ? Es un circuito integrado que contiene una gran cantidad de elementos lógicos y a través de la programación se interconectan para que realicen una función específica. Departamento de Ingeniería Eléctrica 7 Electrónica Digital .

Notación convencional y notación PLD Departamento de Ingeniería Eléctrica 8 Electrónica Digital .

Configuraciones básicas PLE Arreglo Arreglo Entradas AND OR Salidas Fijo Programable PAL Arreglo Arreglo Entradas AND OR Salidas Programable Fijo PLA Arreglo Arreglo Entradas AND OR Salidas Programable Programable Departamento de Ingeniería Eléctrica 9 Electrónica Digital .

Configuraciones básicas PLE/PROM PAL PLA Departamento de Ingeniería Eléctrica 10 Electrónica Digital .

CoolRunner Fabricante FPGA Actel ACT 1 a 3 . Stratix Atmel AT6000. FLASHLogic Atmel PAL Cypress Lattice PAL GAL SPLD’s Philips PLA. ULTRA37000 Lattice IspLSI1000 a 8000 CPLD’s PLD’s Philips XPLA Vantis MACH 1 a 5 Xilinx XC9500. AT40K Lucent ORCA 1 a 3 FPGA’s QuickLogic pASIC1 a 3 Vantis VF1 Xilinx XC4000. MX. Cyclone. Virtex Departamento de Ingeniería Eléctrica 11 Electrónica Digital .7000 y 9000 Atmel ATF. ATV Cypress FLASH370. PAL Vantis PAL Fabricante CPLD Altera MAX 5000. Spartan. Clasificación de los PLD’s Productos comerciales Fabricante SPLD Altera Clásicos. SX Altera Flex.

SSI C.I. Series 74xx y 40xx PAL’s ó GAL’s Departamento de Ingeniería Eléctrica 12 Electrónica Digital . Integración en un SPLD Sustituye aproximadamente a 100 C.I.

Arquitectura PAL Un término producto Matriz de fusibles de interconexión para control de tercer estado Suma de 7 términos producto Líneas específicas de entrada Retroalimentación desde una E / S  Diagrama esquemático de un PAL – Se cuenta a lo largo de TODO EL CHIP con las literales de todas las variables de entrada. – Mediante lógica alambrada es posible generar términos producto (AND) de la cantidad de literales que se desee. – Para generar la función solo es posible sumar (OR) hasta 7 u 8 términos producto. Departamento de Ingeniería Eléctrica 13 Electrónica Digital .

I. SSI (TTL o CMOS) serie 74xx o 40xx Departamento de Ingeniería Eléctrica 14 Electrónica Digital . PAL16L8 Características: 64 AND de 32 entradas 8 OR de 7 entradas 8 Inversores de tercer estado 16 Buffers doble salida Aproximadamente : 200 C.

.. Tri-State Retroalimentación Una señal global de desde los registros control de TriState  Incorporación de elementos de memoria – Ideal para la síntesis de máquinas secuenciales Departamento de Ingeniería Eléctrica 15 Electrónica Digital ....................................... PAL16R8 Un único reloj global Matriz de interconexión global Entradas dedicadas Salidas de los registros .........

Arquitectura GAL • Suma de 8 a 16 términos producto •Macroceldas lógicas de salida La macrocelda consta de: • Un Flip-Flop • Dos multiplexores Departamento de Ingeniería Eléctrica 16 Electrónica Digital .

el uso de fusibles afectaba seriamente la confiabilidad del dispositivo.  Cuando se utiliza el flip-flop de la macrocelda para realizar lógica enterrada se desperdicia una terminal de entrada/salida. Departamento de Ingeniería Eléctrica 17 Electrónica Digital . Limitaciones de los SPLD  Reducida cantidad de macroceldas.  En los primeros PAL.  La distribución de todas la señales por todo el chip consume mucha superficie del silicio y genera retardos capacitivos de importancia.

Integración en un CPLD Sustituye aproximadamente a 50 SPLD’s Familia MAX5000 PAL’s y GAL’s Departamento de Ingeniería Eléctrica 18 Electrónica Digital .

.16 pines conexión dentro del LAB de I/O por cada LAB  Expansores para generar Matriz de expansores términos producto auxiliares  Con un bloque de E/S por cada macrocelda con dual feedback  De 32 a 192 macroceldas en chips de 28 a 100 terminales Departamento de Ingeniería Eléctrica 19 Electrónica Digital . CPLD’s De líneas de entrada dedicadas  Agrupamiento de las (8 a 20) macroceldas (LABs)  Generación de áreas de Interconexión global (PIA) Bloque de control de E/S conexionado global (PIA) Interconexión del LAB Matriz de macroceldas  Generación de áreas de 4.

Macrocelda y Expansores LAB Arreglo local Clear Clock Global Global Desde terminal Expansores E/S paralelos PRN D Q hacia PIA y Bloque de Matriz control E/S de ENA CLRN selección Clock Expansores lógicos Desde PIA Departamento de Ingeniería Eléctrica 20 Electrónica Digital .

FPGA’s  Field Programmable Gate Array (Arreglo de Compuertas Programables en Campo)  Es un circuito integrado que contiene Celdas Lógicas Configurables  Las Celdas Lógicas se interconectan por medio de una Matriz de Interconexión Programable  Cuenta en su periferia con Puertos de Entrada/Salida. Departamento de Ingeniería Eléctrica 21 Electrónica Digital .

Arquitectura del FPGA Puertos de E/S Celdas Lógicas Recursos de Configurables Interconexión Departamento de Ingeniería Eléctrica 22 Electrónica Digital .

Celda Lógica del FPGA Familia XC4000 Departamento de Ingeniería Eléctrica 23 Electrónica Digital .

FPGA de la Familia Spartan 3E Administrador de Reloj Digital Bloques RAM Multiplicadores Departamento de Ingeniería Eléctrica 24 Electrónica Digital .

000* * Compuertas de sistema Departamento de Ingeniería Eléctrica 25 Electrónica Digital .000* Virtex II XC2V8000 8.047.000* Virtex E XCV3200E 4.000* Virtex E XCV50E 72.000. Densidades de FPGA’s Spartan II XC2S15 15.000* Spartan IIE XC2S150E 150.000* Virtex II XC2V40 40.

000* Microcontrolador 80530 130.000* * Compuertas de sistema Departamento de Ingeniería Eléctrica 26 Electrónica Digital .000* Decodificador Viterbi 190.000* Decodificador JPEG color 780.000* Microcontrolador 8051 150.000* Controlador de Ethernet 195. Densidades de IP Cores Encriptador AES 40.

000 DLS Departamento de Ingeniería Eléctrica 27 Electrónica Digital .000 compuertas ~ 20 DLS Virtex 300.000 compuertas ~ 150 DLS Virtex II 8.000 compuertas ~ 8.000 compuertas ~ 1 DL Spartan 100.000. Costos de FPGA’s Varían dependiendo del encapsulado y velocidad Spartan 20.

Xilinx vs. Altera CPLD’s FPGA’s Software Departamento de Ingeniería Eléctrica 28 Electrónica Digital .

sino que la restringe a casos muy simples.  Se pasa del diseño por compuertas al diseño por sistemas. de alta confiabilidad.  Es una herramienta rápida. Departamento de Ingeniería Eléctrica 29 Electrónica Digital . Diseño usando lógica programable Conclusiones :  El uso de lógica programable no descarta el uso de lógica discreta.  La fácil modificación de un diseño permite asegurar el mantenimiento y actualización de un producto.  Conocer profundamente las técnicas de diseño lógico es la mejor manera de aprovechar la lógica programable. y de bajísimo costo por compuerta.

Flujo de Diseño para Lógica Programable Verificación del Diseño Simulación Funcional Introducción/Descripción del Diseño •Verificación de la funcionalidad de la Lógica •Captura Esquemática •Temporización estimada (opcional) •Descripción basada en Lenguaje Simulación Temporizada Realización/Implementación •Se requiere de información de del Diseño temporización posterior a los procesos de Colocación (Place) y •Translación/Síntesis del Enrutamiento (Route) Diseño •Verificación de Reglas de Análisis de Temporización Estático Diseño •Partición y Mapeo de Lógica •Se requiere de información de temporización posterior a los •Asignación o Colocación procesos de Colocación (Place) y (Place) de la Lógica en los Enrutamiento (Route) Bloques configurables •Determina retardos de trayectorias •Enrutamiento (Route) de manera rápida y reporta violación de restricciones. •Creación de Archivo de Programación Depuración del diseño integrado al Sistema (In-System) siendo Programación-Dispositivo desarrollado •Para dispositivos reprogramables •Uso de otros Sistemas de Software & Hardware Departamento de Ingeniería Eléctrica 30 Electrónica Digital .

WebPack (Gratuito) de Xilinx • Programador – Opcional Departamento de Ingeniería Eléctrica 31 Electrónica Digital . Sistema Básico de Desarrollo • Computadora Personal / Estación de Trabajo • Software CAE/CAD – p.ej.

Métodos de Descripción del Diseño Bajo Nivel PALASM OPAL Difícil o imposible PLPL la manipulación de diseños complejos Captura Esquemática Descripción del Diseño Descripción por Lenguaje Alto Nivel ABEL (VHSIC Hardware Description Language) CUPL VERILOG VHSIC – Very High Speed Integrated Circuit VHDL Departamento de Ingeniería Eléctrica 32 Electrónica Digital .

Capítulo 2 Sintaxis del Lenguaje Departamento de Ingeniería Eléctrica 1 Electrónica Digital .

VHDL (VHSIC Hardware Description Language) VHSIC – Very High Speed Integrated Circuit Departamento de Ingeniería Eléctrica 2 Electrónica Digital .

CDL. HDL/TI. Desarrollo de Lenguajes para Descripción de Hardware Programa: Very High Speed Integrated Circuits (VHSIC) 1970’s IDL/IBM. Texas Instruments e AHPL. ZEUS/GE 1983  VHDL Desarrollo: Desarrollo en Área Industrial IBM. ABEL. DDL. CUPL Revisiones Estándar IEEE -1076-1993 VHDL y Verilog Estándar IEEE -1076-2000 Estándar IEEE -1076-2002 Estándar IEEE -1076-2008 Departamento de Ingeniería Eléctrica 3 Electrónica Digital . Antecedentes de VHDL Departamento de la Defensa de los E.A.U. ISPS Intermetrics Desarrollo en Área Académica Estándar IEEE VHDL 1980’s Estándar IEEE -1076-1987 AHDL.

BiCMOS) Reutilización de Código Capacidad descriptiva del comportamiento del sistema en distintos niveles de abstracción. Ventajas de VHDL Ventajas de VHDL Notación Estandarizada Disponibilidad al Público Independencia del Sistema de Desarrollo (con algunas excepciones) Independencia de la Metodología de Diseño (PLDs. FPGAs) Independencia de la Tecnología y Proceso de Fabricación (CMOS. RTL (Register Transfer Logic). ASICs. Bipolar. analógicos y mixtos Departamento de Ingeniería Eléctrica 4 Electrónica Digital . Adición de la extensión analógica (IEEE1076. modelación o abstracción: Algoritmo.1) que permite la especificación. Lógico y Compuerta Facilitar la Verificación/Prueba del Sistema siendo diseñado. simulación y síntesis de sistemas digitales.

X”FE” Palabras reservadas Son las instrucciones. #) o dobles como ( :=. Departamento de Ingeniería Eléctrica 5 Electrónica Digital . ‘t’ Cadenas Son un conjunto de caracteres englobados por comillas dobles: “hola” Cadenas de bits Los tipos bit y bit_vector son en realidad tipo caracter y arreglo de caracteres respectivamente. se admite la notación científica convencional es posible definir números en otras bases utilizando el símbolo # : 2#11000100# Caracteres Es cualquier letra o caracter entre comillas simples: ‘3’. Sintaxis de VHDL Elementos sintácticos de VHDL Comentarios Se consideran comentarios después de dos guiones medios seguidos “--” Símbolos especiales Existen caracteres especiales sencillos como (&. órdenes y elementos que permiten definir sentencias. <=) Identificadores Es lo que se usa para dar nombre a los diferentes objetos del lenguaje Números Se considera que se encuentra en base 10. se coloca un prefijo para indicar la base : O”126”.

letras (mayúsculas o minúsculas) y guión bajo “_” con las reglas especificadas en la tabla siguiente. Señales. un identificador en mayúsculas es igual a su contraparte en minúsculas Reglas para especificar un identificador Incorrecto Correcto Primer caracter debe ser siempre una letra mayúscula o minúscula 4Suma Suma4 Primer caracter no puede ser un guión bajo ( _ ) _S4bits S_4bits Dos guiones bajos seguidos no son permitidos Resta__4 Resta_4_ Un identificador no puede utilizar símbolos especiales Clear#8 Clear_8 Departamento de Ingeniería Eléctrica 6 Electrónica Digital . Reglas para Identificadores Identificadores Nombres o etiquetas que se usan para referirse a: Variables. Constantes. Entidades. Están formados por números. etc. Longitud (Número de Caracteres): Sin restricciones Palabras reservadas por VHDL no pueden ser identificadores En VHDL. Procesos.

Palabras reservadas en VHDL Lista de palabras reservadas en VHDL Departamento de Ingeniería Eléctrica 7 Electrónica Digital .

& = /= < <= > >= AND OR XOR NAND NOR XNOR Menor La precedencia de operadores se encuentran ordenados de mayor (arriba) a menor (abajo). los operadores que se encuentran en la misma fila tienen la misma precedencia. Departamento de Ingeniería Eléctrica 8 Electrónica Digital .(signo) + . Precedencia de Operadores Mayor Precedencia de Operadores ** ABS NOT * / MOD REM + (signo) .

& (concatenación). los operadores de la clase 7 tienen la mayor precedencia y se aplican primero. Operadores misceláneos: not abs ** Cuando no se usan los paréntesis. PRECEDENCIA DE OPERADORES Los operadores anteriores se definen de la siguiente manera: 1. Operadores de desplazamiento: sll srl sla sra rol ror. 5. Operadores de signo: + - 6. luego la 5 y así sucesivamente. Operadores relacionales: = /= < <= > >=. 4. Operadores de multiplicación: * / mod rem. Departamento de Ingeniería Eléctrica 9 Electrónica Digital . Operadores de adición: + . 2. 7. Operadores lógicos binarios: and or nand nor xor xnor. Los de la clase 1 tienen la menor precedencia y se aplican al último. 3. seguidos en ésta por los de la clase 6. El orden de la precedencia puede cambiarse mediante los paréntesis. Los operadores de la misma precedencia se aplican de izquierda a derecha en la expresión.

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A sll 2 (desplazamiento lógico hacia la izquierda llenando con ceros “0”): 10010101 A sll 2 = 01010100 Departamento de Ingeniería Eléctrica 10 Electrónica Digital .

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A srl 3 (desplazamiento lógico hacia la derecha llenando con ceros “0”): 10010101 A srl 3 = 00010010 Departamento de Ingeniería Eléctrica 11 Electrónica Digital .

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A sla 3 (desplazamiento aritmético hacia la izquierda llenando con el bit a la derecha): 10010101 A sla 3 = 10101111 Bit a la derecha Departamento de Ingeniería Eléctrica 12 Electrónica Digital .

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A sra 2 (desplazamiento aritmético hacia la derecha llenando con el bit a la izquierda): 10010101 A sra 2 = 11100101 Bit a la izquierda Departamento de Ingeniería Eléctrica 13 Electrónica Digital .

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A rol 3 (rotación a la izquierda): 10010101 0010101 010101 10101 A rol 3 = 10101100 Departamento de Ingeniería Eléctrica 14 Electrónica Digital .

PRECEDENCIA DE OPERADORES Ejercicio: Realizar las siguientes operaciones al vector A = “10010101”: A ror 5 (rotación a la derecha): 10010101 1001010 100101 10010 1001 A ror 5 = 10101100 Departamento de Ingeniería Eléctrica 15 Electrónica Digital .

not B = “000” (complemento bit por bit) Op. de desplazamiento: sll srl sla sra rol ror. A & not B = “110000” (concatenación) Operadores de adición: + . Operadores relacionales: = /= < <= > >=. lógicos bin. los operadores se aplicarán en el siguiente orden: not. las operaciones se realizan como se muestra a continuación: Op.& (concatenación). Operadores misceláneos: not abs ** (A & not B) or (C ror 2) = “110110” (operación or bit por bit) (A & not B or C ror 2) and D = “110010” (operación and bit por bit) [(A & not B or C ror 2 and D) = “110010] = TRUE (el paréntesis fuerza a la prueba de igualdad al final. = Si A= “110”. Operadores de signo: + - C ror 2 = “000110” (rotación a la derecha dos lugares) Operadores de multiplicación: * / mod rem. resultando en verdadero (TRUE)) Departamento de Ingeniería Eléctrica 16 Electrónica Digital . B. and. &. PRECEDENCIA DE OPERADORES Ejercicio: En la siguiente expresión. or. C= “011000” y D= “111011”. A. ror.: and or nand nor xor xnor. C y D son del tipo bit_vector. B= “111”. (A & not B or C ror 2 and D) = “110010” Entonces.

Objetos y Tipos de Datos
Booleano (False, True)
Bit (‘0’, ‘1’)

Enumerated Character (Carácter)
Objetos Tipo Datos
(Enumerados) String (Cadena-Caracteres)
std_ulogic
Objetos std_logic (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’)
VHDL
Enteros [-(231-1) a (231-1)]
Constantes Integer (Enteros)
Escalares
Positive (No-Cero y No-Negativos)
Variables
Natural (No-Negativos)
Señales
Floating Point ‡
File ‡ Real ‡
(Punto Flotante)

Physical ‡ (Físicos) Time ‡ (Tiempo)
‡ No soportado por
herramientas de
Síntesis Bit_Vector

Compuestos Std_ulogic_vector
Array (Arreglo)
Std_logic_vector

Access (Acceso)‡ Unsigned
Record (Registro)
Signed
Departamento de Ingeniería Eléctrica 17 Electrónica Digital

Números Reales:

Racionales: -3/4; 5/8; 31/9;….

Enteros: -7; -1; 0; 5; 20;….

Irracionales: √2; (1+√5 )/2;….

Trascendentes: e ;  ; ln(2);….

Departamento de Ingeniería Eléctrica 18 Electrónica Digital

Objetos y Tipos de Datos
Booleano (False, True)
Bit (‘0’, ‘1’)

Objetos Tipo Datos Enumerated Character (Carácter)
(Enumerados) String (Cadena-Caracteres)
std_ulogic
Objetos std_logic (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’)
VHDL
Enteros [-(231-1) a (231-1)]
Constantes Integer (Enteros)
Escalares
Positive (No-Cero y No-Negativos)
Variables
Natural (No-Negativos)
Señales
Floating Point ‡
File ‡ Real ‡
(Punto Flotante)

Physical ‡ (Físicos) Time ‡ (Tiempo)
‡ No soportado por
herramientas de
Síntesis Bit_Vector

Compuestos Std_ulogic_vector
Array (Arreglo)
Std_logic_vector

Access (Acceso)‡ Unsigned
Record (Registro)
Signed
Departamento de Ingeniería Eléctrica 19 Electrónica Digital

http://www.csee.umbc.edu/help/VHDL/stdpkg.html

Departamento de Ingeniería Eléctrica 20 Electrónica Digital

conexiones y si pueden ser sintetizadas. las constantes pueden necesario. CONSTANT identificador : tipo := valor. Ejemplo por lo tanto. según sea el tipo de dato. SIGNAL dato: bit_vector (7 downto 0). VARIABLE aux1. En VHDL los objetos de datos son generalmente una de las tres clases siguientes: Constantes Variables Una constante es un elemento que puede tomar un Las variables pueden ser modificadas cuando sea único valor de un tipo de dato. los procesos y subprogramas. Ejemplo Ejemplo CONSTANT byte: integer := 8. aux2: bit. arquitecturas. Departamento de Ingeniería Eléctrica 21 Electrónica Digital . pueden ser declaradas solamente dentro de ser declaradas dentro de entidades. representan elementos de memoria o SIGNAL A. el objeto poseerá un conjunto de propiedades. Objetos de Datos Un objeto de datos en VHDL es un elemento que toma un valor de algún tipo de dato determinado. B : bit := ‘0’. Las señales sí pueden almacenar o pasar valores lógicos. procesos y paquetes. Son declaradas en las arquitecturas antes del BEGIN. VARIABLE identificador : tipo [:= valor]. Señales SIGNAL identificador : tipo [:= valor].

when 1 => y <= b. library IEEE. end if. Begin sel := 0. end process.STD_LOGIC_1164. entity Mux_OK is Port ( a : in STD_LOGIC. s0 : in STD_LOGIC. if (s0 = '1') then sel := sel + 1. case sel is when 0 => y <= a. b : in STD_LOGIC.ALL. when 2 => y <= c. use IEEE. s0. d : in STD_LOGIC. end Behavioral. s1 : in STD_LOGIC. b. d. c : in STD_LOGIC. end if. y : out STD_LOGIC). end case. Objetos de Datos Es importante conocer las implicaciones que tiene el uso de señales y variables en la respuesta del circuito que se quiere sintetizar. architecture Behavioral of Mux_OK is begin Operación correcta debido al uso de variable process (a. s1) variable sel : integer range 0 to 3. if (s1 = '1') then sel := sel + 2. when 3 => y <= d. c. end Mux_OK. Departamento de Ingeniería Eléctrica 22 Electrónica Digital .

s1 : in STD_LOGIC. d. s1) Begin sel <= 0. end if. Departamento de Ingeniería Eléctrica 23 Electrónica Digital . end if. end Mux_not_OK. use IEEE. end case. b.STD_LOGIC_1164. end process. b : in STD_LOGIC. if (s0 = '1') then sel <= sel + 1. when 3 => y <= d. d : in STD_LOGIC. end Behavioral. c : in STD_LOGIC. library IEEE.ALL. when 1 => y <= b. y : out STD_LOGIC). case sel is when 0 => y <= a. Inoperante debido al uso de señal begin process (a. c. entity Mux_not_OK is Port ( a : in STD_LOGIC. s0 : in STD_LOGIC. when 2 => y <= c. architecture Behavioral of Mux_not_OK is signal sel: integer range 0 to 3. if (s1 = '1') then sel <= sel + 2. Objetos de Datos Es importante conocer las implicaciones que tiene el uso de señales y variables en la respuesta del circuito que se quiere sintetizar. s0.

estructuran. analizan y evalúan el comportamiento Unidades de Diseño (design units) de un sistema digital Declaración de Entidad Configuración Declaración de Paquete (entity declaration) (configuration) (package declaration) Unidad Primaria Unidad Primaria Unidad Primaria Arquitectura Cuerpo del Paquete Unidades indispensables en la (architecture) descripción de un sistema (package body) Unidad Secundaria Unidad Secundaria Departamento de Ingeniería Eléctrica 24 Electrónica Digital . Estructura de VHDL Estructura General de un Programa VHDL Cada uno formado por declaraciones o instrucciones que definen.

Multiplexores. Sumadores/Restadores. etc. Multiplicadores. el cual es identificado como una entidad (entity) ¡Importante! No se describe cómo será realizado o implementado el circuito. ¿Qué es una Entidad? entidad (entity)  Bloque elemental de diseño Circuitos elementales digitales que forman de manera individual o en conjunto un sistema digital Ejemplos: Compuertas. Neurona-Digital. ALUs. es decir. Flip-Flops. Cin Puertos de Entidad Cout Puertos de Entrada A Salida Sumador SUMA B Declaración de una entidad  Consiste en la descripción de los puertos de entrada o salida de un circuito. su Arquitectura Departamento de Ingeniería Eléctrica 25 Electrónica Digital . Contadores.

‘0’. o sal. una Señal) de un determinado Tipo (p.) en el cual es definido el tipo. boolean. etc). expresión Conjunto de bits que buffer bit_vector representa a un •Similar al Puerto de Salida (Escritura).ej. pero además (pkg.standard) grupo de señales de ent. Identificador out = Salida bit (pkg. de tal forma que un objeto (p. ‘W’. •El valor leído (Entrada) es el mismo valor asignado Números enteros (Salida) al puerto.standard) Valores de ‘0’ o ‘1’ Lógico inout Define valores de •Puerto de Entrada (Lectura) y Salida (Escritura) boolean cierto o falso de •El valor leído (Entrada) es aquél que llega al puerto.std_logic_1164) Paquete (pkg. ‘X’. ¿Cómo se Describe a un Puerto? Tipo de Dato Conjuntos de Valores que se les ha asignado un nombre Modo (p.ej. integer (pkg.ej. bit. ‘L’. std_logic ‘1’. en caso de existir. ‘Z’. puede ser leído. ‘-’ (pkg. ‘H’.std_logic_1164) Más tipos Se irán introduciendo conforme avance el curso Departamento de Ingeniería Eléctrica 26 Electrónica Digital .standard) Valores ‘U’. Ver: “Uso de Bibliotecas y Paquetes” Arreglos de std_logic std_logic_vector (pkg. bit_vector. el tipo bit_vector) pueda tomar cualquier valor dentro del conjunto Nombre in = Entrada de valores que define al Tipo especificado.standard) acuerdo con una el valor que se le asigna (Salida). y no (pkg.

Modos de un Puerto In Out Buffer In Buffer Out Inout Buffer Bidireccional-3State Lógica Out Buffer Salida-3State Departamento de Ingeniería Eléctrica 27 Electrónica Digital .

) Finaliza declaración o subdeclaración (end) Finaliza declaración de la entidad Departamento de Ingeniería Eléctrica 28 Electrónica Digital . 5 end sumador. (. Cin: in bit. Ejemplo: Sumador Completo Cin Entidad Cout Puertos de Entrada A Puertos de Salida Sumador SUMA B (entity) Inicia declaración de la entidad (--) Indica Comentario Identificador de la entidad Nombres de los puertos Línea Sumador-completo de dos datos con longitudes de 1-bit N°. B. Cout: out bit). Tipo de Dato 4 SUMA. (Declaración de Entidad) 1 --Declaración de la entidad de un circuito sumador Modo de Operación 2 entity sumador is 3 port (A.

b1. 5 end circuito. a0. 4 F: out bit). b3. a1. a2. b0: in bit. (Declaración de Entidad) 1 --Declaracion de la entidad 2 entity circuito is 3 port (a3. b2. Ejemplo: Comparador a3 b3 a2 b2 F a1 b1 a0 b0 Línea Comparador – Uso de dos datos con longitudes de 4-bit No. Departamento de Ingeniería Eléctrica 29 Electrónica Digital .

S0] Declaración de Puertos Tipo-Vector port (vector_A. A1. vector_SUMA: out bit_vector (3 downto 0)). A2. 0 to 3) (Declaración de Entidad – Uso de Vectores) entity sumador is port (A. Departamento de Ingeniería Eléctrica 30 Electrónica Digital . Uso de Vectores Cin vector_A = [A3. B1. B2. S2. A0] Entidad vector_B = [B3. B0] Sumador Cout vector_SUMA = [S3. end sumador. B: in bit_vector (3 downto 0). SUMA: out bit_vector (3 downto 0)). S1. Cout: out bit. Para ordenar en forma ascendente utilizar to en lugar de Sumador-completo de dos datos con longitudes de 4-bit downto (p. vector_B: in bit_vector (3 downto 0). Cin: in bit.ej.

b: in bit_vector (3 downto 0). Ejemplo: Comparador (Uso de Vectores) a3 b3 a2 b2 F a1 b1 a0 b0 Línea Comparador – Uso de dos datos con longitudes de 4-bit N°. 5 end circuito. (Declaración de Entidad – Uso de Vectores) 1 --Declaracion de la entidad 2 entity circuito is 3 port (a. 4 F: out bit). Departamento de Ingeniería Eléctrica 31 Electrónica Digital .

Contadores. xc Paquete (Package) •Un paquete contiene: • Declaraciones de Tipos y Subtipos de Datos ieee std_logic_arith • Definiciones de Constantes std_logic_1164 • Definiciones de Funciones y Procedimientos • Declaraciones de Componentes (Sumadores. Uso de Bibliotecas y Paquetes user work Biblioteca (library) •Lugar donde se almacenan los Paquetes comps_dsp definidos por el fabricante de la herramienta de desarrollo o el usuario. Restadores. •Lugar donde se permite almacenar resultados de la compilación de diseños. etc) Un Paquete = Macro-Unidad de Diseño Objetivo: Facilitar el diseño Departamento de Ingeniería Eléctrica 32 Electrónica Digital . Multiplicadores. con el fin de utilizarlos en otros.

Uso de Bibliotecas y Paquetes Paquetes Bibliotecas Departamento de Ingeniería Eléctrica 33 Electrónica Digital .

all.all. Ejemplo: use ieee. Uso del paquete Permite el uso de todos los std_logic_1164 incluido en la componentes almacenados en el biblioteca ieee paquete Departamento de Ingeniería Eléctrica 34 Electrónica Digital .std_logic_1164. Uso de Bibliotecas y Paquetes Para llamar un paquete es necesario llamar a la biblioteca que lo contiene (donde ha sido compilado) Sintaxis: use nombre_biblioteca.nombre_paquete.

Paquete equivalente al Paquete std_logic_arith Synopsys std_logic_arith •Define tipos de vectores signados y no-signados. std_logic_misc •Define tipos. bit_vector. std_ulogic. y todos los operadores aritméticos sobre estos tipos. numeric_std Define tipos de vectores signados y no-signados basados en el tipo std_logic. subtipos. •Define funciones extendidas y de conversión para dichos tipos. IEEE std_logic_1164 •Define los tipos: std_logic. constantes y funciones complementarios para el paquete std_logic_1164. std_logic_vector. •Define funciones extendidas y de conversión para dichos tipos. std_ulogic_vector •Define funciones de conversión basadas sobre estos tipos. std_logic_unsigned •Define operadores aritméticos sobre el tipo std_ulogic_vector y los considera como operadores no- signados. Bibliotecas y Paquetes Paquetes predefinidos comúnmente utilizados Standard standard •Contiene tipos básicos: bit. Departamento de Ingeniería Eléctrica 35 Electrónica Digital . numeric_bit •Define tipos de vectores signados y no-signados basados en el tipo bit y todos los operadores aritméticos sobre estos tipos. integer •Paquete incluido por omisión. std_logic_signed •Define operadores aritméticos sobre el tipo std_logic_vector y los considera como operadores signados.

Y1: in std_logic. use ieee. Ejemplo: Multiplicador X0 Z0 X1 Z1 Circuito Y0 Multiplicador Z2 Y1 Z3 Multiplicador de dos datos con longitudes de 2-bit (Declaración de Entidad – Uso de Biblioteca y Paquete) library ieee. Z1. entity multiplica is port (X0. Y0. Z0: out std_logic). Z2. Departamento de Ingeniería Eléctrica 36 Electrónica Digital . X1. end multiplica. Z3.all.std_logic_1164.

Estilo Programación o Niveles de Descripción utilizados Modelización Nivel Algoritmo Funcional Nivel de Transferencia entre Registros (RTL) Flujo de Datos Nivel Lógico Nivel Compuerta Estructural Nivel Transistor (Topología / Layout) Departamento de Ingeniería Eléctrica 37 Electrónica Digital . ¿Qué es Arquitectura? arquitectura (architecture) Unidad de Diseño Secundaria que describe el comportamiento interno de una entidad.A través de la programación de varios procedimientos que permitan que la entidad (entity) cumpla con las condiciones de operación o comportamiento deseadas. ¿Cómo? .

En este caso. Estilo de Modelización .b: in bit_vector (1 downto 0).Comparador de Igualdad de dos Datos entradas y salidas. 8 architecture funcional of comp is a c 9 begin b Comparador 10 compara: process (a. 7 end comp.b) 11 begin 12 if a = b then 13 c <= ‘1’. Departamento de Ingeniería Eléctrica 38 Electrónica Digital . se describen las relaciones entre las Línea Nº Arquitectura . 18 end funcional.std_logic_1164. = 2Bits estructura o implementación física 1 --Ejemplo de una descripción abstracta (funcional) del sistema o circuito. (construcción secuencial) 6 c: out bit). 3 use ieee.Funcional Funcional .all. 17 end process compara. 4 entity comp is Uso de if-then-else 5 port (a. si a = b entonces c = 1 14 else 15 c <= ‘0’. sin importar la de Long. si a  b entonces c = 0 16 end if. 2 library ieee.

f1 6 f1: out std_logic). b 7 end com_or.Funcional Línea Nº Arquitectura .std_logic_1164. Estilo de Modelización . 1 0 1 15 end if. 3 use ieee.b) begin a b f1 11 if (a = ‘0’ and b=‘0’) then 0 0 0 12 f1 <= ‘0’. 8 architecture funcional of com_or is 9 begin 10 process (a. 0 1 1 13 else 14 f1 <= ‘1’. 4 entity com_or is a 5 port (a. 1 1 1 16 end process. Departamento de Ingeniería Eléctrica 39 Electrónica Digital .b: in std_logic.Compuerta OR de dos entradas 1 --Ejemplo de una descripción abstracta (funcional) 2 library ieee. 17 end funcional.all.

8 architecture fun_datos of comp is 9 begin 10 c <= ‘1’ when (a = b) else ‘0’.std_logic_1164. a c 6 c: out bit). 4 entity comp is 5 port (a. se describe la forma en la que los datos se pueden transferir entre los diferentes módulos operativos que constituyen la entidad (sistema o circuito) La construcción Línea Arquitectura . Estilo de Modelización – Flujo de Datos Flujo de Datos . 12 Departamento de Ingeniería Eléctrica 40 Electrónica Digital . 3 use ieee.En este caso. b Comparador 7 end comp. 11 end fun_datos. = 2Bits when-else 1 --Ejemplo de una arquitectura usando when-else 2 library ieee.b: in bit_vector (1 downto 0).Comparador de Igualdad de dos Datos Nº de Long.all.

11 end booleana. b0 c 8 architecture booleana of comp is a1 9 begin b1 10 c <= (a(1) xnor b(1)) and (a(0) xnor b(0)). = 2Bits a 1 --Ejemplo de una arquitectura usando ecs. 4 entity comp is 5 port (a.all.std_logic_1164.b: in bit_vector (1 downto 0).Comparador de Igualdad de dos Datos Nº de Long. Estilo de Modelización – Flujo de Datos Uso de ecuaciones booleanas Línea Arquitectura . 12 Departamento de Ingeniería Eléctrica 41 Electrónica Digital . 6 c: out bit). a0 7 end comp. b Comparador 3 use ieee. booleanas c 2 library ieee.

Estilo de Modelización – Estructural Estructural . el comportamiento de un sistema o circuito es descrito mediante modelos lógicos establecidos de los componentes que conforman al sistema o circuito.En este caso. etc. como son: Compuertas. Modelos lógicos pueden ser: Diseñados por el Usuario Predefinidos por el Fabricante Almacenados en Paquetes contenidos en las bibliotecas de la Herramienta de Desarrollo Departamento de Ingeniería Eléctrica 42 Electrónica Digital . Contadores. Sumadores.

compuertas. Estilo de Modelización – Estructural Línea Arquitectura . 6 c: out bit). c). 13 U2: and2 port map (m(0).all. b(1). a0 U0 m0 b0 c 8 architecture estructural of comp is U2 9 signal m: bit_vector (0 to 1). m(1)).b: in bit_vector (0 to 1). 14 end estructural. a1 U1 m1 10 begin b1 11 U0: xnor2 port map (a(0).std_logic_1164. b(0). m(1).Comparador de Igualdad de dos Datos Nº de Long. 12 U1: xnor2 port map (a(1). m(0)). 3 use work. 2 use ieee. 7 end comp.all. = 2Bits 1 library ieee. 4 entity comp is 5 port (a. Departamento de Ingeniería Eléctrica 43 Electrónica Digital .

Una descripción funcional consiste de una serie de instrucciones. Mas que especificar la estructura o la forma en que se deben conectar los componentes de un diseño. nos limitamos a describir su comportamiento. La ventaja de este tipo de descripción. por su alto nivel de abstracción. En VHDL una descripción funcional necesariamente implica el uso de por lo menos un bloque PROCESS (if-then-else) Departamento de Ingeniería Eléctrica 44 Electrónica Digital . que ejecutadas secuencialmente. es que no se requiere enfocar a un nivel de compuerta para implementar un diseño. Resumen En resumen. Esta descripción es similar a la hecha en un lenguaje de programación de alto nivel. modelan el comportamiento del circuito. se puede decir que: La descripción funcional se basa principalmente en el uso de procesos y de declaraciones secuenciales.

El orden en el que las instrucciones son ejecutadas depende de los eventos ocurridos en las señales. La mayoría de los lenguajes de programación. Departamento de Ingeniería Eléctrica 45 Electrónica Digital . una después de otra. COMENTARIO: Dentro de una arquitectura en VHDL. utilizan este tipo de instrucciones. Resumen Definición de instrucción secuencial: Las instrucciones secuenciales son aquellas que son ejecutadas serialmente. similar al funcionamiento del circuito. como C o Pascal. no existe un orden específico de ejecución de las asignaciones. En VHDL las instrucciones secuenciales son implementadas únicamente dentro del bloque PROCESS.

etc. puede realizarse también mediante ecuaciones booleanas. nand.). Resumen Descripción por flujo de datos: La descripción por flujo de datos indica la forma en que los datos se pueden transferir de una señal a otra sin necesidad de declaraciones secuenciales. El usuario puede diseñar estas estructuras y guardarlas para su uso posterior o tomarlas de los paquetes contenidos en las librerías de diseño del software que se esté utilizando. sumadores. en donde se emplean los operadores correspondientes: or. Descripción estructural: Este tipo de descripción basa su comportamiento en modelos lógicos establecidos (compuertas. xor. Este tipo de descripciones permite definir el flujo que tomarán los datos entre módulos encargados de realizar operaciones: when-else. and. contadores. Departamento de Ingeniería Eléctrica 46 Electrónica Digital . nor. xnor. Esta forma de descripción.

El estilo de diseño utilizado en la programación del circuito depende del diseñador y de la complejidad del proyecto. Por ejemplo. Ahora bien. Departamento de Ingeniería Eléctrica 47 Electrónica Digital . un diseño puede describirse por medio de ecuaciones booleanas. Resumen Comparación entre los estilos de diseño. pero si es muy extenso quizá sea más apropiado emplear estructuras jerárquicas para dividirlo. la cual presenta la ventaja de requerir menos instrucciones y el diseñador no necesita un conocimiento previo de cada componente del circuito. es conveniente utilizar la descripción funcional. si se requiere diseñar un sistema cuyo funcionamiento dependa sólo de sus entradas y salidas.

Entonces. Departamento de Ingeniería Eléctrica 48 Electrónica Digital . a diferencia de las instrucciones secuenciales. las descripciones se pueden distinguir entre secuenciales (funcional) y concurrentes (flujo de datos y estructural). que únicamente se utilizan dentro del bloque PROCESS. Resumen Las instrucciones concurrentes (flujo de datos y estructural) se utilizan fuera de un bloque PROCESS.

entity seleccion is port ( m: in std_logic_vector(0 to 3). f: out std_logic).std_logic_1164. Indicar: nombre de la entidad:______________________________ los puertos de entrada:_____________________________ los puertos de salida:______________________________ el tipo de dato:___________________________________ Departamento de Ingeniería Eléctrica 49 Electrónica Digital . Ejercicios Para la siguiente declaración: library ieee. end seleccion. use ieee.all.

Ejercicios Señale cuál de los siguientes identificadores son correctos o incorrectos: 1logico _______ Desp_laza _______ con_trol ______ N_ivel __________ Pagina _______ architecture ______ registro ______ S_uma# _________ 2Suma _______ Res__ta _________ Departamento de Ingeniería Eléctrica 50 Electrónica Digital .

Entradas Salidas S0 X0 X1 Z0 0 0 0 0 ENTRADA SALIDA 0 0 1 0 S0 Z0 0 1 0 1 X0 X1 Z0 0 1 1 1 S0 0 X0 1 0 0 0 1 X1 1 0 1 1 1 1 0 0 1 1 1 1 MULTIPLEXOR Departamento de Ingeniería Eléctrica 51 Electrónica Digital . Ejercicios Describir la siguiente función por VHDL.

resultando en el siguiente END data_flow. x1: IN bit.solo bus extendida. listado VHDL. x0. 0 1 1 1 z0: OUT bit). Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 ENTITY multiplexor IS PORT (s0. Departamento de Ingeniería Eléctrica 52 Electrónica Digital .concatenación -. 1 0 0 0 ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 downto 0). 1 0 1 1 BEGIN z0 <= ‘0’ WHEN temp = “000” ELSE ‘0’ WHEN temp = “001” ELSE 1 1 0 0 ‘1’ WHEN temp = “010” ELSE ‘1’ WHEN temp = “011” ELSE ‘0’ WHEN temp = “100” ELSE 1 1 1 1 ‘1’ WHEN temp = “101” ELSE ‘0’ WHEN temp = “110” ELSE ‘1’ . se empleará el código de la tabla -. END multiplexor. Para la primera descripción que se temp <= s0 & x0 & x1. -.de las entradas en un mostrará.

1 0 0 0 ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 downto 0). 1 0 1 1 BEGIN z0 <= ‘0’ WHEN temp = “000” ELSE ‘0’ WHEN temp = “001” ELSE 1 1 0 0 ‘1’ WHEN temp = “010” ELSE ‘1’ WHEN temp = “011” ELSE ‘0’ WHEN temp = “100” ELSE 1 1 1 1 ‘1’ WHEN temp = “101” ELSE ‘0’ WHEN temp = “110” ELSE ‘1’ . 0 1 1 1 z0: OUT bit). x1: IN bit.de las entradas en un -. x0. Los valores asignados al tipo bit_vector temp <= s0 & x0 & x1. bit simple. Departamento de Ingeniería Eléctrica 53 Electrónica Digital . END multiplexor. son asignados con comillas simples (‘_’). -. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 ENTITY multiplexor IS PORT (s0.concatenación deber ser especificados con comillas -.solo bus dobles (“_”) y los valores asignados al tipo END data_flow.

x0. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 ENTITY multiplexor IS PORT (s0.de las entradas en un crear el bus “temp” y concatenar “s0”. Se empleó el objeto de datos SIGNAL para temp <= s0 & x0 & x1. 0 1 1 1 z0: OUT bit). 1 0 1 1 BEGIN z0 <= ‘0’ WHEN temp = “000” ELSE ‘0’ WHEN temp = “001” ELSE 1 1 0 0 ‘1’ WHEN temp = “010” ELSE ‘1’ WHEN temp = “011” ELSE ‘0’ WHEN temp = “100” ELSE 1 1 1 1 ‘1’ WHEN temp = “101” ELSE ‘0’ WHEN temp = “110” ELSE ‘1’ . Departamento de Ingeniería Eléctrica 54 Electrónica Digital . “x0” y “x1” en un solo objeto de datos y así facilitar la descripción.solo bus END data_flow. -. END multiplexor. 1 0 0 0 ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 downto 0). x1: IN bit. -.concatenación -.

¿Qué tipo de descripción se realizó en temp <= s0 & x0 & x1.solo bus END data_flow.de las entradas en un este multiplexor? -. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 ENTITY multiplexor IS PORT (s0. Departamento de Ingeniería Eléctrica 55 Electrónica Digital .concatenación -. 0 1 1 1 z0: OUT bit). -. END multiplexor. 1 0 0 0 ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 downto 0). x1: IN bit. 1 0 1 1 BEGIN z0 <= ‘0’ WHEN temp = “000” ELSE ‘0’ WHEN temp = “001” ELSE 1 1 0 0 ‘1’ WHEN temp = “010” ELSE ‘1’ WHEN temp = “011” ELSE ‘0’ WHEN temp = “100” ELSE 1 1 1 1 ‘1’ WHEN temp = “101” ELSE ‘0’ WHEN temp = “110” ELSE ‘1’ . x0.

x1: IN bit. ¿Qué tipo de descripción se realizó en temp <= s0 & x0 & x1. 1 0 1 1 BEGIN z0 <= ‘0’ WHEN temp = “000” ELSE ‘0’ WHEN temp = “001” ELSE 1 1 0 0 ‘1’ WHEN temp = “010” ELSE ‘1’ WHEN temp = “011” ELSE ‘0’ WHEN temp = “100” ELSE 1 1 1 1 ‘1’ WHEN temp = “101” ELSE ‘0’ WHEN temp = “110” ELSE ‘1’ .concatenación -. -.de las entradas en un este multiplexor? -. END multiplexor. x0. 1 0 0 0 ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 downto 0).solo bus END data_flow. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 ENTITY multiplexor IS PORT (s0. Departamento de Ingeniería Eléctrica 56 Electrónica Digital . 0 1 1 1 z0: OUT bit).

z0: OUT bit). Por lo tanto. tabla simplificada. Departamento de Ingeniería Eléctrica 57 Electrónica Digital . x1: IN bit. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 ENTITY multiplexor IS 1 0 1 1 PORT (s0. La siguiente descripción se deriva de la END data_flow. 1 1 0 0 END multiplexor. la descripción resulta más sencilla. ya que se ve que Z0 depende solamente del estado de S0. x0. 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS BEGIN z0 <= x0 WHEN s0 = ‘0’ ELSE x1.

Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 ENTITY multiplexor IS 1 0 1 1 PORT (s0. 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS BEGIN z0 <= x0 WHEN s0 = ‘0’ ELSE x1. x0. x1: IN bit. ¿Qué tipo de descripción se realizó en END data_flow. z0: OUT bit). 1 1 0 0 END multiplexor. este multiplexor? Departamento de Ingeniería Eléctrica 58 Electrónica Digital .

z0: OUT bit). ¿Qué tipo de descripción se realizó en END data_flow. x0. este multiplexor? Departamento de Ingeniería Eléctrica 59 Electrónica Digital . Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 ENTITY multiplexor IS 1 0 1 1 PORT (s0. x1: IN bit. 1 1 0 0 END multiplexor. 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS BEGIN z0 <= x0 WHEN s0 = ‘0’ ELSE x1.

not_s0 <= NOT s0. x1: IN bit. 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS SIGNAL not_s0. 1 1 0 0 END multiplexor. END data_flow. z0: OUT bit). La descripción mostrada a continuación. and2 <= s0 AND x1. hace uso del siguiente diagrama explícito and1 <= not_s0 AND x0. BEGIN z0 <= and1 OR and2. del multiplexor. Departamento de Ingeniería Eléctrica 60 Electrónica Digital . Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 ENTITY multiplexor IS PORT (s0. and1. x0. and2: bit.

1 1 0 0 END multiplexor. este multiplexor? and1 <= not_s0 AND x0. 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS SIGNAL not_s0. z0: OUT bit). and2: bit. not_s0 <= NOT s0. END data_flow. ¿Qué tipo de descripción se realizó en BEGIN z0 <= and1 OR and2. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 ENTITY multiplexor IS PORT (s0. x1: IN bit. and2 <= s0 AND x1. x0. and1. Departamento de Ingeniería Eléctrica 61 Electrónica Digital .

not_s0 <= NOT s0. and2 <= s0 AND x1. 1 1 0 0 END multiplexor. Ejercicios ENTRADA SALIDA Entradas Salidas X0 S0 Z0 S0 X0 X1 Z0 X1 Z0 0 X0 0 0 0 0 S0 1 X1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 ENTITY multiplexor IS PORT (s0. Departamento de Ingeniería Eléctrica 62 Electrónica Digital . 1 1 1 1 ARCHITECTURE data_flow OF multiplexor IS SIGNAL not_s0. END data_flow. z0: OUT bit). and1. x1: IN bit. ¿Qué tipo de descripción se realizó en BEGIN z0 <= and1 OR and2. x0. este multiplexor? and1 <= not_s0 AND x0. and2: bit.

Capítulo 3 Circuitos Lógicos Combinatorios Departamento de Ingeniería Eléctrica 1 Electrónica Digital .

Realiza cálculos basados en los valores de las Señales. Asigna los valores calculados a Señales específicas. Unidad de Cómputo/Cálculo que realiza lo siguiente: Lectura de Señales. Departamento de Ingeniería Eléctrica 2 Electrónica Digital . Programación de Estructuras Básicas Diseño (Programación) de una Estructura Básica Combinatoria Declaración Entidad Sintaxis: architecture nombre_arquitectura of nombre_entidad is Declaración {Declarativas de Bloque} –Se analizarán posteriormente Arquitectura begin {Enunciados Concurrentes} end [nombre_arquitectura] Enunciado Concurrente.

en lugar del término Construcción Departamento de Ingeniería Eléctrica 3 Electrónica Digital . Proceso (process) Permite definir un algoritmo secuencial que lee valores de Señales y calcula nuevos valores que son asignados a otras Señales. Enunciados Concurrentes Tipos de Enunciados Concurrentes Asignación de Señal Permite asignar un valor calculado a una señal o puerto. Llamada a un Componente predefinido Llamada a un Subprograma Llama a un algoritmo que calcula y asigna (procedure o function) valores a Señales Asignación de Señales Tipos: Asignaciones de Señales mediante Ecuaciones Booleanas Asignaciones Condicionales de Señales – La construcción when-else Asignaciones de Señales por Selección – La construcción with-select-when Nota: Se puede utilizar el término Estructura de Control. Bloque (block) Grupo de enunciados concurrentes.

AND. nor. not Tipos de Operandos permisibles: bit. xor. OR. boolean. Si una expresión incluye varios de estos operadores (p. or. boolean y std_logic) Operandos deben tener la misma longitud. el cual se aplica por lo general a un solo operando. Ecuación Booleana Expresión VHDL q  a  (b  c) q = a or (b and c) y  a  (b  c )  d y = a or (not b and not c) or d Departamento de Ingeniería Eléctrica 4 Electrónica Digital . nand. también arreglos unidimensionales (del tipo bit.ej. XNOR) es necesario utilizar paréntesis para evaluarla correctamente. xnor. std_logic. excepto para el operador not. Operadores Lógicos Operadores Lógicos and.

2 use ieee. x2. cada función de salida es 8 begin descrita mediante su ecuación booleana 9 x1 <= a xnor b. 5 x1. f: in std_logic. Booleanas 1 library ieee.all. x3: out std_logic). 6 end logica. Departamento de Ingeniería Eléctrica 5 Electrónica Digital . correspondiente. cual implica el uso de operadores lógicos. 3 entity logica is 4 port (a. 11 x3 <= (e xor f) and (c and d).std_logic_1164. e. 12 end booleana. Asignación de Señales con Ecuaciones Booleanas a x1 b c x2 d x3 e f L Ejemplo Nº 1 – Asignaciones de Señales – Uso de Ecs. En este tipo de 7 architecture booleana of logica is asignaciones.b. lo 10 x2 <= ((c and d) or (a xnor b)) nand ((e xor f) and (c and d)). d.c.

3 entity logica is A B C P Q R 4 port (A. 0 0 0 1 0 1 6 end logica. 2 use ieee. 1 1 0 0 1 0 15 end arq_log.std_logic_1164.all. 11 Q <= (not A and not B and C) or (A and not B and C) 1 0 0 0 0 0 12 or (A and B and not C).R: out std_logic). Booleanas 1 library ieee. 0 0 1 1 1 0 7 architecture arq_log of logica is 8 begin 0 1 0 0 0 1 9 P <= (not A and not B and not C) or (not A and not B and C) 0 1 1 1 0 1 10 or (not A and B and C) or (A and B and C). Asignación de Señales con Ecuaciones Booleanas L Ejemplo Nº 2 – Asignaciones de Señales – Uso de Ecs. 1 0 1 0 1 0 13 R<= (not A and not B and not C) or (not A and B and not C) 14 or (not A and B and C). 1 1 1 1 0 0 P  A B C  A B C  A BC  ABC Q  A B C  AB C  ABC R  A B C  A BC  A BC Departamento de Ingeniería Eléctrica 6 Electrónica Digital .B.Q. 5 P.C: in std_logic.

SINTAXIS: [ etiqueta: ] señal <= [ opción ] [ valor ] when condición 1 else [ valor ] when condición 2 else unaffected. Formato del enunciado WHEN-ELSE Enunciados WHEN-ELSE: La construcción when-else es una asignación condicional. que debe incluir todas las opciones posibles de variación de una señal. unaffected : Permite que no se realice ninguna acción. Departamento de Ingeniería Eléctrica 7 Electrónica Digital . Se pueden anidar varias condiciones en una misma asignación Ejemplo: s <= “11” when a = b else “10” when a > b else “01”.

El orden en el que se declaren las condiciones de entrada.b.std_logic_1164. a b c f 6 end tabla. b 2 use ieee. 5 f: out std_logic). Asignación Condicional de Señales L Ejemplo Nº 3 . 1 0 1 0 14 end arq_tabla. no es importante. Departamento de Ingeniería Eléctrica 8 Electrónica Digital . 0 0 0 1 7 architecture arq_tabla of tabla is 8 begin 0 0 1 0 9 f <= ‘1’ when (a = ‘0’ and b=‘0’ and c=‘0’) else 0 1 0 0 10 ‘1’ when (a = ‘0’ and b=‘1’ and c=‘1’) else 0 1 1 1 11 ‘1’ when (a = ‘1’ and b=‘1’ and c=‘0’) else 1 0 0 0 12 ‘1’ when (a = ‘1’ and b=‘1’ and c=‘1’) else 13 ‘0’. c Tabla 3 entity tabla is 4 port (a. 1 1 0 1 1 1 1 1 La construcción when-else permite definir paso a paso el comportamiento de un sistema.all.c: in std_logic. Para esto.b.Uso de la construcción when-else a Entidad f(a. se declaran los valores que se deben asignar a una señal (o grupo) en función de las diferentes condiciones de entrada posibles.c) 1 library ieee.

all.std_logic_1164. 0 1 0 0 0 5 F: out std_logic). 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 Departamento de Ingeniería Eléctrica 9 Electrónica Digital .B. 14 end arq_func.D: in std_logic.Uso de la construcción when-else 0 0 0 0 1 1 library ieee. 0 1 0 1 1 6 end funcion. 0 0 0 1 0 2 use ieee. Asignación Condicional de Señales A B C D F L Ejemplo Nº 4 . 0 1 1 0 1 7 architecture arq_func of funcion is 0 1 1 1 0 8 begin 1 0 0 0 0 9 F <= ‘1’ when (A = ‘0’ and B=‘0’ and C=‘0’ and D=‘0’) else 1 0 0 1 0 10 ‘1’ when (A = ‘0’ and B=‘1’ and C=‘0’ and D=‘1’) else 1 0 1 0 0 11 ‘1’ when (A = ‘0’ and B=‘1’ and C=‘1’ and D=‘0’) else 1 0 1 1 0 12 ‘1’ when (A = ‘1’ and B=‘1’ and C=‘1’ and D=‘1’) else 1 1 0 0 0 13 ‘0’. 0 0 1 0 0 3 entity funcion is 0 0 1 1 0 4 port (A.C.

“no funciona” when others. la asignación se hace según el resultado de la expresión. “amarillo” when “11”. SINTAXIS with expresión select señal <= [ opciones ] [ valor ] when caso 1. caso : •Valor que toma la expresión •Intervalo de valores con to o downto •Lista de valores separados por | [Alt-124] •La palabra reservada others EJEMPLO: with estado select semaforo <= “rojo” when “01”. [ valor ] when caso 2. Formato del enunciado WITH-SELECT-WHEN Enunciados WITH-SELECT-WHEN: La construcción with-select-when es una asignación por selección. Departamento de Ingeniería Eléctrica 10 Electrónica Digital . “verde” when “10”.

all. como en el ejemplo descrito a(1) y a(0) forman 14 end arq_cir.). forman un vector. •Por lo general.std_logic_1164. 3 entity circuito is 0 1 0 4 port (a: in std_logic_vector (1 downto 0). 12 ‘1’ when “10”. 7 architecture arq_cir of circuito is 8 begin Únicamente. el punto y coma (. de señales con base a los diferentes valores de otra señal o grupo de 11 ‘0’ when “01”. Asignación de Señales por Selección L Ejemplo Nº 5 – Uso de la construcción with-select-when a(1) a(0) C 1 library ieee. un grupo de señales 13 ‘1’ when others. 0 0 1 2 use ieee. Departamento de Ingeniería Eléctrica 11 Electrónica Digital . 1 0 1 5 C: out std_logic). señales previamente seleccionada(o). 1 1 1 6 end circuito. el vector a.) se utiliza cuando se •La estructura with-select-when se 9 with a select finaliza la construcción with-select utiliza para asignar un valor (de varios posibles) a una señal o grupo 10 C <= ‘1’ when “00”. se utiliza la coma (.

1 0 0 1 0 13 ‘1’ when “0101”. 1 1 0 1 1 18 end arq_selec. 0 0 0 1 1 2 use ieee. 1 0 0 0 0 11 ‘1’ when “0010”. 5 F: out std_logic). 1 0 1 1 1 16 ‘1’ when “1101”. 0 1 0 1 1 7 architecture arq_selec of seleccion is 8 begin 0 1 1 0 0 9 with M select 0 1 1 1 1 10 F <= ‘1’ when “0001”. 12 ‘1’ when “0011”. Asignación de Señales por Selección M3 M2 M1 M0 F L Ejemplo Nº 6 – Uso de la construcción with-select-when Circuito Combinatorio que detecte Números Primos de 4-Bits 0 0 0 0 0 1 library ieee.std_logic_1164. 15 ‘1’ when “1011”. 1 1 1 0 0 1 1 1 1 0 Departamento de Ingeniería Eléctrica 12 Electrónica Digital . 0 0 1 0 1 3 entity seleccion is 0 0 1 1 1 4 port (M: in std_logic_vector (3 downto 0). 1 0 1 0 0 14 ‘1’ when “0111”. 1 1 0 0 0 17 ‘0’ when others.all. 0 1 0 0 0 6 end seleccion.

a[1:0] s: in std_logic_vector (1 downto 0). c[1:0] architecture arqmux of mux is 10 begin d[1:0] 11 y(1) <= (a(1) and not s(1) and not s(0)) or (b(1) and not s(1) and s(0)) or s[1:0] (c(1) and s(1) and not s(0)) or (d(1) and s(1) and s(0)). c. use ieee. 00 y: out std_logic_vector (1 downto 0)). Departamento de Ingeniería Eléctrica 13 Electrónica Digital . b[1:0] 01 Mux y[1:0] end mux. entity mux is port (a. y(0) <= (a(0) and not s(1) and not s(0)) or (b(0) and not s(1) and s(0)) or (c(0) and s(1) and not s(0)) or (d(0) and s(1) and s(0)).all. Booleanas Mux 4 a 1 (2-Bits) library ieee. b. d: in std_logic_vector (1 downto 0).std_logic_1164. end arqmux. Ejemplo: Multiplexor Ejemplo Nº 7 – Multiplexor 4 a 1 / Uso de Ecs.

b. b[1:0] y: out std_logic_vector (1 downto 0)). end arqmux. Departamento de Ingeniería Eléctrica 14 Electrónica Digital . use ieee. 01 Mux y[1:0] c[1:0] end mux. c. Ejemplo: Multiplexor Ejemplo Nº 8 – Multiplexor 4 a 1 / Uso de when-else Mux 4 a 1 (2-Bits) library ieee. 00 s: in std_logic_vector (1 downto 0). entity mux is a[1:0] port (a. d: in std_logic_vector (1 downto 0). 10 architecture arqmux of mux is d[1:0] 11 begin y <= a when s = “00” else s[1:0] b when s = “01” else c when s = “10” else d.all.std_logic_1164.

d when others. Ejemplo: Multiplexor Ejemplo Nº 9 – Multiplexor 4 a 1 / Uso de with-select-when Mux 4 a 1 (2-Bits) library ieee. 01 Mux y[1:0] c[1:0] end mux. use ieee.all. b. 00 s: in std_logic_vector (1 downto 0).std_logic_1164. b when “01”. entity mux is a[1:0] port (a. 10 architecture arqmux of mux is d[1:0] 11 begin with s select s[1:0] y <= a when “00”. b[1:0] y: out std_logic_vector (1 downto 0)). c when “10”. Departamento de Ingeniería Eléctrica 15 Electrónica Digital . d: in std_logic_vector (1 downto 0). end arqmux. c.

Asignación de Señal Permite asignar un valor calculado a una señal o puerto. Proceso (process) Permite definir un algoritmo secuencial que lee valores de Señales y calcula nuevos valores que son asignados a otras Señales. es decir. por lo que el orden en el cual son declarados tiene un efecto significativo en la lógica que se intenta describir o sintetizar. Procesos (process) Tipos de Enunciados Concurrentes. Departamento de Ingeniería Eléctrica 16 Electrónica Digital . Llamada a un Componente predefinido Llamada a un Subprograma Llama a un algoritmo que calcula y asigna valores a Señales Proceso (process) Cada proceso es conformado por un conjunto de enunciados secuenciales. Bloque (block) Grupo de enunciados concurrentes. Enunciados Secuenciales  Son interpretados por la herramienta de síntesis en forma secuencial. uno por uno.

Enunciados null Departamento de Ingeniería Eléctrica 17 Electrónica Digital . Procesos (process) Enunciados de Asignación de Variables Proceso (process) Enunciados de Asignación de Señales Enunciados if Enunciados case Enunciados loop Enunciados Enunciados next Secuenciales Enunciados exit Enunciados de Subprogramas Nota importante: Enunciados return Una señal que se vea involucrada dentro de un proceso no recibe inmediatamente el valor asignado. Una variable que sea utilizada dentro de un proceso sí recibe el valor de forma inmediata. sólo hasta el final Enunciados wait del mismo.

else {ejecuta grupo-2 de enunciados secuenciales}. end if. Formato del enunciado IF-THEN-ELSE Enunciados if: if la_condición_es_cierta then La construcción if-then-else {ejecuta grupo-1 de enunciados secuenciales}. end if. La construcción if-then-elsif-then- else elsif la_condición-2_se_cumple then {ejecuta grupo-2 de enunciados secuenciales}. else {ejecuta grupo-3 de enunciados secuenciales}. Departamento de Ingeniería Eléctrica 18 Electrónica Digital . Enunciados if: if la_condición-1_se_cumple then {ejecuta grupo-1 de enunciados secuenciales}.

Operadores Relacionales Operadores Relacionales Características. Los operadores (<. Operadores incluidos en los paquetes: std_numeric y std_logic_arith Los operadores de Igualdad y Desigualdad (= . Uso: Para fines de comparación de datos. >. /=) utilizan todos los tipos de datos. >=) son definidos para los tipos escalar y arreglos unidimensionales de tipos de datos enumerados o enteros. <=. Operador Significado = Igual /= Diferente < Menor <= Menor o Igual > Mayor >= Mayor o Igual Departamento de Ingeniería Eléctrica 19 Electrónica Digital .

16 end process compara.std_logic_1164.b: in std_logic_vector (1 downto 0). 14 c <= ‘0’. 17 end funcional. Departamento de Ingeniería Eléctrica 20 Electrónica Digital . 3 entity comp is 4 port (a.La construcción if-then-else Comparador de dos palabras con long.b) a 10 begin c b 11 if a = b then Comparador 12 c <= ‘1’. 15 end if. La construcción if-then-else sirve para 5 c: out std_logic). de 2-bits 1 library ieee. seleccionar una operación con base al análisis (evaluación lógica  Cierto o Falso) 6 end comp. de una condición. 13 else Lista-Sensitiva Señales (incluyendo puertos) leídas por el proceso. 7 architecture funcional of comp is 8 begin 9 compara: process (a. Enunciado IF-THEN-ELSE Ejemplo Nº 10 . La construcción: if-then-else 2 use ieee.all.

b: in std_logic_vector (3 downto 0).q. 13 elsif (a > b) then 14 q <= 1’. utiliza cuando se requiere analizar más de una condición de entrada. 6 end comp4.std_logic_1164. Enunciado IF-THEN-ELSIF-THEN-ELSE La construcción: Ejemplo Nº 11 . ¿Qué circuito es inferido? ¿Qué valores tienen las otras 15 else salidas en este instante? 16 r<= ‘1’. q 7 architecture arq_comp4 of comp4 is a>b 8 begin r 9 process (a. 17 end if.all. 2 use ieee.b) b[3:0] 10 begin a<b 11 if (a = b) then 12 p<= ‘1’. La construcción if-then-elsif-then-else se 19 end arq_comp4. Departamento de Ingeniería Eléctrica 21 Electrónica Digital .r: out std_logic). 18 end process. a[3:0] a=b 5 p.La construcción if-then-elsif-then-else if-then-elsif-then-else Comparador de Magnitud 2-Words de 4-bits 1 library ieee. 3 entity comp4 is p 4 port (a.

std_logic_1164. Si: A < B entonces S = 01 1 0 1 1 0 1 else 1 1 0 0 1 0 S <= “10”.La construcción if-then-elsif-then-else 0 0 0 0 1 1 Comparador de Magnitud 2-Words de 2-Bits / Salida Codificada 0 0 0 1 0 1 library ieee. entity comp is 0 0 1 1 0 1 port (A. 0 0 1 0 0 1 use ieee.B: in std_logic_vector (1 downto 0). 0 1 0 0 1 0 S: out std_logic_vector (1 downto 0)). 0 1 0 1 1 1 end comp. Si: A > B entonces S = 10 end if. 1 1 0 1 1 0 end process.all. Enunciado IF-THEN-ELSIF-THEN-ELSE A1 A0 B1 B0 S1 S0 Ejemplo Nº 12 . elsif (A < B) then Si: A = B entonces S = 11 1 0 1 0 1 1 S <= “01”. 1 1 1 1 1 1 Departamento de Ingeniería Eléctrica 22 Electrónica Digital . 1 1 1 0 1 0 end arq_comp. architecture arq_comp of comp is 0 1 1 0 0 1 begin 0 1 1 1 0 1 process (A.B) 1 0 0 0 1 0 begin if (A = B) then Operación deseada: 1 0 0 1 1 0 S<= “11”.

begin elsif m = “0101” then BCD/DEC 0 a f <= ‘0’. i <= ‘1’. process (m) begin a <= ‘1’. i <= ‘0’. i. g <= ‘0’. e <= ‘1’. f. end if. e. 1 b elsif m = “0110” then b <= ‘1’. m0 1 3 d h <= ‘0’. d <= ‘0’. port (m: in std_logic_vector (3 downto 0). m3 8 6 g j <= ‘0’.all. Salidas en Activo-Bajo 9 j Departamento de Ingeniería Eléctrica 23 Electrónica Digital . Ejemplo Nº 13 – Decodificador de BCD a Decimal elsif m = “0001” then library ieee. use ieee. 2 c c <= ‘1’. h. end process. elsif m = “0100” then architecture arqdeco of deco is e <= ‘0’.std_logic_1164. Enunciado IF-THEN-ELSIF-THEN-ELSE Decodificadores: BCD a Decimal if m = “0000” then a <= ‘0’. m2 4 5 f elsif m = “1001” then g <= ‘1’. d. 8 i end arqdeco. h <= ‘1’. end deco. b <= ‘0’. elsif m = “0111” then d <= ‘1’. m1 2 4 e elsif m = “1000” then f <= ‘1’. b. g. elsif m = “0010” then entity deco is c <= ‘0’. 7 h j <= ‘1’. elsif m = “0011” then a. c. j: out std_logic).

std_logic_1164. a4 4 2 d2 entity codif is a5 5 4 port (a: in std_logic_vector (9 downto 0). elsif a = “0100000000” then d <= “1000”. if a = “0000000001” then d <= “0000”.all. elsif a = “0000100000” then d <= “0101”. end arqcodif. elsif a = “0010000000” then d <= “0111”. a7 7 end codif. d3 a6 6 8 d: out std_logic_vector (3 downto 0)). Enunciado IF-THEN-ELSIF-THEN-ELSE Codificadores: Decimal a BCD DEC/BCD a0 0 a1 1 Ejemplo Nº 14 – Codificador Decimal a BCD a2 2 Entrada Decimal d0 Salida BCD library ieee. Departamento de Ingeniería Eléctrica 24 Electrónica Digital . end if. else d <= “1111”. elsif a = “0000000100” then d <= “0010”. a3 3 1 d1 use ieee. end process. elsif a = “0000001000” then d <= “0011”. elsif a = “0000000010” then d <= “0001”. architecture arqcodif of codif is a8 8 begin a9 9 process (a) begin elsif a = “0001000000” then d <= “0110”. elsif a = “0000010000” then d <= “0100”. elsif a= “1000000000” then d <= “1001”.

when ejecuta una o varias instrucciones secuenciales que dependen del valor de una sola expresión. ] end case. when 5 | 6 => acta <=“Aprobado”. Formato del enunciado CASE Enunciados CASE: La construcción case . Departamento de Ingeniería Eléctrica 25 Electrónica Digital . when others => acta <=“Suspendido”. end case. when 8 downto 7 => acta <=“Notable”. EJEMPLO: case puntuacion is when 9 to 10 => acta <=“Sobresaliente”. SINTAXIS case expresion is when caso1 => enunciados secuenciales. } [when others => enunciados secuenciales. {when caso2 => enunciados secuenciales. when 0 => acta <=“No presento”.

Enunciado CASE Decodificadores: BCD a 7-Segmentos Código BCD (A) Segmentos del Display (d) d6 d5 d4 d3 d2 d1 d0 a A3 A2 A1 A0 a b c d e f g b A0 a 0 0 0 0 0 0 0 0 0 0 1 1 c d[6:0] A1 f g b 0 0 0 1 1 0 0 1 1 1 1 2 d A2 0 0 1 0 0 0 1 0 0 1 0 4 e e c A3 0 0 1 1 0 0 0 0 1 1 0 8 f d 0 1 0 0 1 0 0 1 1 0 0 g 0 1 0 1 0 1 0 0 1 0 0 Salidas en Activo-Bajo 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 Departamento de Ingeniería Eléctrica 26 Electrónica Digital .

Construcción case-when: En esta construcción se evalúa la expresión especificada (case) y el valor que se obtenga se when “0010” => d <= “0010010”. when “1000” => d <= “0000000”. when “0100” => d <= “1001100”. port (A: in std_logic_vector (3 downto 0). when “0111” => d <= “0001110”.std_logic_1164. end case. library ieee. Departamento de Ingeniería Eléctrica 27 Electrónica Digital . when others => d <= “1111111”. (Uso de construcción case-when) when “0110” => d <= “0100000”. entity decobcd_7s is when “1001” => d <= “0000100”. when “0011” => d <= “0000110”. end process. end decobcd_7s. when “0001” => d <= “1001111”. begin process (A) begin case A is when “0000” => d <= “0000001”. use ieee. Aquella opción (when) que coincida con dicho valor. Enunciado CASE Decodificadores: BCD a 7-Segmentos Ejemplo Nº 15 – Decodificador BCD a 7-Segmnetos when “0101” => d <= “0100100”.all. architecture arqdeco of decobcd_7s is end arqdeco. compara con los asociados a las diferentes opciones descritas. d: out std_logic_vector (6 downto 0)). le serán ejecutados sus enunciados secuenciales adyacentes.

0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Suma  A  B Cout  A * B Departamento de Ingeniería Eléctrica 28 Electrónica Digital .B: in std_logic. Ejemplo: Medio Sumador Ejemplo Nº 16 – Medio Sumador library ieee. use ieee. B Sumador Cout Suma. A B Suma Cout Cout <= A and B. A Suma entity med_sum is Medio port (A.std_logic_1164. end arq_sum. architecture arq_sum of m_sum is begin Suma <= A xor B. end med_sum.all. Cout: out std_logic).

Ejemplo: Sumador Completo A Suma Sumador B Medio Sumador Completo Cin Cout Suma Cin A B Cin Suma Cout 0 0 0 0 0 A Cout 0 0 1 1 0 0 1 0 1 0 B 0 1 1 0 1 1 0 0 1 0 Medio Sumador 1 0 1 0 1 Sumador Completo 1 1 0 0 1 1 1 1 1 1 Suma  A B Cin  A BCin  A B Cin  ABCin  A  B  Cin Cout  A B Cin  A BCin  AB Cin  ABCin  AB  (A  B)Cin Departamento de Ingeniería Eléctrica 29 Electrónica Digital .

Cout: out std_logic). Cout <= (A and B) or ((A xor B) and Cin).std_logic_1164. entity sum is port (A. end sum. B. Cin: in std_logic. architecture arq_sum of sum is begin Suma <= A xor B xor Cin. Ejemplo: Sumador Completo Suma  A B Cin  A BCin  A B Cin  ABCin  A  B  Cin Cout  A B Cin  A BCin  AB Cin  ABCin  AB  (A  B)Cin Ejemplo Nº 17 – Sumador Completo library ieee.all. Departamento de Ingeniería Eléctrica 30 Electrónica Digital . Suma. end arq_sum. use ieee.

Ejemplo: Sumador Paralelo de 4 bits S0 Ejemplo Nº 18 – Sumador Paralelo de 4 bits A0  C0 library ieee. B1 architecture arqsuma of suma is signal C: std_logic_vector (2 downto 0). A1  C1 Cout: out std_logic). end suma.  C2 C(0) <= A(0) and B(0). S1 S: out std_logic_vector (3 downto 0). bloques. C(1) <= (A(1) and B(1)) or (C(0) and (A(1) xor B(1))). B0 entity suma is port (A. end arqsuma.std_logic_1164. S3 S(2) <= (A(2) xor B(2)) xor C(1). B3 Cout <= (A(3) and B(3)) or (C(2) and (A(3) xor B(3))). S2 begin A2 S(0) <= A(0) xor B(0). B: in std_logic_vector (3 downto 0). use ieee. Departamento de Ingeniería Eléctrica 31 Electrónica Digital .  Cout S(3) <= (A(3) xor B(3)) xor C(2). A3 C(2) <= (A(2) and B(2)) or (C(1) and (A(2) xor B(2))). procesos y llamadas a componentes o procedimientos) de que consta una arquitectura. Declaraciones de Señales (signal): Especifican señales que permiten conectar los diferentes tipos de enunciados concurrentes (asignación de señales. B2 S(1) <= (A(1) xor B(1)) xor C(0).all.

Operadores Aritméticos entity sum4b_arit is Operador Descripción port (A. S: out std_logic_vector (3 downto 0). Resta architecture arqsum of sum4b_arit is signal sum: std_logic_vector (4 downto 0).std_logic_1164. B: in std_logic_vector (3 downto 0).std_logic_arith. S <= sum (3 downto 0). . Ejemplo: Sumador Paralelo de 4 bits Ejemplo Nº 19 – Sumador Paralelo de 4 bits con Cout (Uso Operador Aritmético ‘+’) library ieee. Departamento de Ingeniería Eléctrica 32 Electrónica Digital .std_logic_unsigned. / División begin * Multiplicación sum <= ‘0’&A + ‘0’& B. end arqsum. use ieee. + Suma Cout: out std_logic ). use ieee. ** Potencia Cout <= sum(4). end sum4b_arit. use ieee.all.all.all.

Ejemplo: Buffer (salida de 3 estados) habilitar (enable) Ejemplo Nº 20 – Buffer Salida de 3-Estados library ieee.all. por lo que se debe utilizar el tipo std_logic. architecture arq_buffer of tri_est is Tipos Lógicos Estándares begin ‘U’ Valor No-Inicializado process (enable. use ieee. ‘Z’. ‘L’ 0 Débil end arq_buffer. end if. ‘1’ 1 Fuerte else ‘Z’ Alta Impedancia salida <= entrada. ‘H’ 1 Débil ‘-’ No Importa (Don’t Care) Departamento de Ingeniería Eléctrica 33 Electrónica Digital . que si lo soporta. salida: out std_logic). end tri_est. El tipo de dato bit no soporta el valor ‘W’ Valor Débil Desconocido end process. entrada: in std_logic. entrada) ‘X’ Valor Fuerte Desconocido begin if (enable = ‘0’) then ‘0’ 0 Fuerte salida <= ‘Z’.std_logic_1164. entrada salida entity tri_est is port (enable.

elsif (sel = “01”) then dout <= b. when “00” => dout <= a. begin if (sel = “00”) then dout <= a. when others => dout <= (others => ‘X’). b. dout <= (others => ‘X’). when “01” => dout <= b. process(sel. when “10” => dout <= c. Resumen de Circuitos combinatorios Multiplexores with sel select dout <= a when “00”. when “11” => dout <= d. b dout end if. process(sel. c d Departamento de Ingeniería Eléctrica 34 Electrónica Digital . b. b when sel = “01” else elsif (sel = “11”) then c when sel = “10” else dout <= d. d when sel = “11” else a else (others => ‘x’). b when “01”. end case. c. MUX end process. a. case sel is (others => ‘x’) when others. begin d when “11”. c. elsif (sel = “10”) then dout <= a when sel = “00” else sel dout <= c. a. d) c when “10”. d) end process.

Sel “0010” when “01”. Departamento de Ingeniería Eléctrica 35 Electrónica Digital . “XXXX” when others. when “01” => dout(1) <= ‘1’. “1000” when “11”. case sel is when “00” => dout(0) <= ‘1’. begin dout <= “0000”. Resumen de Circuitos combinatorios Decodificadores dout <= “0001” when sel = “00” else “0010” when sel = “01” else “0100” when sel = “10” else “1000” when sel = “11” else process(sel) (others => ‘x’). when others => dout <= “XXXX”. elsif (sel = “11”) then dout(3) <= ‘1’. Decoder “0100” when “10”. dout(0) <= ‘1’. process(sel) when “10” => dout(2) <= ‘1’. elsif (sel = “10”) then dout(2) <= ‘1’. begin when “11” => dout(3) <= ‘1’. end process. end if. if (sel = “00”) then end case. dout <= “0000”. with sel select end process. else dout dout <= “XXXX”. elsif (sel = “01”) then dout(1) <= ‘1’. dout <= “0001” when “00”.

1) when Op = shl else when suma => Res <= a + b. when orl => Res <= a or b. a elsif (Op = shl) then Res = sll(a. Resumen de Circuitos combinatorios Unidad Aritmética Lógica Res <= a + b when Op = suma else a . Res <= a + b when suma. 1). when resta => Res <= a . Op) begin if (Op = suma) then Res = a + b. elsif (Op = orl) then Res = a or b. b. 1) when shr. 1). 1). when shl => Res <= sll(a.b when Op = resta else process(a. a or b when orl. b. srl(a. end process. 1) when shl. end process. Op) a and b when Op = andl else begin a or b when Op = orl else case Op is sll(a. b ALU end if. elsif (Op = resta) then Res = a . srl(a. end case. elsif (Op = andl) then Res = a and b.b.b. with Op select when shr => Res <= srl(a. sll(a. process(a. a and b when andl. a . 1). 1).b when resta. Res elsif (Op = shr) then Res = srl(a. when andl => Res <= a and b. Op Departamento de Ingeniería Eléctrica 36 Electrónica Digital .

Capítulo 4 Circuitos Lógicos Secuenciales Departamento de Ingeniería Eléctrica 1 Electrónica Digital .

¿Qué es un Circuito Lógico Secuencial? Clasificación Entradas Salidas Asíncronos Entradas Salidas de Memoria de Memoria Elementos Elementos Lógica Síncronos Combinatoria Lógica Combinatoria Señal de Señal de Reloj Elementos de Reloj Memoria Señal de Reloj Mixtos Entradas Salidas de Memoria de Memoria Lógica Elementos Elementos Combinatoria Señal de Elementos de Señal de Reloj Memoria Reloj Señal de Reloj Departamento de Ingeniería Eléctrica 2 Electrónica Digital .

Elementos de Memoria: Flip-Flops S Q J Q D Q T Q R Q K Q Q Q clk clk clk clk S R Qt Qt+1 J K Qt Qt+1 0 0 0 0 0 0 0 0 D Qt Qt+1 T Qt Qt+1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 0 X 1 1 0 1 1 1 1 X 1 1 1 0 Departamento de Ingeniería Eléctrica 3 Electrónica Digital .

pueden tener información adicional llamada atributos. variables. Ejemplos de algunos atributos predefinidos: Suponiendo que t es un tipo enumerado. Atributos Los elementos en VHDL. s’event Devuelve true si se ha producido un cambio en s Departamento de Ingeniería Eléctrica 4 Electrónica Digital . entero. t’left Límite izquierdo del tipo t t’low Límite inferior del tipo t Suponiendo que s es una señal.. o físico. flotante. SINTAXIS name’atributo Atributo : predefinido o definido por el usuario. como señales. Estos atributos están asociados a estos elementos del lenguaje y se manejan en VHDL mediante comilla simple ( ’ ) . etc. se pueden utilizar los siguientes atributos.

entity ffd is D Qt Qt+1 port (D. if rising_edge(clk) – verdadero con el flanco de subida end if. las construcciones: if-then-else / if-then-elsif-then son las más utilizadas.std_logic_1164. end arq_ffd. use ieee. clk: in std_logic. clk 0 0 0 Q: out std_logic). Flip-Flop tipo D En el Diseño Secuencial con VHDL. D Q Ejemplo Nº 1 – Flip-Flop tipo D library ieee.D) begin if (clk’event and clk=‘1’) then Instrucciones equivalentes: Q <= D. if falling_edge(clk) – verdadero con el flanco de bajada if ( clk’event and clk= ’0’ and clk’last_value= ’1’ ) Departamento de Ingeniería Eléctrica 5 Electrónica Digital . 0 1 0 end ffd.all. architecture arq_ffd of ffd is 1 0 1 begin 1 1 1 process (clk. if ( clk’event and clk= ’1’ and clk’last_value= ’0’ ) end process.

begin process (clk. S. Q <= ‘0’. 1 1 1 .all. end if. end if. Q. architecture arq_ffsr of ffsr is end arq_ffsr. Qn <= ‘1’. port (S. Qn <= Qn. end ffsr. elsif (S = ‘1’ and R = ‘0’) then Q <= ‘1’. end process. else entity ffsr is Q <= ‘-’. elsif (S = ‘0’ and R = ‘0’) then Ejemplo Nº 2 – Flip-Flop tipo SR Q <= Q. R) begin if (clk’event and clk=‘1’) then Departamento de Ingeniería Eléctrica 6 Electrónica Digital . Qn <= ‘0’. R. use ieee.std_logic_1164. library ieee. Qn: buffer std_logic). Qn <= ‘-’. clk: in std_logic. Flip-Flop tipo SR S R Qt Qt+1 S Q 0 0 0 0 0 0 1 1 0 1 0 0 R Qn 0 1 1 0 clk 1 0 0 1 1 0 1 1 if (S = ‘0’ and R = ‘1’) then 1 1 0 .

architecture arqreg of reg is begin clk process (clk.std_logic_1164. end process. end arqreg. Q: out std_logic_vector (0 to 7)). Departamento de Ingeniería Eléctrica 7 Electrónica Digital .D) begin if (clk’event and clk=‘1’) then Q <= D.all. end if. use ieee. D[0:7] Q[0:7] clk: in std_logic. Registros Paralelo de 8 bits Ejemplo Nº 3 – Registro Paralelo de 8-Bits library ieee. entity reg is port (D: in std_logic_vector (0 to 7). end reg.

CLR. 0 ‘-’ 0 1 end if. Qn: out std_logic_vector (3 downto 0)). Q1 CLK. Departamento de Ingeniería Eléctrica 8 Electrónica Digital . Registros Paralelo de 4 bits con Clear Ejemplo Nº 4 – Registro Paralelo de 4-Bits con ‘Clear’ library ieee.std_logic_1164. Qn <= not D. end arq_reg4. CLR: in std_logic. 1 D D Dn end process. D) begin D3 if (CLK’event and CLK=‘1’) then Q3 if (CLR = ‘1’) then Q <= D. use ieee. D0 end reg4. CLR D Q Qn Qn <= “1111”. CLK Q0 entity reg4 is CLR Q0 port (D: in std_logic_vector (3 downto 0).all. Q1 Q. Q2 D1 architecture arq_reg4 of reg4 is Q2 begin D2 Q3 process (CLK. end if. else Q <= “0000”.

Contadores clk Contador Q3 Q2 Q1 Q0 clk Q0 Q1 Q2 Q3 Diagrama de tiempo del contador de 4 bits Departamento de Ingeniería Eléctrica 9 Electrónica Digital .

architecture arqcont of cont4 is begin process (clk) Es verdadera con el flanco de bajada de clk begin if (clk’event and clk = ‘0’) then Q <= Q +1. end arqcont. use ieee. Departamento de Ingeniería Eléctrica 10 Electrónica Digital .all. use ieee. end cont4. end if. use ieee.std_logic_unsigned. end process. Q: buffer std_logic_vector (3 downto 0)).std_logic_arith.all.std_logic_1164. entity cont4 is port (clk: in std_logic. Contador Ascendente Ejemplo Nº 5 – Contador de 4-Bits library ieee.all.

all. use ieee. use ieee.all. end process. UD Q3 Q2 Q1 Q0 UD: in std_logic.std_logic_arith. Q: buffer std_logic_vector (3 downto 0)). end arq_contador. else 0 Cuenta Ascendente Q <= Q -1. Contador Ascendente/Descendente Ejemplo Nº 6 – Contador Ascendente/Descendente de 4-Bits library ieee. Departamento de Ingeniería Eléctrica 11 Electrónica Digital . clk entity contador is port (clk: in std_logic. architecture arq_contador of contador is begin process (UD. use ieee. 1 Cuenta Descendente end if.std_logic_unsigned.std_logic_1164.all. end contador. end if. clk) begin if (clk’event and clk = ‘1’) then if (UD = ‘0’) then UD Acción Q <= Q +1.

use ieee. architecture arq_cont of cont is begin process (clk. end process. Q3 Q2 Q1 Q0 clk. end cont. clk entity cont is port (P: in std_logic_vector (3 downto 0).std_logic_unsigned.all. Enp Load Q: buffer std_logic_vector (3 downto 0)). end if. Load.std_logic_1164. Reset.all. 1 1 Cuenta end if. Reset: in std_logic. P) begin if (Reset = ‘1’) then Operación Asíncrona Q <= “0000”. Enp Load Acción elsif (clk’event and clk = ‘1’) then if (Load = ‘0’ and Enp = ‘-’) then 0 0 Carga Q <= P. Contador con Reset y Carga Paralela Ejemplo Nº 7 – Contador de 4-bits con reset y carga en paralelo library ieee.all. end arq_cont. Enp. Reset use ieee. 0 1 Mantiene Estado elsif (Load = ‘1’ and Enp = ‘0’) then Q <= Q. P3 P2 P1 P0 use ieee. Departamento de Ingeniería Eléctrica 12 Electrónica Digital .std_logic_arith. Load. 1 0 Carga elsif (Load = ‘1’ and Enp = ‘1’) then Q <= Q + 1. Enp.

Máquinas Secuenciales Salidas Lógica Lógica Entradas Registros Combinatoria Combinatoria Máquina de Mealy con Salidas Asíncronas Salidas Lógica Lógica Entradas Registros Registros Combinatoria Combinatoria Máquina de Mealy con Salidas Síncronas Departamento de Ingeniería Eléctrica 13 Electrónica Digital .

Máquinas Secuenciales Ejemplo Nº 8 Representación de una Máquina de Mealy 0/0 Estado Entrada R Presente B 0 1 0/1 A B/1 C/0 1/1 B B/0 A/1 C A/0 C/0 1/0 A C 1/0 Próximo Estado / Salida S 0/0 Departamento de Ingeniería Eléctrica 14 Electrónica Digital .

Máquinas Secuenciales Entradas Salidas Lógica Lógica Registros Combinatoria Combinatoria Máquina de Moore con Salidas Asíncronas Salidas Lógica Entradas Registros Combinatoria Máquina de Moore con Salidas Síncronas Departamento de Ingeniería Eléctrica 15 Electrónica Digital .

Máquinas Secuenciales Ejemplo Nº 9 Representación de una Máquina de Moore B/0 0 1 Estado Entrada R Salida S (Para el Estado 0 Presente 0 1 Presente) 1 A B C 0 B C A 0 A/0 C/1 C C B 1 1 0 Próximo Estado Departamento de Ingeniería Eléctrica 16 Electrónica Digital .

p. PLDs/CPLDs/FPGAs (para estos dispositivos. La función XOR de todas las transiciones-salida de un estado = 1 (TRUE) –Esto asegura que no existan condiciones en conflicto que conduzcan a tener más de una transición de salida activas en forma simultánea. 3 Asignación de Estados. 4 Descripción del Comportamiento: Uso de Lenguajes de Descripción de Hardware (HDL) – VHDL y Verilog 5 Compilación / Síntesis del Diseño – Generación de Lógica (Ecuaciones Lógicas) / Asignación de Estados 6 Simulación Funcional 7 Implementación / Realización del Diseño: Realización de la Lógica con una Tecnología y/o Dispositivos predefinidos. Place & Route’). La función OR de todas las transiciones que dejan un estado = 1 (TRUE) –Esto permite determinar si existe una salida (por lo menos) de un estado dado. Microcontroladores. una vez que se ha llegado a él. 8 Simulación Temporizada Departamento de Ingeniería Eléctrica 17 Electrónica Digital . etc.ej. Biblioteca de Celdas CMOS. Diseño de Circuitos Secuenciales Síncronos Flujo de Diseño de una Máquina de Estados Finitos (FSM) 1 Dibujar el Diagrama de Transiciones de Estados. esta fase se le conoce como: ‘Mapping. Lógica Comercial. 2 Verificación del Diagrama de Estados: Asegurarse que todos los estados están representados.

Futuro s (Salida) Edo. Diseño de Circuitos Secuenciales Síncronos Circuito Secuencial que detecta 4-Unos (1’s) consecutivos Ejemplo Nº 10 0/0 1/0 0/0 1/0 1/0 1/0 1/1 d0 d1 d2 d3 d4 0/0 0/0 0/0 Edo. Presente a=0 a=1 a=0 a=1 d0 d0 d1 0 0 d1 d0 d2 0 0 d2 d0 d3 0 0 d3 d0 d4 0 1 d4 d0 d1 0 0 Departamento de Ingeniería Eléctrica 18 Electrónica Digital .

‘L’.‘U’.’1’.’-’).‘W’.‘L’. signal a: std_logic.‘Z’.‘H’.‘Z’. signal b: std_logic_vector (3 downto 0).‘X’.‘H’.‘W’.’-’ b está formado por 4-bits. se comprenderá primeramente el siguiente grupo de declaraciones type std_logic is (‘0’. cada uno de los cuales puede tener cualquiera de los valores: ‘0’.’1’.‘U’.‘L’.‘W’.‘U’.’1’. a puede tener cualquiera de los valores: ‘0’.‘X’.’-’ Departamento de Ingeniería Eléctrica 19 Electrónica Digital .‘X’.‘Z’. Diseño de Circuitos Secuenciales Síncronos ¿Cómo describir o declarar los estados (usando VHDL) a partir del Diagrama de Estados? Para entender el proceso de declaración de los estados.‘H’.

d2 d3. d4. d1. d1. edo_futuro: estados. d2. A este tipo de datos se le conoce como Tipo de Datos Enumerados edo_presente.presente y el edo. d3.futuro en el ejemplo Nº 10: edo_presente edo_futuro Tipos de Codificación utilizados: d0 d0 •One-Hot d1 d1 •Compact estados d2 d2 •Secuencial •Gray d3 d3 •Johnson d4 d4 •Definido por Usuario 000 d0 001 d1 010 d2 Declaración de Estados en una FSM 011 d3 100 d4 type estados is (d0. Diseño de Circuitos Secuenciales Síncronos Para declarar los estados de una Máquina de Estados Finitos se realiza lo siguiente: ¿Cómo son codificados: d0. d4). d2. función del Número de Estados (Tarea realizada 111 111 por el Compilador o estados es el nombre o identificador dado por el usuario al conjunto de datos conformado por d0. d1. d2. d3. El Número de Bits utilizados 101 101 en la codificación está en 110 110 signal edo_presente. Sintetizador)* d1. edo_presente y edo_futuro son también datos del tipo enumerado Departamento de Ingeniería Eléctrica 20 Electrónica Digital . d4? Valores que pueden tener el edo. d4) que describen al tipo de dato enumerado identificado con el nombre de estados. d3. edo_futuro son señales (signal) que pueden adquirir cualquiera de los valores (d0.

s <= ‘0’. Departamento de Ingeniería Eléctrica 21 Electrónica Digital . proceso2: process (clk) begin else if (clk’event and clk = ‘1’) then edo_futuro <= d0. edo_futuro <= d3. edo_futuro: estados. begin else proceso1: process (edo_presente.all. end process proceso2. Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 10 – Detector de Secuencia when d2=> library ieee. entity diagrama is s <= ‘0’. end arq_diagrama. edo_futuro <= d0. s <= ‘0’.std_logic_1164. port (clk. else s <= ‘0’. if a = ‘1’ then when d4 => edo_futuro <= d1. end if. a: in std_logic. s <= ‘0’. edo_futuro <= d4. edo_futuro <= d0. edo_futuro <= d2. architecture arq_diagrama of diagrama is when d3 => type estados is (d0. edo_futuro <= d1. if a = ‘1’ then signal edo_presente. if a = ‘1’ then s <= ‘0’. end if. else s <= ‘0’. else s: out std_logic). s <= ‘1’. d4). edo_presente <= edo_futuro. if a = ‘1’ then use ieee. s <= ‘0’. case edo_presente is s <= ‘0’. a) begin edo_futuro <= d0. end if. if a = ‘1’ then end case. d3. end diagrama. edo_futuro <= d0. d1. end process proceso1. d2. when d0 => end if. end if. when d1 => end if.

Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 11 0 S0/0 Máquina de Moore 0 1 1 S1/1 S2/1 1 1 0 S3/0 0 Departamento de Ingeniería Eléctrica 22 Electrónica Digital .

Edo_Pres <= Edo_Fut. end if. when S3 => Sal <= ‘0’. proceso1: process (Edo_Pres. if A = ‘0’ then Edo_Fut <= S0. S3). else signal Edo_Pres. begin end if. A) begin end case. Edo_Fut <= S2. else end if. use ieee. case Edo_Pres is end process proceso1. if A = ‘0’ then library ieee. Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 11 – Máquina de Moore when S2=> Sal <= ‘1’. else entity MOORE is Edo_Fut <= S3. S1. Edo_Fut <= S2. when S1 => Sal <= ‘1’. Edo_Fut <= S1. end ARQ_MOORE. proceso2: process (CLK) begin if A = ‘0’ then if (CLK’event and CLK = ‘1’) then Edo_Fut <= S0.std_logic_1164. end MOORE. Edo_Fut: Estados. Sal: out std_logic). S2. CLK: in std_logic. port (A.all. when S0 => Sal<= ‘0’. end process proceso2. end if. type Estados is (S0. Departamento de Ingeniería Eléctrica 23 Electrónica Digital . end if. if A = ‘0’ then architecture ARQ_MOORE of MOORE is Edo_Fut <= S3. else Edo_Fut <= S2.

Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 12 0/0 S0 Máquina de Mealy 0/0 1/1 1/1 S1 S2 1/1 1/0 0/1 S3 0/0 Departamento de Ingeniería Eléctrica 24 Electrónica Digital .

a: in std_logic. end MEALY. end if. S3). a) begin if a = ‘0’ then case Edo_Pres is sal <= ‘0’. Edo_Fut <= S3. begin when S3 => proceso1: process (Edo_Pres. sal <= ‘1’. when S2=> entity MEALY is if a = ‘0’ then port (clk. sal: out std_logic). S1. Edo_Fut <= S2. end case. Edo_Fut <= S2. Edo_Fut <= S1. Departamento de Ingeniería Eléctrica 25 Electrónica Digital . else end if. if a = ‘0’ then else sal <= ‘0’. proceso2: process (clk) begin when S1 => if (clk’event and clk = ‘1’) then if a = ‘0’ then Edo_Pres <= Edo_Fut.std_logic_1164. S2. sal <= ‘1’. Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 12 – Máquina de Mealy library ieee. end if. type Estados is (S0. sal <= ‘1’.all. Edo_Fut: Estados. else end ARQ_MEALY. end process proceso2. use ieee. else architecture ARQ_MEALY of MEALY is sal <= ‘0’. when S0 => Edo_Fut <= S3. signal Edo_Pres. end process proceso1. sal <= ‘0’. sal <= ‘1’. Edo_Fut <= S0. end if. end if. Edo_Fut <= S2. Edo_Fut <= S0.

Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 13 0 1 1 1/1 q0/0 q1/0 q2 q3/0 0 0/0 1 1 0 q4/0 0 ¿Qué tipo de Máquina es? ¿Es correcta su Descripción en VHDL? ¿Cumple las Reglas de Verificación de un Diagrama de Estados? Departamento de Ingeniería Eléctrica 26 Electrónica Digital .

use ieee. sal <= ‘1’. if a = ‘0’ then edo_fut <= q3. a) begin end if. when q1 => sal <= ‘0’. proceso1: process (edo_pres. sal <= ‘0’. edo_fut <= q4. sal: out std_logic). end if. q3. edo_pres <= edo_fut. q1. q2. Diseño de Circuitos Secuenciales Síncronos Ejemplo Nº 13 . q4). case edo_pres is when q4 => sal <= ‘0’. when q0 => sal <= ‘0’. else begin edo_fut <= q3. a: in std_logic. end if. end if.all. architecture arq_diag of diag is when q3 => sal <= ‘0’. edo_fut <= q2. end if.std_logic_1164. edo_fut <= q1. entity diag is else port (clk. if a = ‘0’ then if a = ‘0’ then edo_fut <= q4. edo_fut: estados. else end if. edo_fut <= q3. Departamento de Ingeniería Eléctrica 27 Electrónica Digital . type estados is (q0. edo_fut <= q4. else else edo_fut <= q1. end case. signal edo_pres. end process proceso1. proceso2: process (clk) begin if a = ‘0’ then if (clk’event and clk = ‘1’) then edo_fut <= q4. end arq_diag. end process proceso2.Máquina Mixta when q2=> if a = ‘0’ then library ieee. end diag.

Capítulo 5 Diseño jerárquico en VHDL Departamento de Ingeniería Eléctrica 1 Electrónica Digital .

¿Cómo integrar Entidades? ¿ Cómo integrar dos o más entidades en una sola entidad con el fin de formar un Sistema más complejo? Integración de Entidades en Integración de Estructuras Jerárquicas una sola Entidad Uso de Componentes (Components) Código Entidad Paquete Código C1 Integradora (Package) Código Entidad Código C2 Código Sub-entidad-1 Integradora (con Jerarquía de Mayor Nivel) Component C1 Código C3 Código Sub-entidad-2 Component C2 Código Sub-entidad-3 Llamado del Componente C1 Component C3 Código Cj Llamado del Componente C2 : Código Sub-entidad-j Component Cj Llamado del Componente C3 Código Cn : Código Sub-entidad-n Component Cn Cj = Componente-j Llamado del Componente Cj Llamado del Componente Cn Un Componente es descrito como una Entidad Departamento de Ingeniería Eléctrica 2 Electrónica Digital .

los códigos asociados a cada entidad o componente de nivel inferior no son combinados dentro del código de la Entidad-Sistema Departamento de Ingeniería Eléctrica 3 Electrónica Digital . ¿Qué es el Diseño Jerárquico? ¿ Cómo diseñar un Sistema complejo mediante la unión de bloques o módulos (entidades) diseñados en forma independiente ? Estructuras Jerárquicas Integración de Entidades Reset Entidad-1 Nivel Entidad-2 Nivel Inferior Inferior Contador Sub-entidad-1 q3 q2 q1 q0 clk Entidad Integradora de Nivel Superior Decodificador Entidad-Sistema Sub-entidad-2 a b c d e f g Entidad-3 Nivel Entidad-4 Nivel Inferior Inferior Entidad-Sistema •Una Entidad de Nivel Inferior se puede ver como un Componente independiente. •En este caso.

Metodología de Diseño Metodología de Diseño de Estructuras Jerárquicas Analizar el Sistema a diseñar y dividirlo en bloques jerárquicos (Componentes) Describir.ej. con WebPack de Xilinx) Departamento de Ingeniería Eléctrica 4 Electrónica Digital . simular y sintetizar los módulos o componentes. Crear un Paquete de Componentes (Package) – Código VHDL Describir la Entidad Integradora de Nivel Superior (con Mayor Jerarquía) que representará al Sistema completo – Código VHDL Los puntos con letra azul pueden también ser realizados a través de métodos esquemáticos (p.

Entrada ER Habilitación del Registro R Entrada FE Habilitación del Apuntador de Pila (Stack Pointer: ST) Entrada CIN Acarreo de Entrada Entrada OE Habilitación de Salidas Entrada PUSH / POP Control de Direccionamiento de Subrutinas Entradas S0 S1 Líneas de Selección Salidas Y3-Y0 Salidas del Secuenciador Salida COUT Acarreo de Salida VCC y GND Alimentación del Circuito Departamento de Ingeniería Eléctrica 5 Electrónica Digital . Ejemplo 1: Sistema a diseñar VCC R3  R 0 Alimentación Entradas por Registro GND Entradas Directas Y3Y0 Salidas AMD D3  D 0 2909 PUSH / POP Secuenciador OE S0 Señales de AMD2909 CIN Selección Control S1 ER FE Terminales Función Entradas por Registro R3-R0 A través de ellas se permite sostener (hold) una dirección. Entradas Directas D3-D0 Entradas del Secuenciador que permiten realizar un cambio de dirección en la lógica del programa.

Análisis del Sistema (Definición de Componentes) Descripción Interna del Circuito Secuenciador AMD2909 (Entradas por Registro) R3  R0 (Habilitación de Stack) (Habilitación de Registro) (Reloj) Registro CLK Apuntador FE ER REG Stack PUSH / POP D3  D 0 (Entradas Directas) D R ST PC Contador de S0 3 2 1 0 Latch Microprograma (Control de Multiplexor Mux 4:1 Arquitectura) S1 Y3 Y2 Y1 Y0 COUT Sumador (Acarreo de Salida) Y (Habilitación de Salida) CIN (Acarreo de Entrada) OE Y3 Y2 Y1 Y0 Departamento de Ingeniería Eléctrica 6 Electrónica Digital .

Diseño y programación de componentes Diseño del Registro (Entradas por Registro) R : R3  R 0 ER Registro (Habilitación de Registro) CLK REG (Reloj) Departamento de Ingeniería Eléctrica 7 Electrónica Digital .

Diseño y programación de componentes D R ST PC S : S1  S 0 Diseño del S0 11 10 01 00 Multiplexor 4 a 1 S1 Multiplexor Mux 4:1 Salida Y Departamento de Ingeniería Eléctrica 8 Electrónica Digital .

Diseño y programación de componentes Diseño del Contador de Microprograma PC Latch CLK Mux COUT Sumador (Acarreo de Salida) Y CIN (Acarreo de Entrada) Departamento de Ingeniería Eléctrica 9 Electrónica Digital .

Diseño y programación de componentes Diseño de la Pila (Stack) (Habilitación de Stack) ST Apuntador FE Stack PUSH / POP CLK PC Departamento de Ingeniería Eléctrica 10 Electrónica Digital .

Creación del Paquete de Componentes Departamento de Ingeniería Eléctrica 11 Electrónica Digital .

Realización del Programa de Alto Nivel (Top Level) Multiplexor Registro Archivo de Enlace de Componentes (Top Level) Contador de Pila (Stack) Microprograma Entidad-Sistema Verificar y Simular el Sistema Departamento de Ingeniería Eléctrica 12 Electrónica Digital .

Ejemplo 2: Sistema a diseñar Circuito Sináptico Salida excitatoria Bloque control Entrada (PDM) Salida inhibitoria 6 Bit de signo (MSB) Peso sináptico W Peso sináptico W Bloque control Multiplicador de Registro de 7 bits del peso Circuito de selección y frecuencia sináptico muestreador Departamento de Ingeniería Eléctrica 13 Electrónica Digital .

Tabla de funcionamiento del multiplicador de frecuencia Estado 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 000 0 0 0 0 0 0 0 0 001 0 0 0 0 1 0 0 0 010 0 0 1 0 0 0 1 0 Peso (w) 011 0 0 1 0 1 0 1 0 100 0 1 0 1 0 1 0 1 101 0 1 0 1 1 1 0 1 110 0 1 1 1 0 1 1 1 111 0 1 1 1 1 1 1 1 Departamento de Ingeniería Eléctrica 14 Electrónica Digital .

Análisis del Sistema (Definición de Componentes) Descripción Interna del circuito Sináptico rst cuenta ent Contador f_int Sal_exc Deco Demux Sal_inh w_int Registro w ( 6:0 ) w (6) Departamento de Ingeniería Eléctrica 15 Electrónica Digital .

Diseño y programación de componentes Diseño del contador clk Contador q (5 : 0) rst Departamento de Ingeniería Eléctrica 16 Electrónica Digital .

Encontrar la relación de distribución (solucion 1) Estado 0 1 2 3 4 5 6 7 AND 000 001 010 011 100 101 110 111 000 0 0 0 0 0 0 0 0 100 0 0 0 0 1 0 0 0 010 0 0 1 0 0 0 1 0 Peso (w) 110 0 0 1 0 1 0 1 0 001 0 1 0 1 0 1 0 1 101 0 1 0 1 1 1 0 1 011 0 1 1 1 0 1 1 1 111 0 1 1 1 1 1 1 1 Departamento de Ingeniería Eléctrica 17 Electrónica Digital .

Circuito Lógico resultante q2 q1 q0 f w2 w1 w0 Departamento de Ingeniería Eléctrica 18 Electrónica Digital .

Diseño y programación de componentes Diseño del decodificador q(5:0) f Deco w(5:0) Departamento de Ingeniería Eléctrica 19 Electrónica Digital .

Diseño y programación de componentes Diseño del decodificador q(5:0) f Deco w(5:0) Departamento de Ingeniería Eléctrica 20 Electrónica Digital .

Diseño y programación de componentes Diseño del decodificador q(5:0) f Deco w(5:0) Departamento de Ingeniería Eléctrica 21 Electrónica Digital .

Diseño y programación de componentes Diseño del decodificador q(5:0) f Deco w(5:0) Departamento de Ingeniería Eléctrica 22 Electrónica Digital .

Encontrar la relación de distribución (solución 2) Peso W Estados del contador (Q2 Q1 Q0) Q2 Q1 Q0 f w2 w1 w0 000 001 010 011 100 101 110 111 XX1 w2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 X10 w1 0 1 0 0 0 1 0 0 0 1 0 100 w0 0 1 1 0 0 1 0 1 0 1 0 000 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 f  Q0 w2  Q1Q0 w1  Q2Q1Q0 w0 1 1 1 0 1 1 1 1 1 1 1 Departamento de Ingeniería Eléctrica 23 Electrónica Digital .

Solución 2 : Encontrar la relación de distribución Generalización a N bits Q3 Q2 Q1 Q0 f Q4 Q3 Q2 Q1 Q0 f Q5 Q4 Q3 Q2 Q1 Q0 f XXX1 w3 XXXX1 w4 XXXXX1 w5 XX10 w2 XXX10 w3 XXXX10 w4 X100 w1 XX100 w2 XXX100 w3 1000 w0 X1000 w1 XX1000 w2 0000 0 10000 w0 X10000 w1 00000 0 100000 w0 000000 0 f  Q0 w3  Q1Q0 w2  Q2Q1Q0 w1  Q3Q2Q1Q0 w0 f  Q0 w4  Q1Q0 w3  Q2Q1Q0 w2  Q3Q2Q1Q0 w1  Q4Q3Q2Q1Q0 w0 f  Q0 w5  Q1Q0 w4  Q2Q1Q0 w3  Q3Q2Q1Q0 w2  Q4Q3Q2Q1Q0 w1  Q5Q4Q3Q2Q1Q0 w0 Departamento de Ingeniería Eléctrica 24 Electrónica Digital .

Diseño y programación de componentes Diseño del decodificador q(5:0) f Deco w(5:0) Departamento de Ingeniería Eléctrica 25 Electrónica Digital .

Creación del Paquete de Componentes Creación del Paquete de Componentes Departamento de Ingeniería Eléctrica 26 Electrónica Digital .

Realización del Programa de Alto Nivel (Top Level) ¿Que Estilo de Modelización tiene este programa? Contador Archivo de Enlace de Componentes (Top Level) Deco Departamento de Ingeniería Eléctrica 27 Electrónica Digital .

range: número entero calculable de la cantidad de copias. o bien. for … generate: el número de copias está determinado por un rango discreto. Estructuras de repetición GENERATE crea cero o más copias de un conjunto cerrado de instrucciones concurrentes. Existen dos clases de generate. integer_expression downto integer_expression Departamento de Ingeniería Eléctrica 28 Electrónica Digital . por ejemplo: integer_expression to integer_expression. DESCRIPCION label: nombre de esta instrucción la cual sirve para construir instrucciones generate anidadas. identifier: es específico de la instrucción for…generate. SINTAXIS label: for identifier in range generate {concurrent_statment} end generate[label].

Ejemplo de la instrucción for … generate Diseño de un Multiplexor de 16 a 1 Departamento de Ingeniería Eléctrica 29 Electrónica Digital .

4x1 w3 end generate. f). s(3 downto 2). Multiplexor de 16 a 1 w0 G1: for i in 0 to 3 generate w1 Mux m0 Muxes: mux4to1 port map ( w2 w(4*i). w(4*i+3). m(1). Mux5: mux4to1 port map (m(0). m(3). w4 w5 s(3) s(2) s(1) s(0) w Mux m1 0 0 0 0 w0 w6 4x1 0 0 0 1 w1 w7 0 0 1 0 w2 m0 0 0 1 1 w3 m1 0 1 0 0 w4 w8 Mux f 0 1 0 1 w5 m2 4x1 0 1 1 0 w6 w9 Mux m2 m3 0 1 1 1 w7 w10 4x1 1 0 0 0 w8 w11 1 0 0 1 w9 s3 s2 1 0 1 0 w10 1 0 1 1 w11 w12 1 1 0 0 w12 w13 1 1 0 1 w13 Mux m3 1 1 1 0 w14 w14 4x1 1 1 1 1 w15 w15 s1 s0 Departamento de Ingeniería Eléctrica 30 Electrónica Digital . w(4*i+2). w(4*i+1). m(i)). s(1 downto 0). m(2).

Departamento de Ingeniería Eléctrica 31 Electrónica Digital . expression: cualquier expresión que evalue un valor del tipo Boolean. el cuerpo medio constante y un final también diferente. SINTAXIS label: if expression generate {concurrent_statment} end generate[label]. concurrent_statment: cunjunto de instrucciones concurrentes. DESCRIPCION label: nombre de esta instrucción. Estructuras de repetición if … generate: realiza cero o una copia de manera condicional. Sirve para generar una estructura regular que tiene un principio distinto.

Ejemplo de la instrucción if … generate Diseño de un Decodificador de 4 a 16 Departamento de Ingeniería Eléctrica 32 Electrónica Digital .

y(4*i to 4*i+3)). m0 y3 end generate. m(i). Decodificador de 4 a 16 G1: for i in 0 to 3 generate w1 y0 dec_ri: dec2to4 port map (w(1 downto 0). En. w0 Deco y1 G2: if i=3 generate 2x4 y2 dec_left: dec2to4 port map (w(i downto i-1). w1 y4 w0 Deco y5 2x4 y6 m1 w3 m0 y7 w2 Deco m1 2x4 m2 y8 w1 En m3 w0 Deco y9 2x4 y10 m2 y11 w1 y12 w0 Deco y13 2x4 y14 m3 y15 Departamento de Ingeniería Eléctrica 33 Electrónica Digital . end generate. m).

es decir. puede provocar cambios en objetos externos a él. SINTAXIS PROCEDURE nombre [(parámetros)] IS [declaraciones] BEGIN [sentencias_serie] END [PROCEDURE] [nombre]. Departamento de Ingeniería Eléctrica 34 Electrónica Digital . puede tener instrucciones WAIT. los argumentos pueden ser de entrada. de salida o bidireccional. PROCEDIMIENTO PROCEDURE El procedimiento sólo puede devolver valores a través de los parámetros que se le pasen. tiene efectos colaterales.

entity PVTOI is for i in 0 to nbits-1 loop port (CLK: in std_logic. ESTADO: out integer range 0 to 63 ). end loop. variable temp: integer range 0 to 63.temporal2). -.temporal1) variable temporal2: integer range 0 to 63. T1 end RTL. PVTOI -.T2. end if.std_logic_1164.all. end if. salida:=temp.T4. architecture RTL of PVTOI is end. T2 ESTADO T3 T4 T5 CLK Departamento de Ingeniería Eléctrica 35 Electrónica Digital .convertir un vector a entero (versión procedimiento) salida: out integer) is library IEEE. end process. use ieee.T5: in std_logic.se llama al procedimiento VTOI vtoi(temporal1. nbits: in integer. signal temporal1: std_logic_vector(5 downto 0).T3. begin process(CLK.6. temp:=temp + (2**i). begin temp:=0. if (vin(i)='1') then T0. end PVTOI. T0 ESTADO<=temporal2.T1. begin if (CLK'event AND CLK='1') then temporal1<=T5&T4&T3&T2&T1&T0. Ejemplo de un PROCEDIMIENTO procedure vtoi(vin: in std_logic_vector.

Departamento de Ingeniería Eléctrica 36 Electrónica Digital .debe incluir al menos un RETURN END [FUNCTION] [nombre]. no tiene efectos colaterales. debe contener la palabra clave RETURN seguida de una expresión. jamás debe tener la instrucción WAIT. como devuelve un valor se usa en expresiones. FUNCION FUNCTION Una función devuelve un valor. SINTAXIS [PURE | IMPURE] [FUNCTION nombre [(parámetros)] RETURN tipo IS [declaraciones] BEGIN [sentencias_serie] -. los argumentos son siempre de entrada.

end FVTOI. -. end loop.convertir vector a entero (versión función) variable temp: integer range 0 to 63. T0.T3. temp:=temp + (2**i). T1 end RTL.6). architecture RTL of FVTOI is signal temporal1: std_logic_vector(5 downto 0).T2. end if.T4. for i in 0 to nbits-1 loop entity FVTOI is if (vin(i)='1') then port ( CLK: in std_logic.T5: in std_logic.temporal1) begin if (CLK'event AND CLK='1') then FVTOI temporal1<=T5&T4&T3&T2&T1&T0. Ejemplo de una FUNCION function vtoi(vin: in std_logic_vector.T1.std_logic_1164. end process. begin process(CLK. library IEEE.all. ESTADO: out integer range 0 to 63 ).llamada a la funcion vtoi T0 ESTADO <= vtoi(temporal1. nbits: in integer) return integer is -. T2 ESTADO T3 T4 T5 CLK Departamento de Ingeniería Eléctrica 37 Electrónica Digital . end. return(temp). end if. begin use ieee. temp:=0.

4. Departamento de Ingeniería Eléctrica 38 Electrónica Digital . 6. mientras que los procedimientos se llaman como una sentencia secuencial o concurrente. Diferencias en Procedimientos y Funciones 1. es decir. Una función no tiene efectos colaterales. externas al procedimiento. mientras que un procedimiento sí. como devuelven un valor. Las funciones. por lo que sólo se pueden leer dentro de la función. En el procedimiento pueden ser de entrada. 3. mientras un procedimiento sólo puede devolver valores a través de los parámetros que se le pasen. mientras que en el procedimiento no es necesario. se usan en expresiones. Una función jamás puede tener la instrucción WAIT. puede provocar cambios en objetos externos a él debido a que se pueden cambiar las señales aunque no se hubieran especificado en el argumento. en los procedimientos se pueden realizar asignaciones sobre señales declaradas en la arquitectura y. por lo que pueden sufrir modificaciones. 5. Una función siempre devuelve un valor. Los argumentos de una función son siempre de entrada. 2. pero un procedimiento sí. La función debe contener la palabra clave RETURN seguida de una expresión puesto que siempre devuelve un valor. salida o de entrada/salida. Es decir. por lo tanto.

Capítulo 6 VHDL para simulación Departamento de Ingeniería Eléctrica 1 Electrónica Digital .

estos son: Especificación de Retardos. Hay una serie de elementos que solo tiene significado en un entorno de simulación. Notificación de sucesos. No importa el nivel de abstracción. Solo se requiere un interprete de las instrucciones. sus principales características son: No tiene demasiadas restricciones. Departamento de Ingeniería Eléctrica 2 Electrónica Digital . Descripción del banco de pruebas. VHDL para simulación El lenguaje VHDL sirve también para la descripción de modelos para simulación.

Departamento de Ingeniería Eléctrica 3 Electrónica Digital . inmediata. de esta manera la información de la fuente pasa a la señal cuando la simulación llega a este tiempo. ‘0’ AFTER 20 ns. Gracias al concepto de evento es fácil entender que en una asignación se pueden programar varios eventos o sucesos que tendrán en el futuro. sino que se le asigna a su fuente (driver). En la sentencia se ha especificado el tiempo en el cual se realizará realmente la asignación. no se le asigna de forma señal <= ‘0’ AFTER 15 ns. señal <= ‘1’ AFTER 4 ns. Especificación de retardos Especificación de retardos Para indicar un retardo en las asignaciones se emplea la palabra AFTER Cuando se le asigna un valor a una señal.

Departamento de Ingeniería Eléctrica 4 Electrónica Digital . introducir el evento en la lista. sal <= TRANSPORT not ent AFTER 50 ns. Retardos inerciales y transportados Retardos inerciales Retardos transportados Elimina el evento que hubiera en la lista y lo Lo que se hace es simplemente sustituye con el nuevo evento. en el caso de asignaciones múltiples sólo la primera es inercial sal <= REJECT 10 ns INERTIAL not ent AFTER 50 ns. Nota: El retraso inercial es el de defecto. sal <= INERTIAL not ent AFTER 50 ns.

En el caso de cambio en la dirección. la salida es alta impedancia. la salida es el contenido de la posición indicada por la dirección de entrada. El tiempo que pasa entre que cambia la selección y la salida es de 60 ns. la salida mantiene su valor anterior durante 10 ns y luego pasa a desconocido. si no está activa. La ROM tiene una entrada de selección activa a nivel bajo. El tiempo que pasa entre que cambia la dirección y cambia la salida es de 100 ns. Departamento de Ingeniería Eléctrica 5 Electrónica Digital . Modelo de simulación La Memoria ROM Realizar el modelo de simulación de una memoria ROM simple. de manera que cuando está activa.

Modelo de simulación La Memoria ROM Departamento de Ingeniería Eléctrica 6 Electrónica Digital .

Modelo de simulación La Memoria ROM Selección  Selección  inactiva activa Alta  impedancia Tiempo entre que  cambia la selección  y la salida: 60 ns Departamento de Ingeniería Eléctrica 7 Electrónica Digital .

 la salida  desconocido mantiene su valor  durante 10 ns y luego  pasa a desconocido Departamento de Ingeniería Eléctrica 8 Electrónica Digital . Modelo de simulación La Memoria ROM Cambio  de  En caso de cambio de  Valor  dirección dirección.

Modelo de simulación La Memoria ROM Cambio  de  Cambio en la  dirección salida El tiempo que pasa  entre que cambia la  dirección y cambia la  salida: 100 ns Departamento de Ingeniería Eléctrica 9 Electrónica Digital .

WARNING. Los niveles de gravedad que hay son: NOTE. Si no se especifica ningún mensaje aparece la cadena "Assertion Violation". Tanto el mensaje como el nivel de gravedad son opcionales. y si no se especifica nada el valor por defecto es ERROR. Notificación de sucesos Notificación de sucesos Durante la simulación de un circuito descrito en VHDL. ERROR y FAILURE. Departamento de Ingeniería Eléctrica 10 Electrónica Digital . que tiene como elemento de activación una condición: ASSERT condición REPORT mensaje SEVERITY nivel gravedad Si no se cumple la condición especificada entonces se saca el mensaje especificado por pantalla y se da además un nivel de gravedad. se pueden notificar ciertos sucesos mediante la utilización de la palabra clave ASSERT.

Departamento de Ingeniería Eléctrica 11 Electrónica Digital . ¿Qué es un Banco de Pruebas? Banco de pruebas (Test Bench) Un banco de pruebas no es más que la definición de un conjunto de entradas llamadas patrones de prueba. con las que se verifica el funcionamiento del circuito.

Funciones del Banco de Pruebas Funciones del banco de pruebas El banco de pruebas se conecta con el componente a verificar mediante dos tipos de señales: Estímulos Respuestas Sus funciones son la generación de estímulos y el análisis de las respuestas. Sistema Estímulos Banco de pruebas Respuestas Componente a verificar Departamento de Ingeniería Eléctrica 12 Electrónica Digital .

…. signal A. wait..). B <= …. stimuli: process begin A<= … . UUT : entity workMyProcessor(Beh) port map (…. La arquitectura es de tipo estructural. tiene como señales internas las entradas y salidas del circuito. B. Departamento de Ingeniería Eléctrica 13 Electrónica Digital . wait for …. end process stimuli. entity TB is end TB. Estructura del Banco de Pruebas El banco de pruebas consta de una entidad sin puertos.: bit. el único llamado a componente es el correspondiente a la entidad que se desea simular y por último una sección de definición de estímulos. signal ….

Según la forma de generación de los vectores de prueba. estas metodologías se pueden clasificar en: Método Tabular Utilización de Archivos Metodología Algorítmica Departamento de Ingeniería Eléctrica 14 Electrónica Digital . Metodologías para un Banco de Pruebas Metodologías para un banco de pruebas La construcción de un banco de pruebas para un circuito determinado puede abordarse de distintas maneras.

espera por un cambio de valor de la señal wait on clk. Departamento de Ingeniería Eléctrica 15 Electrónica Digital . En VHDL se usan tres tipos de enunciados wait. wait on enable.espera por algún lapso de tiempo wait for 10ns. En este caso se realiza el and de las dos primeras or la tercera. WAIT WAIT condición usada para detener un proceso.b until (a=‘1’and b=‘0’) for 10ns. • wait until condición -. wait until clk=‘1’. • wait for tipo_expresión -. combinando las diferentes formas anteriores. wait for periodo/2. • wait on lista_sensitiva -. wait on a. • Se pueden realizar condiciones complejas.espera hasta que la condición booleana se cumple wait until A and B.data.

Ejemplo: Comparador de magnitud de 2 bits A=B A[1.0] Comparador A>B de B[1..0] Magnitud A<B Función sal2 sal1 sal0 A=B 1 0 0 A>B 0 1 0 A<B 0 0 1 Departamento de Ingeniería Eléctrica 16 Electrónica Digital ..

Solución: Comparador de magnitud de 2 bits
Descripción en VHDL del Comparador de Magnitud

Departamento de Ingeniería Eléctrica 17 Electrónica Digital

Metodologías para un banco de pruebas

Método tabular

Departamento de Ingeniería Eléctrica 18 Electrónica Digital

Metodologías para un banco de pruebas

Utilización de Archivos

Departamento de Ingeniería Eléctrica 19 Electrónica Digital

Metodologías para un banco de pruebas

Metodología Algorítmica

Departamento de Ingeniería Eléctrica 20 Electrónica Digital

Ejemplo: Registro de desplazamiento síncrono de 4 bits rst s [3... derecha 1 0 QB QC QD ed Desplaz.0] e [3..0] D Q D Q D Q 3 3 3 3 D Q QB 2 QC 2 QD 2 ed 2 ei 1 QA 1 QB 1 QC 1 QA 0 A QB 0 B QC 0 C QD 0 D m [1.0] clk m1 m0 s3 s2 s1 s0 Función 0 0 QA QB QC QD Mantiene 0 1 ei QA QB QC Desplaz. izquierda 1 1 e3 e2 e1 e0 Carga Departamento de Ingeniería Eléctrica 21 Electrónica Digital .

Solución: Registro de desplazamiento síncrono de 4 bits Descripción en VHDL del Registro de Desplazamiento Departamento de Ingeniería Eléctrica 22 Electrónica Digital .

Metodologías para un banco de pruebas Método tabular Departamento de Ingeniería Eléctrica 23 Electrónica Digital .

Metodologías para un banco de pruebas Utilización de Archivos Departamento de Ingeniería Eléctrica 24 Electrónica Digital .

Metodologías para un banco de pruebas Metodología Algorítmica Departamento de Ingeniería Eléctrica 25 Electrónica Digital .

Proceso: enunciados secuenciales Enunciados de Asignación de Variables Enunciados de Asignación de Señales Enunciados if Enunciados case Enunciados next Enunciados exit Enunciados Secuenciales Enunciados null Enunciados return Enunciados loop Enunciados wait Enunciados de Subprogramas (Procedure y function) Departamento de Ingeniería Eléctrica 26 Electrónica Digital .

SINTAXIS null. NEXT. EXIT salta instrucciones y continúa fuera de una iteración. NULL. -. SINTAXIS return expresión. EXIT. Departamento de Ingeniería Eléctrica 27 Electrónica Digital .para función return. NULL no ejecuta ninguna acción.para procedimiento. RETURN termina un subprograma (función o procedimiento). SINTAXIS exit [etiqueta] when [condición]. -. RETURN NEXT salta instrucciones y continúa con otra iteración. SINTAXIS next [etiqueta] when [condición].

útil para lazos anidados. DESCRIPCION etiqueta: nombre opcional del lazo. SINTAXIS [etiqueta:] [esquema de iteración] loop {enunciados secuenciales} {next [etiqueta] when [condición]. esquema de iteración: puede ser while o for. LOOP LOOP ejecuta repetidamente una secuencia de instrucciones.} end loop [etiqueta]. Departamento de Ingeniería Eléctrica 28 Electrónica Digital . exit: salta instrucciones y continúa fuera de LOOP.} {exit [etiqueta] when [condición]. condición: expresión boolena. next: salta instrucciones y continúa con otra iteración.

EN ) EN[6] begin A[6] A <= “00000000”. A[7] A( i ) <= B( i ). Ejemplo: Habilitador de ducto EN[1] Ejemplo: Habilitador de ducto A[1] B[1] EN[2] A[2] B[2] library ieee. EN[8] A[8] end RTL. EN[3] A[3] B[3] entity habilitador is port( B.std_logic_1164. EN[5] architecture RTL of habilitador is A[5] B[5] begin process( B.all. use ieee. end process. EN: in bit_vector(1 to 8). B[8] Departamento de Ingeniería Eléctrica 29 Electrónica Digital . EN[4] A[4] A: out bit_vector(1 to 8)). B[6] for i in 1 to 8 loop EN[7] next when EN( i ) = ‘0’. B[7] end loop. B[4] end habilitador.

Ejemplo de la instrucción LOOP Uso de las instrucción LOOP w D Q Mux R(7) 7 Q(7) D Q Mux R(6) 6 Q(2) D Q Mux R(1) 1 Q(1) D Q Mux R(0) 0 L clock Departamento de Ingeniería Eléctrica 30 Electrónica Digital .

Departamento de Ingeniería Eléctrica 31 Electrónica Digital .