Sie sind auf Seite 1von 125

Contenidos

1 Introduccion
Objetivos y caractersticas
Ejemplo de diseno

2 Descripcion por comportamiento


Introduccion
Instruccion process
Instruccion if-then-elsif-else
Instruccion case
Tipo de dato enumerado
Variables
Circuito de Mealy
Circuito de Moore
Circuito de asincronico

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 1 / 123


Introduccion Objetivos y caractersticas

Objetivos del Lenguaje Descriptor de Hardware

Especificar circuitos electronicos


Simular el circuito previo a su construccion
Utilizar las ventajas que brinda un compilador en el control de errores en la
construccion del circuito.
Ejemplos :
Conectar dos salidas a un mismo nodo.

Interfaces electricas incompatibles.


1 => 2.8V < Vout < 3.5V Vin < 1V => 0
0 => 0V < Vout < 0.8V Vin > 4V => 1

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 2 / 123


Introduccion Objetivos y caractersticas

El Lenguaje Descriptor de Hardware VHDL

Objetivos:
Normalizar la especificacion de los circuitos integrados de aplicacion
especfica o A.S.I.C.
Especificar el comportamiento de circuitos digitales pero no su construccion.
Origen
VHDL es una sigla que significa VHSIC Hardware Description Language.
VHSIC se refiere a un programa gubernamental del Departamento de
Defensa de EE.UU. que dio su origen y significa Very High Speed
Integrated Circuit.
Su especificacion se encuentra en la NORMA IEEE-1076.
Permite la descripcion de los circuitos en base a tres modelos
Comportamiento
Estructural
Data Flow

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 3 / 123


Introduccion Ejemplo de diseno

Ejemplo de diseno

Descripcion en VHDL de un contador de dos bits:


Una entrada CLK que con el flanco ascendete el contador incrementa su
valor.
Una entrada RST que cuando tenga el valor 1 las salidas se pongan en 0
independientemente de las transiciones y valores de CLK.
Dos salidas Q0 y Q1, este ultimo de mayor peso, cuyos valores en binario
representan la cuenta hasta el momento.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 4 / 123


Introduccion Ejemplo de diseno

La entidad de diseno

La entidad de diseno es equivalente al encapsulado de los circuitos


integrados.
Define cuales son sus puertos y los modos de dichos puertos.
Ejemplos de encapsulados:

DIP SMD PLCC

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 5 / 123


Introduccion Ejemplo de diseno

Encapsulado y entidad de diseno

CONT2 e n t i t y cont2 is
port (
RST Q1 rst : in bit ;
clk : in bit ;
q0 : buffer bit ;
q1 : buffer bit );
CLK Q0 end ;

Diagrama Codigo VHDL

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 6 / 123


Introduccion Ejemplo de diseno

Descripcion de la Entidad de diseno

Pasos a seguir
Indentificar la entidad con un nombre.
Definir parametros de construccion generic.
Indentificar y declarar los puertos de acceso port.
Definir los modos de los puertos in, out, inout, etc.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 7 / 123


Introduccion Ejemplo de diseno

Modelos estructural y data flow

Las instrucciones que se utilizan en estos modelos se llaman concurrentes.


La secuencia en que aparecen las instrucciones no afecta el comportamiento
del circuito especificado.
Modelo estructural : se interconectan componentes por medio de las senales.
Modelo data-flow : se asigna un valor a una senal mediante una expresion.
Tambien se la conoce como Lenguaje de Transferencia de Registro o RTL.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 8 / 123


Introduccion Ejemplo de diseno

Diagrama en bloque

Q0

D Q D Q Q1

CLK CK CK
CLR CLR

RST

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 9 / 123


Introduccion Ejemplo de diseno

Identificacion de los nodos de interconexion

D0
Q0

D Q D Q Q1

CLK CK CK
CLR CLR

RST

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 10 / 123


Introduccion Ejemplo de diseno

Identificacion de los nodos de interconexion

D0 D1
Q0

D Q D Q Q1

CLK CK CK
CLR CLR

RST

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 10 / 123


Introduccion Ejemplo de diseno

Identificacion de unidades de los componentes

D0 D1
Q0

FFD0
D Q D Q Q1

CLK CK CK
CLR CLR

RST

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 11 / 123


Introduccion Ejemplo de diseno

Identificacion de unidades de los componentes

D0 D1
Q0

FFD0
D Q D Q Q1

CLK CK CK
CLR CLR

RST FFD1

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 11 / 123


Introduccion Ejemplo de diseno

Compuertas y componentes

Las compuertas logicas se pueden describir directamente con los operadores:


not xor
and nor
or nand
Los componentes son los equivalentes de los zocalos en donde luego se
conectaran los circuitos integrados representados por la entidad de diseno.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 12 / 123


Introduccion Ejemplo de diseno

Zocalos

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 13 / 123


Introduccion Ejemplo de diseno

Declaracion de componentes

En el diagrama hay dos unidades de un flip-flop D.


Se debe declarar un componente cuyo nombre arbitrario sera ffd que luego
se referira a una entidad que cumpla con la funcion de dicho flip-flop
(default binding).

component f f d
port (
c l r : in bit ;
ck : i n bit ;
d : in bit ;
q : out bit );
end component ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 14 / 123


Introduccion Ejemplo de diseno

Sintaxis del Cuerpo de arquitectura

a r c h i t e c t u r e nombre o f e n t i d a d i s

C o n j u n t o de d e c l a r a c i o n e s

begin

C o n j u n t o de i n s t r u c c i o n e s

end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 15 / 123


Introduccion Ejemplo de diseno

Cuerpo de arquitectura del contador de 2 bits

a r c h i t e c t u r e mix o f c o n t 2 i s
s i g n a l d0 , d1 : b i t ;
component f f d
port (
c l r : in b i t ;
ck : i n b i t ;
d : in b i t ;
q : out b i t ) ;
end component ;
begin
f f d 0 : f f d p o r t map ( r s t , c l k , d0 , q0 ) ;
f f d 1 : f f d p o r t map ( r s t , c l k , d1 , q1 ) ;
d0 <= not q0 ;
d1 <= q0 xor q1 ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 16 / 123


Introduccion Ejemplo de diseno

Pasos a seguir

Realizar un diagrama en bloque.


Identificar los nodos de interconexion.
Identificar las unidades de los componentes a utilizar.
Declarar las senales que representan los nodos de interconexion.
Declarar los componentes a utilizar.
Interconectar los componentes a traves de dichas senales.
Realizar las asignaciones de senales para generar las compuertas necesarias
que acompanen el circuito.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 17 / 123


Introduccion Ejemplo de diseno

Especificacion completa del contador de dos bits


e n t i t y cont2 is
port (
rst : in bit ;
clk : in bit ;
q0 : buffer bit ;
q1 : buffer bit );
end ;

a r c h i t e c t u r e mix o f c o n t 2 i s
s i g n a l d0 , d1 : b i t ;
component f f d
port (
c l r : in bit ;
ck : in bit ;
d : in bit ;
q : out b i t ) ;
end component ;
begin
f f d 0 : f f d p o r t map ( r s t , c l k , d0 , q0 ) ;
f f d 1 : f f d p o r t map ( r s t , c l k , d1 , q1 ) ;
d0 <= no t q0 ;
d1 <= q0 x o r q1 ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 18 / 123


Introduccion Ejemplo de diseno

Diagrama en bloque completo del contador de dos bits

