Vous êtes sur la page 1sur 0

1

tema 3. Especificacin de nivel lgico tema 3. Especificacin de nivel lgico- -RT de RT de


sistemas HW usando VHDL sistemas HW usando VHDL
Diseo Automtico de Sistemas Diseo Automtico de Sistemas
Jos Manuel Jos Manuel Mendas Mendas Cuadros Cuadros
Dpto. Arquitectura de Computadores y Automtica Dpto. Arquitectura de Computadores y Automtica
Universidad Complutense de Madrid Universidad Complutense de Madrid
2
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

VHDL sintetizable VHDL sintetizable
VHDL es un lenguaje de modelado, no de especificacin
Todo lo que existe puede ser modelado, pero no todo lo que se especifica puede ser
sintetizado
Muchas de las construcciones VHDL, aunque sean tiles para simulacin y otras etapas
del ciclo de diseo, no son relevantes desde el punto de vista de la sntesis, por ello o bien
no son soportadas, o bien slo lo son parcialmente.
Desde el punto de vista de una herramienta de sntesis, las construcciones VHDL pueden
clasificarse en:
Soportadas: especifican claramente una funcionalidad HW que debe sintetizarse.
Ignoradas: pueden encontrarse en el cdigo fuente VHDL, pero no se tienenen
cuenta durante el proceso de sntesis.
Prohibidas: no pueden aparecer en el cdigo fuente VHDL, si lo hacen se aborta el
proceso de sntesis.
El subconjunto sintetizable (construcciones soportadas) y su semntica puede variar de
herramienta a herramienta
La semntica de simulacin es estndar, la de sntesis no
VHDL es un lenguaje orientado a hardware que permite escribir software
Es necesario cambiar de mentalidad, pensar en software solo trae problemas
VHDL (y herramientas EDA) no evitan disear hasta un cierto nivel de abstraccin
Antes de codificar, debe haberse diseado el sistema
En muchos sentidos VHDL permite capturar esquemas textualmente
3
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

unidades de diseo unidades de diseo
Entity
El cuerpo de sentencias se ignora, tanto el declarativo como el ejecutivo.
Los genricos se soportan si son de tipo integer.
usar pares de funciones de codificacin a integer y de decodificacin al tipo deseado.
Los valores iniciales de los puertos se ignoran.
Architecture
Se permiten mltiples arquitecturas por entidad pero slo se sintetiza una.
Se prohibe la interaccin mediante seales globales (declaradas en package).
Configuration
Se ignoran si especifican el nivel ms alto de la jerarqua, en otro caso estn prohibidas.
Las configuraciones explcitas estn prohibidas.
El enlace se realiza mediante comandos especficos de la herramienta de sntesis.
Package y package body
Soportados con restricciones segn sus contenidos.
Bibliotecas
La existencia de bibliotecas y la compilacin separada de unidades est soportada.
4
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sentencias concurrentes sentencias concurrentes
Process
La lista de sensibilidad se ignora, pero para asegurar coherencia entre simulacin y sntesis
debe seguirse las normas habituales de modelado en VHDL.
Block
Los bloques guardados y los bloques con puertos estn prohibidos.
Otras sentencias concurrentes
La llamada concurrente a procedimiento est soportada.
La asercin concurrente es ignorada.
Todos los tipos de asignacin concurrente estn soportados.
El modelo de retardo especificado en la asignacin se ignora.
La asignacin de formas de onda est prohibida.
La instanciacin de componentes est soportada.
La generacin est soportada.
5
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sentencias secuenciales sentencias secuenciales
Sentencias condicionales
Las sentencias if y case estn soportadas.
Bucles
El bucle tipo for est soportado si el rango del ndice es esttico y el cuerpo no contiene
sentencias wait.
Los bucles de tipo while o sin esquema de repeticin estn soportado si el cuerpo
contiene alguna sentencia wait.
Asignacin
La asignacin a variables est soportada
La asignacin a seales est soportada.
El modelo de retardo especificado en una asignacin de seal se ignora.
La asignacin de formas de onda est prohibida.
Sentencia wait
Slo est soportada bajo las siguientes formas (todas equivalentes)
wait until cl ock = VALUE;
wait until clockevent and cl ock = VALUE;
wait until not clockstable and cl ock = VALUE;
No pueden usarse en bucles for ni en subprogramas
Otras sentencias secuenciales
Las aserciones secuenciales se ignoran.
La llamada secuencial a procedimiento est soportada.
Las sentencias next , exit, return y null estn soportadas.
6
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

declaraciones (i): objetos declaraciones (i): objetos
Constantes.
Completamente soportadas.
Los genricos se soportan si son de tipo entero.
Variables.
El tipo debe ser globalmente esttico.
Los valores iniciales se ignoran.
Seales.
El tipo debe ser globalmente esttico.
Los valores iniciales se ignoran.
Prohibidas de clases bus y register, y por consiguiente las especificaciones de
desconexin.
Se permiten las seales resueltas siempre y cuando la funcin de resolucin especifique
lgica cableada o tri-estado.
El cuerpo de las funciones de resolucin es ignorado, por ello debe estar marcado con
directivas (i.e. resolution_method)
Los puertos con modos buffer y linkage se interpretan como out e inout,
respectivamente.
Ficheros.
Prohibidos.
Componentes
Deben tener siempre el mismo nombre que alguna entidad vlida (la asociacin dentro de
la herramienta se hace por nombre y no por configuracin).
7
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

declaraciones ( declaraciones (ii ii ): tipos y otros ): tipos y otros
La declaracin completa de tipos y subtipos est soportada con restricciones.
Reales
Las declaraciones de tipos reales se ignoran.
Su uso est prohibido, excepto como literales en atributos definidos por la herramienta.
Enteros
No se soportan con precisin infinita, deben especificarse con un rango explcito.
Todo objeto de un tipo entero se representa mediante un vector de bits lo ms pequeo
posible tal que pueda representar todos los valores posibles del rango especificado.
Si el rango especificado incluye nmeros negativos, la representacin usada ser
complemento a 2, en otro caso binaria pura.
Los tipos predefinidos natural y positive estn soportados.
Enumerados
Completamente soportados.
Todo objeto de un tipo enumerado se representa mediante un vector de bits lo ms
pequeo posible tal que pueda representar todos los valores posibles del tipo.
Por defecto, cada uno de los literales del tipo se representa mediante la codificacin en
binario puro de su posicin dentro de la declaracin. Esta codificacin puede alterarse
utilizando directivas o atributos (i.e. enum_encoding).
Los tipos predefinidos character, boolean y bit estn soportados.
Fsicos
Las declaraciones de tipos fsicos se ignoran.
Su uso en especificaciones de retardo se ignoran, cualquier otro uso est prohibido.
8
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

declaraciones ( declaraciones (iii iii ): tipos y otros ): tipos y otros
Vectores
Slo se soportan vectores monodimensionales de cualquier tipo soportado, por lo que
aunque estn prohibidos los multidimensionales, pueden utilizarse los vectores de
vectores.
Slo se soportan ndices enteros.
Se soporta la declaracin y uso de vectores limitados y no limitados.
Todos los atributos sobre vectores estn soportados.
Recordar que los tipos predefinidos string y bit_vector son vectores.
Registros
Completamente soportados.
Punteros y ficheros
Las declaraciones de tipo fichero o puntero se ignoran.
Su uso est prohibido.
Alias
Se ignoran.
Atributos
La declaracin est soportada y la especificacin tambin siempre que no contenga all u
others.
El uso de atributos declarados por el usuario est prohibido.
Slo est soportado el uso de algunos atributos predefinidos por la herramienta
9
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

subprogramas subprogramas
Slo pueden declararse en paquetes o en la zona declarativa de las arquitecturas.
La sobrecarga de subprogramas (y de operadores) est soportada.
No pueden contener sentencias wait, por lo que pueden considerarse como
instancias de circuitos combinacionales.
Se prohben los valores por defecto de los parmetros
La recursividad est prohibida si no est acotada por un valor esttico.
Las funciones de resolucin se permiten nicamente cuando especifican lgica
cableada o tri-estado
10
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

expresiones: operadores y literales expresiones: operadores y literales
Operadores
Estn soportados los lgicos, relacionales, aditivos, signo aritmtico, valor absoluto y
concatenacin.
Multiplicacin, divisin y resto se soportan segn licencias. Si tales licencias no estn
disponibles, el operando derecho debe ser una constante mltiplo de 2.
Exponenciacinsolamente se soporta cuando ambos operandos son constantes y el
derecho es mltiplo de 2.
Literales
Los literales numricos (con o sin base) estn soportados.
Los vectores, rangos o rebanadas nulos estn prohibidos.
Los literales fsicos se ignoran.
Los literales tipo cadena estn soportados
Los literales agregados slo se permiten sobre vectores
11
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

