Você está na página 1de 230

CENTRODEINVESTIGACINYDEESTUDIOSAVANZADOS

DELINSTITUTOPOLITCNICONACIONAL

ELECTRNICA DIGITAL

Unidad 1
DescripcinySimulacinde
CircuitosDigitalesUtilizandoVHDL
Agosto, 2014.

CENTRO DE INVESTIGACION Y DE ESTUDIOS AVANZADOS DEL IPN


DEPARTAMENTO DE INGENIERIA ELECTRICA

ELECTRNICA DIGITAL
Unidad 1: Descripcin y Simulacin de Circuitos Digitales Utilizando VHDL

Profesor Titular:
Dr. Mario Alfredo Reyes Barranca
Profesores Auxiliares: Dr. Oliverio Arellano Crdenas
M. en C. Luis Martn Flores Nava

Revisin 5.0, Agosto 2014.

CENTRO DE INVESTIGACIN Y DE ESTUDIOS AVANZADOS DEL


IPN
DEPARTAMENTO DE INGENIERA ELCTRICA

ELECTRNICA DIGITAL
Unidad 1: Descripcin y Simulacin de Circuitos Digitales Utilizando VHDL
Profesor Titular:
Dr. Mario Alfredo Reyes Barranca
Profesores Auxiliares: Dr. Oliverio Arellano Crdenas
M. en C. Luis Martn Flores Nava
Objetivo
Proporcionar al alumno una herramienta de descripcin de circuitos digitales para
el proceso de diseo y simulacin, as como implementar estos circuitos en dispositivos
programables.
Temario
Captulo 1 Estado actual de la lgica programable
1.1 Conceptos fundamentales
1.2 Dispositivos lgicos programables simples (SPLDs)
1.3 Dispositivos lgicos programables complejos (CPLDs)
1.4 Arreglo de compuertas programables en campo (FPGAs)
Captulo 2 Sintaxis del lenguaje
2.1 Introduccin a la descripcin en VHDL de circuitos digitales
2.2 Estilos de programacin en VHDL
2.3 Operadores y expresiones
2.4 Objetos de datos
2.5 Tipos de datos
2.6 Declaracin de entidad y arquitectura
Captulo 3 Circuitos Lgicos combinatorios
3.1 Declaraciones concurrentes
3.1.1 La construccin when-else y with-select-when
3.2 Declaraciones secuenciales
3.2.1 La construccin if-then-else y case
Captulo 4 Circuitos Lgicos secuenciales
4.1 Diseo lgico secuencial
4.2 Elementos de memoria
4.3 Registros
4.4 Contadores
4.5 Mquinas de estado

Captulo 5 Diseo jerrquico en VHDL


5.1 Metodologa para el diseo jerrquico
5.2 Particin de la estructura global
5.3 Creacin de un paquete de componentes
5.4 Diseo del programa de alto nivel
5.5 Subprogramas
5.6 Llamadas a subprogramas
Captulo 6 VHDL para simulacin
6.1 Asignacin de retardos
6.2 Notificacin de sucesos
6.3 Descripcin de un banco de pruebas
6.3.1 Mtodo tabular
6.3.2 Utilizacin de archivos
6.3.3 Metodologa algortmica
Bibliografa

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 sntesis y modelado de circuitos


Fernando Pardo y Jos A. Boluda
Alfaomega, 2000.

CENTRO DE INVESTIGACION Y
ESTUDIOS AVANZADOS DEL
I.P.N.
Departamento de Ingeniera Elctrica
Curso:
Electrnica Digital

Departamento de Ingeniera Elctrica

Electrnica Digital

Unidad 1

Descripcin y Simulacin de
Circuitos Digitales Utilizando VHDL

Profesor Titular:

Dr. Mario Alfredo Reyes Barranca

Profesores Auxiliares: Dr. Oliverio Arellano Crdenas


M. en C. Luis Martn Flores Nava

Departamento de Ingeniera Elctrica

Electrnica Digital

Captulo 1
Estado Actual de la Lgica Programable

Departamento de Ingeniera Elctrica

Electrnica Digital

PLDs
DISPOSITIVOS LOGICOS
PROGRAMABLES
Una alternativa en el Diseo de
Sistemas Digitales

Departamento de Ingeniera Elctrica

Electrnica Digital

Introduccin
La realidad del diseo lgico actual:
Complejidad creciente
Tiempos menores de introduccin al mercado
Disminucin de costos

Las exigencias que plantea son:


Confiabilidad
Accesibilidad para pruebas

La meta principal es:


Contar con una solucin de uso universal

Departamento de Ingeniera Elctrica

Electrnica Digital

Beneficios de una solucin universal

Fcil adaptabilidad a cambios de diseo:


Aumento de la vida comercial til del producto

Mayor desempeo:
Rpido, pequeo, confiable y fcil de armar

Mejora en cuanto al aprovechamiento de


los recursos de ingeniera:
Menor costo de desarrollo

Departamento de Ingeniera Elctrica

Electrnica Digital

Qu es un PLD ?

Es un circuito integrado
que contiene una gran
cantidad de elementos
lgicos y a travs de la
programacin se
interconectan para que
realicen una funcin
especfica.

Departamento de Ingeniera Elctrica

Electrnica Digital

Notacin convencional y notacin PLD

Departamento de Ingeniera Elctrica

Electrnica Digital

Configuraciones bsicas

PLE
Entradas

Arreglo
AND
Fijo

Arreglo
OR
Programable

Salidas

Arreglo
AND
Programable

Arreglo
OR
Fijo

Salidas

Arreglo
AND
Programable

Arreglo
OR
Programable

Salidas

PAL

Entradas

PLA
Entradas

Departamento de Ingeniera Elctrica

Electrnica Digital

Configuraciones bsicas

PLE/PROM
Departamento de Ingeniera Elctrica

PAL
10

PLA
Electrnica Digital

Clasificacin de los PLDs


Productos comerciales
Fabricante
Altera
Atmel
Cypress
Lattice
Philips
Vantis

SPLD
Clsicos, FLASHLogic
PAL
PAL
GAL
PLA, PAL
PAL

SPLDs

Fabricante
Altera
Atmel
Cypress
Lattice
Philips
Vantis
Xilinx

CPLD
MAX 5000,7000 y 9000
ATF, ATV
FLASH370, ULTRA37000
IspLSI1000 a 8000
XPLA
MACH 1 a 5
XC9500, CoolRunner

CPLDs

Fabricante
Actel
Altera
Atmel
Lucent
QuickLogic
Vantis
Xilinx

FPGA
ACT 1 a 3 , MX, SX
Flex, Cyclone, Stratix
AT6000, AT40K
ORCA 1 a 3
pASIC1 a 3
VF1
XC4000, Spartan, Virtex

Departamento de Ingeniera Elctrica

PLDs

FPGAs

11

Electrnica Digital

Integracin en un SPLD
Sustituye
aproximadamente
a 100 C.I. SSI

C.I. Series 74xx y 40xx

Departamento de Ingeniera Elctrica

PALs GALs
12

Electrnica Digital

Arquitectura PAL
Matriz de fusibles de interconexin

Un trmino producto
para control de tercer estado
Suma de 7
trminos producto

Lneas especficas de entrada

Retroalimentacin desde una E / S

Diagrama esquemtico de un PAL


Se cuenta a lo largo de TODO EL CHIP con las literales de
todas las variables de entrada.
Mediante lgica alambrada es posible generar trminos
producto (AND) de la cantidad de literales que se desee.
Para generar la funcin solo es posible sumar (OR) hasta 7 u 8
trminos producto.
Departamento de Ingeniera Elctrica

13

Electrnica Digital

PAL16L8

Caractersticas:
64 AND de 32 entradas
8 OR de 7 entradas
8 Inversores de tercer estado
16 Buffers doble salida

Aproximadamente :
200 C.I. SSI (TTL o CMOS)
serie 74xx o 40xx

Departamento de Ingeniera Elctrica

14

Electrnica Digital

PAL16R8
Un nico reloj global

Matriz de interconexin global

Entradas dedicadas

.................................................

Retroalimentacin
desde los registros

Salidas de
los registros
Tri-State

Una seal global de


control de TriState

Incorporacin de elementos de memoria


Ideal para la sntesis de mquinas secuenciales

Departamento de Ingeniera Elctrica

15

Electrnica Digital

Arquitectura GAL
Suma de 8 a 16 trminos producto
Macroceldas lgicas de salida

La macrocelda consta de:


Un Flip-Flop
Dos multiplexores

Departamento de Ingeniera Elctrica

16

Electrnica Digital

Limitaciones de los SPLD

Reducida cantidad de macroceldas.


Cuando se utiliza el flip-flop de la macrocelda para
realizar lgica enterrada se desperdicia una terminal
de entrada/salida.
La distribucin de todas la seales por todo el chip
consume mucha superficie del silicio y genera
retardos capacitivos de importancia.
En los primeros PAL, el uso de fusibles afectaba
seriamente la confiabilidad del dispositivo.

Departamento de Ingeniera Elctrica

17

Electrnica Digital

Integracin en un CPLD
Sustituye
aproximadamente
a 50 SPLDs

Familia
MAX5000

PALs y GALs
Departamento de Ingeniera Elctrica

18

Electrnica Digital

CPLDs

Matriz de
macroceldas

Matriz de
expansores

Departamento de Ingeniera Elctrica

Bloque de control de E/S

Interconexin del LAB

Interconexin global (PIA)

De lneas de
entrada dedicadas
(8 a 20)

4..16 pines
de I/O por
cada LAB

19

Agrupamiento de las
macroceldas (LABs)
Generacin de reas de
conexionado global (PIA)
Generacin de reas de
conexin dentro del LAB
Expansores para generar
trminos 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

Electrnica Digital

Macrocelda y Expansores
LAB Arreglo
local
Clear Clock
Global Global
Expansores
paralelos

Desde terminal
E/S

PRN
D Q

Matriz
ENA
CLRN

de
seleccin

Clock

hacia PIA y
Bloque de
control E/S

Expansores
lgicos
Desde PIA

Departamento de Ingeniera Elctrica

20

Electrnica Digital

FPGAs

Field Programmable Gate Array


(Arreglo de Compuertas Programables en Campo)

Es un circuito integrado que contiene


Celdas Lgicas Configurables
Las Celdas Lgicas se interconectan
por medio de una Matriz de Interconexin
Programable
Cuenta en su periferia con Puertos de
Entrada/Salida.

Departamento de Ingeniera Elctrica

21

Electrnica Digital

Arquitectura del FPGA


Puertos de E/S

Celdas Lgicas
Configurables
Departamento de Ingeniera Elctrica

Recursos de
Interconexin
22

Electrnica Digital

Celda Lgica del FPGA

Familia XC4000

Departamento de Ingeniera Elctrica

23

Electrnica Digital

FPGA de la Familia Spartan 3E


Administrador de
Reloj Digital

Bloques RAM

Departamento de Ingeniera Elctrica

24

Multiplicadores

Electrnica Digital

Densidades de FPGAs

Spartan II XC2S15
Spartan IIE XC2S150E
Virtex E XCV50E
Virtex E XCV3200E
Virtex II XC2V40
Virtex II XC2V8000

15,000*
150,000*
72,000*
4,047,000*
40,000*
8,000,000*

* Compuertas de sistema

Departamento de Ingeniera Elctrica

25

Electrnica Digital

Densidades de IP Cores

Encriptador AES
Microcontrolador 80530
Microcontrolador 8051
Decodificador Viterbi
Controlador de Ethernet
Decodificador JPEG color

40,000*
130,000*
150,000*
190,000*
195,000*
780,000*

* Compuertas de sistema

Departamento de Ingeniera Elctrica

26

Electrnica Digital

Costos de FPGAs

Varan dependiendo del encapsulado y velocidad


Spartan 20,000 compuertas

~ 1 DL

Spartan 100,000 compuertas

~ 20 DLS

Virtex 300,000 compuertas

~ 150 DLS

Virtex II 8,000,000 compuertas ~ 8,000 DLS

Departamento de Ingeniera Elctrica

27

Electrnica Digital

Xilinx vs. Altera

CPLDs

FPGAs

Software

Departamento de Ingeniera Elctrica

28

Electrnica Digital

Diseo usando lgica programable


Conclusiones :
El uso de lgica programable no descarta el uso de lgica
discreta, sino que la restringe a casos muy simples.
Es una herramienta rpida, de alta confiabilidad, y de
bajsimo costo por compuerta.
La fcil modificacin de un diseo permite asegurar el
mantenimiento y actualizacin de un producto.
Conocer profundamente las tcnicas de diseo lgico es la
mejor manera de aprovechar la lgica programable.
Se pasa del diseo por compuertas al diseo por sistemas.

Departamento de Ingeniera Elctrica

29

Electrnica Digital

Flujo de Diseo para Lgica Programable


Introduccin/Descripcin
del Diseo
Captura Esquemtica
Descripcin basada en
Lenguaje
Realizacin/Implementacin
del Diseo
Translacin/Sntesis del
Diseo
Verificacin de Reglas de
Diseo
Particin y Mapeo de Lgica
Asignacin o Colocacin
(Place) de la Lgica en los
Bloques configurables
Enrutamiento (Route)
Creacin de Archivo de
Programacin
Programacin-Dispositivo

Departamento de Ingeniera Elctrica

Verificacin del Diseo


Simulacin Funcional
Verificacin de la funcionalidad de
la Lgica
Temporizacin estimada (opcional)
Simulacin Temporizada
Se requiere de informacin de
temporizacin posterior a los
procesos de Colocacin (Place) y
Enrutamiento (Route)
Anlisis de Temporizacin Esttico
Se requiere de informacin de
temporizacin posterior a los
procesos de Colocacin (Place) y
Enrutamiento (Route)
Determina retardos de trayectorias
de manera rpida y reporta violacin
de restricciones.
Depuracin del diseo integrado al
Sistema (In-System) siendo
desarrollado
Para dispositivos reprogramables
Uso de otros Sistemas de Software
& Hardware
30

Electrnica Digital

Sistema Bsico de Desarrollo


Computadora Personal /

Estacin de Trabajo
Software CAE/CAD p.ej.

WebPack (Gratuito) de Xilinx

Programador Opcional

Departamento de Ingeniera Elctrica

31

Electrnica Digital

Mtodos de Descripcin del Diseo


Bajo Nivel

PALASM
OPAL
PLPL

Difcil o imposible
la manipulacin de
diseos complejos

Captura Esquemtica
Descripcin del Diseo
Descripcin por Lenguaje

Alto Nivel

ABEL
CUPL
VERILOG
VHDL

Departamento de Ingeniera Elctrica

(VHSIC Hardware Description Language)


VHSIC Very High Speed Integrated Circuit

32

Electrnica Digital

Captulo 2
Sintaxis del Lenguaje

Departamento de Ingeniera Elctrica

Electrnica Digital

VHDL
(VHSIC Hardware Description Language)
VHSIC Very High Speed Integrated Circuit

Departamento de Ingeniera Elctrica

Electrnica Digital

Antecedentes de VHDL
Departamento de la Defensa
de los E.U.A.
Desarrollo de Lenguajes para
Descripcin de Hardware

Programa: Very High Speed


Integrated Circuits (VHSIC)

1970s
1983 VHDL Desarrollo:

IDL/IBM, HDL/TI, ZEUS/GE


Desarrollo en rea Industrial

IBM, Texas Instruments e


Intermetrics

AHPL, DDL, CDL, ISPS


Desarrollo en rea Acadmica

Estndar IEEE VHDL


1980s

Estndar IEEE -1076-1987

AHDL, ABEL, CUPL