Entity cont2
Architecture mix
Q0
Q0
D0 Q0 D1 buffer
not xor Q1

FFD0 FFD1
FFD FFD Q1 Q1
D0 D Q Q0 D1 D Q buffer

CLK CLK CLK


in CK CK
component
CLR instantiation CLR
RST RST RST component
in instantiation

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 19 / 123


Introduccion Ejemplo de diseno

Modelo de comportamiento

El circuito se especifica en base a una secuencia de instrucciones que indica


como sus salidas se modifican en base al valor y/o cambio de sus entradas.
La secuencia en que se escriben puede afectar el comportamiento

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 20 / 123


Introduccion Ejemplo de diseno

Entidad de diseno del flip-flop D

FFD entity ffd is


port (
D Q c l r : in bit ;
ck : in bit ;
CK d : in bit ;
q : out bit );
CLR end ;

Diagrama Codigo VHDL

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 21 / 123


Introduccion Ejemplo de diseno

Cuerpo de arquitectura del flip-flop D


Descripcion por comportamiento

a r c h i t e c t u r e beh o f f f d i s
begin
p r o c e s s ( ck , c l r )
begin
i f c l r = 1 then
q <= 0 ;
e l s i f ck e v e n t and ck = 1 then
q <= d ;
end i f ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 22 / 123


Introduccion Ejemplo de diseno

Entidad de simulacion
entity testbench i s
end ;

architecture simul of testbench i s


signal clock : bit ;
signal reset : bit ;
signal tstq0 : bit ;
signal tstq1 : bit ;

component c o n t 2
port (
rst : in bit ;
clk : in bit ;
q0 : buffer bit ;
q1 : buffer bit );
end component ;
begin
r e s e t <= 1 , 0 a f t e r 30 n s ;
c l o c k <= no t c l o c k a f t e r 50 n s ;
t e s t c o n t 2 : c o n t 2 p o r t map ( r e s e t , c l o c k , t s t q 0 , t s t q 1 ) ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 23 / 123


Introduccion Ejemplo de diseno

Diagrama de tiempos

entity testbench
/testbench/reset
/testbench/clock
/testbench/tstq0
/testbench/tstq1
component testcont2
/testbench/testcont2/rst
/testbench/testcont2/clk
/testbench/testcont2/q0
/testbench/testcont2/q1
/testbench/testcont2/d0
/testbench/testcont2/d1
component ffd0
/testbench/testcont2/ffd0/clr
/testbench/testcont2/ffd0/ck
/testbench/testcont2/ffd0/d
/testbench/testcont2/ffd0/q
component ffd1
/testbench/testcont2/ffd1/clr
/testbench/testcont2/ffd1/ck
/testbench/testcont2/ffd1/d
/testbench/testcont2/ffd1/q

0 100 200 300 400 500


141 ns

Entity:testbench Architecture:simul Date: Thu Aug 17 15:49:27 ART 2006 Row: 1 Page: 1

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 24 / 123


Descripcion por comportamiento Introduccion

Descripcion por comportamiento


Introduccion

El circuito digital se describe en base a una secuencia de instrucciones que


se llaman secuenciales
Las instrucciones secuenciales solo pueden ir dentro de las instrucciones:

process procedure
function
Las principales instrucciones secuenciales son:

if-then-else loop
case next
asignacion de senales exit
asignacion de variables

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 25 / 123


Descripcion por comportamiento Introduccion

Nociones de expresiones sintacticas


Una expresion sintactica consiste de un lado izquierdo, el smbolo ::= que se puede
leer como se reemplaza por, y un lado derecho.
iteration scheme ::=
while condition

for identifier in discrete range


Las palabras escritas en negritas simbolizan palabras claves. Por ejemplo: array,
port, entity, etc.
Las llaves { } encierran items que se repiten en el lado derecho de la expresion. Los
items pueden aparecer cero o mas veces.
term ::= factor { multiplying operator factor }

term ::= factor term { multiplying operator factor }

Los corchetes [ ] encierran items opcionales. Las siguientes expresiones son


equivalentes.
return statement ::= return [ expression ] ;

return statement ::= return ; return expression ;


La barra vertical separa alternativas a menos que ocurra inmediatamente despues