expresiones: nombres y otros expresiones: nombres y otros
Nombres
Los identificadores simples estn soportados.
La seleccin de identificadores est prohibida a excepcin de que aparezca en la sentencia
use. Est prohibido puentear el mbito de visibilidad de los identificadores.
Los indexados y rebanados de identificadores estn soportados con excepcin de los que
se hacen sobre parmetros de salida de tipo vectorial no restringido. Deben ser estticos.
Los identificadores atribuidos estn soportados con algunas restricciones:
Los atributos predefinidos base, left, right, high, low, range, reverse_range,
y length, estn completamente soportados.
Los atributos predefinidos event y stable estn soportados con restricciones.
Los atributos definidos por el usuario estn prohibidos.
Los atributos definidos por la herramienta estn completamente soportados.
Calificacin y conversin
Completamente soportadas
12
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de asignaciones concurrentes (i) implementacin de asignaciones concurrentes (i)
Toda asignacin de seal (o su proceso equivalente) se implementa como un
bloque de lgica combinacional:
Con un nico puerto de salida (que puede ser vectorial en modelos de nivel RT).
Con tantos puertos de entrada como seales diferentes aparezcan en la expresin.
Con una funcionalidad especificada por los operadores que forman la expresin.
L
C
seal <=expresin;
operadores
seales
+
a
b
+
c
d
d <= ( a + b ) + c
d <= ( a or b ) and c
a
b
c
d
Una posible implementacin de la sentencia ya que la
implementacin definitiva siempre la decide la herramienta
13
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de asignaciones concurrentes ( implementacin de asignaciones concurrentes (ii ii ) )
Toda asignacin condicional de seal (o su proceso equivalente) se implementa
como un bloque de lgica combinacional:
Con un nico puerto de salida (que puede ser vectorial en modelos de nivel RT).
Con tantos puertos de entrada como seales diferentes aparezcan en el lado derecho de la
asignacin (independientemente de la expresin en la que ocurran).
Con un comportamiento que se corresponde con el de un multiplexor 2 a 1 cuyas 3
entradas estn conectadas a las salidas de 3 bloques combinacionales. La funcionalidad
de dichos bloques queda especificada por los operadores que forman cada una de las 3
expresiones de la sentencia.
seal <=expresin when expresin_booleana else expresin;
1
0
L
C
L
C
L
C
d <= ( a or b) when ( c = 0 ) else ( a and b) ;
1
0
d
a
b
c
14
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de asignaciones concurrentes ( implementacin de asignaciones concurrentes (iii iii ) )
La asignacin condicional del valor explcito Z (uno de los valores del tipo
std_logic) especifica la capacidad tri-estado del puerto de salida de la lgica
combinacional especificada por el resto de la sentencia.
d <= ( a or b) when ( c = 0 ) else Z ;
d <= Z when ( c = 0 ) else ( a and b) ;
d
a
b
c
a
b
c
seal <= expresin when expresin_booleana else ( others=> Z ) ;
L
C
L
C
15
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de asignaciones concurrentes ( implementacin de asignaciones concurrentes (iv iv) )
seal <=expresin when expresin_booleana else
expresin when expresin_booleana else
expresin;
1
0
L
C
L
C
1
0
L
C
L
C
L
C
Una coleccin de asignaciones condicionales anidadas (o su proceso
equivalente) se implementada como lgica combinacional en cascada que establece
prioridades explcitas entre varios clculos.
lgica ms prioritaria
16
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de asignaciones concurrentes (v) implementacin de asignaciones concurrentes (v)
with expresin select seal <=
expresin when valor,
...
expresin when valor;
n-1
0
L
C
L
C
L
C
L
C
Toda asignacin selecti va de seal (o su proceso equivalente) se implementa
como un bloque de lgica combinacional:
Con un nico puerto de salida (que puede ser vectorial en modelos de nivel RT).
Con tantos puertos de entrada como seales diferentes aparezcan en el lado derecho de la
asignacin (independientemente de la expresin en la que ocurran).
Con un comportamiento que se corresponde con el de un multiplexor 2
n
a 1 cuyas 2
n
entradas estn conectadas a las salidas de n+1 bloques combinacionales. La funcionalidad
de dichos bloques queda especificada por los operadores que forman cada una de las n+1
expresiones de la sentencia. Siendo n el nmero de bits con los que se codifica el resultado
de la expresin seleccionada.
with c select
d <= ( a or b) when 00
( a and b) when 11 | 10,
1 when others;
3
0
2
1
d
Vcc
c
2
a
b
17
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de expresiones (i) implementacin de expresiones (i)
Las expresiones son el mecanismo fundamental para especificar la funcionalidad
combinacional de un circuito.
Las expresiones VHDL, desde el punto de vista de sntesis, pueden clasificarse en:
Expresiones computables: aquellas cuyo resultado puede ser determinado en tiempo de
anlisis, por tanto tienen un valor esttico.
No requieren HW que las calcule, se implementan como conexiones a VCC y/o GND.
Expresiones no computables: aquellas cuyo resultado no puede ser determinado en
tiempo de anlisis, por tanto tienen un valor dinmico.
Se implementan mediante HW combinacional que las calcula.
Son expresiones no computables aquellas que contengan:
Seales o puertos.
Variables que hayan sido anteriormente asignadas por una expresin no computable.
Variables que hayan sido anteriormente asignadas (aunque sea por expresiones
computables) en funcin del valor de una condicin no computable.
18
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de expresiones ( implementacin de expresiones (ii ii ) )
architecture . . . of . . . is
signal s : st d_l ogi c;
function mux( a, b, c : st d_l ogi c ) return st d_l ogi c is
begin
if ( c = 1 ) then return a; else return b; end if;
end;
procedure comp( a : st d_l ogi c; b : out st d_l ogi c ) is
begin
b : = not a;
end;
...
begin
process( s )
variable v0, v1, v2 : st d_l ogi c;
variable vI nt : integer;
subtype mi Vect or is st d_l ogi c_vect or ( 0 t o 3) ;
variable vVect or : mi Vect or ;
begin
v0 : = 1 ;
v1 : = v0;
v2 : = not v1;
for i in 0 to 3 loop vI nt : = i ; end loop;
vVect or : = mi Vect or ( v1, v2, 0 , 0 ) ;
v1 : = mux( v0, v1, v2 ) ;
comp( v1, v2 ) ;
v0 : = s and 0 ;
v1 : = mux( s, 1 , 0 ) ;
v1 : = mux( 1 , 1 , s ) ;
if ( s = 1 ) then v2 : = 0 ; else v2 : = 1; end if;
v1 : = s;
v2 : = v1 or 0 ;
end process;
. . .
end . . . ;
computable, v0 vale 1
computable, v1 vale 1
computable, v2 vale 0
computable, vInt vale 3
computable, vVector vale 1000
computable, v1 vale 1
computable, v2 vale 0
computable, v0 vale 0
computable, v1 vale 1
computable, v1 vale 1
no computable, v2 depende de s
no computable, v1 depende de s
no computable, v2 depende de s
19
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de expresiones ( implementacin de expresiones (iii iii ) )
Las expresiones simples (formadas un nico operador) especifican una conducta
primitiva sin estructura interna aparente.
Cuando se especifica una conducta compleja se necesita utilizar una expresin
compuesta (formada por varios operadores) o varias expresiones que se comunican
a travs de seales (o variables), por ello se est especificando:
La propia conducta a disear.
Una ordenacin de los clculos que se traduce en una estructura inicial sobre la que la
herramienta comenzar a optimizar.
Dicha estructura inicial es determinante (sobre todo a nivel RT) a la hora de obtener
buenos resultados, ya que puede desde facilitar la bsqueda del diseo ideal hasta
ocultarlo.
q <= ( ( ( b+c) +a) +( d+e) ) +f ;
+
+
+
++
b
c
a
d
e
f
q
q <= b + c + a + d + e + f ;
+
+
+
+
+
b
c
a
d
e
f
q
+
+
+
+
+
b
c
a
e
f
d
q
20
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de expresiones ( implementacin de expresiones (iv iv) )
d <= ( a - b) when ( a > b) else ( b - a) ;
a b
> - -
1 0
d
d <= l ef t - r i ght ;
c <= ( a > b) ;
l ef t <= a when c else b;
r i ght <= b when c else a;
a b
>
-
d
1 0 1 0
21
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

cualquier sentencia if o case
incompeltamente especificada
implica la necesidad de almacenar
los valores no modificados
implementacin de procesos (i) implementacin de procesos (i)
Un proceso especifica HW combinacional si todas las seales o variables escritas
dentro del mismo se asignan al menos una vez bajo cualquier condicin de ejecucin.
Por el contrario un proceso especifica HW secuencial si las seales o variables escritas
dentro del mismo no se asignan por defecto, slo bajo ciertas condiciones de ejecucin
Tpicamente tras la deteccin de un nivel o un evento en cierta seal
Un proceso tambin especifica HW secuencial si contiene al menos una sentencia wait.
process( a, b, c, d )
begin
if ( a = 1 ) then
e <= c;
elsif ( b = 1 ) then
e <= d;
else
e <= 0 ;
end if;
end process;
e
a
c
b
d
process( a, b, c, d )
begin
if ( a = 1 ) then
e <= c;
elsif ( b = 1 ) then
e <= d;
end if;
end process;
a
b
G
Q D e
a
c
b
d
El tipo de expresiones utilizadas (de
nivel o de flanco) determinan el tipo
de HW secuencial
22
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos ( implementacin de procesos (ii ii ): ejemplos ): ejemplos
process( gat e, d )
begin
if ( gat e = 1 ) then
q <= d;
end if;
end process;
process( set , r st )
begin
if ( set = 1 ) then
q <= 1 ;
elsif ( r st = 1 ) then
q <= 0 ;
end if;
end process;
Latch tipo SR
Latch tipo D
process( gat e, set , r st , d )
begin
if ( r st = 1 ) then
q <= 0 ;
elsif ( gat e = 1 ) then
q <= d;
end if;
end process;
Latch tipo D con reset asncrono
process( gat e, set , r st , d )
begin
if ( set = 1 ) then
q <= 1 ;
elsif ( r st = 1 ) then
q <= 0 ;
elsif ( gat e = 1 ) then
q <= d;
end if;
end process;
Latch tipo D con set y reset asncrono
Latch tipo D master-slave
mast er : process( cl k, d )
begin
if ( cl k = 1 ) then
q <= d;
end if;
end process;
sl ave: process( cl k, d )
begin
if ( cl k = 0 ) then
q <= d;
end if;
end process;
23
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

process
begin
wait until ( cl k event and cl k = 1 ) ;
q <= d;
end process;
implementacin de procesos ( implementacin de procesos (iii iii ): ejemplos ): ejemplos
process( cl k )
begin
if ( cl k event and cl k = 1 ) then
q <= d;
end if;
end process;
Flip-flop tipo D
process( cl k, r st )
begin
if ( r st = 1 ) then
q <= 0 ;
elsif ( cl k event and cl k = 1 ) then
q <= d;
end if;
end process;
Flip-flop tipo D con reset asncrono
process( cl k, r st )
begin
if ( cl k event and cl k = 1 ) then
if ( r st = 1 ) then
q <= 0 ;
else
q <= d;
end if;
end if;
end process;
Flip-flop tipo D con reset sncrono
process
variable j k : st d_l ogi c_vect or ( 1 downto 0) ;
begin
if ( cl k event and cl k = 1 ) then
j k : = ( j & k) ;
case j k is
when 01 => q <= 0 ;
when 10 => q <= 1 ;
when 11 => q <= not ( q ) ;
when 00 => q <= q;
when others => q <= X ;
end case;
end i f ;
end process;
Flip-flop tipo JK
process( cl k )
begin
if ( cl k event and cl k = 1 ) then
q <= not ( q ) ;
end if;
end process;
Flip-flop tipo T
24
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos ( implementacin de procesos (iv iv): limitaciones ): limitaciones
Al especificar elementos de memoria disparados por flanco existen algunas restricciones:
Slo existen 2 tipos de especificaciones de flanco vlidas:
cl k event and cl k= 1 flanco de subida
cl k event and cl k= 0 flanco de bajada
Una especificacin de flanco no puede utilizarse como operando.
aunque su presencia en VHDL pueda evaluarse, un evento HW es el punto de divisin entre
dos valores estables diferentes; por tanto, al no ser un valor en s mismo, no puede utilizarse
como argumento en un clculo.
Una sentencia if que tenga por condicin una especificacin de flanco no puede tener rama else.
en caso contrario la accin especificada debera realizarse en todo momento menos en el
preciso instante en el que el reloj cambia.
En sentencias if-then-elsif la especificacin de flanco slo podr ser la condicin del ltimo if (que no
podr tener rama else).
En un proceso solo puede existir una nica especificacin de flanco.
en caso contrario se estara especificando HW secuencial sensible a varios relojes.
Un variable asignada en el cuerpo de una sentencia if-then cuya condicin sea una especificacin de
flanco, no puede ser usada fuera del mismo.
en caso contrario existira una inconsistencia entre el comportamiento del circuito que se est
especificado y el comportamiento que se simulara.
25
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos (v): limitaciones implementacin de procesos (v): limitaciones
process( r st , cl k )
begin
if ( cl k event and cl k= 1 and r st = 1 ) then
. . .
end if;
end process;
process( cl k )
begin
if not( cl k event and cl k= 1 ) then
. . .
end if;
end process;
process( cl k )
begin
if . . . then
. . .
elsif ( cl k event and cl k= 1 ) then
. . .
else
. . .
end if;
end process;
process( cl k )
begin
if ( cl k event and cl k= 1 ) then
. . .
else
. . .
end if;
end process;
process( cl k1, cl k2 )
begin
if ( cl k1 event and cl k1= 1 ) then
. . .
end if;
if ( cl k2 event and cl k2= 1 ) then
. . .
end if;
end process;
process( cl k )
variable aux : . . . ;
begin
if ( cl k event and cl k= 1 ) then
. . .
aux : = . . . ;
z <= aux;
end if;
z <= aux;
end process;
una especificacin de flanco no puede
utilizarse como operando
en un proceso slo puede existir
una especificacin de flanco
un if con especificacin de flanco
no puede tener rama else
asignacin vlida
asignacin no vlida
26
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos ( implementacin de procesos (vi vi ): variables vs. seales ): variables vs. seales
Las seales deben usarse:
Para almacenar el estado de los procesos secuenciales.
Como medio de comunicacin entre procesos u otras sentencias concurrentes.
El orden de asignacin concurrente de seales no importa.
El orden de asignacin secuencial de seales s importa: si bajo unas condiciones de
ejecucin un proceso asigna varias veces una misma seal slo se disear lgica
para implementar la ltima asignacin.
Esto es til en procesos combinacionales , que pueden tener a su comienzo una asignacin
incondicional del valor por defecto de todas las seales y posteriormente asignaciones
selectivas.
Las variables deben usarse
Para simplificar las expresiones contenidas en los procesos combinacionales. Reducir o
preferiblemente eliminar su uso en procesos secuenciales.
El orden de asignacin de variables puede importar si se asignan o no antes de ser
usadas y si el proceso es combinacional o secuencial.
architecture . . .
. . .
begin
d <= a and b;
d <= a or b;
. . .
end . . . ;
architecture . . .
. . .
begin
process( a, b )
d <= a and b;
d <= a or b;
end process
. . .
end . . . ;
d
a
b
d
a
b
27
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