Revisiones
Estndar IEEE -1076-1993
Estndar IEEE -1076-2000
Estndar IEEE -1076-2002
Estndar IEEE -1076-2008

VHDL y Verilog

Departamento de Ingeniera Elctrica

Electrnica Digital

Ventajas de VHDL

Ventajas de VHDL
Notacin Estandarizada
Disponibilidad al Pblico
Independencia del Sistema de Desarrollo (con algunas excepciones)
Independencia de la Metodologa de Diseo (PLDs, ASICs, FPGAs)
Independencia de la Tecnologa y Proceso de Fabricacin (CMOS, Bipolar, BiCMOS)
Reutilizacin de Cdigo
Capacidad descriptiva del comportamiento del sistema en distintos niveles de abstraccin,
modelacin o abstraccin: Algoritmo, RTL (Register Transfer Logic), Lgico y Compuerta
Facilitar la Verificacin/Prueba del Sistema siendo diseado.
Adicin de la extensin analgica (IEEE1076.1) que permite la especificacin, simulacin y
sntesis de sistemas digitales, analgicos y mixtos

Departamento de Ingeniera Elctrica

Electrnica Digital

Sintaxis de VHDL

Elementos sintcticos de VHDL


Comentarios

Se consideran comentarios despus de dos guiones medios seguidos --

Smbolos especiales

Existen caracteres especiales sencillos como (&, #) o dobles como ( :=, <=)

Identificadores

Es lo que se usa para dar nombre a los diferentes objetos del lenguaje

Nmeros

Se considera que se encuentra en base 10, se admite la notacin cientfica convencional


es posible definir nmeros en otras bases utilizando el smbolo # : 2#11000100#

Caracteres

Es cualquier letra o caracter entre comillas simples: 3, 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 coloca un prefijo para indicar la base : O126, XFE

Palabras reservadas Son las instrucciones, rdenes y elementos que permiten definir sentencias.

Departamento de Ingeniera Elctrica

Electrnica Digital

Reglas para Identificadores


Identificadores
Nombres o etiquetas que se usan para referirse a: Variables, Constantes,
Seales, Procesos, Entidades, etc.
Estn formados por nmeros, letras (maysculas o minsculas) y guin bajo
_ con las reglas especificadas en la tabla siguiente.
Longitud (Nmero de Caracteres): Sin restricciones
Palabras reservadas por VHDL no pueden ser identificadores
En VHDL, un identificador en maysculas es igual a su contraparte en
minsculas

Reglas para especificar un identificador

Incorrecto

Correcto

Primer caracter debe ser siempre una letra mayscula o minscula

4Suma

Suma4

Primer caracter no puede ser un guin bajo ( _ )

_S4bits

S_4bits

Dos guiones bajos seguidos no son permitidos

Resta__4

Resta_4_

Un identificador no puede utilizar smbolos especiales

Clear#8

Clear_8

Departamento de Ingeniera Elctrica

Electrnica Digital

Palabras reservadas en VHDL


Lista de palabras reservadas en VHDL

Departamento de Ingeniera Elctrica

Electrnica Digital

Precedencia de Operadores
Mayor
Precedencia de Operadores
**

ABS

NOT

MOD

REM

+ (signo) - (signo)
+

&

/=

<

<=

>

>=

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 Ingeniera Elctrica

Electrnica Digital

PRECEDENCIA DE OPERADORES
Los operadores anteriores se definen de la siguiente manera:
1.

Operadores lgicos binarios: and or nand nor xor xnor.

2.

Operadores relacionales: = /= < <= > >=.

3.

Operadores de desplazamiento: sll srl sla sra rol ror.

4.

Operadores de adicin: + - & (concatenacin).

5.

Operadores de signo: + -

6.

Operadores de multiplicacin: * / mod rem.

7.

Operadores miscelneos: not abs **

Cuando no se usan los parntesis, los operadores de la clase 7 tienen la mayor


precedencia y se aplican primero, seguidos en sta por los de la clase 6,
luego la 5 y as sucesivamente. Los de la clase 1 tienen la menor
precedencia y se aplican al ltimo. Los operadores de la misma
precedencia se aplican de izquierda a derecha en la expresin.
El orden de la precedencia puede cambiarse mediante los parntesis.

Departamento de Ingeniera Elctrica

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A sll 2 (desplazamiento lgico hacia la izquierda llenando con ceros 0):

10010101
A sll 2

Departamento de Ingeniera Elctrica

01010100

10

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A srl 3 (desplazamiento lgico hacia la derecha llenando con ceros 0):

10010101
A srl 3

Departamento de Ingeniera Elctrica

00010010

11

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A sla 3 (desplazamiento aritmtico hacia la izquierda llenando con el bit a la
derecha):

10010101
A sla 3

10101111
Bit a la derecha

Departamento de Ingeniera Elctrica

12

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A sra 2 (desplazamiento aritmtico hacia la derecha llenando con el bit a la
izquierda):

10010101
A sra 2

11100101
Bit a la
izquierda

Departamento de Ingeniera Elctrica

13

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A rol 3 (rotacin a la izquierda):

10010101
0010101
010101
10101
=

10101100

Departamento de Ingeniera Elctrica

14

A rol 3

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio:
Realizar las siguientes operaciones al vector A = 10010101:
A ror 5 (rotacin a la derecha):

10010101
1001010
100101
10010
1001
A ror 5

Departamento de Ingeniera Elctrica

10101100

15

Electrnica Digital

PRECEDENCIA DE OPERADORES
Ejercicio: En la siguiente expresin, A, B, C y D son del tipo bit_vector.
(A & not B or C ror 2 and D) = 110010
Entonces, los operadores se aplicarn en el siguiente orden:
not, &, ror, or, and, =
Si A= 110, B= 111, C= 011000 y D= 111011, las operaciones se realizan como se
muestra a continuacin:
Op. lgicos bin.: and or nand nor xor xnor.
not B = 000 (complemento bit por bit)

Operadores relacionales: = /= < <= > >=.

A & not B = 110000 (concatenacin)

Operadores de adicin: + - & (concatenacin).

Op. de desplazamiento: sll srl sla sra rol ror.

Operadores de signo: + -

C ror 2 = 000110 (rotacin a la derecha dos lugares)


(A & not B) or (C ror 2) = 110110 (operacin or bit por bit)

Operadores de multiplicacin: * / mod rem.


Operadores miscelneos: not abs **

(A & not B or C ror 2) and D = 110010 (operacin and bit por bit)
[(A & not B or C ror 2 and D) = 110010] = TRUE (el parntesis fuerza a la prueba de
igualdad al final, resultando en verdadero (TRUE))

Departamento de Ingeniera Elctrica

16

Electrnica Digital

Objetos y Tipos de Datos


Booleano (False, True)
Bit (0, 1)
Objetos

Tipo Datos

Enumerated
(Enumerados)

Character (Carcter)
String (Cadena-Caracteres)
std_ulogic
std_logic (U,X,0,1,Z,W,L,H,-)

Objetos
VHDL
Constantes

Enteros [-(231-1) a (231-1)]


Escalares

Integer (Enteros)
Positive (No-Cero y No-Negativos)

Variables

Natural (No-Negativos)

Seales
File

Floating Point
(Punto Flotante)

Real

Physical (Fsicos)

Time (Tiempo)

No soportado por
herramientas
de
Sntesis

Bit_Vector
Compuestos

Array (Arreglo)

Std_ulogic_vector
Std_logic_vector

Access (Acceso)

Record (Registro)

Unsigned
Signed

Departamento de Ingeniera Elctrica

17

Electrnica Digital

Nmeros Reales:
Racionales: -3/4; 5/8; 31/9;.
Enteros:

-7; -1; 0; 5; 20;.

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


Trascendentes:

Departamento de Ingeniera Elctrica

e ; ; ln(2);.

18

Electrnica Digital

Objetos y Tipos de Datos


Booleano (False, True)
Bit (0, 1)
Objetos

Tipo Datos

Enumerated
(Enumerados)

Character (Carcter)
String (Cadena-Caracteres)
std_ulogic
std_logic (U,X,0,1,Z,W,L,H,-)

Objetos
VHDL
Constantes

Enteros [-(231-1) a (231-1)]


Escalares

Integer (Enteros)
Positive (No-Cero y No-Negativos)

Variables

Natural (No-Negativos)

Seales
File

Floating Point
(Punto Flotante)

Real

Physical (Fsicos)

Time (Tiempo)

No soportado por
herramientas
de
Sntesis

Bit_Vector
Compuestos

Array (Arreglo)

Std_ulogic_vector
Std_logic_vector

Access (Acceso)

Record (Registro)

Unsigned
Signed

Departamento de Ingeniera Elctrica

19

Electrnica Digital

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

Departamento de Ingeniera Elctrica

20

Electrnica Digital

Objetos de Datos
Un objeto de datos en VHDL es un elemento que toma un valor de algn tipo de dato
determinado, segn sea el tipo de dato, el objeto poseer un conjunto de propiedades.
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


nico valor de un tipo de dato; las constantes pueden
ser declaradas dentro de entidades, arquitecturas,
procesos y paquetes.

Las variables pueden ser modificadas cuando sea


necesario, pueden ser declaradas solamente dentro de
los procesos y subprogramas.

CONSTANT identificador : tipo := valor;

VARIABLE identificador : tipo [:= valor];

Ejemplo

Ejemplo

CONSTANT byte: integer := 8;

VARIABLE aux1, aux2: bit;

Seales

SIGNAL identificador : tipo [:= valor];

Las seales s pueden almacenar o pasar valores lgicos,


por lo tanto, representan elementos de memoria o
conexiones y si pueden ser sintetizadas. Son declaradas en
las arquitecturas antes del BEGIN.

Ejemplo

Departamento de Ingeniera Elctrica

21

SIGNAL A, B : bit := 0;
SIGNAL dato: bit_vector (7 downto 0);

Electrnica Digital

Objetos de Datos
Es importante conocer las implicaciones que tiene el uso de seales y variables en la
respuesta del circuito que se quiere sintetizar.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Mux_OK is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : in STD_LOGIC;
d : in STD_LOGIC;
s0 : in STD_LOGIC;
s1 : in STD_LOGIC;
y : out STD_LOGIC);
end Mux_OK;

Operacincorrectadebidoalusodevariable

architecture Behavioral of Mux_OK is


begin
process (a, b, c, d, s0, s1)
variable sel : integer range 0 to 3;
Begin
sel := 0;
if (s0 = '1') then sel := sel + 1;
end if;
if (s1 = '1') then sel := sel + 2;
end if;

case sel is
when 0 => y <= a;
when 1 => y <= b;
when 2 => y <= c;
when 3 => y <= d;
end case;
end process;
end Behavioral;

Departamento de Ingeniera Elctrica

22

Electrnica Digital

Objetos de Datos
Es importante conocer las implicaciones que tiene el uso de seales y variables en la
respuesta del circuito que se quiere sintetizar.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Mux_not_OK is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : in STD_LOGIC;
d : in STD_LOGIC;
s0 : in STD_LOGIC;
s1 : in STD_LOGIC;
y : out STD_LOGIC);
end Mux_not_OK;

Inoperantedebidoalusodeseal

architecture Behavioral of Mux_not_OK is


signal sel: integer range 0 to 3;
begin
process (a, b, c, d, s0, s1)
Begin
sel <= 0;
if (s0 = '1') then sel <= sel + 1;
end if;
if (s1 = '1') then sel <= sel + 2;
end if;
case sel is
when 0 => y <= a;
when 1 => y <= b;
when 2 => y <= c;
when 3 => y <= d;
end case;
end process;
end Behavioral;

Departamento de Ingeniera Elctrica

23

Electrnica Digital

Estructura de VHDL
Estructura General de un Programa VHDL
Unidades de Diseo (design units)

Declaracin de Entidad
(entity declaration)
Unidad Primaria

Arquitectura
(architecture)

Configuracin
(configuration)
Unidad Primaria

Unidades indispensables en la
descripcin de un sistema

Unidad Secundaria

Departamento de Ingeniera Elctrica

Cada uno formado por


declaraciones o
instrucciones que definen,
estructuran, analizan y
evalan el comportamiento
de un sistema digital

Declaracin de Paquete
(package declaration)
Unidad Primaria

Cuerpo del Paquete


(package body)
Unidad Secundaria

24

Electrnica Digital

Qu es una Entidad?
entidad (entity) Bloque elemental de diseo
Circuitos elementales digitales que forman de manera
individual o en conjunto un sistema digital
Ejemplos: Compuertas, Flip-Flops, Sumadores/Restadores, Multiplexores,
Contadores, Multiplicadores, ALUs, Neurona-Digital, etc.
Cin
Puertos de
Entrada

A
B

Entidad

Cout

Sumador

SUMA

Puertos de
Salida

Declaracin de una entidad Consiste en la descripcin de los puertos de


entrada o salida de un circuito, el cual es identificado como una entidad (entity)

Importante!
No se describe cmo ser realizado o implementado el circuito, es decir, su Arquitectura
Departamento de Ingeniera Elctrica

25

Electrnica Digital

Cmo se Describe a un Puerto?


Tipo de Dato
Conjuntos de Valores que se les ha asignado un nombre
(p.ej. bit, boolean, bit_vector, etc), de tal forma que un
objeto (p.ej. una Seal) de un determinado Tipo (p.ej. el tipo
bit_vector) pueda tomar cualquier valor dentro del conjunto
de valores que define al Tipo especificado.

Modo
Nombre

in = Entrada

Identificador

out = Salida
inout
Puerto de Entrada (Lectura) y Salida (Escritura)
El valor ledo (Entrada) es aqul que llega al puerto, y no
el valor que se le asigna (Salida), en caso de existir.

bit (pkg.standard)

Valores de 0 o 1
Lgico

boolean

Define valores de
cierto o falso de
acuerdo con una
expresin

(pkg.standard)

Conjunto de bits que


representa a un
grupo de seales de
ent. o sal.

bit_vector

buffer
Similar al Puerto de Salida (Escritura), pero adems
puede ser ledo.
El valor ledo (Entrada) es el mismo valor asignado
(Salida) al puerto.

(pkg.standard)

integer (pkg.standard)

Nmeros enteros

std_logic

Valores U, X, 0,
1, Z, W, L, H, -

(pkg.std_logic_1164)

Paquete (pkg.) en el cual es definido el tipo.


Ver: Uso de Bibliotecas y Paquetes

std_logic_vector

Arreglos de std_logic

(pkg.std_logic_1164)

Ms tipos
Se irn introduciendo conforme avance el curso

Departamento de Ingeniera Elctrica

26

Electrnica Digital

Modos de un Puerto
In

Out
Buffer

In

Buffer

Out

Inout

Buffer Bidireccional-3State

Lgica

Out
Buffer Salida-3State

Departamento de Ingeniera Elctrica

27

Electrnica Digital

Ejemplo: Sumador Completo


Cin
Puertos de Entrada

A
B

Entidad

Cout

Sumador

SUMA

Puertos de Salida

(entity) Inicia declaracin de la entidad


(--) Indica Comentario

Lnea
N.
1
2
3
4
5

Identificador de la entidad

Nombres de los puertos

Sumador-completo de dos datos con longitudes de 1-bit


(Declaracin de Entidad)
--Declaracin de la entidad de un circuito sumador
entity sumador is
port (A, B, Cin: in bit;
SUMA, Cout: out bit);
end sumador;

Modo de Operacin
Tipo de Dato

(;) Finaliza declaracin o subdeclaracin


(end) Finaliza declaracin de la entidad

Departamento de Ingeniera Elctrica

28

Electrnica Digital