de la apertura de una llave {, en ese caso significa el caracter .

letter or digit ::= letter digit


choices ::= chioce { choice }

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 26 / 123


Descripcion por comportamiento Instruccion process

Instruccion process

Es una instruccion concurrente


Su bloque de instrucciones permite la descripcion de circuitos en base al
modelo de comportamiento.

Sintaxis :

[ etiqueta : ] process [ ( lista de sensibilidad ) ]


declaraciones
begin
instrucciones
end process ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 27 / 123


Descripcion por comportamiento Instruccion if-then-elsif-else

Instruccion if-then-elsif-else
Instrucciones secuenciales

Sintaxis :

if condition then
secuencia de instrucciones secuenciales
{ elsif condition then
secuencia de instrucciones secuenciales }
[ else
secuencia de instrucciones secuenciales ]
end if ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 28 / 123


Descripcion por comportamiento Instruccion if-then-elsif-else

Ejemplo de uso
Instruccion if-then-elsif-else

Descripcion del circuito logico correspondiente al siguiente mapa de Karnaugh por


medio del modelo de comportamiento:

X0
X2 X1
00 01 11 10
X3

00 1 1

01 1 1

11 1

10 1 1

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 29 / 123


Descripcion por comportamiento Instruccion if-then-elsif-else

Entidad de diseno
Ejemplo de uso

FUN e n t i t y FUN is
port (
X0 x0 : in bit ;
x1 : in bit ;
X1
O x2 : in bit ;
X2 x3 : in bit ;
o : out bit );
X3 end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 30 / 123


Descripcion por comportamiento Instruccion if-then-elsif-else

Cuerpo de arquitectura
Ejemplo de uso

a r c h i t e c t u r e compt o f f u n i s
begin
p r o c e s s ( x0 , x1 , x2 , x3 )
begin
o <= 0 ;
i f x0 = 0 t h e n X0
i f x2 = 0 X2 X1 0 0 01 11 10
i f x3 = 0 t h e n
o <= 1 ; X3
e l s i f x1 = 1 t h e n ;
o <= 1 ; 00 1 1
end i f ;
e l s i f x3 = 0 and x1 = 0 t h e n
o <= 1 ; 01 1 1
end i f ;
else
i f x1 = 1 t h e n
i f x2 = 0 and x3 = 1 t h e n 11 1
o <= 1 ;
e l s i f x2 = 1 and x3 = 0 t h e n
o <= 1 ; 10 1 1
end i f ;
e l s i f x2 = 1 and x3 = 1 t h e n
o <= 1 ;
end i f ;
end i f ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 31 / 123


Descripcion por comportamiento Instruccion case

Instruccion case
Instrucciones secuenciales

Sintaxis

case expression is
when option { option } =>
secuencia de instrucciones secuenciales

{ when option { option } =>


secuencia de instrucciones secuenciales }
end case;

option puede ser others en referencia el resto de los casos de expression no


enumerados en los valores de option

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 32 / 123


Descripcion por comportamiento Instruccion case

Ejemplo instruccion case


Instrucciones secuenciales

case x i s
when 00 | 11 =>
z <= 1 ;
when o t h e r s =>
z <= 0 ;
end case ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 33 / 123


Descripcion por comportamiento Tipo de dato enumerado

Tipo de dato enumerado

Se caracteriza por un conjunto de valores.


Ejemplo
El tipo bit permite tener solo dos valores el 1 y el 0.
Un tipo mas concreto permitira tener otros valores como por ejemplo :
0 debil
1 debil
alta impedancia

Dos tipos distintos podran caracterizar dos interfaces electricas diferentes.


Los tipos se declaran en la parte declarativa de cualquier instruccion.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 34 / 123


Descripcion por comportamiento Tipo de dato enumerado

Tipos enumerados
Introduccion a los tipos de datos

Sintaxis

type identifier is ( emumeration literal {, emumeration literal } )


emumeration literal ::= identifier character literal

identifier es una de las alternativas posibles que puede tener dicho tipo
descripto como un identificador.
character literal es otra forma de representar una alternativa como un
caracter.
Indica los valores que puede tomar un objeto: signal, variable, constant,
declarado con dicho tipo.
Ejemplos:

type bit is ( 0, 1) ;
type boolean is ( FALSE, TRUE ) ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 35 / 123


Descripcion por comportamiento Variables

Variables
Instrucciones secuenciales

Son objetos auxiliares que se utilizan en la descripcion por comportamiento


Se declaran en la parte declarativa de las instrucciones. secuenciales:
process, function, procedure.
Sintaxis

variable idenifier list : subtype indication [ := expression ];

identifier list es la lista de variables a declarar.


subtype indication indica el tipo de dato que tendran las variables de
datos declaradas.
:= expression inicializa la lista de variables con el valor de la expresion.
Ejemplo:

variable aux : bit := 1;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 36 / 123


Descripcion por comportamiento Variables

Asignacion de variables
Instrucciones secuenciales

Modifica el valor de la variable.


Sintaxis:

[ label : ] target := expression ;

target es el nombre de la variable que se quiere asignar.


expression es una expresion cuyo valor se asignara en la variable.
Ejemplo:

aux := cols * rows;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 37 / 123


Descripcion por comportamiento Circuito de Mealy

Diagrama en bloque de un circuito de Mealy


Instrucciones secuenciales

C
O
X M O
B
I
N
A
C
I
O
N
A
L
n n+1
Q Q
M
E
M
O
R
I
A

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 38 / 123


Descripcion por comportamiento Circuito de Mealy

Entidad de diseno y Diagrama de estados


Ejemplo de un circuito de Mealy

X/O
SEQMLY 0/1

X O

CLK
A
1/0
0/0
e n t i t y seqmly is
port (
clk : in bit ; 1/0
x : in bit ;
o : out b i t ) ; C B 1/0
end ;

0/0

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 39 / 123


Descripcion por comportamiento Circuito de Mealy

Cuerpo de arquitectura y tabla de transiciones


Ejemplo de un circuito de Mealy
a r c h i t e c t u r e beh o f s e q m l y i s
begin
process ( clk , x )
type e s t a d o s i s ( a , b , c ) ;
variable estado : estados ;
begin
i f c l k = 1 and c l k e v e n t t h e n
i f x = 0 t h e n
case estado i s
when a =>
e s t a d o := a ;
when b =>
X
e s t a d o := c ;
when c => q 0 1
e s t a d o := a ;

else
end c a s e ;
A A ,1 B ,0
e s t a d o := b ;
end i f ; B C ,0 B ,0
end i f ;
i f x = 0 t h e n
case estado i s C A ,0 B ,0
when a =>
o <= 1 ;
when o t h e r s =>
o <= 0 ;
end c a s e ;
else
o <= 0 ;
end i f ;
end p r o c e s s ;
end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 40 / 123
Descripcion por comportamiento Circuito de Moore

Diagrama en bloque de un circuito de Moore


Instrucciones secuenciales

C
O
X M
B
I
N n+1
A
C
Q
I
O
N
A
L

C
O
M
M B
E
I
N
O
n M A
C
Q O I
R O
N
I A
A L

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 41 / 123


Descripcion por comportamiento Circuito de Moore

Ejemplo de un circuito de Moore


Entidad de diseno y diagrama de estados

SEQ
00
X Q(0) 1
1

0
0
CLK Q(1)
11 01

e n t i t y seq is 0 0
port (
clk : in bit ;
x : in bit ; 1 1
q : out b i t v e c t o r ( 0 t o 1 ) ) ;
end ; 10

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 42 / 123


Descripcion por comportamiento Circuito de Moore

Cuerpo de arquitectura y tabla de transiciones


Circuito de Moore
a r c h i t e c t u r e beh o f s e q i s
begin
process ( clk )
v a r i a b l e e s t a d o : b i t v e c t o r ( 1 downto 0 ) ;
begin
i f c l k = 1 and c l k e v e n t t h e n
i f x = 0 t h e n
case estado i s
when 00 =>
e s t a d o := 01 ;
when 01 => X
e s t a d o := 10 ;
when 10 => q 0 1
e s t a d o := 11 ;
when 11 =>
e s t a d o := 00 ; 00 01 11
end c a s e ;
else
case estado i s
01 10 00
when 00 =>
e s t a d o := 11 ; 10 11 01
when 01 =>
e s t a d o := 00 ;
when 10 =>
11 00 10
e s t a d o := 01 ;
when 11 =>
e s t a d o := 10 ;
end c a s e ;
end i f ;
q <= e s t a d o ;
end i f ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 43 / 123


Descripcion por comportamiento Circuito de asincronico

Diagrama en bloque de un circuito asincronico


Instrucciones secuenciales

X o
m
Z
b
i
n
a
c
i
o
n
a
y l Y

retardos

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 44 / 123


Descripcion por comportamiento Circuito de asincronico

Ejemplo de un circuito asincronico


Entidad de diseno y diagrama de estados

ASINC XY

00 01 11 10 Z
Y
Z a b a a 0
X
a b c 0

entity asinc is
port ( d c c c 1
x : in bit ;
y : in bit ;
z : out b i t ) ;
end ; d c a 1

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 45 / 123


Descripcion por comportamiento Circuito de asincronico

Ejemplo de un circuito asincronico


Cuerpo de arquitectura

entity asinc is when o t h e r s =>


port ( null ;
x : in bit ; end c a s e ;
y : in bit ;
z : out b i t ) ; when 01 =>
end ; case estado i s
when a =>
a r c h i t e c t u r e beh o f a s i n c i s e s t a d o <= b ;
type e s t a d o s i s ( a , b , c , d ) ; when d =>
si gn al estado : estados ; e s t a d o <= c ;
when o t h e r s =>
begin null ;
process (x , y , estado ) end c a s e ;
begin when 11 =>
case estado i s case estado i s
when a | b => when b =>
z <= 0 ; e s t a d o <= c ;
when c | d => when o t h e r s =>
z <= 1 ; null ;
end c a s e ; end c a s e ;
when 10 =>
c a s e b i t v e c t o r ( 0 t o 1 ) ( x&y ) i s i f e s t a d o = d then
when 00 => e s t a d o <= a ;
case estado i s end i f ;
when b => end c a s e ;
e s t a d o <= a ; end p r o c e s s ;
when c => end ;
e s t a d o <= d ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 46 / 123
Descripcion por comportamiento Circuito de asincronico

Instruccion loop

Sintaxis

[ loop label : ] [ iteration scheme ] loop


sequence of statement
end loop;

iteration scheme ::=


while condition

for identifier in discrete range

discrete range indica un rango de valores. Ej : 0 to 9.


identifier es el nombre de un ndice que puede referenciarse luego dentro del
loop. Alcanza los valores especificados por discrete range.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 47 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion next

Sintaxis

[ label : ] next [ loop label ] [ when condition ];

La instruccion next salta al final de la instruccion loop que se encuentra


anidada identificada con loop label y continua con la siguiente iteracion si la
condicion condition vale TRUE.
Si loop label es omitido se continua con la siguiente iteracion del loop en el
que se encuentra anidado
Si la condicion es omitida entonces se salta siempre que se alcance la
instruccion next.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 48 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion next
Ejemplo I

etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
next;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 49 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion next
Ejemplo II

etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
next etiqueta1;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 50 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion exit

Sintaxis

[ label : ] exit [ loop label ] [ when condition ] ;

La instruccion exit sale de la instruccion loop en la que se encuentra anidada


e identificada con loop label si la condicion condition vale TRUE.
Si loop label es omitido se continua con la siguiente iteracion del loop en el
que se encuentra anidado
Si la condicion es omitida entonces se sale siempre que se alcance la
instruccion exit.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 51 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion exit
Ejemplo I

etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
exit;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 52 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion exit
Ejemplo I

etiqueta1: loop
etiqueta2: loop
secuencia_de_instrucciones
If ...... then
exit etiqueta1;
end if;
secuencia_de_instrucciones
end loop;
secuencia_de_instrucciones
end loop;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 53 / 123


Descripcion por comportamiento Circuito de asincronico

Instruccion wait

Sintaxis
[ label ] : wait [ on sensitivity clause ] [ until condition ] [ for time expression ];

Se utiliza dentro un process y permite expresar comportamientos de circuitos


asincronicos.
Funcion
La descripcion del circuito permanece en el mismo estado hasta que
haya un cambio en cualquiera de las senales especificadas en
sensitivity clause y que condition sea TRUE.
Si paso un lapso mayor que time expression esperando por un cambio y
verificacion de condition entonces se considera cumplida las condiciones
anteriores y se continua con la propagacion de los valores del circuito.
Ejemplos:
wait on clk,rst
wait until clk=1;
wait for 10 ns;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 54 / 123


Descripcion por comportamiento Circuito de asincronico

Ejemplo de uso de la Instruccion wait

Disenar un circuito asincronico de 2 entradas A y B y una salida Z.


El circuito producira un pulso cada vez que dentro de un pulso de A se
produzcan 2 pulsos completos de B.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 55 / 123


Descripcion por comportamiento Circuito de asincronico

Diagrama de tiempos

A A

B B

Z Z

A A

B B

Z Z

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 56 / 123


Descripcion por comportamiento Circuito de asincronico

Descripcion en VHDL

e n t i t y ejemp i s
port (
a : in bit ;
b : in bit ;
z : out b i t ) ;
end ;

a r c h i t e c t u r e beh o f ejemp i s
begin
process
begin
z <= 0 ;
w a i t on a u n t i l a = 1 ;
f o r i i n 0 to 4 loop
w a i t on a , b ;
e x i t when a = 0 ;
z <= 0 ;
i f i = 3 then
z <= 1 ;
end i f ;
end l o o p ;
i f a = 1 t h e n
w a i t on a ;
end i f ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 57 / 123


Descripcion por comportamiento Circuito de asincronico

Diseno de una compuerta and parametrizable

GAND

E(0)

E O
N
E(n1)

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 58 / 123


Descripcion por comportamiento Circuito de asincronico

Descripcion de la entidad gand


Ejemplo I

e n t i t y gand is
generic (
n : integer );
port (
e : in b i t v e c t o r ( 0 t o n 1);
o : ou t b i t ) ;
end ;

a r c h i t e c t u r e beh o f gand i s
begin
process ( e )
begin
o <= 1 ;
f o r i i n 0 t o n1 l o o p
i f e ( i )= 0 then
o <= 0 ;
exit ;
end i f ;
end l o o p ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 59 / 123


Descripcion por comportamiento Circuito de asincronico

Descripcion de la entidad gand


Ejemplo II

e n t i t y gand is
generic (
n : integer );
port (
e : in b i t v e c t o r ( 0 t o n 1);
o : ou t b i t ) ;
end ;

a r c h i t e c t u r e beh o f gand i s
begin
process ( e )
v a r i a b l e aux : b i t ;
begin
aux := e ( 0 ) ;
f o r i i n 1 t o n1 l o o p
aux := aux and e ( i ) ;
end l o o p ;
o <= aux ;
end p r o c e s s ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 60 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes

Se utilizan en la descripcion de circuitos por medio de los modelos


estructural y data flow.
Su secuencia no afecta la descripcion del circuito. Se utilizan para definir la
interconexion de bloques. Las instrucciones concurrentes se encuentran
principalmente en el bloque de instrucciones de architecture, block, generate.
Las instrucciones concurrentes son las siguientes:

block asignacion de senal concurrente


process
component
llamada a procedimiento
concurrente generate

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 61 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Instruccion block

La instruccion define un bloque que representa una porcion del diseno. La


instruccion block puede anidarse para permitir la descomposicion jerarquica del
diseno.

Sintaxsis:

block statement ::=


block label : block [ guard expression ]
block declarative part
begin
block statement part
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 62 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes

signal . . . . .
PROCESADOR
begin
CONTROLADOR ......
REGISTROS DE BUS ALU
end b l o c k ;
REG_BUS ALU_BUS
memoria : mem p o r t map ( . . . . . .

unidad de control : block


begin
CONTROL_BUS ......
end b l o c k ;
PF_BUS
MEM_BUS

p e r i f e r i c o s : block
begin
......
UNIDAD DE end b l o c k ;
MEMORIA PERIFERICOS
CONTROL
alu : block
entity procesador i s begin
.... ......
end ; end b l o c k ;

architecture e s t r u c t of procesador i s controlador de bus : block


signal pf bus . . begin
s i g n a l c o n t r o l b u s , mem bus . . . ......
s i g n a l reg bus , alu bus . . . end b l o c k ;
begin end ;
r e g i s t r o s : block
type . . .

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 63 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Asignacion concurrente de senal

concurrent signal assignment ::=


[ label : ] conditional signal assignment
[ label : ] selected signal assignment

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 64 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Asignacion condicional de senal

Sintaxis

conditional signal assignment ::=


target <= options condicional waveform ;

conditional waveforms ::=


{ waveform when condition else }
waveform

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 65 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Asignacion condicional de senal

Ejemplo

a r c h i t e c t u r e beh o f p r i o m u x i s
e n t i t y priomux i s begin
port ( p r o c e s s ( ena , i n p )
ena : i n b i t v e c t o r (0 to 3 ) ; begin
inp : in b i t v e c t o r (0 to 3 ) ; i f ena ( 0 ) == 1 t h e n
o : out b i t ) ; o <= i n p ( 0 ) ;
end ; e l s i f ena ( 1 ) == 1 t h e n
o <= i n p ( 1 ) ;
a r c h i t e c t u r e df of priomux i s e l s i f ena ( 2 ) == 1 t h e n
begin o <= i n p ( 2 ) ;
o <= e l s i f ena ( 3 ) == 1 t h e n
i n p ( 0 ) when ena ( 0 ) = 1 else o <= i n p ( 3 ) ;
i n p ( 1 ) when ena ( 1 ) = 1 else else
i n p ( 2 ) when ena ( 2 ) = 1 else o <= 0 ;
i n p ( 3 ) when ena ( 3 ) = 1 else end i f ;
0 ; end p r o c e s s ;
end ; end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 66 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Asignacion seleccionda de senal

Sintaxis :

selected signal assignment ::=


with expression select
target <= options selected waveform ;

selected waveforms ::=


{ waveform when choices, }
waveform when choices

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 67 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Asignacion seleccionda de senal

Ejemplo

e n t i t y mux4 is a r c h i t e c t u r e beh o f mux4 i s


port ( begin
s : in b i t v e c t o r ( 1 downto 0 ) ; process (e , s )
e : in b i t v e c t o r (0 to 3 ) ; begin
o : out b i t ) ; case s i s
end ; when 00 =>
o <= e ( 0 ) ;
a r c h i t e c t u r e d f o f mux4 i s when 01 =>
begin o <= e ( 1 ) ;
with s s e l e c t when 10 =>
o <= o <= e ( 2 ) ;
e ( 0 ) when 00 , when 11 =>
e ( 1 ) when 01 , o <= e ( 3 ) ;
e ( 2 ) when 10 , end c a s e ;
e ( 3 ) when 11 ; end p r o c e s s ;
end ; end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 68 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Equivalencia con un process

entity logic is end ;


port (
a : in bit ; a r ch i t e ct u r e df of l o g i c i s
b : in bit ; begin
c : in bit ; process (a , b , c , d , s )
d : in bit ; begin
i f s = 0 then
s : in bit ; o <= a and b ;
o : out b i t ) ; else
end ; o <= c o r d ;
end i f ;
architecture df of l o g i c i s end p r o c e s s ;
begin end ;
o <= a and b when s = 0 e l s e
c or d ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 69 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
component instantiation

Crea un componente y lo conecta al circuito que se esta describiendo.

component instatiation statement ::=


instantiation label : component label
[ generic map ( generic association list ) ]
[ port map ( port association list ) ] ;

Ejemplos:
ffd0 : ffd
p o r t map ( r e s e t , c l o c k , d0 , q0 ) ;

ffd1 : ffd
p o r t map ( c l r => r e s e t , ck => c l o c k , d => d0 , q => q0 ) ;

and8 : gand
g e n e r i c map ( 8 ) ;
p o r t map ( e => i n p , o => s ) ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 70 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

Registro de desplazamiento

SIN D Q D Q D Q D Q SOUT

CLK CK CK CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 71 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

Registro de desplazamiento

SIN D Q D Q D Q D Q SOUT

CLK CK CK CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 72 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

Registro de desplazamiento

SIN D Q D Q D Q D Q SOUT

CLK CK CK CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 73 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

Registro de desplazamiento

FF(0) FF(1) FF(2) FF(3)

SIN D Q D Q D Q D Q SOUT

CLK CK CK CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 74 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

Registro de desplazamiento

D(0) D(1) D(2) D(3) D(4)


FF(0) FF(1) FF(2) FF(3)

SIN D Q D Q D Q D Q SOUT

CLK CK CK CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 75 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

I=1
D(1) D(2) D(I) D(I+1)
FF(1) FF(I)

D Q D Q

CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 76 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Introduccion a la instruccion generate

I=1 I=2

D(1) D(2) D(2) D(3)


FF(1) FF(2)

D Q D Q

CK CK

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 77 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Ejemplo instruccion generate

entity shtreg4 is
port (
clk : in bit ;
sin : in bit ;
sout : out b i t ) ;
end ;

architecture estruc of shtreg4 i s


component f f d
port (
c l r : in b i t := 0 ;
ck : in bit ;
d : in bit ;
q : out b i t ) ;
end component ;
s i g n a l d : b i t v e c t o r (0 to 4 ) ;
begin
gensht : f o r i i n 0 to 3 g e n e r a t e
f f : f f d p o r t map ( ck => c l k , d => d ( i ) , q => d ( i + 1 ) ) ;
end g e n e r a t e ;
d ( 0 ) <= s i n ;
s o u t <= d ( 4 ) ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 78 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
generate

Es un mecanismo que permite la elaboracion iterativa o condicional de una


porcion de la descripcion del circuito.

Sintaxis :

generate statement ::=


generate label : generate scheme generate
{ cocurrent statement }
end generate ;

generation scheme ::=


for generate parameter specification

if condition

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 79 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Ejemplo instruccion generate

entity shtreg4 is ff : f f d p o r t map (


port ( ck => c l k , d => s i n ,
clk : in bit ; q => d ( i + 1 ) ) ;
sin : in bit ; end g e n e r a t e ;
sout : out b i t ) ;
end ; m i d d l e : i f i > 0 and i < 3 g e n e r a t e
f f : f f d p o r t map (
architecture estruc of shtreg4 i s ck => c l k , d => d ( i ) ,
component f f d q => d ( i + 1 ) ) ;
port ( end g e n e r a t e ;
c l r : in b i t := 0 ;
ck : in bit ; l a s t : i f i =3 g e n e r a t e
d : in bit ; f f : f f d p o r t map (
q : out b i t ) ; ck => c l k , d => d ( i ) ,
end component ; q => s o u t ) ) ;
s i g n a l d : b i t v e c t o r (1 to 3 ) ; end g e n e r a t e ;
begin
gensht : f o r i i n 0 to 3 g e n e r a t e end g e n e r a t e ;
end ;
first : if i =0 g e n e r a t e

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 80 / 123


Descripcion por comportamiento Circuito de asincronico

Instrucciones concurrentes
Ejemplo instruccion generate

entity gshtreg is end g e n e r a t e ;


generic (n : integer )
port ( m i d d l e : i f i > 0 and i < n1 g e n e r a t e
clk : in bit ; f f : f f d p o r t map (
sin : in bit ; ck => c l k , d => d ( i ) ,
sout : out b i t ) ; q => d ( i + 1 ) ) ;
end ; end g e n e r a t e ;

architecture estruc of gshtreg i s l a s t : i f i=n1 and n > 1 g e n e r a t e


component f f d f f : f f d p o r t map (
port ( ck => c l k , d => d ( i ) ,
c l r : in b i t := 0 ; q => d o u t ) ) ;
ck : in bit ; end g e n e r a t e ;
d : in bit ;
q : out b i t ) ; o n l y o n e : i f n=1 g e n e r a t e
end component ; f f : f f d p o r t map (
s i g n a l d : b i t v e c t o r ( 1 t o n 1); ck => c l k , d => d i n ,
begin q => s o u t ) ) ;
g e n s h t : f o r i i n 0 t o n1 g e n e r a t e end g e n e r a t e ;