process( cl k, i nput )
variable a, b : . . . ;
begin
if cl k = 1 then
b : = a;
a : = i nput ;
out put <= b;
end if;
end process;
implementacin de procesos ( implementacin de procesos (vii vii ): variables vs. seales ): variables vs. seales
process( i nput )
variable a : . . . ;
begin
out put <= a;
a : = i nput + 1;
end;
process( i nput )
variable a : . . . ;
begin
a : = i nput + 1;
out put <= a;
end;
Al ser ambos procesos combinacionales, actualizan variables y seales en cualquiera de sus
ejecuciones, como en el modelo VHDL las variables conservan valores entre llamadas la
implementacin debe ser en cualquier caso un incrementador. Esto provoca inconsistencias entre
simulacin y sntesis y la herramienta avisa de que se lee la variable antes de escribirla
process( cl k, i nput )
variable a, b : . . . ;
begin
if cl k = 1 then
a : = i nput ;
b : = a;
out put <= b;
end if;
end process;
Q D
G
input output
clk
Q D
G
Q D
G
input output
clk
a b
1
input
+
output
En procesos secuenciales el orden de las
asignaciones de variables determina el
nmero de elementos de memoria
28
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

Por defecto, cada ocurrencia de un operador da lugar a un bloque de lgica
(recurso) que la implementa.
Cuando un nico bloque de lgica puede implementar varias ocurrencias de un
operador se dice que dichas ocurrencias comparten el recurso.
Esto es posible si la ejecucin de dichas ocurrencias es mutuamente exclusiva, es decir,
que no existe ninguna condicin de ejecucin bajo la cual se necesite calcular
simultneamente ms de uno de los operadores que comparten el recurso.
Para que dos operadores compartan un recurso debe cumplirse que:
ocurran dentro del mismo proceso.
sean mutuamente exclusivos.
sean compatibles.
que la implementacin del reuso no incurra
en una realimentacin combinacional.
implementacin de procesos ( implementacin de procesos (viii viii ): ): reuso reuso
process( cond, a, b )
begin
if ( a > b ) then
d <= a - b;
else
d <= b - a;
end if;
end process;
a b
>
-
d
1 0 1 0
29
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos ( implementacin de procesos (ix ix): ): reuso reuso
process( a, b, c, d, e, f , g, h, i , j , k, l , m, n, c1, c2)
begin
z1 <= a + b;
if c1 then
z2 <= c + d;
else
z2 <= e + f ;
if c2 then
z3 <= g + h;
else
z3 <= i + j ;
end if;
end if;
if not c1 then
z4 <= k + l ;
else
z4 <= m+ n;
end if;
end process;
Dos ocurrencias del mismo operador son siempre compatibles. Dos ocurrencias de diferentes
operadores sern compatibles si ambas pertenecen a uno de los siguientes conjuntos
{ +, - }
{ >, >=, <, <= }
VHDL Compiler considera que todas las
condiciones no tienen relacin
a + b
no
no
no
no
no
no
c + d
no
si
si
si
no
no
a + b
c + d
e + f
g + h
i + j
k + l
m+ n
e + f
no
si
no
no
no
no
g + h
no
si
no
si
no
no
i + j
no
si
no
si
no
no
k + l
no
no
no
no
no
si
m+ n
no
no
no
no
no
si
30
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de procesos (x): implementacin de procesos (x): reuso reuso
a b
+ +
1 0
z
+ +
c f d e
c1
t1 t2
a f
+
1 0 1 0
b
t2
c1 c1
1 0
+
1 0
c e
c1 c1
t1
d
1 0
z
c1
process( a, b, c, d, e, f , c1)
var i abl e t 1, t 2 : . . . ;
begin
if c1 then
t 1 : = a + b;
z <= t 1 + c;
else
t 2 : = d + e;
z <= f + t 2;
end if;
end process;
Lazo combinacional:
reuso no vlido
31
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

implementacin de subprogramas implementacin de subprogramas
Los subprogramas siempre se implementa como un bloque de lgica combinacional
Pro ello, los procedimientos no pueden conterner sentencias wait.
process( gat e, d )
begin
if ( gat e = 1 ) then
q <= d;
end if;
end process;
function f un( d, gat e : bi t ) return bi t is
variable q: bi t ;
begin
if ( gat e = 1 ) then
q : = d;
end if;
return q;
end;
. . .
q <= f un( d, gat e ) ;
. . .
Q D
G
d q
gate
Las variables de subprogramas son dinmicas,
por lo que no retienen valores entre llamadas
Las funciones siempre deben devolver un valor
Cuando una variable se crea se inicializa por
defecto al primer valor de su declaracin de tipo,
en el caso de bit, este valor es 0 y se
conservar hasta que se asigne otro
d
0
0
1
1
gat e
0
1
0
1
r et ur n
0
0
0
1
gate
d
q
32
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar (i): paquetes estndar (i): std_logic std_logic_1164 _1164
El paquete std_logic_1164 define 2 tipos atmicos multivaluados (uno resuelto y
otro no) y 2 tipos vectoriales asociados:
El significado de cada uno de los 9 valores es:
0 y 1 : valores lgicos fuertes
L y H : valores lgicos dbiles
Z : alta impedancia
X : valor fuerte desconocido
W : valor dbil desconocido
U : no inicializado
- : indiferencia (dont care)
Dentro del paquete se definen tambin una coleccin de operadores y funciones
lgicas sobre dichos tipos (tanto atmicos como vectoriales).
and, nand, or, nor, xor, xnor, not
Este paquete define un estndar para la especificacin del interconexionado entre
modelos VHDL (est soportado por todas las herramientas de sntesis).
Los puertos de un diseo debern ser siempre de estos tipos.
Tambin es recomendable que los objetos internos se declaren de estos tipos.
type st d_ul ogi c is ( ' U' , ' X' , ' 0' , ' 1' , ' Z' , ' W' , ' L' , ' H' , ' - ' ) ;
type st d_ul ogi c_vect or is ar r ay ( nat ur al range <> ) of st d_ul ogi c;
subtype st d_l ogi c is r esol ved st d_ul ogi c;
type st d_l ogi c_vect or is ar r ay ( nat ur al range <> ) of st d_l ogi c;
33
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (ii ii ): ): std_logic std_logic_1164 _1164
Los valores lgicos fuertes, 0 y 1 especifican respectivamente conexiones a tierra o a alimentacin
Los valores lgicos dbiles, L y H especifican respectivamente conexiones a tierra o a alimentacin.
La utilizacin del valor metalgico Z en una asignacin, especifica un buffer triestado habilitado por la
misma condicin bajo la cual se realiza tal asignacin. En cualquier otro caso, se interpreta como el resto
de los valores metalgicos.
La utilizacin del valor metalgico - en una asignacin, especifica una indiferencia en el valor efectivo
que debe asignarse. En cualquier otro caso, se interpreta como el resto de los valores metalgicos.
Los valores metalgicos U , W , X y en ocasiones - y Z , carecen de sentido en sntesis.
El resultado de una comparacin de igualdad con un valor metalgico explcito es siempre falsa desde el punto de
vista de sntesis, luego no requiere HW.
El resultado de una comparacin de desigualdad con un valor metalgico explcito es siempre cierta desde el punto
de vista de sntesis, luego no requiere HW.
Cuando se utililiza un valor metalgico explcito en una seleccin se considera, desde el punto de vista de sntesis,
que la alternativa especificada no se ejecutar nunca, luego no requiere HW.
Est prohibida la utilizacin de un valor metalgico explcito como operando de un operador aritmtico o lgico.
with s select z <=
0 when 0000
1 when 0001
x1 when 0- - -
x2 when others;
with s select z <=
0 when 0000
1 when 0001
x2 when others;
z <= 0 when s = 00- 1 else 1 ; z <= 1 ;
z <= 0 when s / = 00- 1 else 1 ; z <= 0 ;
z <= 0 when s = 0011 else - ; z <= 0 ;
Interpretacin de los valores del tipo
34
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (iii iii ): ): std_logic_arith std_logic_arith
El paquete std_logic_arith define 2 tipos de datos vectoriales que, basados en el
multivaluado std_logic, son interpretables como valores numricos codificados. La longitud
del vector determina el rango de valores representables por un objeto de tales tipos.
El tipo UNSIGNED especifica un nmero natural representado en binario puro (estando el
bit ms significativo colocado a la izquierda).
El nmero 8 puede representarse como UNSI GNED ( 1000) o como UNSI GNED ( 001000)
El tipo SIGNED especifica un nmero entero representado en complemento a 2 (estando el
bit de signo colocado a la izquierda).
El nmero +5 puede representarse como SI GNED ( 0101) o como SI GNED ( 00101)
El nmero -5 puede representarse como SI GNED ( 1011) o como SI GNED ( 1111011)
Dentro del paquete existen:
Funciones de conversin sobrecargadas entre los tipos INTEGER, UNSIGNED, SIGNED,
STD_ULOGIC ySTD_LOGIC_VECTOR.
Operadores aritmticos para los tipos INTEGER, UNSIGNED, SIGNED y STD_ULOGIC.
Operadores relacionales para los tipos INTEGER, UNSIGNED y SIGNED.
Funciones de desplazamiento aritmtico para los tipos SIGNED yUNSIGNED.
type UNSI GNED is array ( nat ur al range <>) of st d_l ogi c;
type SI GNED is array ( nat ur al range <>) of st d_l ogi c;
35
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (iv iv): ): std_logic_arith std_logic_arith
subtype SMALL_I NT is I NTEGER range 0 to 1;
function CONV_UNSI GNED( ARG: I NTEGER; SI ZE: I NTEGER) return UNSI GNED;
function CONV_UNSI GNED( ARG: UNSI GNED; SI ZE: I NTEGER) return UNSI GNED;
function CONV_UNSI GNED( ARG: SI GNED; SI ZE: I NTEGER) return UNSI GNED;
function CONV_UNSI GNED( ARG: STD_ULOGI C; SI ZE: I NTEGER) return UNSI GNED;
function CONV_SI GNED( ARG: I NTEGER; SI ZE: I NTEGER) return SI GNED;
function CONV_SI GNED( ARG: UNSI GNED; SI ZE: I NTEGER) return SI GNED;
function CONV_SI GNED( ARG: SI GNED; SI ZE: I NTEGER) return SI GNED;
function CONV_SI GNED( ARG: STD_ULOGI C; SI ZE: I NTEGER) return SI GNED;
function CONV_STD_LOGI C_VECTOR( ARG: I NTEGER; SI ZE: I NTEGER) return STD_LOGI C_VECTOR;
function CONV_STD_LOGI C_VECTOR( ARG: UNSI GNED; SI ZE: I NTEGER) return STD_LOGI C_VECTOR;
function CONV_STD_LOGI C_VECTOR( ARG: SI GNED; SI ZE: I NTEGER) return STD_LOGI C_VECTOR;
function CONV_STD_LOGI C_VECTOR( ARG: STD_ULOGI C; SI ZE: I NTEGER) return STD_LOGI C_VECTOR;
function CONV_I NTEGER( ARG: I NTEGER) return I NTEGER;
function CONV_I NTEGER( ARG: UNSI GNED) return I NTEGER;
function CONV_I NTEGER( ARG: SI GNED) return I NTEGER;
function CONV_I NTEGER( ARG: STD_ULOGI C) return SMALL_I NT;
Perfiles de las funciones de conversin
VHDL define que cualquier entero debe estar comprendido entre -2147483647 y 2147483647,
un rango representable con un UNSIGNED de 31 bits o un SIGNED de 32 bits
convierten el entero a una reprentacin
con una anchura dada: si el nmero de bits
requeridos por el valor a convertir fuera menor
que el especificado, la representacin se
extiende adecuadamente; si por el contrario
fuera mayor, se trunca por la izquierda.
36
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar (v): paquetes estndar (v): std_logic_arith std_logic_arith
function +( L: UNSI GNED; R: UNSI GNED) return UNSI GNED;
function +( L: SI GNED; R: SI GNED) return SI GNED;
function +( L: UNSI GNED; R: SI GNED) return SI GNED;
function +( L: SI GNED; R: UNSI GNED) return SI GNED;
function +( L: UNSI GNED; R: I NTEGER) return UNSI GNED;
function +( L: I NTEGER; R: UNSI GNED) return UNSI GNED;
function +( L: SI GNED; R: I NTEGER) return SI GNED;
function +( L: I NTEGER; R: SI GNED) return SI GNED;
function +( L: UNSI GNED; R: STD_ULOGI C) return UNSI GNED;
function +( L: STD_ULOGI C; R: UNSI GNED) return UNSI GNED;
function +( L: SI GNED; R: STD_ULOGI C) return SI GNED;
function +( L: STD_ULOGI C; R: SI GNED) return SI GNED;
function +( L: UNSI GNED; R: UNSI GNED) return STD_LOGI C_VECTOR;
function +( L: SI GNED; R: SI GNED) return STD_LOGI C_VECTOR;
function +( L: UNSI GNED; R: SI GNED) return STD_LOGI C_VECTOR;
function +( L: SI GNED; R: UNSI GNED) return STD_LOGI C_VECTOR;
function +( L: UNSI GNED; R: I NTEGER) return STD_LOGI C_VECTOR;
function +( L: I NTEGER; R: UNSI GNED) return STD_LOGI C_VECTOR;
function +( L: SI GNED; R: I NTEGER) return STD_LOGI C_VECTOR;
function +( L: I NTEGER; R: SI GNED) return STD_LOGI C_VECTOR;
function +( L: UNSI GNED; R: STD_ULOGI C) return STD_LOGI C_VECTOR;
function +( L: STD_ULOGI C; R: UNSI GNED) return STD_LOGI C_VECTOR;
function +( L: SI GNED; R: STD_ULOGI C) return STD_LOGI C_VECTOR;
function +( L: STD_ULOGI C; R: SI GNED) return STD_LOGI C_VECTOR;
Perfiles de las funciones aritmticas
Cuando en la funcin existe
un nico argumento de tipo
UNSIGNED o SIGNED, el
valor devuelto tiene la
misma anchura que dicho
argumento.
i
d