Ejemplo: Comparador
a3
b3
a2
b2

a1
b1
a0
b0
Lnea
No.

Comparador Uso de dos datos con longitudes de 4-bit


(Declaracin de Entidad)

--Declaracion de la entidad

entity circuito is

port (a3, b3, a2, b2, a1, b1, a0, b0: in bit;

4
5

F: out bit);
end circuito;

Departamento de Ingeniera Elctrica

29

Electrnica Digital

Uso de Vectores
Cin
vector_A

= [A3, A2, A1, A0]

Entidad

vector_B

= [B3, B2, B1, B0]

Sumador

vector_SUMA

= [S3, S2, S1, S0]

Cout

Declaracin de Puertos Tipo-Vector


port (vector_A, vector_B: in bit_vector (3 downto 0);
vector_SUMA: out bit_vector (3 downto 0));
Sumador-completo de dos datos con longitudes de 4-bit
(Declaracin de Entidad Uso de Vectores)

Para ordenar en forma


ascendente utilizar to en lugar de
downto (p.ej. 0 to 3)

entity sumador is
port (A, B: in bit_vector (3 downto 0);
Cin: in bit;
Cout: out bit;
SUMA: out bit_vector (3 downto 0));
end sumador;
Departamento de Ingeniera Elctrica

30

Electrnica Digital

Ejemplo: Comparador (Uso de Vectores)


a3
b3
a2
b2

a1
b1
a0
b0

Lnea
N.

Comparador Uso de dos datos con longitudes de 4-bit


(Declaracin de Entidad Uso de Vectores)

--Declaracion de la entidad

entity circuito is

3
4
5

port (a, b: in bit_vector (3 downto 0);


F: out bit);
end circuito;

Departamento de Ingeniera Elctrica

31

Electrnica Digital

Uso de Bibliotecas y Paquetes


work

Biblioteca (library)
Lugar donde se almacenan los Paquetes
definidos por el fabricante de la herramienta de
desarrollo o el usuario.

comps_dsp

user

Lugar donde se permite almacenar resultados de


la compilacin de diseos, con el fin de utilizarlos
en otros.

xc
Paquete (Package)

std_logic_1164

std_logic_arith

Un paquete contiene:
Declaraciones de Tipos y Subtipos de
Datos

ieee

Definiciones de Constantes
Definiciones de Funciones y
Procedimientos
Declaraciones de Componentes
(Sumadores, Restadores, Contadores,
Multiplicadores, etc)
Un Paquete = Macro-Unidad de Diseo

Objetivo: Facilitar el diseo

Departamento de Ingeniera Elctrica

32

Electrnica Digital

Uso de Bibliotecas y Paquetes

Paquetes
Bibliotecas

Departamento de Ingeniera Elctrica

33

Electrnica Digital

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.all;

Ejemplo: use ieee.std_logic_1164.all;

Uso del paquete


std_logic_1164 incluido en la
biblioteca ieee

Departamento de Ingeniera Elctrica

Permite el uso de todos los


componentes almacenados en el
paquete

34

Electrnica Digital

Bibliotecas y Paquetes
Paquetes predefinidos comnmente utilizados
Standard
standard

Contiene tipos bsicos: bit, bit_vector, integer


Paquete incluido por omisin.

IEEE
std_logic_1164

Define los tipos: std_logic, std_ulogic, std_logic_vector, std_ulogic_vector


Define funciones de conversin basadas sobre estos tipos.

numeric_bit

Define tipos de vectores signados y no-signados basados en el tipo bit y todos los operadores
aritmticos sobre estos tipos.
Define funciones extendidas y de conversin para dichos tipos.

numeric_std

Define tipos de vectores signados y no-signados basados en el tipo std_logic. Paquete equivalente
al Paquete std_logic_arith

Synopsys
std_logic_arith

Define tipos de vectores signados y no-signados, y todos los operadores aritmticos sobre estos
tipos.
Define funciones extendidas y de conversin para dichos tipos.

std_logic_unsigned

Define operadores aritmticos sobre el tipo std_ulogic_vector y los considera como operadores nosignados.

std_logic_signed

Define operadores aritmticos sobre el tipo std_logic_vector y los considera como operadores
signados.

std_logic_misc

Define tipos, subtipos, constantes y funciones complementarios para el paquete std_logic_1164.

Departamento de Ingeniera Elctrica

35

Electrnica Digital

Ejemplo: Multiplicador
Z0

X0
X1
Y0

Circuito
Multiplicador

Z1
Z2
Z3

Y1

Multiplicador de dos datos con longitudes de 2-bit


(Declaracin de Entidad Uso de Biblioteca y Paquete)
library ieee;
use ieee.std_logic_1164.all;
entity multiplica is
port (X0, X1, Y0, Y1: in std_logic;
Z3, Z2, Z1, Z0: out std_logic);
end multiplica;

Departamento de Ingeniera Elctrica

36

Electrnica Digital

Qu es Arquitectura?
arquitectura (architecture)
Unidad de Diseo Secundaria que describe el comportamiento interno de una entidad.

Cmo? - A travs de la programacin de varios procedimientos que permitan que la


entidad (entity) cumpla con las condiciones de operacin o comportamiento deseadas.

Niveles de Descripcin utilizados


Nivel Algoritmo

Estilo Programacin o
Modelizacin
Funcional

Nivel de Transferencia entre Registros (RTL)


Flujo de Datos
Nivel Lgico
Estructural

Nivel Compuerta
Nivel Transistor (Topologa / Layout)
Departamento de Ingeniera Elctrica

37

Electrnica Digital

Estilo de Modelizacin - Funcional

Funcional - En este caso, se


describen las relaciones entre las
entradas y salidas, sin importar la
estructura o implementacin fsica
del sistema o circuito.

Uso de if-then-else
(construccin secuencial)
a
b

Comparador

si

a = b entonces c = 1

si

a b entonces c = 0

Departamento de Ingeniera Elctrica

Lnea N
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Arquitectura - Comparador de Igualdad de dos Datos


de Long. = 2Bits
--Ejemplo de una descripcin abstracta (funcional)
library ieee;
use ieee.std_logic_1164.all;
entity comp is
port (a,b: in bit_vector (1 downto 0);
c: out bit);
end comp;
architecture funcional of comp is
begin
compara: process (a,b)
begin
if a = b then
c <= 1;
else
c <= 0;
end if;
end process compara;
end funcional;

38

Electrnica Digital

Estilo de Modelizacin - Funcional


Lnea N
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Arquitectura - Compuerta OR de dos entradas


--Ejemplo de una descripcin abstracta (funcional)
library ieee;
use ieee.std_logic_1164.all;
entity com_or is
port (a,b: in std_logic;
f1: out std_logic);
end com_or;
architecture funcional of com_or is
begin
process (a,b) begin
if (a = 0 and b=0) then
f1 <= 0;
else
f1 <= 1;
end if;
end process;
end funcional;

Departamento de Ingeniera Elctrica

39

a
f1
b

f1

Electrnica Digital

Estilo de Modelizacin Flujo de Datos


Flujo de Datos - En este caso, se describe la forma en la que los datos se pueden transferir
entre los diferentes mdulos operativos que constituyen la entidad (sistema o circuito)

Lnea
N

La construccin
when-else

a
b

Comparador

Departamento de Ingeniera Elctrica

1
2
3
4
5
6
7
8
9
10
11
12

Arquitectura - Comparador de Igualdad de dos Datos


de Long. = 2Bits
--Ejemplo de una arquitectura usando when-else
library ieee;
use ieee.std_logic_1164.all;
entity comp is
port (a,b: in bit_vector (1 downto 0);
c: out bit);
end comp;
architecture fun_datos of comp is
begin
c <= 1 when (a = b) else 0;
end fun_datos;

40

Electrnica Digital

Estilo de Modelizacin Flujo de Datos


Uso de ecuaciones
booleanas
Lnea
N
a
b

Comparador

a0
b0
a1
b1

Departamento de Ingeniera Elctrica

1
2
3
4
5
6
7
8
9
10
11
12

Arquitectura - Comparador de Igualdad de dos Datos


de Long. = 2Bits
--Ejemplo de una arquitectura usando ecs. booleanas
library ieee;
use ieee.std_logic_1164.all;
entity comp is
port (a,b: in bit_vector (1 downto 0);
c: out bit);
end comp;
architecture booleana of comp is
begin
c <= (a(1) xnor b(1)) and (a(0) xnor b(0));
end booleana;

41

Electrnica Digital

Estilo de Modelizacin Estructural

Estructural - En este caso, el comportamiento de un sistema o circuito es descrito mediante modelos


lgicos establecidos de los componentes que conforman al sistema o circuito, como son: Compuertas,
Sumadores, Contadores, etc.

Modelos lgicos pueden ser:

Diseados por el Usuario

Predefinidos por el Fabricante

Almacenados en Paquetes
contenidos en las bibliotecas de la
Herramienta de Desarrollo

Departamento de Ingeniera Elctrica

42

Electrnica Digital

Estilo de Modelizacin Estructural

Lnea
N
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Arquitectura - Comparador de Igualdad de dos Datos


de Long. = 2Bits
library ieee;
use ieee.std_logic_1164.all;
use work.compuertas.all;
entity comp is
port (a,b: in bit_vector (0 to 1);
c: out bit);
end comp;
architecture estructural of comp is
signal m: bit_vector (0 to 1);
begin
U0: xnor2 port map (a(0), b(0), m(0));
U1: xnor2 port map (a(1), b(1), m(1));
U2: and2 port map (m(0), m(1), c);
end estructural;

Departamento de Ingeniera Elctrica

43

a0
b0

U0

m0
U2

a1
b1

U1

m1

Electrnica Digital

Resumen
En resumen, se puede decir que:
La descripcin funcional se basa principalmente en el uso de procesos y de declaraciones
secuenciales. Esta descripcin es similar a la hecha en un lenguaje de programacin de alto
nivel, por su alto nivel de abstraccin.
Mas que especificar la estructura o la forma en que se deben conectar los componentes de un
diseo, nos limitamos a describir su comportamiento.
Una descripcin funcional consiste de una serie de instrucciones, que ejecutadas
secuencialmente, modelan el comportamiento del circuito.
La ventaja de este tipo de descripcin, es que no se requiere enfocar a un nivel de compuerta
para implementar un diseo.
En VHDL una descripcin funcional necesariamente implica el uso de por lo menos un
bloque PROCESS (if-then-else)

Departamento de Ingeniera Elctrica

44

Electrnica Digital

Resumen

Definicin de instruccin secuencial:


Las instrucciones secuenciales son aquellas que son ejecutadas serialmente, una despus de
otra. La mayora de los lenguajes de programacin, como C o Pascal, utilizan este tipo de
instrucciones.
En VHDL las instrucciones secuenciales son implementadas nicamente dentro del bloque
PROCESS.

COMENTARIO:
Dentro de una arquitectura en VHDL, no existe un orden especfico de ejecucin de las
asignaciones. El orden en el que las instrucciones son ejecutadas depende de los eventos
ocurridos en las seales, similar al funcionamiento del circuito.

Departamento de Ingeniera Elctrica

45

Electrnica Digital

Resumen
Descripcin por flujo de datos:
La descripcin por flujo de datos indica la forma en que los datos se pueden transferir de una
seal a otra sin necesidad de declaraciones secuenciales.
Este tipo de descripciones permite definir el flujo que tomarn los datos entre mdulos
encargados de realizar operaciones: when-else.
Esta forma de descripcin, puede realizarse tambin mediante ecuaciones booleanas, en
donde se emplean los operadores correspondientes: or, and, nand, nor, xor, xnor.

Descripcin estructural:
Este tipo de descripcin basa su comportamiento en modelos lgicos establecidos
(compuertas, sumadores, contadores, etc.).
El usuario puede disear estas estructuras y guardarlas para su uso posterior o tomarlas de
los paquetes contenidos en las libreras de diseo del software que se est utilizando.

Departamento de Ingeniera Elctrica

46

Electrnica Digital

Resumen

Comparacin entre los estilos de diseo.


El estilo de diseo utilizado en la programacin del circuito depende del diseador y de la
complejidad del proyecto. Por ejemplo, un diseo puede describirse por medio de ecuaciones
booleanas, pero si es muy extenso quiz sea ms apropiado emplear estructuras
jerrquicas para dividirlo.
Ahora bien, si se requiere disear un sistema cuyo funcionamiento dependa slo de sus
entradas y salidas, es conveniente utilizar la descripcin funcional, la cual presenta la ventaja
de requerir menos instrucciones y el diseador no necesita un conocimiento previo de cada
componente del circuito.

Departamento de Ingeniera Elctrica

47

Electrnica Digital

Resumen

Las instrucciones concurrentes (flujo de datos y estructural) se utilizan fuera de un bloque


PROCESS, a diferencia de las instrucciones secuenciales, que nicamente se utilizan dentro
del bloque PROCESS.

Entonces, las descripciones se pueden distinguir entre secuenciales (funcional) y


concurrentes (flujo de datos y estructural).

Departamento de Ingeniera Elctrica

48

Electrnica Digital

Ejercicios

Para la siguiente declaracin:


library ieee;
use ieee.std_logic_1164.all;
entity seleccion is port (
m: in std_logic_vector(0 to 3);
f: out std_logic);
end seleccion;
Indicar:
nombre de la entidad:______________________________
los puertos de entrada:_____________________________
los puertos de salida:______________________________
el tipo de dato:___________________________________

Departamento de Ingeniera Elctrica

49

Electrnica Digital

Ejercicios

Seale cul 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 Ingeniera Elctrica

50

Electrnica Digital

Ejercicios
Describir la siguiente funcin por VHDL.
Entradas

X0
X1
S0

ENTRADA

SALIDA

S0

Z0

Z0

X0

X1

Salidas

S0

X0

X1

Z0

MULTIPLEXOR
Departamento de Ingeniera Elctrica

51

Electrnica Digital

Ejercicios
ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

X0
X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL temp: bit_vector (2 downto 0);
BEGIN
z0 <= 0 WHEN temp = 000 ELSE
0 WHEN temp = 001 ELSE
1 WHEN temp = 010 ELSE
1 WHEN temp = 011 ELSE
0 WHEN temp = 100 ELSE
1 WHEN temp = 101 ELSE
0 WHEN temp = 110 ELSE
1 ;
temp <= s0 & x0 & x1; -- concatenacin
-- de las entradas en un
-- solo bus
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Para la primera descripcin que se


mostrar, se emplear el cdigo de la tabla
extendida, resultando en el siguiente
listado VHDL.
52

Electrnica Digital

Ejercicios
ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

X0
X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL temp: bit_vector (2 downto 0);
BEGIN
z0 <= 0 WHEN temp = 000 ELSE
0 WHEN temp = 001 ELSE
1 WHEN temp = 010 ELSE
1 WHEN temp = 011 ELSE
0 WHEN temp = 100 ELSE
1 WHEN temp = 101 ELSE
0 WHEN temp = 110 ELSE
1 ;
temp <= s0 & x0 & x1; -- concatenacin
-- de las entradas en un
-- solo bus
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Los valores asignados al tipo bit_vector


deber ser especificados con comillas
dobles (_) y los valores asignados al tipo
bit simple, son asignados con comillas
simples (_).
53

Electrnica Digital

Ejercicios
ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

X0
X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL temp: bit_vector (2 downto 0);
BEGIN
z0 <= 0 WHEN temp = 000 ELSE
0 WHEN temp = 001 ELSE
1 WHEN temp = 010 ELSE
1 WHEN temp = 011 ELSE
0 WHEN temp = 100 ELSE
1 WHEN temp = 101 ELSE
0 WHEN temp = 110 ELSE
1 ;
temp <= s0 & x0 & x1; -- concatenacin
-- de las entradas en un
-- solo bus
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Se emple el objeto de datos SIGNAL para