f i r s t : i f i =0 and n > 1 g e n e r a t e end g e n e r a t e ;


f f : f f d p o r t map ( end ;
ck => c l k , d => s i n ,
q => d ( i + 1 ) ) ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 81 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos escalares


Enteros

Sintaxis :

type type identifier is range constraint ;

range constraint ::= range range


range ::= simple expression [ to downto ] simple expression

Ejemplo :
type t w o s c o m p l e m e n t i n t e g e r i s range 32768 to 3 2 7 6 7 ;

type b y t e l e n g t h i n t e g e r i s range 0 to 2 5 5 ;

type w o r d i n d e x i s range 31 downto 0 ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 82 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos escalares


Punto flotante

Sintaxis :

type type identifier is range constraint ;

range constraint ::= range range



range ::= simple expression [ to downto ] simple expression

Ejemplo :
type r e a l i s 1.0 e38 to 1 . 0 e38

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 83 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos compuestos


Arreglos con contorno

Sintaxis :

type type identifier is constrained array definition ;

constrained array definition ::=


array index constraint of element subtype indication ;

index constraint ::= ( discrete range [ , discrete range ] )

Ejemplo :
t y p e b y t e i s a r r a y ( 7 donwto 0 ) o f b i t ;

t y p e mem32kb i s a r r a y ( 0 t o 3 2 7 6 7 ) o f b i t v e c t o r ( 7 t o 0 ) ;