n
t
i
c
o
s

p
a
r
a

l
a

r
e
s
t
a
Cuando los dos argumentos de la
funcin son de tipo UNSIGNED o
SIGNED, la anchura del valor
devuelto es la mayor de la las
anchuras de los argumentos.
Cuando se suma o resta un
UNSIGNED y un SIGNED que es de
la misma anchura o menor, el valor
devuelto es un bit ms ancho que el
argumento de tipo UNSIGNED
37
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (vi vi ): ): std_logic_arith std_logic_arith
Perfiles de las funciones aritmticas (cont.)
function *( L: UNSI GNED; R: UNSI GNED) return UNSI GNED;
function *( L: SI GNED; R: SI GNED) return SI GNED;
function *( L: SI GNED; R: UNSI GNED) return SI GNED;
function *( L: UNSI GNED; R: SI GNED) return SI GNED;
function " *" ( L: UNSI GNED; R: UNSI GNED) return STD_LOGI C_VECTOR;
function " *" ( L: SI GNED; R: SI GNED) return STD_LOGI C_VECTOR;
function " *" ( L: SI GNED; R: UNSI GNED) return STD_LOGI C_VECTOR;
function " *" ( L: UNSI GNED; R: SI GNED) return STD_LOGI C_VECTOR;
function +( L: UNSI GNED) return UNSI GNED;
function +( L: SI GNED) return SI GNED;
function - ( L: SI GNED) return SI GNED;
function ABS( L: SI GNED) return SI GNED;
function " +" ( L: UNSI GNED) return STD_LOGI C_VECTOR;
function " +" ( L: SI GNED) return STD_LOGI C_VECTOR;
function " - " ( L: SI GNED) return STD_LOGI C_VECTOR;
function " ABS" ( L: SI GNED) return STD_LOGI C_VECTOR;
38
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (vii vii ): ): std_logic_arith std_logic_arith
Perfiles de las funciones relacionales
i
d

n
t
i
c
o
s

p
a
r
a

<
=
,

>
,

>
=
,

=
,