crear el bus temp y concatenar s0,
x0 y x1 en un solo objeto de datos y
as facilitar la descripcin.
54

Electrnica Digital

Ejercicios
ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

X0
X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL temp: bit_vector (2 downto 0);
BEGIN
z0 <= 0 WHEN temp = 000 ELSE
0 WHEN temp = 001 ELSE
1 WHEN temp = 010 ELSE
1 WHEN temp = 011 ELSE
0 WHEN temp = 100 ELSE
1 WHEN temp = 101 ELSE
0 WHEN temp = 110 ELSE
1 ;
temp <= s0 & x0 & x1; -- concatenacin
-- de las entradas en un
-- solo bus
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

55

Electrnica Digital

Ejercicios
ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

X0
X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL temp: bit_vector (2 downto 0);
BEGIN
z0 <= 0 WHEN temp = 000 ELSE
0 WHEN temp = 001 ELSE
1 WHEN temp = 010 ELSE
1 WHEN temp = 011 ELSE
0 WHEN temp = 100 ELSE
1 WHEN temp = 101 ELSE
0 WHEN temp = 110 ELSE
1 ;
temp <= s0 & x0 & x1; -- concatenacin
-- de las entradas en un
-- solo bus
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

56

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
BEGIN
z0 <= x0 WHEN s0 = 0 ELSE x1;
END data_flow;

Salidas

La siguiente descripcin se deriva de la


tabla simplificada, ya que se ve que Z0
depende solamente del estado de S0.
Por lo tanto, la descripcin resulta ms
sencilla.

Departamento de Ingeniera Elctrica

57

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
BEGIN
z0 <= x0 WHEN s0 = 0 ELSE x1;
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

58

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
BEGIN
z0 <= x0 WHEN s0 = 0 ELSE x1;
END data_flow;

Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

59

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL not_s0, and1, and2: bit;
BEGIN
z0 <= and1 OR and2;
and1 <= not_s0 AND x0;
not_s0 <= NOT s0;
and2 <= s0 AND x1;
END data_flow;
Departamento de Ingeniera Elctrica

Salidas

La descripcin mostrada a continuacin,


hace uso del siguiente diagrama explcito
del multiplexor.

60

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL not_s0, and1, and2: bit;
BEGIN
z0 <= and1 OR and2;
and1 <= not_s0 AND x0;
not_s0 <= NOT s0;
and2 <= s0 AND x1;
END data_flow;
Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

61

Electrnica Digital

Ejercicios

X0
X1

ENTRADA

SALIDA

S0

Z0

S0

X0

X1

Z0

X0

X1

Z0

S0

Entradas

ENTITY multiplexor IS
PORT (s0, x0, x1: IN bit;
z0: OUT bit);
END multiplexor;
ARCHITECTURE data_flow OF multiplexor IS
SIGNAL not_s0, and1, and2: bit;
BEGIN
z0 <= and1 OR and2;
and1 <= not_s0 AND x0;
not_s0 <= NOT s0;
and2 <= s0 AND x1;
END data_flow;
Departamento de Ingeniera Elctrica

Salidas

Qu tipo de descripcin se realiz en


este multiplexor?

62

Electrnica Digital

Captulo 3
Circuitos Lgicos Combinatorios

Departamento de Ingeniera Elctrica

Electrnica Digital

Programacin de Estructuras Bsicas


Diseo (Programacin) de una
Estructura Bsica Combinatoria
Declaracin
Entidad
Sintaxis:
architecture nombre_arquitectura of nombre_entidad is
Declaracin
Arquitectura

{Declarativas de Bloque} Se analizarn posteriormente


begin
{Enunciados Concurrentes}
end [nombre_arquitectura]

Enunciado Concurrente.
Unidad de Cmputo/Clculo que realiza lo siguiente:
Lectura de Seales.
Realiza clculos basados en los valores de las
Seales.
Asigna los valores calculados a Seales especficas.
Departamento de Ingeniera Elctrica

Electrnica Digital

Enunciados Concurrentes
Tipos de Enunciados Concurrentes
Asignacin de Seal
Proceso (process)
Bloque (block)

Permite asignar un valor calculado a una seal o


puerto.
Permite definir un algoritmo secuencial que lee
valores de Seales y calcula nuevos valores que
son asignados a otras Seales.
Grupo de enunciados concurrentes.

Llamada a un Componente predefinido


Llamada a un Subprograma
(procedure o function)

Llama a un algoritmo que calcula y asigna


valores a Seales

Asignacin de Seales
Tipos:
Asignaciones de Seales mediante Ecuaciones Booleanas
Asignaciones Condicionales de Seales La construccin when-else
Asignaciones de Seales por Seleccin La construccin with-select-when
Nota: Se puede utilizar el trmino Estructura de
Control, en lugar del trmino Construccin

Departamento de Ingeniera Elctrica

Electrnica Digital

Operadores Lgicos
Operadores Lgicos
and, or, xor, nand, nor, xnor, not
Tipos de Operandos permisibles: bit, boolean, std_logic, tambin arreglos
unidimensionales (del tipo bit, boolean y std_logic)
Operandos deben tener la misma longitud, excepto para el operador not, el cual
se aplica por lo general a un solo operando.
Si una expresin incluye varios de estos operadores (p.ej. AND, OR, XNOR) es
necesario utilizar parntesis para evaluarla correctamente.

Ecuacin Booleana

Expresin 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 Ingeniera Elctrica

Electrnica Digital

Asignacin de Seales con Ecuaciones Booleanas


a
b

x1

c
d

x2
x3

e
f
L

En este tipo de
asignaciones, cada
funcin de salida es
descrita mediante su
ecuacin booleana
correspondiente, lo
cual implica el uso de
operadores lgicos.

1
2
3
4
5
6
7
8
9
10
11
12

Ejemplo N 1 Asignaciones de Seales Uso de Ecs. Booleanas


library ieee;
use ieee.std_logic_1164.all;
entity logica is
port (a,b,c, d, e, f: in std_logic;
x1, x2, x3: out std_logic);
end logica;
architecture booleana of logica is
begin
x1 <= a xnor b;
x2 <= ((c and d) or (a xnor b)) nand ((e xor f) and (c and d));
x3 <= (e xor f) and (c and d);
end booleana;

Departamento de Ingeniera Elctrica

Electrnica Digital

Asignacin de Seales con Ecuaciones Booleanas


L

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Ejemplo N 2 Asignaciones de Seales Uso de Ecs. Booleanas


library ieee;
use ieee.std_logic_1164.all;
entity logica is
port (A,B,C: in std_logic;
P,Q,R: out std_logic);
end logica;
architecture arq_log of logica is
begin
P <= (not A and not B and not C) or (not A and not B and C)
or (not A and B and C) or (A and B and C);
Q <= (not A and not B and C) or (A and not B and C)
or (A and B and not C);
R<= (not A and not B and not C) or (not A and B and not C)
or (not A and B and C);
end arq_log;

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 Ingeniera Elctrica

Electrnica Digital

Formato del enunciado WHEN-ELSE


Enunciados WHEN-ELSE:
La construccin when-else es una asignacin
condicional, que debe incluir todas las
opciones posibles de variacin de una seal.
SINTAXIS:
[ etiqueta: ]
seal <= [ opcin ] [ valor ] when condicin 1 else
[ valor ] when condicin 2 else
unaffected;
unaffected : Permite que no se realice ninguna accin.

Se pueden anidar varias condiciones en una misma asignacin


Ejemplo:
s <= 11 when a = b else
10 when a > b else
01;

Departamento de Ingeniera Elctrica

Electrnica Digital

Asignacin Condicional de Seales


L

a
b
c

f(a,b,c)

Entidad
Tabla

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Ejemplo N 3 - Uso de la construccin when-else


library ieee;
use ieee.std_logic_1164.all;
entity tabla is
port (a,b,c: in std_logic;
f: out std_logic);
end tabla;
architecture arq_tabla of tabla is
begin
f <= 1 when (a = 0 and b=0 and c=0) else
1 when (a = 0 and b=1 and c=1) else
1 when (a = 1 and b=1 and c=0) else
1 when (a = 1 and b=1 and c=1) else
0;
end arq_tabla;

La construccin when-else permite definir paso a paso el comportamiento de un sistema. Para esto, se
declaran los valores que se deben asignar a una seal (o grupo) en funcin de las diferentes condiciones
de entrada posibles. El orden en el que se declaren las condiciones de entrada, no es importante.

Departamento de Ingeniera Elctrica

Electrnica Digital

Asignacin Condicional de Seales

L
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Ejemplo N 4 - Uso de la construccin when-else


library ieee;
use ieee.std_logic_1164.all;
entity funcion is
port (A,B,C,D: in std_logic;
F: out std_logic);
end funcion;
architecture arq_func of funcion is
begin
F <= 1 when (A = 0 and B=0 and C=0 and D=0) else
1 when (A = 0 and B=1 and C=0 and D=1) else
1 when (A = 0 and B=1 and C=1 and D=0) else
1 when (A = 1 and B=1 and C=1 and D=1) else
0;
end arq_func;

Departamento de Ingeniera Elctrica

Electrnica Digital

Formato del enunciado WITH-SELECT-WHEN


Enunciados WITH-SELECT-WHEN:
La construccin with-select-when es
una asignacin por seleccin, la
asignacin se hace segn el resultado de
la expresin.

SINTAXIS
with expresin select
seal <= [ opciones ] [ valor ] when caso 1,
[ valor ] when caso 2;
caso :
Valor que toma la expresin
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,
verde
when 10,
amarillo
when 11,
no funciona when others;
Departamento de Ingeniera Elctrica

10

Electrnica Digital

Asignacin de Seales por Seleccin

L
a(1)

a(0)

La estructura with-select-when se
utiliza para asignar un valor (de
varios posibles) a una seal o grupo
de seales con base a los diferentes
valores de otra seal o grupo de
seales previamente
seleccionada(o).
Por lo general, un grupo de seales
forman un vector, como en el
ejemplo descrito a(1) y a(0) forman
el vector a.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Departamento de Ingeniera Elctrica

Ejemplo N 5 Uso de la construccin with-select-when


library ieee;
use ieee.std_logic_1164.all;
entity circuito is
port (a: in std_logic_vector (1 downto 0);
C: out std_logic);
end circuito;
architecture arq_cir of circuito is
nicamente, se utiliza la coma (,), el
begin
punto y coma (;) se utiliza cuando se
finaliza la construccin with-select
with a select
C <= 1 when 00,
0 when 01,
1 when 10,
1 when others;
end arq_cir;

11

Electrnica Digital

Asignacin de Seales por Seleccin


L
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Ejemplo N 6 Uso de la construccin with-select-when


Circuito Combinatorio que detecte Nmeros Primos de 4-Bits
library ieee;
use ieee.std_logic_1164.all;
entity seleccion is
port (M: in std_logic_vector (3 downto 0);
F: out std_logic);
end seleccion;
architecture arq_selec of seleccion is
begin
with M select
F <= 1 when 0001,
1 when 0010,
1 when 0011,
1 when 0101,
1 when 0111,
1 when 1011,
1 when 1101,
0 when others;
end arq_selec;

Departamento de Ingeniera Elctrica

12

M3

M2

M1

M0

Electrnica Digital

Ejemplo: Multiplexor
Ejemplo N 7 Multiplexor 4 a 1 / Uso de Ecs. Booleanas

Mux 4 a 1 (2-Bits)

a[1:0]
b[1:0]
c[1:0]
d[1:0]

00
01 Mux

y[1:0]

10
11
s[1:0]

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
entity mux is
port (a, b, c, d: in std_logic_vector (1 downto 0);
s: in std_logic_vector (1 downto 0);
y: out std_logic_vector (1 downto 0));
end mux;
architecture arqmux of mux is
begin
y(1) <= (a(1) and not s(1) and not s(0)) or
(b(1) and not s(1) and s(0)) or
(c(1) and s(1) and not s(0)) or
(d(1) and s(1) and s(0));
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));
end arqmux;

13

Electrnica Digital

Ejemplo: Multiplexor

Mux 4 a 1 (2-Bits)

a[1:0]
b[1:0]
c[1:0]
d[1:0]

00
01 Mux

y[1:0]

10
11
s[1:0]

Departamento de Ingeniera Elctrica

Ejemplo N 8 Multiplexor 4 a 1 / Uso de when-else


library ieee;
use ieee.std_logic_1164.all;
entity mux is
port (a, b, c, d: in std_logic_vector (1 downto 0);
s: in std_logic_vector (1 downto 0);
y: out std_logic_vector (1 downto 0));
end mux;
architecture arqmux of mux is
begin
y <= a when s = 00 else
b when s = 01 else
c when s = 10 else
d;
end arqmux;

14

Electrnica Digital

Ejemplo: Multiplexor

Ejemplo N 9 Multiplexor 4 a 1 / Uso de with-select-when

Mux 4 a 1 (2-Bits)

a[1:0]
b[1:0]
c[1:0]
d[1:0]

00
01 Mux

y[1:0]

10
11
s[1:0]

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
entity mux is
port (a, b, c, d: in std_logic_vector (1 downto 0);
s: in std_logic_vector (1 downto 0);
y: out std_logic_vector (1 downto 0));
end mux;
architecture arqmux of mux is
begin
with s select
y <= a when 00,
b when 01,
c when 10,
d when others;
end arqmux;

15

Electrnica Digital

Procesos (process)
Tipos de Enunciados Concurrentes.
Asignacin de Seal
Proceso (process)
Bloque (block)

Permite asignar un valor calculado a una seal o


puerto.
Permite definir un algoritmo secuencial que lee
valores de Seales y calcula nuevos valores que son
asignados a otras Seales.
Grupo de enunciados concurrentes.

Llamada a un Componente predefinido


Llamada a un Subprograma

Llama a un algoritmo que calcula y asigna valores a


Seales

Proceso (process)
Cada proceso es conformado por un conjunto de enunciados secuenciales.
Enunciados Secuenciales Son interpretados por la herramienta de
sntesis en forma secuencial, es decir, uno por uno, por lo que el orden en el
cual son declarados tiene un efecto significativo en la lgica que se intenta
describir o sintetizar.

Departamento de Ingeniera Elctrica

16

Electrnica Digital

Procesos (process)

Enunciados de Asignacin de Variables


Proceso (process)

Enunciados de Asignacin de Seales


Enunciados if
Enunciados case
Enunciados loop
Enunciados next

Enunciados
Secuenciales

Enunciados exit
Enunciados de Subprogramas
Enunciados return

Nota importante:
Una seal que se vea involucrada dentro de un proceso no
recibe inmediatamente el valor asignado, slo hasta el final
del mismo. Una variable que sea utilizada dentro de un
proceso s recibe el valor de forma inmediata.

Departamento de Ingeniera Elctrica

Enunciados wait
Enunciados null

17

Electrnica Digital

Formato del enunciado IF-THEN-ELSE

Enunciados if:

if la_condicin_es_cierta then
{ejecuta grupo-1 de enunciados secuenciales};

La construccin if-then-else
else

{ejecuta grupo-2 de enunciados secuenciales};


end if;

Enunciados if:
La construccin if-then-elsif-thenelse

if la_condicin-1_se_cumple then
{ejecuta grupo-1 de enunciados secuenciales};
elsif la_condicin-2_se_cumple then
{ejecuta grupo-2 de enunciados secuenciales};
else
{ejecuta grupo-3 de enunciados secuenciales};
end if;