t y p e mat i s a r r a y ( 0 t o 7 , 5 t o 1 0 ) o f b i t ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 84 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos compuestos


Arreglos sin contornos

Sintaxis :

type type identifier is unconstrained array definition ;

unconstrained array definition ::=


array ( index subtype definition { , index subtype definition } )
of element subtype indication

index subtype definition ::= type mark range <>

Ejemplo :
type b i t v e c t o r i s a r r a y ( n a t u r a l r a n g e <>) o f b i t ;

t y p e mem8 i s a r r a y ( n a t u r a l r a n g e <>) o f b y t e ;

t y p e mem32 i s a r r a y ( n a t u r a l r a n g e <>) o f b i t v e c t o r ( 0 t o 3 1 ) ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 85 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos compuestos


Acceso a arreglos

architecture ...

signal a : bit ;
signal b : byte ;
signal c : mat ;
signal d : mem32kb ;

begin

Se c o p i a e l b i t 0 de b a a
a <= b ( 0 ) ;

Se c o p i a e l b i t mat ( 1 , 9 ) a l b i t 5 de b
b ( 0 ) <= mat ( 1 , 9 ) ;

Se c o p i a e l b y t e b a l b y t e 0 de d
d ( 0 ) <= b ;

Se c o p i a e l b i t 1 d e l b y t e d ( 0 ) a a
a <= d ( 0 ) ( 1 ) ;