/
=
function " <" ( L: UNSI GNED; R: UNSI GNED) return BOOLEAN;
function " <" ( L: SI GNED; R: SI GNED) return BOOLEAN;
function " <" ( L: UNSI GNED; R: SI GNED) return BOOLEAN;
function " <" ( L: SI GNED; R: UNSI GNED) return BOOLEAN;
function " <" ( L: UNSI GNED; R: I NTEGER) return BOOLEAN;
function " <" ( L: I NTEGER; R: UNSI GNED) return BOOLEAN;
function " <" ( L: SI GNED; R: I NTEGER) return BOOLEAN;
function " <" ( L: I NTEGER; R: SI GNED) return BOOLEAN;
estas funciones comparan el valor
numrico de los argumentos y no
la particular configuracin
configuracin de bits
arg1
000
00
100
000
00
100
arg2
000
000
0100
000
000
0100
op
=
=
=
<
<
<
unsigned
true
true
true
false
false
false
signed
true
true
false
false
false
true
std_logic_vector
true
false
false
false
true
false
function SHL( ARG: UNSI GNED; COUNT: UNSI GNED) return UNSI GNED;
function SHL( ARG: SI GNED; COUNT: UNSI GNED) return SI GNED;
function SHR( ARG: UNSI GNED; COUNT: UNSI GNED) return UNSI GNED;
function SHR( ARG: SI GNED; COUNT: UNSI GNED) return SI GNED
Perfiles de las funciones de desplazamiento
39
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (viii viii ): ): std_logic_arith std_logic_arith
El uso de las funciones del paquete std_logic_arith, requiere que los argumentos
vectoriales sean de tipo signed o unsigned. Si se desea usarlas con argumentos de
tipo std_logic_vector, es necesario convertir explcitamente tales argumentos a uno
de dichos tipos (para indicar la representacin de los datos).
El paquete std_logic_arith, deber usarse en aquellas especificaciones que manipulen
tanto datos con signo como sin signo.
El paquete std_logic_unsigned define una nueva coleccin de funciones que
permite la manipulacin directa de objetos de tipo std_logic_vector, interpretndolos
siempre como valores sin signo.
Deber usarse en aquellas especificaciones que nicamente manipulen datos sin signo.
El paquete std_logic_unsigned define una nueva coleccin de funciones que
permite la manipulacin directa de objetos de tipo std_logic_vector, interpretndolos
siempre como valores sin signo.
Deber usarse en aquellas especificaciones que nicamente manipulen datos con signo.
Ambos paquetes convierten adecuadente los argumentos y hacen llamada a la
funcin de std_logic_arith necesaria.
40
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar ( paquetes estndar (ix ix): ): std_logic_unsigned std_logic_unsigned
function CONV_I NTEGER( ARG: STD_LOGI C_VECTOR) return I NTEGER;
function " +" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C_VECTOR; R: I NTEGER) return STD_LOGI C_VECTOR;
function " +" ( L: I NTEGER; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
. . .
function " - " ( L: STD_LOGI C; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " *" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
. . .
function " <" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return BOOLEAN;
function " <" ( L: STD_LOGI C_VECTOR; R: I NTEGER) return BOOLEAN;
function " <" ( L: I NTEGER; R: STD_LOGI C_VECTOR) return BOOLEAN;
. . .
function SHL( ARG: STD_LOGI C_VECTOR; COUNT: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function SHR( ARG: STD_LOGI C_VECTOR; COUNT: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
Perfiles de las funciones del paquete std_logic_unsigned
41
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

paquetes estndar (x): paquetes estndar (x): std_logic_signed std_logic_signed
function CONV_I NTEGER( ARG: STD_LOGI C_VECTOR) return I NTEGER;
function " +" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C_VECTOR; R: I NTEGER) return STD_LOGI C_VECTOR;
function " +" ( L: I NTEGER; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C) return STD_LOGI C_VECTOR;
function " +" ( L: STD_LOGI C; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
. . .
function " +" ( L: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " - " ( L: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " ABS" ( L: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function " *" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
. . .
function " <" ( L: STD_LOGI C_VECTOR; R: STD_LOGI C_VECTOR) return BOOLEAN;
function " <" ( L: STD_LOGI C_VECTOR; R: I NTEGER) return BOOLEAN;
function " <" ( L: I NTEGER; R: STD_LOGI C_VECTOR) return BOOLEAN;
. . .
function SHL( ARG: STD_LOGI C_VECTOR; COUNT: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
function SHR( ARG: STD_LOGI C_VECTOR; COUNT: STD_LOGI C_VECTOR) return STD_LOGI C_VECTOR;
Perfiles de las funciones del paquete std_logic_signed
42
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW usando VHDL: mtodo especificacin de HW usando VHDL: mtodo
Pensar siempre en HW sncrono de ni vel RT (las herramientas que utilizaremos
comienzan desde este nivel de abstraccin).
No comenzar a codificar hasta tener el diagrama de bloques a nivel RT (mdulos
combinacionales y registros).
El uso de VHDL no evita el diseo manual de la estructura RT, lo que evita es el diseo
lgico de los bloques combinacionales y la proyeccin tecnolgica.
Cada bloque RT habitualmente deber codificarse con una sentencia concurrente.
Se permiten especificaciones ms abstractas, pero para que puedan obtenerse soluciones
vlidas es necesaria una codificacin muy cuidadosa.
Nunca mezclar en un mismo diseo diferentes estilos de temporizacin:
No utilizar ms de un reloj por diseo.
No mezclar diseos con temporizacina nivel con temporizacin a flanco.
Disear a mano los bloques asncronos.
El ncleo fundamental de la lgica a sintetizar se especificar mediante expresiones.
El resto de construcciones del lenguaje se utilizarn para estructurar el diseo y para
especificar su temporizacin.
43
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

estilos de especificacin (i) estilos de especificacin (i)
Un circuito diseado a nivel lgico se caracteriza por 3 aspectos:
La funcin que realiza.
La estructura interna que tiene.
Las componentes de biblioteca que utiliza.
Para especificar con un mayor o menor nivel de detalle el circuito que se desea que la
herramienta de sntesis obtenga, existen 3 estilos de uso del VHDL diferentes:
El que permite la inferencia de una estructura: se especifica nicamente el comportamiento del
circuito del modo ms abstracto posible dando libertad a la herramienta para que elija la estructura
y componentes ms adecuadas bajo ciertas condiciones de funcionamiento.
El que implica cierta estructura: se especifica tanto el comportamiento del circuito como una
estructura global del mismo en base al conocimiento que tiene el diseador de las condiciones de
funcionamiento del circuito. La herramienta seleccionar las componentes del circuito
Que instancia ciertas componentes: se describe todo: funcin, estructura y componentes. La
herramienta realiza chequeos.
Los dos primeros estilos son independientes de tecnologa, el tercero no.
Deber utilizarse preferiblemente el primer estilo, el segundo se reserva para pocas
ocasiones. El tercero no es recomendable (es una captura de esquemas textual).
Es tambin muy comn que una descripcin no siga un estilo puro y utilice:
inferencia: para especificar las partes no crticas del circuito
implicacin: para especificar las partes crticas del circuito.
instanciacin: para especificar elementos cruciales o que no puedan ser diseados (asncronos)
44
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

process( est ado, cond )
begin
if cond t hen
case est ado is
when . . . =>
out put <= . . . ;
. . .
end case;
el se
case est ado is
when . . . =>
out put <= . . . ;
. . .
end case;
end process;
process( est ado, cond )
begin
case est ado is
when . . . =>
if cond then
out put <= . . . ;
else
out put <= . . . ;
end if;
when . . . =>
if cond then
out put <= . . . ;
else
out put <= . . . ;
end if;
. . .
end case;
end process;
estilos de especificacin ( estilos de especificacin (ii ii ): ejemplos ): ejemplos
L
C
1
0
ouput input
estado cond
L
C
n-1
0
ouput input
cond estado
si el diseador conoce que la seal cond llega retrasada respecto al resto, este
es una especificacin inadecuada de la que ser dificil obtener un circuito rpido
modificando la
anidacin puede
solventarse el
problema desde
la especificacion
45
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

process( i nput )
begin
...
output1 <= ...;
end process;
process( i nput )
begin
...
output2 <= ...;
end process;
estilos de especificacin ( estilos de especificacin (iii iii ): ejemplos ): ejemplos
L
C
L
C
L
C
L
C
L
C
L
C
L
C
L
C
L
C
o
u
p
u
t
input
L
C
L
C
L
C
L
C
L
C
L
C
L
C
L
C
L
C
L
C
input
input
o
u
p
u
t
2
o
u
p
u
t
1
process( i nput )
begin
...
output <= ...;
end process;
si el diseador conoce que la seal
output una alta conectividad, puede
evitar los altos retardos que induce
duplicando explcitamente la lgica
46
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW especificacin de HW combinacional combinacional
La lgica combinacional puede ser especificada mediante:
Asignaciones concurrentes a seal.
Procesos sin sentencias wait tales que:
Todas las seales o variables escritas dentro del proceso sean asignadas al menos
una vez en toda activacin del mismo.
Si en el modelo existe un camino lgico tal que una seal o variable no se asigna, quiere decir
que el valor del objeto debe ser retenido y, por tanto, que debe existir un elemento secuencial
que lo memorice.
Para asegurar la coherencia entre simulacin y sntesis, la lista de sensibilidad debe
ser completa, es decir, que debe estar formada por todas las seales ledas dentro
del proceso.
Subprogramas.
Especifican lgica combinacional siempre.
Independientemente de que se les llame en entornos secuenciales o concurrentes.
Independientemente de cmo esten codificados internamente.
Para asegurar que el diseo especificado es sncrono:
Ningn conjunto de seales asignadas por construcciones que especifiquen lgica
combinacional pueden formar un lazo, es decir, una seal combinacional no puede formar
parte de la expresin que la define, en caso contrario se sintetizara lgica asncrona.
47
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial (i) especificacin de HW secuencial (i)
La lgica secuencial se especifica mediante:
Procesos que contengan una o varias sentencias wait.
Las nicas clases de sentencias wait permitidas son:
wait until CLK = 1 ;
wait until CLK event and CLK = 1 ;
wait until not CLK stable and CLK = 1 ;
Slo puede especificarse lgica secuencial con temporizacindisparada por flanco.
Se especifican elementos de almacenamiento para:
Toda seal escrita por el proceso.
Toda variable que en alguna activacin sea leda antes que escrita.
Procesos que no contengan wait, tales que:
Existan algunas seales o variables escritas por el proceso que no se asignen bajo
alguna condicin de ejecucin del mismo.
Dichas seales especificarn elementos de almacenamiento
Las condiciones que regulan su actualizacin determinarn la clase de elemento secuencial.
Puede especificarse cualquier lgica secuencial con temporizacinde cualquier tipo.
Para asegurar la coherencia entre simulacin y sntesis, la lista de sensibilidad debe
ser parcial, estando formada por todas aquellas seales que disparan cambios de
estado (i.e: reloj, reset, clear, etc ... ).
48
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (ii ii ): mtodo ): mtodo
L
C
L
C
L
C
lgica de generacin
del estado siguiente
lgica de generacin
del salidas tipo Moore
lgica de generacin
del salidas tipo Mealy
registro de estado
Segn el modelo de Huffman, cualquier sistema secuencial puede considerarse formado por 2
nicos elementos:
Un nico registro de estado (que agrupa todos los elementos de memoria primitivos del sistema).
Una red combinacional que realiza los clculos.
Ampliando dicho modelo puede obtenerse un mtodo fiable de especificacin de sistemas
secuenciales en VHDL. Todo sistema secuencial lo consideraremos formado por 4 elementos:
Un registro de estado.
Una red combinacional que calcula el estado siguiente.
Una red combinacional que calcula las salidas que slo dependen del estado (tipo Moore).
Una red combinacional que calcula las salidas que dependen del estado y de la entrada (tipo Mealy).
49
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (iii iii ): mtodo ): mtodo
L
C
L
C
L
C
state stateGen mooreGen
mealyGen
next St at e
cur r ent St at e
i nput
meal yOut put
moor eOut put
primera alternativa
Utilizar un proceso por elemento a especificar.
50
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (iv iv): mtodo ): mtodo
st at e:
process( cl k, r st )
begin
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= next St at e;
end if;
end process;
meal yGen:
process( cur r ent St at e, i nput )
begin
meal yOut put <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
moor eGen:
process( cur r ent St at e )
begin
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
. . .
end case;
end;
st at eGen:
process( cur r ent St at e, i nput )
begin
next St at e <= cur r ent St at e;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
next St at e <= . . . ;
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
valor por defecto de las seales asignadas por el proceso,
asegura que se implemente como combinacional
51
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial (v): mtodo especificacin de HW secuencial (v): mtodo
L
C
L
C
L
C
state mooreGen
meal yOut put
moor eOut put
stateGen_mealyGen
i nput
next St at e
cur r ent St at e
Dado que el clculo del estado siguiente y el clculo de
las salidas tipo Mealytienen estructuras equivalentes
pueden agruparse en un nico proceso.
segunda alternativa
52
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (vi vi ): mtodo ): mtodo
st at e:
process( cl k, r st )
begin
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= next St at e;
end if;
end process;
moor eGen:
process( cur r ent St at e )
begin
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
. . .
end case;
end;
st at eGen_meal yGen:
process( cur r ent St at e, i nput )
begin
next St at e <= cur r ent St at e;
meal yOut put <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
next St at e <= . . . ;
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
53
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (vii vii ): mtodo ): mtodo
L
C
L
C
L
C
state
meal yOut put
moor eOut put
stateGen_mealyGen_mooreGen
i nput
next St at e
cur r ent St at e
Modelo de Huffman: lgica combinacional y lgica
secuencial separada.
tercera alternativa
54
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (viii viii ): mtodo ): mtodo
st at e:
process( cl k, r st )
begin
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= next St at e;
end if;
end process;
st at eGen_meal yGen_moor eGen:
process( cur r ent St at e, i nput )
begin
next St at e <= cur r ent St at e;
meal yOut put <= . . . ;
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
if ( i nput . . . ) then
next St at e <= . . . ;
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
las salidas tipo Moore slo dependen del estado
el estado siguiente y las salidas tipo Mealy
dependen del estado y de las entradas
55
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

Dado que el cambio de estado solo se hace
efectivo tras eventos del reloj, el clculo del
estado siguiente se puede especificar local al
proceso que almacena el estado
especificacin de HW secuencial ( especificacin de HW secuencial (ix ix): mtodo ): mtodo
L
C
L
C
L
C
stateGen_state
mooreGen
mealyGen
cur r ent St at e i nput meal yOut put
moor eOut put
cuarta alternativa
56
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial (x): mtodo especificacin de HW secuencial (x): mtodo
meal yGen:
process( cur r ent St at e, i nput )
begin
meal yOut put <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
moor eGen:
process( cur r ent St at e )
begin
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
. . .
end case;
end;
st at eGen_st at e:
process( cl k, r st , i nput )
begin
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
cur r ent St at e <= . . . ;
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end if;
end process;
el calculo del nuevo estado actual en funcin del estado
actual (currentState es una seal) debe formar parte de
la rama then de la especificacin de flanco
estado al que se salta por defecto (puede ser
sobreescrito por posteriores asignaciones)
podra suprimirse
57
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xi xi ): mtodo ): mtodo
L
C
L
C
L
C
stateGen mooreGen_state
mealyGen
next St at e
cur r ent St at e
i nput
meal yOut put
moor eOut put
Unir el proceso que almacena el estado
con el que calcula las salidas tipo Moore.
cuarta alternativa
58
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xii xii ): mtodo ): mtodo
moor eGen_st at e:
process( cl k, r st , cur r ent St at e )
begin
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
. . .
end case;
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= next St at e;
end if;
end process;
meal yGen:
pr ocess( cur r ent St at e, i nput )
begin
meal yOut put <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
st at eGen:
process( cur r ent St at e, i nput )
begin
next St at e <= cur r ent St at e;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
next St at e <= . . . ;
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end process;
necesaria para que simule correctamente
el clculo de la salida se realiza incondicionalmente,
si se anidara dentro del if, se interpretara que
dichas salidas hay tambin que almacenarlas
(aunque slo cambien tras el cambio de estado)
59
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xiii xiii ): mtodo ): mtodo
L
C
L
C
L
C
mooreGen
meal yOut put
moor eOut put
stateGen_mealyGen_state
i nput
cur r ent St at e
quinta alternativa
60
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xiv xiv): mtodo ): mtodo
moor eGen:
process( cur r ent St at e )
begin
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
end case;
end;
st at eGen_Meal yGen_st at e:
process( cl k, r st , cur r ent St at e, i nput )
begin
meal yOut put <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
cur r ent St at e <= . . . ;
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end if;
end process;
necesaria para que simule correctamente
necesaria para que simule correctamente
el calculo del nuevo estado actual en funcin del estado
actual forma parte de la rama then de la especificacin
de flanco
el clculo de la salida se realiza incondicionalmente,
(ahora puede cambiar aunque no cambie el estado)
61
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xv xv): mtodo ): mtodo
L
C
L
C
L
C
meal yOut put
moor eOut put
stateGen_mealyGen_mooreGen_state
i nput
cur r ent St at e
sexta alternativa
Utilizar un nico proceso.
62
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

especificacin de HW secuencial ( especificacin de HW secuencial (xvi xvi ): mtodo ): mtodo
st at eGen_meal yGen_moor eSt at e_st at e:
process( cl k, r st , cur r ent St at e, i nput )
begin
meal yOut put <= . . . ;
moor eOut put <= . . . ;
case cur r ent St at e is
when . . . =>
moor eOut put <= . . .
if ( i nput . . . ) then
meal yOut put <= . . .
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
if ( r st = 1 ) then
cur r ent St at e <= . . . ;
elsif ( cl k event and cl k= 1 ) then
cur r ent St at e <= . . . ;
case cur r ent St at e is
when . . . =>
if ( i nput . . . ) then
cur r ent St at e <= . . . ;
elsif ( i nput . . . ) then
. . .
else
. . .
end if;
. . .
end case;
end if;
end process;
el clculo de la salida se realiza incondicionalmente
el calculo del nuevo estado actual en funcin del estado
actual forma parte de la rama then de la especificacin
de flanco
Aunque resulte poco intuitivo, este es el mtodo fiable
de especificacin de HW a nivel RT ms abstracto,
existen otros pero son difciles de controlar
63
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