Departamento de Ingeniera Elctrica

18

Electrnica Digital

Operadores Relacionales
Operadores Relacionales
Caractersticas.
Uso: Para fines de comparacin de datos.
Operadores incluidos en los paquetes: std_numeric y std_logic_arith
Los operadores de Igualdad y Desigualdad (= , /=) utilizan todos los
tipos de datos.
Los operadores (<, <=, >, >=) 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 Ingeniera Elctrica

19

Electrnica Digital

Enunciado IF-THEN-ELSE
Ejemplo N 10 - La construccin if-then-else
Comparador de dos palabras con long. de 2-bits

La construccin: if-then-else

La construccin if-then-else sirve para


seleccionar una operacin con base al
anlisis (evaluacin lgica Cierto o Falso)
de una condicin.

a
b

c
Comparador

Departamento de Ingeniera Elctrica

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

library ieee;
use ieee.std_logic_1164.all;
entity comp is
port (a,b: in std_logic_vector (1 downto 0);
c: out std_logic);
end comp;
architecture funcional of comp is
begin
compara: process (a,b)
begin
if a = b then
c <= 1;
Lista-Sensitiva
else
Seales (incluyendo puertos) ledas por el proceso.
c <= 0;
end if;
end process compara;
end funcional;

20

Electrnica Digital

Enunciado IF-THEN-ELSIF-THEN-ELSE
La construccin:

Ejemplo N 11 - La construccin if-then-elsif-then-else


Comparador de Magnitud 2-Words de 4-bits

if-then-elsif-then-else

a[3:0]

a=b

p
q

a>b
r
b[3:0]

a<b

Qu valores tienen las otras


salidas en este instante?

La construccin if-then-elsif-then-else se
utiliza cuando se requiere analizar ms de
una condicin de entrada.

Departamento de Ingeniera Elctrica

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

library ieee;
use ieee.std_logic_1164.all;
entity comp4 is
port (a,b: in std_logic_vector (3 downto 0);
p,q,r: out std_logic);
end comp4;
architecture arq_comp4 of comp4 is
begin
process (a,b)
begin
if (a = b) then
p<= 1;
elsif (a > b) then
Qu circuito es inferido?
q <= 1;
else
r<= 1;
end if;
end process;
end arq_comp4;

21

Electrnica Digital

Enunciado IF-THEN-ELSIF-THEN-ELSE
A1

A0

B1

B0

S1

S0

Departamento de Ingeniera Elctrica

Ejemplo N 12 - La construccin if-then-elsif-then-else


Comparador de Magnitud 2-Words de 2-Bits / Salida Codificada
library ieee;
use ieee.std_logic_1164.all;
entity comp is
port (A,B: in std_logic_vector (1 downto 0);
S: out std_logic_vector (1 downto 0));
end comp;
architecture arq_comp of comp is
begin
process (A,B)
begin
if (A = B) then
Operacin deseada:
S<= 11;
Si: A = B entonces S = 11
elsif (A < B) then
S <= 01;
Si: A < B entonces S = 01
else
Si: A > B entonces S = 10
S <= 10;
end if;
end process;
end arq_comp;

22

Electrnica Digital

Enunciado IF-THEN-ELSIF-THEN-ELSE
Decodificadores: BCD a Decimal

if

Ejemplo N 13 Decodificador de BCD a Decimal


library ieee;
use ieee.std_logic_1164.all;
entity deco is
port (m: in std_logic_vector (3 downto 0);
a, b, c, d, e, f, g, h, i, j: out std_logic);
end deco;
architecture arqdeco of deco is
begin
BCD/DEC
process (m) begin
a <= 1;
b <= 1;
c <= 1;
1
m0
d <= 1;
e <= 1;
2
m1
f <= 1;
4
m2
g <= 1;
8
m3
h <= 1;
i <= 1;
j <= 1;
Salidas en
Activo-Bajo

Departamento de Ingeniera Elctrica

23

m = 0000 then
a <= 0;
elsif m = 0001 then
b <= 0;
elsif m = 0010 then
c <= 0;
elsif m = 0011 then
d <= 0;
elsif m = 0100 then
e <= 0;
elsif m = 0101 then
f <= 0;
elsif m = 0110 then
g <= 0;
elsif m = 0111 then
h <= 0;
elsif m = 1000 then
i <= 0;
elsif m = 1001 then
j <= 0;
end if;
end process;
end arqdeco;

Electrnica Digital

Enunciado IF-THEN-ELSIF-THEN-ELSE
Codificadores: Decimal a BCD

Entrada Decimal

Ejemplo N 14 Codificador Decimal a BCD


library ieee;
use ieee.std_logic_1164.all;
entity codif is
port (a: in std_logic_vector (9 downto 0);
d: out std_logic_vector (3 downto 0));
end codif;
architecture arqcodif of codif is
begin
process (a)
begin
if
a = 0000000001 then d <= 0000;
elsif a = 0000000010 then d <= 0001;
elsif a = 0000000100 then d <= 0010;
elsif a = 0000001000 then d <= 0011;
elsif a = 0000010000 then d <= 0100;
elsif a = 0000100000 then d <= 0101;

Departamento de Ingeniera Elctrica

a0

a1

1
2

a2
a3
a4

a5

a6

a7
a8

7
8

a9

d0
d1
d2
d3

Salida BCD

DEC/BCD

elsif a = 0001000000 then d <= 0110;


elsif a = 0010000000 then d <= 0111;
elsif a = 0100000000 then d <= 1000;
elsif a= 1000000000 then d <= 1001;
else d <= 1111;
end if;
end process;
end arqcodif;

24

Electrnica Digital

Formato del enunciado CASE


Enunciados CASE:
La construccin case - when ejecuta una o
varias instrucciones secuenciales que
dependen del valor de una sola expresin.

SINTAXIS
case expresion is
when caso1 => enunciados secuenciales;
{when caso2 => enunciados secuenciales; }
[when others => enunciados secuenciales; ]
end case;

EJEMPLO:
case puntuacion is
when 9 to 10
when 8 downto 7
when 5 | 6
when 0
when others
end case;

Departamento de Ingeniera Elctrica

=> acta <=Sobresaliente;


=> acta <=Notable;
=> acta <=Aprobado;
=> acta <=No presento;
=> acta <=Suspendido;

25

Electrnica Digital

Enunciado CASE
Decodificadores: BCD a 7-Segmentos

Cdigo BCD (A)


a
b
A0
A1
A2
A3

c d[6:0]

a
f

b
c

g
Salidas en Activo-Bajo

Departamento de Ingeniera Elctrica

Segmentos del Display (d)


d6

d5

d4

d3

d2

d1

d0

A3

A2

A1

A0

26

Electrnica Digital

Enunciado CASE
Decodificadores: BCD a 7-Segmentos
Ejemplo N 15 Decodificador
BCD a 7-Segmnetos
(Uso de construccin case-when)

when 0101 => d <= 0100100;


when 0110 => d <= 0100000;
when 0111 => d <= 0001110;
when 1000 => d <= 0000000;
when 1001 => d <= 0000100;
when others => d <= 1111111;
end case;
end process;
end arqdeco;

library ieee;
use ieee.std_logic_1164.all;
entity decobcd_7s is
port (A: in std_logic_vector (3 downto 0);
d: out std_logic_vector (6 downto 0));
end decobcd_7s;
architecture arqdeco of decobcd_7s is
begin
process (A) begin
case A is
when 0000 => d <= 0000001;
when 0001 => d <= 1001111;
when 0010 => d <= 0010010;
when 0011 => d <= 0000110;
when 0100 => d <= 1001100;

Departamento de Ingeniera Elctrica

Construccin case-when: En esta construccin se evala la


expresin especificada (case) y el valor que se obtenga se
compara con los asociados a las diferentes opciones descritas.
Aquella opcin (when) que coincida con dicho valor, le sern
ejecutados sus enunciados secuenciales adyacentes.

27

Electrnica Digital

Ejemplo: Medio Sumador


Ejemplo N 16 Medio Sumador

Suma
Medio

Cout

Sumador

Suma

Cout

library ieee;
use ieee.std_logic_1164.all;
entity med_sum is
port (A,B: in std_logic;
Suma, Cout: out std_logic);
end med_sum;
architecture arq_sum of m_sum is
begin
Suma <= A xor B;
Cout <= A and B;
end arq_sum;

Suma A B
Cout A * B

Departamento de Ingeniera Elctrica

28

Electrnica Digital

Ejemplo: Sumador Completo


Suma

A
Sumador
Completo

Medio Sumador

Cout

Cin

Suma

Cout

Cin

Cin

Suma

Cout

B
Medio Sumador

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
Departamento de Ingeniera Elctrica

29

Electrnica Digital

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;
use ieee.std_logic_1164.all;
entity sum is
port (A, B, Cin: in std_logic;
Suma, Cout: out std_logic);
end sum;
architecture arq_sum of sum is
begin
Suma <= A xor B xor Cin;
Cout <= (A and B) or ((A xor B) and Cin);
end arq_sum;

Departamento de Ingeniera Elctrica

30

Electrnica Digital

Ejemplo: Sumador Paralelo de 4 bits


Ejemplo N 18 Sumador Paralelo de 4 bits

S0
A0

C0

B0
S1
A1

C1

B1
S2
A2

C2

B2
S3
A3

Cout

B3

library ieee;
use ieee.std_logic_1164.all;
entity suma is
port (A, B: in std_logic_vector (3 downto 0);
S: out std_logic_vector (3 downto 0);
Cout: out std_logic);
end suma;
architecture arqsuma of suma is
signal C: std_logic_vector (2 downto 0);
begin
S(0) <= A(0) xor B(0);
C(0) <= A(0) and B(0);
S(1) <= (A(1) xor B(1)) xor C(0);
C(1) <= (A(1) and B(1)) or (C(0) and (A(1) xor B(1)));
S(2) <= (A(2) xor B(2)) xor C(1);
C(2) <= (A(2) and B(2)) or (C(1) and (A(2) xor B(2)));
S(3) <= (A(3) xor B(3)) xor C(2);
Cout <= (A(3) and B(3)) or (C(2) and (A(3) xor B(3)));
end arqsuma;

Declaraciones de Seales (signal): Especifican seales que


permiten conectar los diferentes tipos de enunciados concurrentes
(asignacin de seales, bloques, procesos y llamadas a
componentes o procedimientos) de que consta una arquitectura.

Departamento de Ingeniera Elctrica

31

Electrnica Digital

Ejemplo: Sumador Paralelo de 4 bits


Ejemplo N 19 Sumador Paralelo de 4 bits con Cout
(Uso Operador Aritmtico +)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

Operadores Aritmticos
Operador

Descripcin

Suma

Resta

Divisin

Multiplicacin

**

Potencia

Departamento de Ingeniera Elctrica

entity sum4b_arit is
port (A, B: in std_logic_vector (3 downto 0);
S: out std_logic_vector (3 downto 0);
Cout: out std_logic );
end sum4b_arit;
architecture arqsum of sum4b_arit is
signal sum: std_logic_vector (4 downto 0);
begin
sum <= 0&A + 0& B;
S <= sum (3 downto 0);
Cout <= sum(4);
end arqsum;

32

Electrnica Digital

Ejemplo: Buffer (salida de 3 estados)


Ejemplo N 20 Buffer Salida de 3-Estados

habilitar (enable)
entrada

salida

Tipos Lgicos Estndares


U

Valor No-Inicializado

Valor Fuerte Desconocido

0 Fuerte

1 Fuerte

Alta Impedancia

Valor Dbil Desconocido

0 Dbil

1 Dbil

No Importa (Dont Care)

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
entity tri_est is
port (enable, entrada: in std_logic;
salida: out std_logic);
end tri_est;
architecture arq_buffer of tri_est is
begin
process (enable, entrada)
begin
if (enable = 0) then
salida <= Z;
else
salida <= entrada;
El tipo de dato bit no soporta el valor
end if;
Z, por lo que se debe utilizar el tipo
end process;
std_logic, que si lo soporta.
end arq_buffer;

33

Electrnica Digital

Resumen de Circuitos combinatorios


Multiplexores
with sel select
dout <= a when 00,
b when 01,
c when 10,
d when 11,
(others => x) when others;

process(sel, a, b, c, d)
begin
if (sel = 00) then
dout <= a;
elsif (sel = 01) then
dout <= b;
elsif (sel = 10) then
dout <= c;
elsif (sel = 11) then
dout <= d;
else
dout <= (others => X);
end if;
end process;

process(sel, a, b, c, d)
begin
case sel is
when 00 => dout <= a;
when 01 => dout <= b;
when 10 => dout <= c;
when 11 => dout <= d;
when others => dout <= (others => X);
end case;
end process;

dout <= a when sel = 00 else


b when sel = 01 else
c when sel = 10 else
d when sel = 11 else
(others => x);

sel
a
b
c

MUX

dout

Departamento de Ingeniera Elctrica

34

Electrnica Digital

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
(others => x);

process(sel)
begin
dout <= 0000;
if (sel = 00) then
dout(0) <= 1;
elsif (sel = 01) then
dout(1) <= 1;
elsif (sel = 10) then
dout(2) <= 1;
elsif (sel = 11) then
dout(3) <= 1;
else
dout <= XXXX;
end if;
end process;

Departamento de Ingeniera Elctrica

process(sel)
begin
dout <= 0000;
case sel is
when 00 => dout(0) <= 1;
when 01 => dout(1) <= 1;
when 10 => dout(2) <= 1;
when 11 => dout(3) <= 1;
when others => dout <= XXXX;
end case;
end process;

dout
with sel select
dout <= 0001 when 00,
0010 when 01,
0100 when 10,
1000 when 11,
XXXX when others;

35

Sel

Decoder

Electrnica Digital

Resumen de Circuitos combinatorios


Unidad Aritmtica Lgica
Res <= a + b when Op = suma else
a - b when Op = resta else
a and b when Op = andl else
a or b when Op = orl else
sll(a, 1) when Op = shl else
srl(a, 1);

process(a, b, Op)
begin
case Op is
when suma => Res <= a + b;
when resta => Res <= a - b;
when andl => Res <= a and b;
when orl => Res <= a or b;
when shl => Res <= sll(a, 1);
when shr => Res <= srl(a, 1);
end case;
end process;

with Op select
Res <= a + b when suma,
a - b when resta,
a and b when andl,
a or b when orl,
sll(a, 1) when shl,
srl(a, 1) when shr;

process(a, b, Op)
begin
if (Op = suma) then Res = a + b;
elsif (Op = resta) then Res = a - b;
elsif (Op = andl) then Res = a and b;
elsif (Op = orl) then Res = a or b;
elsif (Op = shl) then Res = sll(a, 1);
elsif (Op = shr) then Res = srl(a, 1);
end if;
end process;

a
b

ALU

Res

Op

Departamento de Ingeniera Elctrica

36

Electrnica Digital

Captulo 4
Circuitos Lgicos Secuenciales

Departamento de Ingeniera Elctrica

Electrnica Digital

Qu es un Circuito Lgico Secuencial?


Clasificacin

Asncronos

Entradas

Lgica
Combinatoria

Sncronos
Lgica
Combinatoria

Seal de
Reloj

Seal de
Reloj

Salidas

Seal de
Reloj

Seal de
Reloj
Elementos
de Memoria

Mixtos
Elementos
de Memoria

Entradas

Elementos de
Memoria

Elementos
de Memoria

Salidas
Elementos
de Memoria

Entradas

Lgica
Combinatoria

Salidas

Seal de
Reloj

Elementos de
Memoria
Seal de
Reloj

Departamento de Ingeniera Elctrica

Electrnica Digital