end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 86 / 123
Descripcion por comportamiento Circuito de asincronico

Tipo de datos compuestos


Acceso a slice

Un slice es un arreglo unidimensional compuesto de una secuencia de elementos


de otro arreglo.
Ejemplo
architecture ...

s i g n a l b : byte ;
s i g n a l e : mem32 ( 0 t o 1 5 ) ;

begin

Se c o p i a l o s 4 b i t s s u p e r i o r e s a l o s inferiores
b ( 3 downto 0 ) <= b ( 7 downto 3 ) ;

Se c o p i a l o s 4 b i t s d e l medio de b a
l o s b i t s de 8 a 11 de l a p a l a b r a 0 de d
e ( 0 ) ( 8 t o 1 1 ) <= b ( 6 downto 3 ) ;

end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 87 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de datos compuestos


record
Sintaxis :
type type identifier is record type definition ;
record type definition ::=
record
element declaration
{ element declaration }
end record
element declaration ::=
identifier list : element subtype definition
identifier list ::= identifier { , identifier }
element subtype definition ::= subtype indication
Ejemplo :
type date i s
record
day : i n t e g e r range 1 to 31;
month : month name ;
year : i n t e g e r range 0 to 4000;
end r e c o r d ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 88 / 123
Descripcion por comportamiento Circuito de asincronico

Tipo de dato discretos


Fsico

Sintaxis :

type type identifier is phisical type definition ;

phisical type definition ::=


range constrain
units
base unit declaration
{ secondary unit declaration }
end units

base unit declaration ::= identifier ;

secondary unit declaration ::= identifier = physical literal ;

physical literal ::= [ abstract literal ] unit name

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 89 / 123


Descripcion por comportamiento Circuito de asincronico

Tipo de dato discretos


Ejemplo de declaracion de tipos fsicos

t y p e t i m e i s r a n g e 1e18 t o 1 e18
units
fs ; femtosegundo
p s = 1000 f s ; picosegundo
n s = 1000 p s ; nanosegundo
u s = 1000 n s ; microsegundo
ms = 1000 u s ; milisegundo
s e c = 1000 ms ; segundo
min = 60 s e c ; minuto
end u n i t s ;

t y p e d i s t a n c e i s r a n g e 0 t o 1 e16
units
A; a n g s t r o n
u n i d a d e s m e t r i c a s
nm = 10 A ; n a n o m e t e r
um = 1000 nm ; m i c r o m e t e r
mm = 1000 um ; m i l l i m e t e r
cm = 10 mm; i c e n t i m e t e r
m = 10 A ; m e t e r
km = 10 A ; k i l o m e t e r
u n i d a d e s i n g l e s a s
m i l = 254000 A ; m i l
i n c h = 1000 m i l ; p u l g a d a
ft = 12 i n c h ; p i e
yd = 3 ft ; y a r d a
fm = 6 ft ; fhatom
mi = 5280 f t ; m i l l a
lg = 3 mi ; l e g u a
end u n i t s ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 90 / 123
Descripcion por comportamiento Circuito de asincronico

Tipo de dato discretos


Ejemplo de uso de tipos fsicos

....
variable x : distance ;
v a r i a b l e x1 : d i s t a n c e ;
variable y : time ;
variable z : integer ;
begin
E s t o s e puede h a c e r
x := 5 A + 13 f t 25 i n c h ;
y := 3 n s + 5 min ;
z := n s / p s ;
x := z mi ;
y := y / 1 0 ;
z := x / x1 ;

E s t o no s e puede h a c e r s i n
sobre cargar operadores
xx
x/y
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 91 / 123


Descripcion por comportamiento Circuito de asincronico

Subtipos

subtype declaration ::=


subtype identifier is subtype indication ;

subtype indication ::=