multiplexor vectorial 2 a 1 multiplexor vectorial 2 a 1
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity mul t i pl exer is
port(
x0 : in st d_l ogi c_vect or ( 7 downt o 0 ) ;
x1 : in st d_l ogi c_vect or ( 7 downt o 0 ) ;
sel : in st d_l ogi c;
y : out st d_l ogi c_vect or ( 7 downt o 0 ) ) ;
end mul t i pl exer ;
architecture syn1 of mul t i pl exer is
begin
y <= x1 when ( sel = 1 ) else x0;
end syn;
architecture syn2 of mul t i pl exer is
begin
process( sel , x0, x1 )
begin
if sel = 1 then
y <= x1;
else
y <= x0;
end if;
end syn3;
architecture syn3 of mul t i pl exer is
signal aux : st d_l ogi c_vect or ( 7 downt o 0 ) ;
begin
aux <= ( others=>sel ) ;
y <= ( x1 and aux) or ( x0 and not aux) ;
end syn2;
implica una estructura
de nivel lgico
64
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

multiplexor vectorial genrico 2 a 1 multiplexor vectorial genrico 2 a 1
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity mul t i pl exer is
generic( n : integer := 8 );
port(
x0 : in st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
x1 : in st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
sel : in st d_l ogi c;
y : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ) ;
end mul t i pl exer ;
architecture syn of mul t i pl exer is
begin
process( sel , x0, x1 )
begin
if sel = 1 then
y <= x1;
else
y <= x0;
end if;
end syn3;
65
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

codificador de prioridad 8 a 3 (i) codificador de prioridad 8 a 3 (i)
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity pr i or i t yEncoder is
port(
x : in st d_l ogi c_vect or ( 7 downt o 0 ) ;
y : out st d_l ogi c_vect or ( 2 downt o 0 ) ;
gs : out st d_l ogi c ) ;
end pr i or i t yEncoder ;
architecture syn of pr i or i t yEncoder is
begin
process( x )
begin
if x( 7) = 1 then y <= 111; gs <= 1 ;
elsif x( 6) = 1 then y <= 110; gs <= 1 ;
elsif x( 5) = 1 then y <= 101; gs <= 1 ;
elsif x( 4) = 1 then y <= 100; gs <= 1 ;
elsif x( 3) = 1 then y <= 011; gs <= 1 ;
elsif x( 2) = 1 then y <= 010; gs <= 1 ;
elsif x( 1) = 1 then y <= 001; gs <= 1 ;
elsif x( 0) = 1 then y <= 000; gs <= 1 ;
else y <= 000; gs <= 0 ;
end if;
end process;
end syn;
la respuesta cuando no hay entradas
activadas se especifica en la ltima rama else
la anidacin de if especifica
la prioridad de las entradas
x(7) se chequea en primer lugar
es el ms prioritario
el proceso se activa cuando
hay un evento en cualquiera
de las componentes de x
66
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