Elementos de Memoria: Flip-Flops

clk

clk

clk

Q
clk

Qt

Qt+1

Qt

Qt+1

Qt

Qt+1

Qt

Qt+1

Departamento de Ingeniera Elctrica

Electrnica Digital

Atributos
Los elementos en VHDL, como seales, variables, etc., pueden tener
informacin adicional llamada atributos. Estos atributos estn
asociados a estos elementos del lenguaje y se manejan en VHDL
mediante comilla simple ( ) .
SINTAXIS

nameatributo

Atributo : predefinido o definido por el usuario.

Ejemplos de algunos atributos predefinidos:


Suponiendo que t es un tipo enumerado, entero, flotante, o
fsico.
tleft
Lmite izquierdo del tipo t
tlow
Lmite inferior del tipo t
Suponiendo que s es una seal, se pueden utilizar los
siguientes atributos.
sevent Devuelve true si se ha producido un cambio en s

Departamento de Ingeniera Elctrica

Electrnica Digital

Flip-Flop tipo D
En el Diseo Secuencial con VHDL, las construcciones:
if-then-else / if-then-elsif-then son las ms utilizadas.
D

clk

Ejemplo N 1 Flip-Flop tipo D

Qt

Qt+1

library ieee;
use ieee.std_logic_1164.all;
entity ffd is
port (D, clk: in std_logic;
Q: out std_logic);
end ffd;
architecture arq_ffd of ffd is
begin
process (clk,D)
begin
if (clkevent and clk=1) then
Q <= D;
end if;
end process;
end arq_ffd;

Instrucciones equivalentes:
if rising_edge(clk) verdadero con el flanco de subida
if ( clkevent and clk= 1 and clklast_value= 0 )

if falling_edge(clk) verdadero con el flanco de bajada


if ( clkevent and clk= 0 and clklast_value= 1 )

Departamento de Ingeniera Elctrica

Electrnica Digital

Flip-Flop tipo SR
S

Qt

Qt+1

Qn

clk
if (S = 0 and R = 1) then
Q <= 0;
Qn <= 1;
elsif (S = 1 and R = 0) then
Q <= 1;
Qn <= 0;
elsif (S = 0 and R = 0) then
Q <= Q;
Qn <= Qn;
else
Q <= -;
Qn <= -;
end if;

Ejemplo N 2 Flip-Flop tipo SR


library ieee;
use ieee.std_logic_1164.all;
entity ffsr is
port (S, R, clk: in std_logic;
Q, Qn: buffer std_logic);
end ffsr;
architecture arq_ffsr of ffsr is
begin
process (clk, S, R)
begin
if (clkevent and clk=1) then

Departamento de Ingeniera Elctrica

end if;
end process;
end arq_ffsr;

Electrnica Digital

Registros Paralelo de 8 bits


Ejemplo N 3 Registro Paralelo de 8-Bits

D[0:7]

Q[0:7]

clk

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
entity reg is
port (D: in std_logic_vector (0 to 7);
clk: in std_logic;
Q: out std_logic_vector (0 to 7));
end reg;
architecture arqreg of reg is
begin
process (clk,D)
begin
if (clkevent and clk=1) then
Q <= D;
end if;
end process;
end arqreg;

Electrnica Digital

Registros Paralelo de 4 bits con Clear


Ejemplo N 4 Registro Paralelo de 4-Bits con Clear

CLK
CLR

Q0
Q0
Q1
Q1

D0

Q2

D1
D2
D3

Q2
Q3
Q3

CLR

Qn

Dn

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
entity reg4 is
port (D: in std_logic_vector (3 downto 0);
CLK, CLR: in std_logic;
Q, Qn: out std_logic_vector (3 downto 0));
end reg4;
architecture arq_reg4 of reg4 is
begin
process (CLK, CLR, D) begin
if (CLKevent and CLK=1) then
if (CLR = 1) then
Q <= D;
Qn <= not D;
else
Q <= 0000;
Qn <= 1111;
end if;
end if;
end process;
end arq_reg4;

Electrnica Digital

Contadores
clk

Contador
Q3 Q2 Q1 Q0

clk
Q0
Q1
Q2
Q3

Diagrama de tiempo del contador de 4 bits

Departamento de Ingeniera Elctrica

Electrnica Digital

Contador Ascendente
Ejemplo N 5 Contador de 4-Bits
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity cont4 is
port (clk: in std_logic;
Q: buffer std_logic_vector (3 downto 0));
end cont4;
architecture arqcont of cont4 is
begin
Es verdadera con el flanco de bajada de clk
process (clk)
begin
if (clkevent and clk = 0) then
Q <= Q +1;
end if;
end process;
end arqcont;

Departamento de Ingeniera Elctrica

10

Electrnica Digital

Contador Ascendente/Descendente
Ejemplo N 6 Contador Ascendente/Descendente de 4-Bits

clk
UD

UD

Q3 Q2 Q1 Q0

Accin

Cuenta Ascendente

Cuenta Descendente

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity contador is
port (clk: in std_logic;
UD: in std_logic;
Q: buffer std_logic_vector (3 downto 0));
end contador;
architecture arq_contador of contador is
begin
process (UD, clk) begin
if (clkevent and clk = 1) then
if (UD = 0) then
Q <= Q +1;
else
Q <= Q -1;
end if;
end if;
end process;
end arq_contador;

11

Electrnica Digital

Contador con Reset y Carga Paralela


Ejemplo N 7 Contador de 4-bits con reset y carga en paralelo

P3 P2 P1 P0

Reset

clk
Q3 Q2 Q1 Q0

Enp

Load

Enp

Load

Accin

Carga

Mantiene Estado

Carga

Cuenta

Departamento de Ingeniera Elctrica

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity cont is
port (P: in std_logic_vector (3 downto 0);
clk, Load, Enp, Reset: in std_logic;
Q: buffer std_logic_vector (3 downto 0));
end cont;
architecture arq_cont of cont is
begin
process (clk, Reset, Load, Enp, P) begin
if (Reset = 1) then
Operacin Asncrona
Q <= 0000;
elsif (clkevent and clk = 1) then
if (Load = 0 and Enp = -) then
Q <= P;
elsif (Load = 1 and Enp = 0) then
Q <= Q;
elsif (Load = 1 and Enp = 1) then
Q <= Q + 1;
end if;
end if;
end process;
end arq_cont;

12

Electrnica Digital

Mquinas Secuenciales

Salidas
Entradas

Lgica
Combinatoria

Registros

Lgica
Combinatoria

Mquina de Mealy con Salidas


Asncronas

Entradas

Lgica
Combinatoria

Lgica
Combinatoria

Registros

Salidas
Registros

Mquina de Mealy con Salidas


Sncronas

Departamento de Ingeniera Elctrica

13

Electrnica Digital

Mquinas Secuenciales
Ejemplo N 8

Representacin de una Mquina de Mealy

0/0

Estado
Presente

B
0/1
1/1

Entrada R
0

B/1

C/0

B/0

A/1

A/0

C/0

1/0
A

1/0
Prximo Estado / Salida S

0/0

Departamento de Ingeniera Elctrica

14

Electrnica Digital

Mquinas Secuenciales

Entradas

Salidas
Lgica
Combinatoria

Registros

Lgica
Combinatoria

Mquina de Moore con Salidas


Asncronas

Entradas

Salidas

Lgica
Combinatoria

Registros

Mquina de Moore con Salidas


Sncronas

Departamento de Ingeniera Elctrica

15

Electrnica Digital

Mquinas Secuenciales
Ejemplo N 9

Representacin de una Mquina de Moore

B/0

Estado
Presente

C/1

A/0
1

Entrada R

Salida S
(Para el Estado
Presente)

Prximo Estado

Departamento de Ingeniera Elctrica

16

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Flujo de Diseo de una Mquina de Estados Finitos (FSM)
1

Dibujar el Diagrama de Transiciones de Estados.

Verificacin del Diagrama de Estados:


Asegurarse que todos los estados estn representados.
La funcin 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, una vez que se ha llegado a l.

La funcin XOR de todas las transiciones-salida de un estado = 1 (TRUE)


Esto asegura que no existan condiciones en conflicto que conduzcan a tener ms de una transicin de salida activas en forma
simultnea.

Asignacin de Estados.

Descripcin del Comportamiento: Uso de Lenguajes de Descripcin de Hardware (HDL)


VHDL y Verilog

Compilacin / Sntesis del Diseo Generacin de Lgica (Ecuaciones Lgicas) / Asignacin


de Estados

Simulacin Funcional

Implementacin / Realizacin del Diseo: Realizacin de la Lgica con una Tecnologa y/o
Dispositivos predefinidos, p.ej. Biblioteca de Celdas CMOS, Lgica Comercial,
PLDs/CPLDs/FPGAs (para estos dispositivos, esta fase se le conoce como: Mapping, Place
& Route), Microcontroladores, etc.

Simulacin Temporizada

Departamento de Ingeniera Elctrica

17

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Circuito Secuencial que detecta 4-Unos (1s) consecutivos
Ejemplo N 10
1/0

0/0
0/0
1/0
d0

1/0

1/0

d1

d2

1/1
d3

d4

0/0
0/0

0/0

Edo. Futuro

s (Salida)

Edo. Presente

Departamento de Ingeniera Elctrica

a=0

a=1

a=0

a=1

d0

d0

d1

d1

d0

d2

d2

d0

d3

d3

d0

d4

d4

d0

d1

18

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Cmo describir o declarar los estados (usando VHDL) a partir del Diagrama de Estados?
Para entender el proceso de declaracin de los estados, se comprender primeramente el siguiente
grupo de declaraciones

type std_logic is (0,1,U,X,Z,W,L,H,-);


signal a: std_logic;
signal b: std_logic_vector (3 downto 0);

a puede tener cualquiera de los valores:


0,1,U,X,Z,W,L,H,-

b est formado por 4-bits, cada uno de los cuales


puede tener cualquiera de los valores:
0,1,U,X,Z,W,L,H,-

Departamento de Ingeniera Elctrica

19

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Para declarar los estados de una Mquina de
Estados Finitos se realiza lo siguiente:

Cmo son codificados: d0, d1, d2, d3, d4?

edo_presente

edo_futuro

d0

d0

d1

d1

d2

d2

d3

d3

d4

d4

estados

Valores que pueden tener el edo.presente y el edo.futuro en el


ejemplo N 10:
Tipos de Codificacin utilizados:
One-Hot
Compact
Secuencial
Gray
Johnson
Definido por Usuario

Declaracin de Estados en una FSM

type estados is (d0, d1, d2, d3, d4);


signal edo_presente, edo_futuro: estados;

estados es el nombre o identificador dado por el usuario al conjunto de datos conformado por d0,
d1,d2 d3, d4. A este tipo de datos se le conoce como Tipo de Datos Enumerados

El Nmero de Bits utilizados


en la codificacin est en
funcin del Nmero de
Estados (Tarea realizada
por el Compilador o
Sintetizador)*

000

d0

001

d1

010

d2

011

d3

100

d4

101

101

110

110

111

111

edo_presente, edo_futuro son seales (signal) que pueden adquirir cualquiera de los valores (d0,
d1, d2, d3, d4) que describen al tipo de dato enumerado identificado con el nombre de estados.
edo_presente y edo_futuro son tambin datos del tipo enumerado

Departamento de Ingeniera Elctrica

20

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Ejemplo N 10 Detector de Secuencia

when d2=>
if a = 1 then
edo_futuro <= d3;
s <= 0;
else
edo_futuro <= d0;
s <= 0;
end if;
when d3 =>
if a = 1 then
edo_futuro <= d4;
s <= 1;
else
edo_futuro <= d0;
s <= 0;
end if;
when d4 =>
if a = 1 then
edo_futuro <= d1;
s <= 0;
else
edo_futuro <= d0;
s <= 0;
end if;

library ieee;
use ieee.std_logic_1164.all;
entity diagrama is
port (clk, a: in std_logic;
s: out std_logic);
end diagrama;
architecture arq_diagrama of diagrama is
type estados is (d0, d1, d2, d3, d4);
signal edo_presente, edo_futuro: estados;
begin
proceso1: process (edo_presente, a) begin
case edo_presente is
when d0 =>
if a = 1 then
edo_futuro <= d1;
s <= 0;
else
edo_futuro <= d0;
s <= 0;
end if;
when d1 =>
if a = 1 then
edo_futuro <= d2;
s <= 0;
else
edo_futuro <= d0;
s <= 0;
end if;

Departamento de Ingeniera Elctrica

end case;
end process proceso1;
proceso2: process (clk) begin
if (clkevent and clk = 1) then
edo_presente <= edo_futuro;
end if;
end process proceso2;
end arq_diagrama;

21

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Ejemplo N 11
0

S0/0
Mquina de Moore
0

1
1

S1/1

S2/1

S3/0
0

Departamento de Ingeniera Elctrica

22

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


when S2=> Sal <= 1;
if A = 0 then
Edo_Fut <= S2;
else
Edo_Fut <= S3;
end if;
when S3 => Sal <= 0;
if A = 0 then
Edo_Fut <= S3;
else
Edo_Fut <= S1;
end if;
end case;
end process proceso1;
proceso2: process (CLK) begin
if (CLKevent and CLK = 1) then
Edo_Pres <= Edo_Fut;
end if;
end process proceso2;
end ARQ_MOORE;

Ejemplo N 11 Mquina de Moore


library ieee;
use ieee.std_logic_1164.all;
entity MOORE is
port (A, CLK: in std_logic;
Sal: out std_logic);
end MOORE;
architecture ARQ_MOORE of MOORE is
type Estados is (S0, S1, S2, S3);
signal Edo_Pres, Edo_Fut: Estados;
begin
proceso1: process (Edo_Pres, A) begin
case Edo_Pres is
when S0 => Sal<= 0;
if A = 0 then
Edo_Fut <= S0;
else
Edo_Fut <= S2;
end if;
when S1 => Sal <= 1;
if A = 0 then
Edo_Fut <= S0;
else
Edo_Fut <= S2;
end if;

Departamento de Ingeniera Elctrica

23

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos

0/0

Ejemplo N 12

S0
Mquina de Mealy

0/0

1/1
1/1

S1

S2

1/1

1/0

0/1

S3
0/0

Departamento de Ingeniera Elctrica

24

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Ejemplo N 12 Mquina de Mealy
library ieee;
use ieee.std_logic_1164.all;
entity MEALY is
port (clk, a: in std_logic;
sal: out std_logic);
end MEALY;
architecture ARQ_MEALY of MEALY is
type Estados is (S0, S1, S2, S3);
signal Edo_Pres, Edo_Fut: Estados;
begin
proceso1: process (Edo_Pres, a) begin
case Edo_Pres is
when S0 =>
if a = 0 then
sal <= 0;
Edo_Fut <= S0;
else
sal <= 1;
Edo_Fut <= S2;
end if;
when S1 =>
if a = 0 then
sal <= 0;
Edo_Fut <= S0;
else
sal <= 1;
Edo_Fut <= S2;
end if;

Departamento de Ingeniera Elctrica

when S2=>
if a = 0 then
sal <= 1;
Edo_Fut <= S2;
else
sal <= 0;
Edo_Fut <= S3;
end if;
when S3 =>
if a = 0 then
sal <= 0;
Edo_Fut <= S3;
else
sal <= 1;
Edo_Fut <= S1;
end if;
end case;
end process proceso1;
proceso2: process (clk) begin
if (clkevent and clk = 1) then
Edo_Pres <= Edo_Fut;
end if;
end process proceso2;
end ARQ_MEALY;

25

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Ejemplo N 13
0
1

q1/0

q0/0