[ resolution function name type mark [ constraint ]

type mark ::=


type name
subtype name

constraint ::=
range constraint
index constraint

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 92 / 123


Descripcion por comportamiento Circuito de asincronico

Expresiones
Operadores ordenados por precedencia descedente

misc ::= ** abs not


multiplying operator ::= * / mod rem
sign ::= +-
adding operator ::= +-&
relational operator ::= = / = < <= > >=
logic operator ::= and or nand nor xor xnor

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 93 / 123


Descripcion por comportamiento Circuito de asincronico

Expresiones
Sintaxis
expression ::= term::=
relation { and relation } factor { multiplying operator factor }

relation { or relation }
relation { xor relation }


relation [ nand relation ] multiplying operator ::= * / mod rem
relation [ nor relation ]
relation { xnor relation }
factor ::=
primary [ ** primary ]
relation ::=


simple expression abs primary
[ relational operator simple expression ] not primary

relational operator ::= = /= < <= > >=


primary::=
name


simpe expression ::= literal
[ sign ] term { adding operator term }
aggregate
function call

adding operator ::= + - & qualified expression


type conversion

sign ::= + - ( expression )

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 94 / 123


Descripcion por comportamiento Circuito de asincronico

Subprograma

Sintaxis
subprogram declaration ::=
subprogram specification ;

subprogram specification ::=


procedure designator [ ( formal paramter list ) ]
function designator [ ( formal paramter list ) ] return type mark;

subprogram specification ::=


subprogram specification is
subprogram declarative part
begin
subprogram statement part
end ;

formal parameter list ::= parameter interface list

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 95 / 123


Descripcion por comportamiento Circuito de asincronico

Subprograma
Ejemplo de una funcion

e n t i t y muxn is
generic (n : integer );
port (
s : in b i t v e c t o r ( n1 downto 0 ) ;
e : in b i t v e c t o r (2n1 downto 0 ) ;
o : out b i t ) ;
end ;

a r c h i t e c t u r e d f o f muxn i s
function c o n v i n t e g e r ( arg : b i t v e c t o r ) return i n t e g e r is
v a r i a b l e aux : i n t e g e r ;
begin
aux := 0 ;
f o r i i n arg range loop
aux := aux 2 ;
i f arg ( i )= 1 then
aux := aux +1;
end i f ;
end l o o p ;
end ;
begin
o <= e ( c o n v i n t e g e r ( s ) ) ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 96 / 123


Descripcion por comportamiento Circuito de asincronico

Subprograma
Ejemplo de una funcion

package f f d p a c k i s
function f f f d ( signal clr : b i t ; s i g n a l ck : b i t ; d : b i t ) r e t u r n b i t ;

procedure p f f d ( s i g n a l clr : b i t ; s i g n a l ck : b i t ; d : b i t ; s i g n a l q : out b i t ) ;


end ;

package body f f d p a c k i s
f u n c t i o n f f f d ( s i g n a l c l r : b i t ; s i g n a l ck : b i t ; d : b i t ) r e t u r n b i t is
begin
i f c l r = 1 t h e n
return 0 ;
e l s i f ck = 1 and ck e v e n t t h e n
return d ;
end i f ;
end ;

p r o c e d u r e p f f d ( s i g n a l c l r : b i t ; s i g n a l ck : b i t ; d : b i t ; s i g n a l q : out b i t ) i s
begin
q <= f f f d ( c l r , ck , d ) ;
end ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 97 / 123


Descripcion por comportamiento Circuito de asincronico

Definicion de parametros
Sintaxis
inteface list ::=
interface element { ; interface element }

interface element ::= interface declaration

interface declaration ::=


interface constant declaration

interface signal declaration


interface variable declaration

interface constant declaration ::=


[ constant ] indentifier list : [ in ] subtype indication [ := static expression ]

interface signal declaration ::=


[ signal ] indentifier list : [ mode ] subtype indication [ := static expression ]

interface constant declaration ::=


[ variable ] indentifier list : [ mode ] subtype indication [ := static expression ]

mode ::= in out inout buffer linkage

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 98 / 123


Descripcion por comportamiento Circuito de asincronico

Funcion de resolucion

C A

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 99 / 123


Descripcion por comportamiento Circuito de asincronico

Funcion de resolucion
e n t i t y wand is
port (
b : in bit ;
c : in bit ;
d : in bit ;
a : out bit );
end ;

a r c h i t e c t u r e mix o f wand i s

f u n c t i o n reswand ( arg : b i t v e c t o r ) r e t u r n b i t is
v a r i a b l e aux : b i t ;
begin
f o r i i n arg range loop
i f arg ( i ) = 0 then
return 0 ;
end i f ;
end l o o p ;
return 1 ;
end ;

s i g n a l a : reswand b i t ;

begin
a <= b ;
a <= c ;
a <= d ;
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 100 / 123


Descripcion por comportamiento Circuito de asincronico

Packages
Ejemplo

package mio i s
type m i b i t ( u , x , 0 , 1 , z ) ;
t y p e m i b i t v e c t o r i s a r r a y ( i n t e g e r r a n g e <>) o f b i t ;
function c o n v i n t e g e r ( arg : m i b i t v e c t o r ) return i n t e g e r ;
component f f d (
p o r t ( c l r : i n b i t ; ck : i n b i t ; d : i n b i t ; q : ou t b i t ) ;
end component ;
end ;

package body mio i s


function c o n v i n t e g e r ( arg : m i b i t v e c t o r ) return i n t e g e r is
v a r i a b l e aux : i n t e g e r ;
begin
aux := 0 ;
f o r i i n arg range loop
aux := aux 2 ;
i f arg ( i )= 1 then
aux := aux +1;
end i f ;
end l o o p ;
end ;
end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 101 / 123
Descripcion por comportamiento Circuito de asincronico

Packages

Sintaxis

package declaration ::=


package identifier is
package declartive part
end ;

package body ::=


package body identifier is
package body declartive part
end ;

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 102 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Ancho de pulso mayor que el retrado de compuerta

E S
10 ns
15 ns 15 ns

10 ns

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 103 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Ancho de pulso menor que el retrado de compuerta

E S
10 ns
5 ns

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 104 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso mayor que el retardo de compuerta

E S E S
10 ns 10 ns
t < 20 ns t = 30 ns

E S E S
10 ns 10 ns
t = 20ns 30 ns < t <35ns

E S E S
10 ns 10 ns
20 ns < t < 30 ns t = 35 ns

E S
t = 30 ns 10 ns
35 ns < t < 45ns
10 ns

E S
E 10 ns
t = 45 ns

S E S
10 ns
t > 45 ns

15 ns

t = 45 ns
t = 20ns
t = 35 ns

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 105 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso menor que el retardo de compuerta

E S E S
t = 25 ns
10 ns 10 ns
t < 20 ns

E S E S
25 ns < t < 30ns
10 ns 10 ns
t = 20ns

E S E S
10 ns t = 30 ns 10 ns
20 ns < t < 25 ns

E S
t = 25 ns t > 30 ns 10 ns
5 ns

t = 20ns

t = 30 ns
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 106 / 123
Descripcion por comportamiento Circuito de asincronico

Retardo inercial

En el retardo inercial :
La compuerta no puede almacenar mas que un cambio.
Todo cambio nuevo en la entrada borra cualquier cambio anterior.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 107 / 123


Descripcion por comportamiento Circuito de asincronico

Forma de onda

S
20 ns 40 ns 70 ns 100 ns
Diagrama de tiempos
Elemento de forma de onda
o waveform element

S <= 0 , 1 after 20 ns , 0 after 40 ns , 1 after 70 ns , 0 after 100 ns ;

Forma de onda o "waveform"

Los tiempos son relativos al momento en que produce dicha asignacion.


Estos tiempos no son relativos entre si y deben tener valores crecientes.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 108 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion inercial
Prueba con pulso de 15 ns

e n t i t y buf i s
port (
e : in bit ;
s : out b i t ) ;
end ;

a r c h i t e c t u r e beh o f b u f i s
begin
process ( e )
begin
s <= e a f t e r 10 n s ;
end p r o c e s s ;
end ;

entity pulse15ns i s
end ;

a r c h i t e c t u r e mix o f p u l s e 1 5 i s
signal e : bit ;
signal s : bit ;

component b u f
port (
e : in bit ;
s : out b i t ) ;
end component ;
begin
e <= 0 , 1 a f t e r 20 ns , 0 a f t e r 35 n s ;
t e s t : b u f p o r t map ( e , s ) ;
end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 109 / 123
Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso mayor que el retardo de compuerta

t = 10 ns
0 1 0 t=0 1 0
E 0 delta 20 ns 35 ns
E 0 20 ns 35 ns

t=0 t = 10 ns 00
0 Se copia el 0 a la
0 Se activa el process 0 cabecera del driver
S 0 10 ns
por primera vez
S 0 10 ns
No hay evento

0 1
0 t = delta 1 t = 20 ns
0 1
0 1 0 No hay 1 0 Se copia el 1 a la
E 0 delta 20 ns 35 ns
evento
E 1 20 ns 35 ns
cabecera.
Hay evento

t = delta t = 20 ns

0 1 Se activa el process
S 0 10 ns
S 0 30 ns
por evento de E
Se anota una
transaccion en S

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 110 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso mayor que el retardo de compuerta

t = 30 ns
0
E 1 35 ns

t = 30 ns 11
Se copia el 1 a la
1 1 cabecera.
S 0 30 ns
Hay evento
No hay ningun process
que dependa de un
evento en S
00 t = 35 ns
0 0
E 0 35 ns
Se procede de acuerdo
a lo visto anteriormente

t = 35 ns
0
S 1 45 ns

t = 45 ns

E 0

t = 45 ns 0
0
0 0
S 0 45 ns
Se procede de acuerdo
a lo visto anteriormente

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 111 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion inercial
Prueba con pulso de 5 ns

e n t i t y buf i s
port (
e : in bit ;
s : out b i t ) ;
end ;

a r c h i t e c t u r e beh o f b u f i s
begin
process ( e )
begin
s <= e a f t e r 10 n s ;
end p r o c e s s ;
end ;

entity pulse5ns i s
end ;

a r c h i t e c t u r e mix o f p u l s e 5 i s
signal e : bit ;
signal s : bit ;

component b u f
port (
e : in bit ;
s : out b i t ) ;
end component ;
begin
e <= 0 , 1 a f t e r 20 ns , 0 a f t e r 25 n s ;
t e s t : b u f p o r t map ( e , s ) ;
end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 112 / 123
Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso menor que el retardo de compuerta

0 1 0 t=0
E 0 delta 20 ns 25 ns

t=0

0 Se activa el process
S 0 10 ns
por primera vez

00 t = delta
0 0 1 0
E 0 delta 20 ns 25 ns
No hay
evento

Se copia el 0 a la
t = delta cabecera del driver
0
S 0 10 ns

t = 10 ns
1 0
E 0 20 ns 25 ns

t =10 ns 00 Se copia el 0 a la
0 0 cabecera del driver
S 0 10 ns
No hay evento

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 113 / 123


Descripcion por comportamiento Circuito de asincronico

Retardo inercial
Evento por evento, pulso menor que el retardo de compuerta

1
1 t = 20 ns
1 1 0 Se copia el 1 a la
E 1 20 ns 25 ns
cabecera.
Hay evento

t = 20 ns

1 Se activa el process
S 0 30 ns
por evento de E
Se anota una
transaccion en S

00 Se copia el 0 a la
t = 25 ns
0 0 cabecera. Hay evento.

E 1 25 ns
Se anota una transaccion
inercial en S. Se tacha
la transaccion en 30 ns
t = 25 ns

1 0
S 0 30 ns 35 ns

t = 35 ns

E 0

t = 35 ns 00
0
0 Se copian el 0 a la
S 0 35 ns
cabecera del driver
No hay evento

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 114 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion de senales
Composicion de las senales

Las senales en VHDL esta formadas por uno o mas drivers.


Cada driver esta compuesto por:
Una cabecera con el valor actual.
Una cola de transacciones con los valores a propagar.
Las transacciones se corresponden con los elementos de la forma de
onda que se encuentran descriptas en la asignacion de senal.
Una transaccion genera evento cuando la transaccion cambia el valor
de la cabecera.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 115 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion inercial
Regla a aplicar

Se buscan todas las transacciones que se encuentran en la cola del driver a


partir del tiempo correspondiente de la nueva transaccion hacia los tiempos
decrecientes.
Todas aquellas transacciones que a partir de ah tengan el mismo valor se
conservan.
Las otras transacciones, a partir de la primera cuyo valor difiera respecto del
valor de la primer transaccion nueva que se va anotar, se anulan.
Se anulan todas las transacciones que se encuentran en la cola del driver que
tengan tiempos mayores o iguales que las transaciones que se anotan en el
momento de la asignacion.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 116 / 123


Descripcion por comportamiento Circuito de asincronico

Linea de transmision
En una linea de trasnmision, la senal que ingresa sale aproximadamente igual
independientemente del retardo que posea.

Cable coaxil
L

T = L/C
er ur
C= C 0

e r ur
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 117 / 123
Descripcion por comportamiento Circuito de asincronico

Pulso en una linea de transmision

E 10 ns S
5 ns 5 ns

10 ns

5 ns

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 118 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion de linea de transmicion


Descripcion en VHDL

entity coaxil is
port (
e : in bit ;
s : out b i t ) ;
end ;

a r c h i t e c t u r e beh o f c o a x i l i s
begin
process ( e )
begin
s <= t r a n s p o r t e a f t e r 10 n s ;
end p r o c e s s ;
end ;

entity pulse5ns i s
end ;

a r c h i t e c t u r e mix o f p u l s e 5 i s
signal e : bit ;
signal s : bit ;

component b u f
port (
e : in bit ;
s : out b i t ) ;
end component ;
begin
e <= 0 , 1 a f t e r 20 ns , 0 a f t e r 25 n s ;
t e s t : b u f p o r t map ( e , s ) ;
end ;
Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 119 / 123
Descripcion por comportamiento Circuito de asincronico

Pulso en una linea de transmision


Evento por evento

t =10 ns
0 1 0 t=0 1 0
E 0 delta 20 ns 25 ns
E 0 20 ns 25 ns

t=0 t = 10 ns 00
0 Se copia el 0 a la
0 Se activa el process
0 cabecera del driver
S 0 10 ns
por primera vez S 0 delta
No hay evento

00 11
0 t = delta 1 t = 20 ns
0 1 0 1 0
E 0 delta 20 ns 25 ns
No hay
evento
E 1 20 ns 25 ns

t = delta Se copia el 0 a la t = 20 ns
cabecera del driver Se copia el 1 a la
0 1 cabecera.
S 0 10 ns
S 0 30 ns
Hay evento
Se activa el process
por el evento de E
Se anota una
transaccion en S

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 120 / 123


Descripcion por comportamiento Circuito de asincronico

Pulso en una linea de transmision


Evento por evento

0 t =25 ns
0 Se copia el 0 a la
0 0 cabecera.
E 0 25 ns
Hay evento

Se activa el process
t =25 ns por el evento de E
Se anota una
1 0 transaccion en S
S 0 30 ns 35 ns

t = 30 ns
Se copia el 1 a la cabecera
E 0 Hay evento.
No hay ningun process
que dependa de un
t = 30 ns 11 evento de S
1 1 0
S 1 30 ns 35 ns

t = 45 ns

E 0

t = 35 ns 00
0
0
S 0 35 ns
Se procede de acuerdo
a lo visto anteriormente

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 121 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion de linea de transmicion


Regla a aplicar

Se anulan todas las transacciones que se encuentran en la cola del driver que
tengan tiempos mayores o iguales que las transacciones que se anotan en el
momento de la asignacion.
No se modifica ninguna otra transaccion.

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 122 / 123


Descripcion por comportamiento Circuito de asincronico

Asignacion secuencial de senales


Sintaxis:

signal assignment statement ::=


[ label : ] target <= [ delay mechanism ] waveform ;

delay mechanism ::=


transport

inertial

target ::=
name

aggregate

waveform ::=
waveform element { , waveform element }

waveform element ::=


expression [ after time expression ]

Miguel Angel Sagreras () Introduccion al VHDL 23 de octubre de 2011 123 / 123

Das könnte Ihnen auch gefallen