codificador de prioridad 8 a 3 ( codificador de prioridad 8 a 3 (ii ii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity pr i or i t yEncoder is
port(
x : in st d_l ogi c( 7 downt o 0 ) ;
y : out st d_l ogi c_vect or ( 2 downt o 0 ) ;
gs : out st d_l ogi c ) ;
end pr i or i t yEncoder ;
architecture syn of pr i or i t yEncoder is
begin
process( x )
begin
y <= 000; gs <= 0 ;
if x( 0) = 1 then y <= 000; gs <= 1 ; end if;
if x( 1) = 1 then y <= 001; gs <= 1 ; end if;
if x( 2) = 1 then y <= 010; gs <= 1 ; end if;
if x( 3) = 1 then y <= 011; gs <= 1 ; end if;
if x( 4) = 1 then y <= 100; gs <= 1 ; end if;
if x( 5) = 1 then y <= 101; gs <= 1 ; end if;
if x( 6) = 1 then y <= 110; gs <= 1 ; end if;
if x( 7) = 1 then y <= 111; gs <= 1 ; end if;
end process;
end syn;
valores por defecto de las
salidas cuando no hay entradas
activadas
la prioridad de las entradas se especifica
sobreescribiendo selectivamente el valor
asignado por anteriores sentencias
x(7) se chequea en ltimo lugar
es el ms prioritario
67
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

codificador de prioridad genrico codificador de prioridad genrico
library I EEE;
use I EEE. st d_l ogi c_1164. all;
use I EEE. st d_l ogi c_ar i t h. all;
entity pr i or i t yEncoder is
generic( n : i nt eger : = 3 ) ;
port(
x : in st d_l ogi c( 2**n- 1 downt o 0 ) ;
y : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
gs : out st d_l ogi c ) ;
end pr i or i t yEncoder ;
architecture syn of pr i or i t yEncoder is
begin
process( x )
begin
y <= ( others=> 0 ) ; gs <= 0 ;
for i in x reverse_range loop
if x( i ) = 1 then
y <= conv_st d_l ogi c_vect or ( i , n ) ;
gs <= 1 ;
end if;
end loop;
end process;
end syn;
el rango de i es computable y
el bucle puede desenrrollarse
la prioridad de las entradas se especifica
sobreescribiendo selectivamente el valor
asignado por anteriores sentencias
presente en paquete std_logic_arith
expresin computable
68
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

decodificador 3 a 8 (i) decodificador 3 a 8 (i)
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity decoder is
port(
x : in st d_l ogi c_vect or ( 2 downt o 0 ) ;
en : in st d_l ogi c;
y : out st d_l ogi c( 7 downt o 0 ) ) ;
end decoder ;
architecture syn of decoder is
begin
process( x, en )
begin
y <= 00000000;
if en= 1 then
case x is
when 000 => y( 0) <= 1 ;
when 001 => y( 1) <= 1 ;
when 010 => y( 2) <= 1 ;
when 011 => y( 3) <= 1 ;
when 100 => y( 4) <= 1 ;
when 101 => y( 5) <= 1 ;
when 110 => y( 6) <= 1 ;
when 111 => y( 7) <= 1 ;
end case;
end if;
end process;
end syn;
la seleccin se anida dentro de la habilitacin
define un reuso de los clculos intermedios
e implica una estructura en cascada
69
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

decodificador 3 a 8 ( decodificador 3 a 8 (ii ii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity decoder is
port(
x : in st d_l ogi c_vect or ( 2 downt o 0 ) ;
en : in st d_l ogi c;
y : out st d_l ogi c( 7 downt o 0 ) ) ;
end decoder ;
architecture syn of decoder is
begin
y( 0) <= 1 when ( en= 1 and x=000) else 0 ;
y( 1) <= 1 when ( en= 1 and x=001) else 0 ;
y( 2) <= 1 when ( en= 1 and x=010) else 0 ;
y( 3) <= 1 when ( en= 1 and x=011) else 0 ;
y( 4) <= 1 when ( en= 1 and x=100) else 0 ;
y( 5) <= 1 when ( en= 1 and x=101) else 0 ;
y( 6) <= 1 when ( en= 1 and x=110) else 0 ;
y( 7) <= 1 when ( en= 1 and x=111) else 0 ;
end syn;
cada salida se asigna por separado
no se comparte la expresin de habilitacin
luego implica una estructura paralela
70
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

decodificador decodificador generico generico
library I EEE;
use I EEE. st d_l ogi c_1164. all;
use I EEE. st d_l ogi c_ar i t h. all;
entity decoder is
generic( n : i nt eger : = 3 ) ;
port(
x : in st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
en : in st d_l ogi c;
y : out st d_l ogi c( 2**n- 1 downt o 0 ) ) ;
end decoder ;
architecture syn of decoder is
begin
process( x, en )
begin
y <= ( others=> 0 ) ;
if en= 1 then
y( conv_i nt eger ( unsi gned( x) ) ) <= 1 ;
end if;
end process;
end syn;
presente en paquete std_logic_arith
las conversiones de tipo no requieren HW
ya que slo indican cmo debe interpretarse z
71
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico (i) sumador genrico (i)
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity adder is
generic( n : i nt eger : = 8 ) ;
port(
x, y : in st d_l ogi c( n- 1 downt o 0 ) ;
ci n : in st d_l ogi c;
s : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
cout : out st d_l ogi c ) ;
end adder ;
architecture syn of adder is
signal c : st d_l ogi c_vect or ( n downt o 0 ) ;
begin
c( 0) <= ci n;
for i in s reverse_range generate
s( i ) <= x( i ) xor y( i ) xor c( i ) ;
c( i +1) <= ( x( i ) and y( i ) ) or ( ( x( i ) xor y( i ) ) and c( i ) ) ;
end generate;
cout <= c( n) ;
end syn;
comienza a calcular por el bit menos significativo
coleccin de seales intermedias para
conectar los acarreos intermedios
implica una estructura lgica
72
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico ( sumador genrico (ii ii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity adder is
generic( n : i nt eger : = 8 ) ;
port(
x, y : in st d_l ogi c( n- 1 downt o 0 ) ;
ci n : in st d_l ogi c;
s : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
cout : out st d_l ogi c ) ;
end adder ;
architecture syn of adder is
function xor ( constant x : in st d_l ogi c_vect or ) return st d_l ogi c is
variable y : st d_l ogi c : = 0 ;
begin
for i in x range loop
y : = y xor x( i ) ;
end loop;
return y;
end xor ;
signal c : st d_l ogi c_vect or ( n downt o 0 ) ;
begin
c( 0) <= ci n;
for i in s reverse_range generate
s( i ) <= xor ( x( i ) &y( i ) &c( i ) ) ;
c( i +1) <= ( x( i ) and y( i ) ) or ( xor ( x( i ) &y( i ) ) and c( i ) ) ;
end generate;
cout <= c( n) ;
end syn;
esta funcin especifica el compotamiento
de una puerta xor genrica de n entradas
cada llamada es una instancia
diferentedel HW combinacional
que implementa la funcin
73
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico ( sumador genrico (iii iii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity adder is
generic( n : i nt eger : = 8 ) ;
port(
x, y : in st d_l ogi c( n- 1 downt o 0 ) ;
ci n : in st d_l ogi c;
s : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
cout : out st d_l ogi c ) ;
end adder ;
architecture syn of adder is
begin
process( x, y, ci n )
variable c : st d_l ogi c;
begin
c : = ci n;
for i in s reverse_range loop
s( i ) <= x( i ) xor y( i ) xor c;
c : = ( x( i ) and y( i ) ) or ( ( x( i ) xor y( i ) ) and c) ;
end loop;
cout : = c;
end process;
end syn;
comienza a calcular por el bit menos significativo
variable intermedia que propaga
el acarreo de una iteracin a otra
74
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico ( sumador genrico (iv iv) )
library I EEE;
use I EEE. st d_l ogi c_1164. all;
use I EEE. st d_l ogi c_unsi gned. all;
entity adder is
generic( n : i nt eger : = 8 ) ;
port(
x, y : in st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
ci n : in st d_l ogi c;
s : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
cout : out st d_l ogi c ) ;
end adder ;
architecture syn of adder is
signal t emp : st d_l ogi c_vect or ( n downt o 0) ;
begin
t emp <= ( 0 & x ) + y + st d_l ogi c_vect or ( ci n) ;
s <= t emp( n- 1 downto 0) ;
cout <= t emp( n) ;
end syn;
Cuando se desee obtener el bit de acarreo
resultante de una operacin de suma o resta
deber extenderse 1 bit el operando ms ancho.
Recurdese que el resultado de la suma definida
en std_logic_unsigned tiene la misma anchura
que el mayor de los argumentos
esta especificacin no implica
ninguna estructura lgica
75
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico (v) sumador genrico (v)
library I EEE;
use I EEE. st d_l ogi c_1164. all;
package r t Modul es is
procedure r i ppl eAdder (
constant x, y: in st d_l ogi c_vect or ; constant ci n : in st d_l ogi c;
signal s : out st d_l ogi c_vect or ; signal cout : out st d_l ogi c ) ;
end r t Modul es;
package body r t Modul es is
procedure r i ppl eAdder (
constant x, y: in st d_l ogi c_vect or ; constant ci n : in st d_l ogi c;
signal s : out st d_l ogi c_vect or ; signal cout : out st d_l ogi c )
is
variable c : st d_l ogi c;
begin
c : = ci n;
for i in 0 t o s high- s low loop
s( i +s low) <= x( i +x low) xor y( i +y low) xor c;
c : = ( x( i +x low) and y( i +y low) ) or ( ( x( i +x low) xor y( i +y low) ) and c) ;
end loop;
cout <= c;
end;
end r t Modul es;
76
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sumador genrico ( sumador genrico (vi vi ) )
library I EEE;
use I EEE. st d_l ogi c_1164. all;
use wor k. r t Modul es. all;
entity adder is
generic( n : i nt eger : = 8 ) ;
port(
x, y : in st d_l ogi c( n- 1 downt o 0 ) ;
ci n : in st d_l ogi c;
s : out st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
cout : out st d_l ogi c ) ;
end adder ;
architecture syn of adder is
begin
process( x, y, ci n )
begin
r i ppl eAdder ( x, y, ci n, s, cout ) ;
end process;
end syn;
architecture syn2 of adder is
begin
r i ppl eAdder ( x, y, ci n, s, cout ) ;
end syn;
77
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico (i) registro genrico (i)
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity r egi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d : in st d_l ogi c;
di n : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
si gnal cs, ns : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
st at e:
process( cl k, r st )
begin
if r st = 1 then
cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
cs <= ns;
end if;
end process;
next _st at e:
ns <= di n when l d= 1 else cs;
moor e_out put :
dout <= cs;
end syn;
78
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico ( registro genrico (ii ii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity r egi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d : in st d_l ogi c;
di n : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
begin
process( cl k, r st )
begin
if r st = 1 then
dout <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
if l d= 1 then
dout <= di n;
end if;
end if;
end process;
end syn;
79
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico ( registro genrico (iii iii ) )
library I EEE; use I EEE. st d_l ogi c_1164. all;
entity r egi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d : in st d_l ogi c;
di n : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
begin
process
begin
wait until ( cl k event and cl k= 1 ) ;
if r st = 1 then
dout <= ( ot her s=> 0 ) ;
elsif l d= 1 then
dout <= di n;
end if;
end process;
end syn;
no es necesario, pero permite
que el sintetizador localice el reloj
el reset es ahora sncrono
80
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro de desplazamiento genrico (i) registro de desplazamiento genrico (i)
entity shi f t Regi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , sht : in st d_l ogi c;
di n : in st d_l ogi c;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end shi f t Regi st er ;
architecture syn of shi f t Regi st er is
si gnal cs, ns : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
st at e: process( cl k, r st )
begin
if r st = 1 then
cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
cs <= ns;
end if;
end process;
next _st at e: process( cs, sht , di n )
begin
ns <= cs;
if sht = 1 then
for i in ns high downto nslow+1 loop
ns( i ) <= cs( i - 1) ;
end loop;
ns( 0) <= di n;
end if;
end process;
moor e_out put : dout <= cs;
end syn;
81
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro de desplazamiento genrico ( registro de desplazamiento genrico (ii ii ) )
entity shi f t Regi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , sht : in st d_l ogi c;
di n : in st d_l ogi c;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end shi f t Regi st er ;
architecture syn of shi f t Regi st er is
si gnal cs : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
process( cl k, r st )
begin
if r st = 1 then
cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
if sht = 1 then
for i in cs high downto cslow+1 loop
cs( i ) <= cs( i - 1) ;
end loop;
cs( 0) <= di n;
end if;
end if;
end process;
dout <= cs;
end syn;
al ser seales podra hacerse tambin
al revs sin sobreescribir los valores actuales
82
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro de desplazamiento genrico ( registro de desplazamiento genrico (iii iii ) )
entity shi f t Regi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , sht : in st d_l ogi c;
di n : in st d_l ogi c;
dout : buffer st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end shi f t Regi st er ;
architecture syn of shi f t Regi st er is
begin
process( cl k, r st )
begin
if r st = 1 then
dout <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
if sht = 1 then
for i in ns high downto nslow+1 loop
dout ( i ) <= dout ( i - 1) ;
end loop;
dout ( 0) <= di n;
end if;
end if;
end process;
end syn;
siendo de tipo buffer, es un puerto de salida
que internamente puede ser ledo; esto evita
que se declare la seal intermecia cs
83
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico con salida en alta impedancia (i) registro genrico con salida en alta impedancia (i)
entity buf f er Regi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d, en : in st d_l ogi c;
di n : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end buf f er Regi st er ;
architecture syn of r egi st er is
si gnal cs, ns : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
st at e: process( cl k, r st )
begin
if r st = 1 then
cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
cs <= ns;
end if;
end process;
next _st at e: ns <= di n when l d= 1 else cs;
meal y_out put : dout <= cs when en= 1 else ( others=> Z ) ;
end syn;
84
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico con salida en alta impedancia ( registro genrico con salida en alta impedancia (ii ii ) )
entity buf f er Regi st er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d, en : in st d_l ogi c;
di n : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end buf f er Regi st er ;
architecture syn of r egi st er is
si gnal cs : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
process( cl k, r st , en )
begin
dout <= ( others=> Z ) ;
if en= 1 then
dout <= cs;
end if;
if r st = 1 then
cs <= ( others=> 0 ) ;
elsif cl k event and cl k= 1 then
if l d= 1 then
cs <= di n;
end if;
end if;
end process;
end syn;
la seal cs se necesita para distinguir el estado
que puede inicializarse y cargarse de modo
independiente a la salida que puede desabilitarse
85
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

registro genrico con salida en alta impedancia ( registro genrico con salida en alta impedancia (iii iii ) )
process( cl k, r st , en )
begin
if en= 0 then
dout <= ( others=> Z ) ;
elsif r st = 1 then
dout <= ( others=> 0 ) ;
elsif cl k event and cl k= 1 then
. . .
end if;
end process;
process( cl k, r st , en )
begin
if r st = 1 then
dout <= ( others=> 0 ) ;
elsif en= 0 then
dout <= ( others=> Z ) ;
elsif cl k event and cl k= 1 then
. . .
end if;
end process;
process( cl k, r st , en )
begin
if r st = 1 then
dout <= ( others=> 0 ) ;
elsif cl k event and cl k= 1 then
. . .
elsif en= 0 then
dout <= ( others=> Z ) ;
end if;
end process;
error: slo se incializa si en es 1
en debe de estar en la lista de sendibilidad
ya que eventos asncronos de en afectan a la salida
error: slo carga nuevos valoresi en es 1,
luego no se permitira la desabilitacin
y carga de nuevos datos en paralelo
error: no existe HW real capaz de
detectar la ausencia de flanco
process( cl k, r st , en )
begin
if r st = 1 then
dout <= ( others=> 0 ) ;
elsif cl k event and cl k= 1 then
. . .
end if;
if en= 0 then
dout <= ( others=> Z ) ;
end if;
end process;
error: la ultima asignacin en un proceso sobreescribe
las anteriores, luego si en vale 1 ni resetea ni carga
86
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

contador ascendente/descendente genrico (i) contador ascendente/descendente genrico (i)
entity count er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d, i nc, dec : in st d_l ogi c;
di n : i n st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
t ca, t cd : out st d_l ogi c;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
si gnal cs, ns : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
st at e: process( cl k, r st )
begin
if r st = 1 then cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then cs <= ns;
end if;
end process;
next _st at e: process( cs, l d, i nc, dec, di n )
begin
if ld=1 then ns <= din;
el sif i nc= 1 then ns <= cs + 1;
elsif dec= 1 then ns <= cs - 1;
el se ns <= cs;
end if;
end process;
moor e_out put : dout <= cs;
meal y_out put : bl ock
t ca <= i nc and cs = ( ot her s=> 1 ) ;
t cd <= dec and cs = ( ot her s=> 0 ) :
end bl ock;
end syn;
no es necesario detectar el final
de cuenta
se especifican las prioridades de
las entradas de control
87
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

contador ascendente/descendente genrico ( contador ascendente/descendente genrico (ii ii ) )
entity count er is
generic( n : i nt eger : = 8 ) ;
port(
cl k, r st , l d, i nc, dec : in st d_l ogi c;
di n : i n st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
t ca, t cd : out st d_l ogi c;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
si gnal cs : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
process( cl k, r st , cs, l d, i nc, dec, di n )
begin
t ca <= i nc and cs = ( others=> 1 ) ;
t cd <= dec and cs = ( others=> 0 ) ;
dout <= cs;
if r st = 1 then
cs <= ( ot her s=> 0 ) ;
elsif cl k event and cl k= 1 then
if l d= 1 then
cs <= di n;
elsif i nc= 1 then
cs <= cs + 1;
elsif dec= 1 then
cs <= cs - 1;
end if;
end if;
end process;
end syn;
88
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

contador mdulo ascendente/descendente genrico contador mdulo ascendente/descendente genrico
entity count er is
generic(
n : i nt eger : = 8
max_val ue, mi n_val ue : i nt eger : = 0 ) ;
port(
cl k, r st , l d, i nc, dec : in st d_l ogi c;
di n : i n st d_l ogi c_vect or ( n- 1 downt o 0 ) ;
t ca, t cd : out st d_l ogi c;
dout : out st d_l ogi c_vect or ( n- 1 downto 0 ) ) ;
end r egi st er ;
architecture syn of r egi st er is
si gnal cs : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
begin
process( cl k, r st , cs, l d, i nc, dec, di n )
begin
t ca <= i nc and cs = max_val ue;
t cd <= dec and cs = mi n_val ue;
dout <= cs;
if r st = 1 then
cs <= conv_st d_l ogi c_vect or ( mi n_val ue, n ) ;
elsif cl k event and cl k= 1 then
if l d= 1 then
cs <= di n;
elsif i nc= 1 then
if cs = max_val ue then
cs <= conv_st d_l ogi c_vect or ( mi n_val ue, n ) ;
else
cs <= cs + 1;
end if;
elsif dec= 1 then
if cs = mi n_val ue then
cs <= conv_st d_l ogi c_vect or ( max_val ue, n ) ;
else
cs <= cs - 1;
end if;
end if;
end if;
end process;
end syn;
89
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico (i): especificacin sistema algortmico (i): especificacin
Se desea disear un sistema digital que controle inteligentemente los semforos
que hay en el cruce entre una carretera principal y una secundaria, tal que la
primera sea prioritaria sobre la segunda.
Debe asegurar que nunca ambos semforos estn en verde simultneamente.
El semforo principal estar verde como mnimo un peridoVerde y continuar en verde
hasta que no se detecten coches en la va secundaria.
Si hubiera coches en la va secundaria, y slo si el semforo principal ha estado en verde
durante un peridoVerde completo, el semforo principal pasar a amarillo durante un
periodoAmarillo, tras el cual se pondr en rojo y el semforo secundario en verde.
El semforo secundario nunca permanecer en verde ms de un periodoVerde, tras el cual
pasar a amarillo durante un periodoAmarillo y una vez finalizado ste, pasar a rojo.
Entonces el semforo principal pasar a verde.
No obstante si durante el periodoVerde del semforo secundario la va secundaria se
quedara vcia, no se esperar a consumir el tiempo y se disparar la transicin del
semforo secundario a amarillo.
detector de presencia
semforo secundario
semforo principal
va secundaria
va principal
90
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (ii ii ): estructura ): estructura
controlador temporizador
periodoAmarillo
periodoVerde
fin
cargar
periodo
clk
rst
semPrin
semSec
n
n
3
3
hayCoche
Contador descendente no-cclico con:
- reset asncrono,
- carga sncrona seleccionable entre 2 valores
- con detector de fin de cuenta
TEMPORIZADOR
Mquina de estados finitos
- reset asncrono,
- 5 estados en correspondencia con el estado de
los semforos.
CONTROLADOR
viene del detector de presencia
van al semaforo secundario (1 lnea por bombilla)
van al semaforo principal (1 lnea por bombilla)
vienen de switches externos
91
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (iii iii ): temporizador RT ): temporizador RT
1 0
1 0
periodoVerde
periodoAmarillo
periodo
cargar
igual a 0
restar 1
fin
clk
rst
1 0
92
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (iv iv): controlador RT ): controlador RT
semPrin verde
semSec rojo
semPrin verde
semSec rojo
semPrin amarillo
semSec rojo
semPrin rojo
semSec verde
semPrin rojo
semSec amarillo
no fin
no hayCoche
no fin
fin
hayCoche y no fin
no fin
hayCoche
cargar peridoAmarillo
no hayCoche o fin
cargar peridoAmarillo
cargar peridoVerde
fin
cargar peridoVerde
fin
el semforo principal est en verde
durante un periodoVerde completo
el semforo principal permanece en
verde hasta que se dectecte un
coche en la va secundaria
transicin de verde a rojo
en el semforo principal
transicin de verde a
rojo del semforo
secundario
pVsR
pAsR pRsV
pRsA pVsRCond
el semforo secundario permanece
en verde mientras haya coches y no
haya consumido su periodoVerde
93
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico (v): interfaz VHDL sistema algortmico (v): interfaz VHDL
library I EEE;
use I EEE. st d_l ogi c_1164. all;
use I EEE. st d_l ogi c_unsi gned. all;
entity cont r ol Semaf or os is
generic( n : integer : = 16 ) ;
port(
cl k, r st : in st d_l ogi c;
hayCoche : in st d_l ogi c;
per i odoVer de, per i odoAmar i l l o : in st d_l ogi c_vect or ( n- 1 downto 0 ) ;
semPr i n, semSec : out st d_l ogi c_vect or ( 2 downto 0 ) ) ;
end cont r ol Semaf or os;
architecture syn of cont r ol Semaf or os is
type est ados_t is ( pVsR, pVsRCond, pAsR, pRsV, pRsA ) ;
constant r oj o : st d_l ogi c_vect or ( 2 downto 0 ) : = 100;
constant amar i l l o : st d_l ogi c_vect or ( 2 downto 0 ) : = 010;
constant ver de : st d_l ogi c_vect or ( 2 downto 0 ) : = 001;
signal car gar , per i odo, f i n : st d_l ogi c;
signal csT, nsT : st d_l ogi c_vect or ( n- 1 downto 0 ) ;
signal csC, nsC : est ados_t ;
begin
...
end cont r ol Semaf or os;
todos los datos numricos son positivos, luego los objetos
de tipo std_logic_vector deben interpretarse sin signo
declarando el estado del controlador como un tipo
enumerado permite que la herramienta seleccione la
codificacin de estados ms adecuada
el uso de constantes clarifica el cdigo
estado (cuenta) del temporizador
estado del controlador
94
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

st at eGenTempor i zador :
process( csT, f i n, car gar , per i odo, per i odoVer de, per i odoAmar i l l o )
begin
if car gar = 1 then
if per i odo = 1 then
nsT <= per i odoAmar i l l o;
else
nsT <= per i odoVer de;
end if;
else
if f i n = 1 then
nsT <= csT;
else
nsT <= csT - 1;
end if;
end if;
end process;
moor eGenTempor i zador :
process( csT )
begin
if csT = ( others => 0 ) then
f i n <= 1 ;
else
f i n <= 0 ;
end if;
end process;
sistema algortmico ( sistema algortmico (vi vi ): temporizador VHDL ): temporizador VHDL
st at eTempor i zador :
process( cl k, r st )
begin
if r st = 1 then
csT <= ( others => 0 ) ;
elsif cl k event and cl k= 1 then
csT <= nsT;
end if;
end process;
las asignaciones de reset asncrono
deben ser estticas, si fuera sncrono
podra inializarse a periodoVerde
95
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (vii vii ): controlador VHDL ): controlador VHDL
st at eGenCont r ol ador :
process( csC, hayCoche, f i n )
begin
case csC is
nsC <= csC;
when pVsR =>
if f i n = 1 then
nsC <= pVsRCond;
end if;
when pVsRCond =>
if hayCoche = 1 then
nsC <= pAsR;
end if;
when pAsR =>
if f i n = 1 then
nsC <= pRsV;
end if;
when pRsV =>
if hayCoche = 0 or f i n = 1 then
nsC <= pRsA;
end if;
when pRsA =>
if f i n = 1 then
nsC <= pVsr ;
end if;
end case;
end process;
por defecto se permanece en el mismo estado
cuando se detectan cambios en las
seales el estado cambia
96
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (viii viii ): controlador VHDL ): controlador VHDL
meal yGenCont r ol ador :
process( csC, hayCoche, f i n )
begin
car gar <= 0 ;
per i odo <= - ;
case csC is
when pVsR =>
null;
when pVsRCond =>
if hayCoche = 1 then
car gar <= 1 ;
per i odo <= 1 ;
end if;
when pAsR =>
if f i n = 1 then
car gar <= 1 ;
per i odo <= 0 ;
end if;
when pRsV =>
if hayCoche = 0 or f i n = 1 then
car gar <= 1 ;
per i odo <= 1 ;
end if;
when pRsA =>
if f i n = 1 then
car gar <= 1 ;
per i odo <= 0 ;
end if;
end case;
end process;
por defecto el temporizador no debe cargar nada, ya
que segn su diseo la carga es prioritaria a la cuenta
si no carga el valor de periodo es indiferente
en el estado pVsR nunca se carga nada
97
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (ix ix): controlador VHDL ): controlador VHDL
moor eGenCont r ol ador :
process( csC )
begin
case csC is
when pVsR =>
semPr i n <= ver de;
semSec <= r oj o;
when pVsRCond =>
semPr i n <= ver de;
semSec <= r oj o;
when pAsR =>
semPr i n <= amar i l l o;
semSec <= r oj o;
when pRsV =>
semPr i n <= r oj o;
semSec <= ver de;
when pRsA =>
semPr i n <= r oj o;
semSec <= amar i l l o;
end case;
end process;
st at eCont r ol ador :
process( cl k, r st )
begin
if r st = 1 then
csC <= pVsR;
elsif cl k event and cl k= 1 then
csC <= nsC;
end if;
end process;
no hace falta asignar un valor por defecto para semPrin
y semSec ya que se asignan en todos los casos
98
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

t empor i zador :
process( cl k, r st , csT, f i n, car gar , per i odo, per i odoVer de, per i odoAmar i l l o )
begin
if csT = ( others => 0 ) then
f i n <= 1 ;
else
f i n <= 0 ;
end if;
if r st = 1 then
csT <= ( others => 0 ) ;
elsif cl k event and cl k= 1 then
if car gar = 1 then
if per i odo = 1 then
csT <= per i odoAmar i l l o;
else
csT <= per i odoVer de;
end if;
else
if f i n = 1 then
csT <= csT;
else
csT <= csT - 1;
end if;
end if;
end if;
end process;
sistema algortmico (x): otro temporizador VHDL sistema algortmico (x): otro temporizador VHDL
99
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

sistema algortmico ( sistema algortmico (xi xi ): otro controlador VHDL ): otro controlador VHDL
cont r ol ador :
process( cl k, r st , csC, hayCoche, f i n )
begin
car gar <= 0 ; per i odo <= - ;
case csC is
when pVsR =>
semPr i n <= ver de; semSec <= r oj o;
when pVsRCond =>
semPr i n <= ver de; semSec <= r oj o;
if hayCoche = 1 then
car gar <= 1 ; per i odo <= 1 ;
end if;
when pAsR =>
semPr i n <= amar i l l o; semSec <= r oj o;
if f i n = 1 then
car gar <= 1 ; per i odo <= 0 ;
end if;
when pRsV =>
semPr i n <= r oj o; semSec <= ver de;
if hayCoche = 0 or f i n = 1 then
car gar <= 1 ; per i odo <= 1 ;
end if;
when pRsA =>
semPr i n <= r oj o; semSec <= amar i l l o;
if f i n = 1 then
car gar <= 1 ; per i odo <= 0 ;
end if;
end case;
. . .
...
if r st = 1 then
csC <= pVsR;
elsif cl k event and cl k= 1 then
case csC is
when pVsR =>
if f i n = 1 then
csC <= pVsRCond;
end if;
when pVsRCond =>
if hayCoche = 1 then
csC <= pAsR;
end if;
when pAsR =>
if f i n = 1 then
csC <= pRsV;
end if;
when pRsV =>
if hayCoche = 0 or f i n = 1 then
csC <= pRsA;
end if;
when pRsA =>
if f i n = 1 then
csC <= pVsr ;
end if;
end case;
end if;
end process;
100
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

mezclando VHDL (i) mezclando VHDL (i)
No todo el diseo debe ser especificado en VHDL:
las herramientas permiten mezclar cdigo con otros mecanismos de especificacin
esquemticos, diagramas de estados, mdulos prediseados, uso de otros lenguajes
desde el punto de vista VHDL:
estos comportamientos se encapsulan en bibliotecas
se instancian como componentes
Ventajas:
Se puede ahorrar tiempo y esfuerzo (discutible, excepto en caso de mdulos prediseados)
Problemas:
prdida de portabilidad: VHDL simulablees estndar, VHDL sintetizablems o menos,
los restantes mecanismos de especificacin son dependientes de herramienta
dependencia tecnolgica: muchos mdulos prediseados pueden slo ser aplicables para
ciertas tecnologas objetivo.
necesidad de co-simulacin: se necesitan la interaccin de varios simuladores cada uno
especializado en una representacin
existen generadores de modelos simulables VHDL
101
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

mezclando VHDL ( mezclando VHDL (ii ii ) )
Tipos de componentes prediseados:
Soft-macros: especificaciones (esquemticos o descripciones HDL) que se mezclan y
sintetizan con el resto de los componentes del sistema
No se puede garantizar su rendimiento
Hard-macros: bloques presintetizados (tpicamente netlist) que incluyen datos relativos a
emplazamiento y rutado
Su rendimiento puede garantizarse
Hardwired-macros: bloques prefabricados y predifundidos sobre silicio
Su rendimiento est completamente caracterizado
Alternati vas: los componentes prediseados pueden
estar almacenados en bibliotecas de mdulos o crearse por un generador de mdulos
tener pinout, funcionalidad y rendimiento fijo o parametrizable
la parametrizacinpuede ser realizada por el diseador o por la herramientas segn las
ligaduras de diseo
su uso puede ser gratuito o puede requerir el pago de licencias (segn el uso)
pueden tener diversos grados de complejidad:
Primitivos: celdas elementales (AND, FF, ...) proyectables directamente sobre el HW
IP-cores: bloques de alta complejidad diseados por compaas independientes
Los componentes prediseados pueden usarse y parametrizarse desde VHDL:
Instanciacin directa
Inferencia a partir de un operador, una funcin o un fragmento de cdigo que responda a
una cierta estructura
Componentes prediseados
102
diseo automtico de sistemas diseo automtico de sistemas

J
.
M
.

M
e
n
d

a
s
,

2
0
0
4

mezclando VHDL ( mezclando VHDL (iii iii ) )
La mayor parte de las herramientas pueden ser parcialmente controladas desde el
propio cdigo VHDL
Caracterizacin del entorno de funcionamiento del circuito
Ligaduras u opciones del proceso de sntesis
Control sobre el modo en que se interpretan las construcciones VHDL
Habitualmente existe 2 maneras
mediante atributos VHDL
mediante pragmas, comentarios VHDL que tienen un significado especial para la
herramienta de sntesis
attribute OPT_MODE : string;
attribute OPT_MODE of cr onomet r o : entity is ar ea
- - pr agma t r ansl at e_of f
. . .
- - pr agma t r ansl at e_on
Directi vas: atributos y pragmas

Vous aimerez peut-être aussi