1/1

q2

0/0

q3/0

1
0
q4/0

Qu tipo de Mquina es?

Es correcta su Descripcin en VHDL?

Cumple las Reglas de Verificacin de un Diagrama de Estados?

Departamento de Ingeniera Elctrica

26

Electrnica Digital

Diseo de Circuitos Secuenciales Sncronos


Ejemplo N 13 - Mquina Mixta

when q2=>
if a = 0 then
edo_fut <= q4;
sal <= 0;
else
edo_fut <= q3;
sal <= 1;
end if;
when q3 => sal <= 0;
if a = 0 then
edo_fut <= q3;
else
edo_fut <= q3;
end if;
when q4 => sal <= 0;
if a = 0 then
edo_fut <= q4;
else
edo_fut <= q1;
end if;
end case;
end process proceso1;
proceso2: process (clk) begin
if (clkevent and clk = 1) then
edo_pres <= edo_fut;
end if;
end process proceso2;
end arq_diag;

library ieee;
use ieee.std_logic_1164.all;
entity diag is
port (clk, a: in std_logic;
sal: out std_logic);
end diag;
architecture arq_diag of diag is
type estados is (q0, q1, q2, q3, q4);
signal edo_pres, edo_fut: estados;
begin
proceso1: process (edo_pres, a) begin
case edo_pres is
when q0 => sal <= 0;
if a = 0 then
edo_fut <= q4;
else
edo_fut <= q1;
end if;
when q1 => sal <= 0;
if a = 0 then
edo_fut <= q4;
else
edo_fut <= q2;
end if;

Departamento de Ingeniera Elctrica

27

Electrnica Digital

Captulo 5
Diseo jerrquico en VHDL

Departamento de Ingeniera Elctrica

Electrnica Digital

Cmo integrar Entidades?


Cmo integrar dos o ms entidades en una sola entidad con el fin
de formar un Sistema ms complejo?

Integracin de Entidades en
una sola Entidad

Cdigo Entidad
Integradora
Cdigo Sub-entidad-1

Integracin de Estructuras Jerrquicas


Uso de Componentes (Components)

Cdigo Entidad
Integradora
(con Jerarqua de Mayor Nivel)

Cdigo Sub-entidad-2
Cdigo Sub-entidad-3

Cdigo Sub-entidad-j

Paquete
(Package)

Cdigo C1
Cdigo C2

Component C1

Cdigo C3

Component C2
Llamado del Componente C1

Component C3

Llamado del Componente C2

Llamado del Componente C3

Component Cj

Cdigo Cj

Cdigo Cn

:
Cdigo Sub-entidad-n

Llamado del Componente Cj

Component Cn

Cj = Componente-j

Llamado del Componente Cn


Un Componente es descrito como una Entidad

Departamento de Ingeniera Elctrica

Electrnica Digital

Qu es el Diseo Jerrquico?
Cmo disear un Sistema complejo mediante la unin de bloques o mdulos
(entidades) diseados en forma independiente ?
Estructuras Jerrquicas

Integracin de Entidades
Reset

Entidad-1 Nivel
Inferior

Entidad-2 Nivel
Inferior

Contador
clk

Sub-entidad-1

q3 q2 q1 q0

Entidad Integradora de
Nivel Superior
Decodificador

Entidad-Sistema

Sub-entidad-2

a b c d e f g
Entidad-3 Nivel
Inferior

Entidad-4 Nivel
Inferior
Entidad-Sistema

Una Entidad de Nivel Inferior se puede ver como un


Componente independiente.
En este caso, los cdigos asociados a cada entidad o
componente de nivel inferior no son combinados dentro del
cdigo de la Entidad-Sistema

Departamento de Ingeniera Elctrica

Electrnica Digital

Metodologa de Diseo
Metodologa de Diseo de Estructuras Jerrquicas

Analizar el Sistema a disear y dividirlo en bloques jerrquicos (Componentes)


Describir, simular y sintetizar los mdulos o componentes.
Crear un Paquete de Componentes (Package) Cdigo VHDL
Describir la Entidad Integradora de Nivel Superior (con Mayor Jerarqua) que
representar al Sistema completo Cdigo VHDL

Los puntos con letra azul pueden tambin ser realizados a travs
de mtodos esquemticos (p.ej. con WebPack de Xilinx)

Departamento de Ingeniera Elctrica

Electrnica Digital

Ejemplo 1: Sistema a disear


VCC

R3 R 0

Entradas por Registro


Entradas Directas

GND

Y3Y0

AMD

D3 D 0
S0

Seleccin

S1

Terminales

Salidas

PUSH / POP
OE
Seales de
CIN
Control
ER
FE

2909

Secuenciador
AMD2909

Alimentacin

Funcin

Entradas por Registro R3-R0

A travs de ellas se permite sostener (hold) una direccin.

Entradas Directas D3-D0

Entradas del Secuenciador que permiten realizar un cambio de direccin


en la lgica del programa.

Entrada ER

Habilitacin del Registro R

Entrada FE

Habilitacin del Apuntador de Pila (Stack Pointer: ST)

Entrada CIN

Acarreo de Entrada

Entrada OE

Habilitacin de Salidas

Entrada PUSH / POP

Control de Direccionamiento de Subrutinas

Entradas S0 S1

Lneas de Seleccin

Salidas Y3-Y0

Salidas del Secuenciador

Salida COUT

Acarreo de Salida

VCC y GND

Alimentacin del Circuito

Departamento de Ingeniera Elctrica

Electrnica Digital

Anlisis del Sistema (Definicin de Componentes)


Descripcin Interna del Circuito Secuenciador AMD2909
(Entradas por Registro)
R3 R0
(Reloj)
Registro
CLK

(Habilitacin de Registro)

ER

(Habilitacin de Stack)

FE

Apuntador
Stack

REG

PUSH / POP

D3 D 0
(Entradas Directas)

S0
(Control de
Arquitectura)

D
3

ST

R
2

PC
0

Contador de
Microprograma

Latch

Multiplexor Mux 4:1

S1

Y3

Y2

Y1

Y0

COUT
Sumador

(Acarreo de Salida)

Y
(Habilitacin de Salida)

CIN
(Acarreo de Entrada)

OE

Y3
Departamento de Ingeniera Elctrica

Y2

Y1

Y0
6

Electrnica Digital

Diseo y programacin de componentes

Diseo del Registro

(Entradas por Registro)

R : R3 R 0
ER

Registro

(Habilitacin de
Registro)

CLK
REG

(Reloj)

Departamento de Ingeniera Elctrica

Electrnica Digital

Diseo y programacin de componentes

Diseo del
Multiplexor 4 a 1

S : S1 S 0
S0
S1

D
11

10

01

PC
00

Multiplexor Mux 4:1


Salida

Departamento de Ingeniera Elctrica

ST

Y
Electrnica Digital

Diseo y programacin de componentes


Diseo del Contador
de Microprograma

PC
Latch
CLK

COUT

Mux
Sumador

(Acarreo de
Salida)

Y
CIN
(Acarreo de Entrada)

Departamento de Ingeniera Elctrica

Electrnica Digital

Diseo y programacin de componentes

Diseo de la Pila
(Stack)

(Habilitacin de Stack)

ST

Apuntador
Stack

FE

PUSH / POP
CLK

PC

Departamento de Ingeniera Elctrica

10

Electrnica Digital

Creacin del Paquete de Componentes

Departamento de Ingeniera Elctrica

11

Electrnica Digital

Realizacin del Programa de Alto Nivel (Top Level)

Multiplexor

Registro

Archivo de Enlace
de Componentes
(Top Level)

Contador de
Microprograma

Pila (Stack)

Entidad-Sistema
Verificar y Simular el Sistema

Departamento de Ingeniera Elctrica

12

Electrnica Digital

Ejemplo 2: Sistema a disear


Circuito
Sinptico

Bloque
control

Salida excitatoria
Entrada (PDM)

Salida inhibitoria
6
Bit de signo
(MSB)

Peso sinptico W

Peso sinptico W

Multiplicador de
frecuencia

Departamento de Ingeniera Elctrica

Registro de 7 bits del peso


sinptico

13

Bloque
control
Circuito de seleccin y
muestreador

Electrnica Digital

Tabla de funcionamiento del multiplicador de frecuencia

Peso (w)

Estado
0

000

001

010

011

100

101

110

111

000

001

010

011

100

101

110

111

Departamento de Ingeniera Elctrica

14

Electrnica Digital

Anlisis del Sistema (Definicin de Componentes)


Descripcin Interna del circuito Sinptico

rst

cuenta
Contador

Deco

ent

Sal_exc

f_int
Demux

Sal_inh

w ( 6:0 )

Registro

w_int

w (6)

Departamento de Ingeniera Elctrica

15

Electrnica Digital

Diseo y programacin de componentes

Diseo del
contador

clk

Contador

q (5 : 0)

rst

Departamento de Ingeniera Elctrica

16

Electrnica Digital

Encontrar la relacin de distribucin (solucion 1)

Estado
0

000

001

010

011

100

101

110

111

000

100

010

110

001

101

011

111

Peso (w)

AND

Departamento de Ingeniera Elctrica

17

Electrnica Digital

Circuito Lgico resultante

q2

q1

q0

w2 w1 w0
Departamento de Ingeniera Elctrica

18

Electrnica Digital

Diseo y programacin de componentes


Diseo del
decodificador

q(5:0)

Deco

w(5:0)

Departamento de Ingeniera Elctrica

19

Electrnica Digital

Diseo y programacin de componentes


Diseo del
decodificador

q(5:0)

Deco

w(5:0)

Departamento de Ingeniera Elctrica

20

Electrnica Digital

Diseo y programacin de componentes


Diseo del
decodificador

q(5:0)

Deco

w(5:0)

Departamento de Ingeniera Elctrica

21

Electrnica Digital

Diseo y programacin de componentes


Diseo del
decodificador

q(5:0)

Deco

w(5:0)

Departamento de Ingeniera Elctrica

22

Electrnica Digital

Encontrar la relacin de distribucin (solucin 2)

Peso W
w2 w1 w0

Estados del contador (Q2 Q1 Q0)


000

001

010

011

100

101

110

Q2 Q1 Q0

XX1

w2

111

0 0 0

0 0 1

X10

w1

0 1 0

100

w0

0 1 1

000

1 0 0

1 0 1

1 1 0

1 1 1

Departamento de Ingeniera Elctrica

23

f Q0 w2 Q1Q0 w1 Q2Q1Q0 w0

Electrnica Digital

Solucin 2 : Encontrar la relacin de distribucin


Generalizacin a N bits

Q3 Q2 Q1 Q0
XXX1
XX10
X100
1000
0000

f
w3
w2
w1
w0
0

Q4 Q3 Q2 Q1 Q0
XXXX1
XXX10
XX100
X1000
10000
00000

w4
w3
w2
w1
w0
0

Q5 Q4 Q3 Q2 Q1 Q0
XXXXX1
XXXX10
XXX100
XX1000
X10000
100000
000000

f
w5
w4
w3
w2
w1
w0
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 Ingeniera Elctrica

24

Electrnica Digital

Diseo y programacin de componentes


Diseo del
decodificador

q(5:0)

Deco

w(5:0)

Departamento de Ingeniera Elctrica

25

Electrnica Digital

Creacin del Paquete de Componentes


Creacin del Paquete de Componentes

Departamento de Ingeniera Elctrica

26

Electrnica Digital

Realizacin del Programa de Alto Nivel (Top Level)


Que Estilo de
Modelizacin tiene este
programa?

Contador

Archivo de Enlace
de Componentes
(Top Level)

Deco

Departamento de Ingeniera Elctrica

27

Electrnica Digital

Estructuras de repeticin
GENERATE crea cero o ms copias de un conjunto cerrado de
instrucciones concurrentes. Existen dos clases de generate.
for generate: el nmero de copias est
determinado por un rango discreto.
SINTAXIS
label: for identifier in range generate
{concurrent_statment}
end generate[label];
DESCRIPCION
label: nombre de esta instruccin la cual sirve para construir
instrucciones generate anidadas.
identifier: es especfico de la instruccin forgenerate.
range: nmero entero calculable de la cantidad de copias;
por ejemplo:
integer_expression to integer_expression, o bien,
integer_expression downto integer_expression

Departamento de Ingeniera Elctrica

28

Electrnica Digital

Ejemplo de la instruccin for generate

Diseo de un Multiplexor de 16 a 1

Departamento de Ingeniera Elctrica

29

Electrnica Digital

Multiplexor de 16 a 1
w0
w1
w2

Mux
4x1

m0

Mux
4x1

m1

w3

G1: for i in 0 to 3 generate


Muxes: mux4to1 port map (
w(4*i), w(4*i+1), w(4*i+2), w(4*i+3), s(1 downto 0), m(i));
end generate;
Mux5: mux4to1 port map (m(0), m(1), m(2), m(3), s(3 downto 2), f);

w4
w5
w6
w7

m0
m1

w8

Mux
4x1

m2

w9

Mux
4x1

w10

m2

m3

w11
s3

s2

w12
w13

Mux
4x1

w14

m3

s(3) s(2) s(1) s(0) w


0
0
0
0 w0
0
0
0
1 w1
0
0
1
0 w2
0
0
1
1 w3
0
1
0
0 w4
0
1
0
1 w5
0
1
1
0 w6
0
1
1
1 w7
1
0
0
0 w8
1
0
0
1 w9
1
0
1
0 w10
1
0
1
1 w11
1
1
0
0 w12
1
1
0
1 w13
1
1
1
0 w14
1
1
1
1 w15

w15

s1

s0

Departamento de Ingeniera Elctrica

30

Electrnica Digital

Estructuras de repeticin
if generate: realiza cero o una copia de manera condicional. Sirve para
generar una estructura regular que tiene un principio distinto, el cuerpo
medio constante y un final tambin diferente.

SINTAXIS
label: if expression generate
{concurrent_statment}
end generate[label];
DESCRIPCION
label: nombre de esta instruccin.
expression: cualquier expresin que evalue un valor del tipo
Boolean.
concurrent_statment: cunjunto de instrucciones concurrentes.

Departamento de Ingeniera Elctrica

31

Electrnica Digital

Ejemplo de la instruccin if generate


Diseo de un Decodificador de 4 a 16

Departamento de Ingeniera Elctrica

32

Electrnica Digital

Decodificador de 4 a 16
G1: for i in 0 to 3 generate
dec_ri: dec2to4 port map (w(1 downto 0), m(i), y(4*i to 4*i+3));
G2: if i=3 generate
dec_left: dec2to4 port map (w(i downto i-1), En, m);
end generate;
end generate;

y0

w1
w0

Deco
2x4

m0

m0

w3
w2

y4

Deco
2x4

m1

y5
y6
y7

m1

Deco
2x4

m2

En

m3

y8

w1
w0

Deco
2x4

m2

w0
m3

33

y9
y10
y11

y12

w1

Departamento de Ingeniera Elctrica

y2
y3

w1
w0

y1

Deco
2x4

y13
y14
y15

Electrnica Digital

PROCEDIMIENTO
PROCEDURE
El procedimiento slo puede devolver valores a travs de los parmetros
que se le pasen, los argumentos pueden ser de entrada, de salida o
bidireccional, tiene efectos colaterales, es decir, puede provocar cambios
en objetos externos a l, puede tener instrucciones WAIT.

SINTAXIS
PROCEDURE nombre [(parmetros)] IS
[declaraciones]

BEGIN
[sentencias_serie]

END [PROCEDURE] [nombre];

Departamento de Ingeniera Elctrica

34

Electrnica Digital

Ejemplo de un PROCEDIMIENTO
procedure vtoi(vin: in std_logic_vector;
nbits: in integer;
salida: out integer) is
variable temp: integer range 0 to 63;
begin
temp:=0;
for i in 0 to nbits-1 loop
if (vin(i)='1') then
temp:=temp + (2**i);
end if;
end loop;
salida:=temp;
end;

-- convertir un vector a entero (versin procedimiento)


library IEEE;
use ieee.std_logic_1164.all;
entity PVTOI is
port (CLK: in std_logic;
T0,T1,T2,T3,T4,T5: in std_logic;
ESTADO: out integer range 0 to 63 );
end PVTOI;
architecture RTL of PVTOI is
signal temporal1: std_logic_vector(5 downto 0);
begin
process(CLK,temporal1)
variable temporal2: integer range 0 to 63;
begin
if (CLK'event AND CLK='1') then
temporal1<=T5&T4&T3&T2&T1&T0;
end if;
-- se llama al procedimiento VTOI
vtoi(temporal1,6,temporal2);
ESTADO<=temporal2;
end process;
end RTL;

Departamento de Ingeniera Elctrica

PVTOI
T0
T1
T2
T3
T4
T5

35

ESTADO

CLK

Electrnica Digital

FUNCION
FUNCTION
Una funcin devuelve un valor; los argumentos son siempre de entrada; no
tiene efectos colaterales; como devuelve un valor se usa en expresiones;
debe contener la palabra clave RETURN seguida de una expresin; jams
debe tener la instruccin WAIT.

SINTAXIS
[PURE | IMPURE]
[FUNCTION nombre [(parmetros)] RETURN tipo IS
[declaraciones]

BEGIN
[sentencias_serie] -- debe incluir al menos un RETURN

END [FUNCTION] [nombre];

Departamento de Ingeniera Elctrica

36

Electrnica Digital

Ejemplo de una FUNCION


function vtoi(vin: in std_logic_vector; nbits: in
integer) return integer is
variable temp: integer range 0 to 63;
begin
temp:=0;
for i in 0 to nbits-1 loop
if (vin(i)='1') then
temp:=temp + (2**i);
end if;
end loop;
return(temp);
end;

-- convertir vector a entero (versin funcin)


library IEEE;
use ieee.std_logic_1164.all;
entity FVTOI is
port ( CLK: in std_logic;
T0,T1,T2,T3,T4,T5: in std_logic;
ESTADO: out integer range 0 to 63 );
end FVTOI;
architecture RTL of FVTOI is
signal temporal1: std_logic_vector(5 downto 0);
begin
process(CLK,temporal1)
begin
if (CLK'event AND CLK='1') then
temporal1<=T5&T4&T3&T2&T1&T0;
end if;
-- llamada a la funcion vtoi
ESTADO <= vtoi(temporal1,6);
end process;
end RTL;

Departamento de Ingeniera Elctrica

FVTOI
T0
T1
T2
T3
T4
T5

37

ESTADO

CLK

Electrnica Digital

Diferencias en Procedimientos y Funciones


1. Una funcin siempre devuelve un valor, mientras un procedimiento slo puede
devolver valores a travs de los parmetros que se le pasen.
2. Los argumentos de una funcin son siempre de entrada, por lo que slo se pueden
leer dentro de la funcin. En el procedimiento pueden ser de entrada, salida o de
entrada/salida, por lo que pueden sufrir modificaciones.
3. Una funcin no tiene efectos colaterales, pero un procedimiento s, es decir, puede
provocar cambios en objetos externos a l debido a que se pueden cambiar las
seales aunque no se hubieran especificado en el argumento. Es decir, en los
procedimientos se pueden realizar asignaciones sobre seales declaradas en la
arquitectura y, por lo tanto, externas al procedimiento.
4. Las funciones, como devuelven un valor, se usan en expresiones, mientras que los
procedimientos se llaman como una sentencia secuencial o concurrente.
5. La funcin debe contener la palabra clave RETURN seguida de una expresin puesto
que siempre devuelve un valor, mientras que en el procedimiento no es necesario.
6. Una funcin jams puede tener la instruccin WAIT, mientras que un procedimiento s.

Departamento de Ingeniera Elctrica

38

Electrnica Digital

Captulo 6
VHDL para simulacin

Departamento de Ingeniera Elctrica

Electrnica Digital

VHDL para simulacin


El lenguaje VHDL sirve tambin para la descripcin de
modelos para simulacin, sus principales caractersticas son:
No tiene demasiadas restricciones.
Solo se requiere un interprete de las instrucciones.
No importa el nivel de abstraccin.

Hay una serie de elementos que solo tiene significado en


un entorno de simulacin, estos son:
Especificacin de Retardos.
Notificacin de sucesos.
Descripcin del banco de pruebas.

Departamento de Ingeniera Elctrica

Electrnica Digital

Especificacin de retardos
Especificacin de retardos

Para indicar un retardo en las asignaciones se emplea la palabra AFTER

Cuando se le asigna un valor a una


seal, no se le asigna de forma
inmediata, sino que se le asigna a su
fuente (driver).

seal <= 0 AFTER 15 ns;

En la sentencia se ha especificado el tiempo en el cual se realizar realmente la asignacin, de esta


manera la informacin de la fuente pasa a la seal cuando la simulacin llega a este tiempo.
Gracias al concepto de evento es fcil entender que en una asignacin se pueden programar varios
eventos o sucesos que tendrn en el futuro.

seal <= 1 AFTER 4 ns, 0 AFTER 20 ns;

Departamento de Ingeniera Elctrica

Electrnica Digital

Retardos inerciales y transportados


Retardos inerciales

Retardos transportados

Elimina el evento que hubiera en la lista y lo


sustituye con el nuevo evento.

Lo que se hace es simplemente


introducir el evento en la lista.

sal <= INERTIAL not ent AFTER 50 ns;

sal <= TRANSPORT not ent AFTER 50 ns;

Nota: El retraso inercial es el de defecto, en el caso de asignaciones mltiples slo la primera es inercial
sal <= REJECT 10 ns INERTIAL not ent AFTER 50 ns;

Departamento de Ingeniera Elctrica

Electrnica Digital

Modelo de simulacin
La Memoria ROM

Realizar el modelo de simulacin de


una memoria ROM simple. La ROM
tiene una entrada de seleccin activa a
nivel bajo, de manera que cuando est
activa, la salida es el contenido de la
posicin indicada por la direccin de
entrada, si no est activa, la salida es
alta impedancia. El tiempo que pasa
entre que cambia la seleccin y la
salida es de 60 ns. El tiempo que pasa
entre que cambia la direccin y cambia
la salida es de 100 ns. En el caso de
cambio en la direccin, la salida
mantiene su valor anterior durante 10
ns y luego pasa a desconocido.

Departamento de Ingeniera Elctrica

Electrnica Digital

Modelo de simulacin
La Memoria ROM

Departamento de Ingeniera Elctrica

Electrnica Digital

Modelo de simulacin
La Memoria ROM

Seleccin
inactiva

Seleccin
activa

Alta
impedancia

Tiempoentreque
cambialaseleccin
ylasalida:60ns

Departamento de Ingeniera Elctrica

Electrnica Digital

Modelo de simulacin
La Memoria ROM

Cambio
de
direccin

Departamento de Ingeniera Elctrica

Encasodecambiode
direccin,lasalida
mantienesuvalor
durante10nsyluego
pasaadesconocido

Valor
desconocido

Electrnica Digital

Modelo de simulacin
La Memoria ROM

Cambio
de
direccin

Cambioenla
salida

Eltiempoquepasa
entrequecambiala
direccinycambiala
salida:100ns

Departamento de Ingeniera Elctrica

Electrnica Digital

Notificacin de sucesos
Notificacin de sucesos
Durante la simulacin de un circuito descrito en VHDL, se pueden
notificar ciertos sucesos mediante la utilizacin de la palabra clave
ASSERT, que tiene como elemento de activacin una condicin:

ASSERT condicin REPORT mensaje SEVERITY nivel gravedad


Si no se cumple la condicin especificada entonces se saca el
mensaje especificado por pantalla y se da adems un nivel de
gravedad. Tanto el mensaje como el nivel de gravedad son opcionales.
Si no se especifica ningn mensaje aparece la cadena "Assertion
Violation".
Los niveles de gravedad que hay son: NOTE, WARNING, ERROR y
FAILURE, y si no se especifica nada el valor por defecto es ERROR.

Departamento de Ingeniera Elctrica

10

Electrnica Digital

Qu es un Banco de Pruebas?
Banco de pruebas (Test Bench)
Un banco de pruebas no es ms que la definicin de un conjunto de entradas
llamadas patrones de prueba, con las que se verifica el funcionamiento del circuito.

Departamento de Ingeniera Elctrica

11

Electrnica Digital

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 seales:
Estmulos
Respuestas
Sus funciones son la generacin de estmulos y el anlisis de
las respuestas.

Sistema
Estmulos
Banco de pruebas

Departamento de Ingeniera Elctrica

Respuestas

12

Componente a verificar

Electrnica Digital

Estructura del Banco de Pruebas


El banco de pruebas consta de una entidad sin puertos. La arquitectura es de tipo
estructural, tiene como seales internas las entradas y salidas del circuito, el nico llamado
a componente es el correspondiente a la entidad que se desea simular y por ltimo una
seccin de definicin de estmulos.

entity TB is
end TB;

signal A, B, .: bit; signal


.;

UUT : entity workMyProcessor(Beh) port


map (.);
stimuli: process begin
A<= ;
B <= ;
wait for ;
wait;
end process stimuli;

Departamento de Ingeniera Elctrica

13

Electrnica Digital

Metodologas para un Banco de Pruebas

Metodologas para un banco de pruebas


La construccin de un banco de pruebas para un circuito determinado
puede abordarse de distintas maneras. Segn la forma de generacin de
los vectores de prueba, estas metodologas se pueden clasificar en:

Mtodo Tabular

Utilizacin de Archivos

Metodologa Algortmica

Departamento de Ingeniera Elctrica

14

Electrnica Digital

WAIT
WAIT condicin usada para detener un proceso.
En VHDL se usan tres tipos de enunciados wait.

wait for tipo_expresin -- espera por algn lapso de tiempo


wait for 10ns;
wait for periodo/2;

wait until condicin -- espera hasta que la condicin booleana se cumple


wait until A and B;
wait until clk=1;

wait on lista_sensitiva -- espera por un cambio de valor de la seal


wait on clk;
wait on enable,data;

Se pueden realizar condiciones complejas, combinando las diferentes formas


anteriores. En este caso se realiza el and de las dos primeras or la tercera.
wait on a,b until (a=1and b=0) for 10ns;

Departamento de Ingeniera Elctrica

15

Electrnica Digital

Ejemplo: Comparador de magnitud de 2 bits

A=B

A[1..0]

B[1..0]

Comparador
de
Magnitud

A>B
A<B

Funcin

Departamento de Ingeniera Elctrica

sal2

sal1

sal0

A=B

A>B

A<B

16

Electrnica Digital

Solucin: Comparador de magnitud de 2 bits


Descripcin en VHDL del Comparador de Magnitud

Departamento de Ingeniera Elctrica

17

Electrnica Digital

Metodologas para un banco de pruebas

Mtodo tabular

Departamento de Ingeniera Elctrica

18

Electrnica Digital

Metodologas para un banco de pruebas


Utilizacin de Archivos

Departamento de Ingeniera Elctrica

19

Electrnica Digital

Metodologas para un banco de pruebas


Metodologa Algortmica

Departamento de Ingeniera Elctrica

20

Electrnica Digital

Ejemplo: Registro de desplazamiento sncrono de 4 bits


rst
s [3..0]
e [3..0]

QB
ei

3
2
1

QA

QC
QA

3
2
1

QB

QD
QB

3
2
1

QC

ed
QC

3
2
1

QD

m [1..0]
clk

m1 m0

s3

s2

s1

s0

Funcin

QA QB QC QD

Mantiene

ei QA QB QC

Desplaz. derecha

QB QC QD ed

Desplaz. izquierda

e3 e2 e1 e0

Departamento de Ingeniera Elctrica

21

Carga

Electrnica Digital

Solucin: Registro de desplazamiento sncrono de 4 bits


Descripcin en VHDL del Registro de Desplazamiento

Departamento de Ingeniera Elctrica

22

Electrnica Digital

Metodologas para un banco de pruebas


Mtodo tabular

Departamento de Ingeniera Elctrica

23

Electrnica Digital

Metodologas para un banco de pruebas


Utilizacin de Archivos

Departamento de Ingeniera Elctrica

24

Electrnica Digital

Metodologas para un banco de pruebas


Metodologa Algortmica

Departamento de Ingeniera Elctrica

25

Electrnica Digital

Proceso: enunciados secuenciales

Enunciados de Asignacin de Variables


Enunciados de Asignacin de Seales
Enunciados if
Enunciados case
Enunciados next
Enunciados
Secuenciales

Enunciados exit
Enunciados null
Enunciados return
Enunciados loop
Enunciados wait
Enunciados de Subprogramas
(Procedure y function)

Departamento de Ingeniera Elctrica

26

Electrnica Digital

NEXT, EXIT, NULL, RETURN


NEXT salta instrucciones y contina con otra iteracin.
SINTAXIS
next [etiqueta] when [condicin];

EXIT salta instrucciones y contina fuera de una iteracin.


SINTAXIS
exit [etiqueta] when [condicin];

NULL no ejecuta ninguna accin.


SINTAXIS
null;

RETURN termina un subprograma (funcin o procedimiento).


SINTAXIS
return expresin;
return;

Departamento de Ingeniera Elctrica

-- para funcin
-- para procedimiento.

27

Electrnica Digital

LOOP
LOOP ejecuta repetidamente una secuencia de instrucciones.

SINTAXIS
[etiqueta:]

[esquema de iteracin] loop


{enunciados secuenciales}
{next [etiqueta] when [condicin];}
{exit [etiqueta] when [condicin];}
end loop [etiqueta];

DESCRIPCION
etiqueta: nombre opcional del lazo, til para lazos anidados.
esquema de iteracin: puede ser while o for.
condicin: expresin boolena.
next: salta instrucciones y contina con otra iteracin.
exit: salta instrucciones y contina fuera de LOOP.

Departamento de Ingeniera Elctrica

28

Electrnica Digital

Ejemplo: Habilitador de ducto


EN[1]

Ejemplo: Habilitador de ducto

A[1]

B[1]
EN[2]

A[2]

library ieee;

B[2]
EN[3]

use ieee.std_logic_1164.all;
A[3]

B[3]
EN[4]

entity habilitador is
port( B, EN: in bit_vector(1 to 8);
A: out bit_vector(1 to 8));
end habilitador;

A[4]

B[4]
EN[5]

architecture RTL of habilitador is


begin
process( B, EN )
begin
A <= 00000000;
for i in 1 to 8 loop
next when EN( i ) = 0;
A( i ) <= B( i );
end loop;
end process;
end RTL;

A[5]

B[5]
EN[6]

A[6]

B[6]
EN[7]

A[7]

B[7]
EN[8]
B[8]
Departamento de Ingeniera Elctrica

A[8]

29

Electrnica Digital

Ejemplo de la instruccin LOOP


Uso de las instruccin
LOOP
w

Mux

D Q
7

Mux

D Q
6

Mux

D Q
1

Mux

D Q
0

R(7)

Q(7)
R(6)

Q(2)
R(1)

Q(1)
R(0)

clock

Departamento de Ingeniera Elctrica

30

Electrnica Digital

Departamento de Ingeniera Elctrica

31

Electrnica Digital

Você também pode gostar