VHDL_Curso_FPGA.pdf

Anuncio
Departamento de
Sistemas e Informática
Síntesis de sistemas digitales en FPGA
Very High speed integrated circuit
Hardware Description Language (VHDL)
2016
Contenido
 Conceptos básicos del lenguaje
 Objetos VHDL
 Unidades de diseño
 Descripción en flujo de datos
 Operadores VHDL
 Circuitos combinacionales
 Ejemplos
 Descripción algorítmica
 Descripción del flanco de reloj
 Circuitos secuenciales sincrónicos
 Ejemplos
 Consideraciones de diseño
2
Conceptos básicos del lenguaje
Objetos VHDL
Unidades de diseño
Diseño digital
Lenguajes de Descripción de Hardware (HDL)
Permiten descripciones de alto nivel
La edición es rápida y sencilla
Soportados por herramientas EDA
Las herramientas EDA permiten
integrar distintos estilos de diseño
4
VHDL: Antecedentes históricos
Necesidad de estandarizar los diseños
DoD +IEEE
Patrocinan el desarrollo en los 80´s
Es estándar de IEEE en 1987
VHDL-87
El estándar se amplía en 1993
VHDL-93
Se realizaron revisiones posteriores (2001, 2008)
Existen otros HDL populares como ABEL y VERILOG
5
VHDL: Evolución
Se inicia como un leguaje de modelado y especificación.
Documentación
Ligado a actividades de
Simulación
Luego se incorporan herramientas de síntesis capaces
de manejar este tipo de descripciones
Ambientes integrados de diseño
6
Descripción de un dispositivo VHDL
Descripción de componentes
Entidad
Declaración de I/O
Caja negra
7
Dispositivo
VHDL
Arquitectura
Descripción
comportamental
Caja blanca
Descripción de un dispositivo VHDL
Diseño VHDL
Entidad
Archivo de texto
Arquitectura
library IEEE;
use IEEE.std_logic_1164.all;
entity Puerta is
generic (WIDTH: integer range 1 to 32 := 1);
port (A, B:in std_logic_vector (WIDTH-1 downto 0);
C: out std_logic_vector (WIDTH-1 downto 0) );
end Puerta;
architecture Behavioral of Puerta is
begin
C <= A and B;
end Behavioral;
1
2
3
8
AND
Unidades de diseño en VHDL
9
Modelo
VHDL
Bibliotecas
VHDL
Compuesto por
unidades de diseño
Colecciones de
unidades de diseño
Secciones mínimas de
código compilables en
forma independiente.
 Organizan el código
 Promueven el reuso
Unidades de diseño. Clasificación
Se clasifican de acuerdo a las relaciones de
dependencia jerárquica que mantienen entre sí
Unidades Primarias
Unidades Secundarias
1. Declaración de Entidad
1. Cuerpo de Arquitectura
2. Declaración de Paquete
2. Cuerpo de Paquete
3. Declaración de Configuración
10
Paquetes. Definición
Son unidades VHDL que contienen declaraciones
y subprogramas de uso habitual.
 Constantes
 Tipos y subtipos
 Componentes
 Subprogramas
 Funciones
 Procedimientos
El diseñador los hace visibles y utiliza sus elementos,
que guardan cierta relación lógica entre sí.
11
Bibliotecas
Realiza comprobación sintáctica
COMPILACIÓN
Construye bibliotecas de diseño
En ISE es parte del proceso de síntesis
Las unidades creadas en un proyecto se compilan
automáticamente en la biblioteca work.
Pueden crearse otras bibliotecas y reacomodar
las unidades en la vista libraries de ISE.
12
Paquetes y bibliotecas importantes
Fuente: Pardo Carpio
13
Objetos VHDL
Un objeto VHDL es un elemento que guarda un valor de
un tipo de datos específico. Sobre él pueden invocarse
operaciones coherentes con su tipo.
Compilador
Los objetos VHDL deben declararse en forma previa a su
utilización en cualquier unidad de diseño.
14
Objetos VHDL: Constantes variables y señales
Constantes
 Contribuyen a la legibilidad, mantenimiento y
portabilidad del programa.
 No cambian su valor una vez inicializadas.
constant nombre_constante: tipo := expresión ;
Variables
 Cambian su valor con sentencias de asignación.
 Son locales a los procesos.
 No tienen significado físico.
variable nombre_variable: tipo ;
nombre_variable := expresión ;
15
Objetos VHDL: Constantes variables y señales
Las señales son abstracciones de conexiones físicas
Señales
 Cambian su valor con sentencias de asignación.
 Tienen una analogía física directa.
 Interconectan componentes de un circuito.
 Sincronizan la ejecución y suspención de procesos.
 Son visibles para todos elementos de una arquitectura.
 Los puertos de una entidad son señales.
signal nombre_señal: tipo ;
nombre_señal <= expresión ;
16
VHDL: Tipos de datos
Tipos de datos predefinidos
Biblioteca Standard (STD)
 BIT
Escalares  BOOLEAN
 INTEGER
 REAL
Compuestos
Orientados a síntesis
Bit_vector (n-1 downto 0)
Es un arreglo de n bits
Modela buses
17
VHDL: Tipos de datos
Para representar situaciones reales en los circuitos, la IEEE definió
dos tipos de datos multivaluados orientados a síntesis
Std_logic
Modela líneas (escalar)
Std_logic_vector (n-1 downto 0)
Modela buses (enumerado)
Los valores posibles en síntesis para un objeto de estos tipos son:
‘0’
‘1’
‘Z’
18
valor bajo
valor alto
alta impedancia
 Biblioteca: IEEE
 Paquete: std_logic_1164
Estructura de un diseño VHDL: Entidad
library IEEE;
use IEEE.std_logic_1164.all;
 Declaración de bibliotecas
 Visibilidad de paquetes
 Parámetro de tamaño
entity Puerta is
generic (WIDTH: integer range 1 to 32 := 1);
port ( A, B:in std_logic_vector (WIDTH-1 downto 0);
C: out std_logic_vector (WIDTH-1 downto 0) );  Puertos
end Puerta;
INTERFAZ
Da nombre al módulo y define su conexión con el exterior
19
Puertos de la entidad
port (nombre_señal : modo tipo_señal) ;
Modo
Define cómo se lo utiliza
 in: Entrada, se lee. No se le puede asignar valor.
 out: Salida, se le asigna valor. No se puede leer.
 inout: Entrada / Salida. CUIDADO !!
 buffer: Salida / Puede ser usado en el sistema (leído).
Tipo
20
Define los valores y operaciones legales
Reutilización del código: Parámetros VHDL
Parámetros de tamaño
 Establecen el número de bits de las señales de datos
 Adaptan el diseño a distintos tamaños de datos
Tipo de datos para síntesis
Escalabilidad
Integer
Natural
generic (nombre_parámetro : tipo_parámetro := valor_defecto) ;
21
Estructura de un diseño VHDL: Arquitectura
 Se relaciona
architecture Behavorial of Puerta is
con la entidad
begin
C <= A and B;
 Descripción del comportamiento
end Behavorial;
del dispositivo
 Descripción algorítmica
Descripción de flujo de datos
Distintos
Estilos
Descripción estructural
Una arquitectura está siempre ligada con una entidad
22
Flujo de diseño VHDL orientado a FPGA
Ingreso del diseño con esquemas
Ambiente ISE
Análisis
Mapeo, rutas
y ubicación
23
 Ingreso del diseño con HDL
Código
Síntesis
Simulación
post PAR
Simulación
funcional
Bitstream
Esquemático
RTL
24
Descripción en flujo de datos
Operadores VHDL
Circuitos combinacionales
Ejemplos
Descripción en flujo de datos de un multiplexor
a
b
MUX
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Multiplexor is
port ( a , b : in std_logic_vector(1 downto 0);
sel : in std_logic;
s : out std_logic_vector(1 downto 0));
end Multiplexor;
architecture Behavioral of Multiplexor is
begin
s <= a when sel ='1' else b;
end Behavioral;
Sel
26
s
Descripción en flujo de datos. Sintaxis
Sentencias concurrentes que en simulación se “disparan” al
cambiar el valor de algún argumento de las asignaciones.
Asignación concurrente de señal:
salida <= a xor b;
Asignación condicional: WHEN ... ELSE
architecture mux_flu of mux is
begin
salida <= a when sel = ‘1’ else b;
end mux_flu;
27
Descripción en flujo de datos. Sintaxis
Asignación condicional: WHEN ... ELSE
< senial > <= < exp > when <condición_bool > else
< exp > when <condición_bool > else
…………….
< exp > when <condición_bool > else
< exp >;
 Prioridad explícita entre las opciones
 Se pueden usar varias expresiones booleanas distintas
 La última opción de la sentencia es sin condición
Descripción de circuitos combinacionales !!
28
Descripción en flujo de datos. Sintaxis
Asignación con selección:WITH...SELECT...WHEN
with estado select
semaforo <= rojo
when “01”,
verde
when “10”,
amarillo
when “11”,
nofunciona when others;
Expresiones con
valores indefinidos
 Sintaxis incorrecta
Las asignaciones con selección deben cubrir
todos los posibles valores de la expresión
29
Descripción en flujo de datos. Sintaxis
Asignación con selección:WITH...SELECT...WHEN
with < exp_sel> select
< senial > <= < exp > when <valor1> ,
< exp > when <valor2>,
……..
< exp > when <valorn>,
< exp > when others;
 Las opciones no tienen una prioridad explícita entre ellas
 La expresión de selección es única y todos sus valores deben
estar listados en las cláusulas mutuamente excluyentes
30
Descripción en flujo de datos
Describe interconexiones entre objetos del
lenguaje
Permite estructuras de tipo condicional típicas
de una descripción abstracta
Todas las sentencias de la descripción son “concurrentes”.
SIMULACIÓN
31
Descripción de Codificadores
architecture Behavioral of Cod_7seg is
Lógica negativa begin
with HEX select
LED <= "1111001" when "0001", --1
"0100100" when "0010", --2
"0110000" when "0011", --3
"0011001 " when"0100", --4
"0010010" when "0101", --5
"0000010" when "0110", --6
"1111000 " when "0111", --7
"0000000" when "1000", --8
library IEEE;
"0010000" when "1001", --9
"0001000" when "1010", --A
use IEEE.STD_LOGIC_1164.ALL;
"0000011" when "1011", --b
"1000110" when "1100", --C
entity Cod_7seg is
"0100001" when "1101", --d
port ( HEX : in std_logic_vector( 3 downto 0);
"0000110" when "1110", --E
LED:out in std_logic_vector( 6 downto 0));
"0001110" when "1111", --F
end;
"1000000" when others; --0
end;
32
Descripción de una memoria ROM
architecture behavioral of MROM is
Tipo de datos
type mem is array ( 0 to 15) of std_logic_vector(7 downto 0);
del usuario
signal mi_Rom : mem;
library
ieee;
begin
use ieee.std_logic_1164.all;
mi_Rom <= (
use ieee.std_logic_unsigned.all;
0 => "00000000",
entity MROM is
1 => "00000001",
port ( dir : in std_logic_vector(3 downto 0);
2 => "00000010",
datos : out std_logic_vector(7 downto 0) );
3 => "00000011",
end MROM;
4 => "00000100",
5 => "11110000",
6 => "11110011",
7 => "11110111",
others => "11111111");
datos <= mi_Rom (CONV_INTEGER(dir));
end behavioral;
33
Esquemático RTL
VHDL: Operadores
 Lógicos
Existe una gran cantidad de
operadores definidos para
distintos tipos de datos
 Relacionales
 Aritméticos
Sólo un subconjunto está
orientado a síntesis
 Concatenación
34
VHDL: Operadores
Lógicos
and, or, nor, xor, not
 Definidos para: bit, bit_vector, std_logic, std_logic_vector, boolean
 Los operandos deben ser del mismo tipo y tener la misma cantidad
de bits
Ejemplos
35
signal A, B, C, D: std_logic_vector (7 downto 0);
A <= “11001010”;
B <=“10011010”;
C <= A or B;
D <= A and B;
VHDL: Operadores
Relacionales
= (igual)
< (menor)
> (mayor)
/= (distinto)
<= (menor o igual)
>= (mayor o igual)
 Definidos para: bit, bit_vector, std_logic, std_logic_vector,
boolean, integer
 Los operandos deben ser del mismo tipo y pueden tener distinta
cantidad de bits
Las comparación de dos vectores, se realiza bit a bit alineando
ambas tiras de dígitos a partir del MSB de cada una.
Cuidado !!!
36
VHDL: Operadores relacionales
Comparación de vectores de distinta cantidad de bits
signal A : std_logic_vector (7 downto 0);
signal B : std_logic_vector (3 downto 0);
A <= “00100100”;
B <= “0110”
A>B?
37
NO !!
VHDL: Operadores relacionales
Comparación de vectores
¿ Cómo se interpreta la tira de dígitos de std_logic_vector?
signal A : std_logic_vector (3 downto 0);
A <= “1010”;
¿A es igual a 10 o a -6?
38
Interpretación del tipo std_logic_vector
La interpretación que se da a los datos std_logic_vector
depende de los paquetes que se incluyan en el diseño
Desarrollados por Synopsis. Se
distribuyen como parte de la
biblioteca IEEE.
STD_LOGIC_ARITH
STD_LOGIC_UNSIGNED
STD_LOGIC_SIGNED
STD_LOGIC_ARITH:
 Define los tipos signed y unsigned y operaciones aritméticas.
 Define funciones de conversión entre signed, unsigned,
std_logic_vector e integer
39
Interpretación del tipo std_logic_vector
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_SIGNED.all;
STD_LOGIC_VECTOR se interpreta como entero en C2
use IEEE.STD_LOGIC_UNSIGNED.all;
STD_LOGIC_VECTOR se interpreta como entero sin signo
40
Interpretación del tipo std_logic_vector
Paquete NUMERIC_STD:
 Define los tipos signed y unsigned y operaciones aritméticas.
 Define funciones de conversión entre signed, unsigned,
std_logic_vector e integer
Se opera con datos signed o unsigned y luego se usa un cast para
convertirlos a std_logic_vector.
Para darle visibilidad:
library IEEE;
use IEEE.NUMERIC_STD.all;
Se recomienda incorporarlo para desarrollos futuros
41
Paquete numeric_std: Conversión tipos
42
Nota: Representación de enteros
Magnitud y signo
Utilizada en la vida diaria
Complemento a la base
Complementos
Complemento a la base menos 1
43
Nota: Complemento a la base
Dado un número N en base r con n dígitos, el
complemento a r de N se define como rn – N.
Ejemplo en binario:
Ejemplo en decimal:
N = (01101)2
-N = (10011)2
N = (31.479)10
-N = (68.521)10
Es el complemento más utilizado en sistemas digitales
En binario se le llama complemento a 2 (C2)
44
Nota: Representación del signo
El signo se representa
utilizando el bit más
significativo de la tira
Positivo con 0
Negativo con 1
Ejemplo en binario:
N = (14)10 = (0 00001110)2
-N = (- 14)10 = (1 11110010)2 Utilizando complemento a 2
45
VHDL: Operadores de comparación
Ejemplo de comparación de vectores
signal A :std_logic_vector (3 downto 0);
signal B :std_logic_vector (3 downto 0);
signal COMP: boolean;
A <= “0110”;
B <= “1000”;
COMP verdadero si se
COMP <= A > B;
incluyó el paquete SIGNED
COMP será falso si se incluyó el paquete UNSIGNED
46
VHDL: Comparador sin signo
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity compara is
port ( a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
mayor: out std_logic);
end compara;
architecture Behavioral of compara is
begin
mayor <= '1' when a > b else '0';
end Behavioral;
47
VHDL: Comparador sin signo
Circuito RTL inferido por el ambiente
Simulación del modelo
48
VHDL: Comparador en C2
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity comparaSig is
port ( a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
mayor: out std_logic);
end comparaSig;
architecture Behavioral of comparaSig is
begin
mayor <= '1' when a > b else '0';
end Behavioral;
49
VHDL: Comparador en C2
Simulación del modelo
Circuito RTL inferido
por el ambiente
50
VHDL: Operadores
Aritméticos
+ (suma)
- (resta)
 Definidos para datos enteros (integer)
 Se pueden utilizar con vectores std_logic_vector
Se debe incluir el paquete correspondiente (SIGNED o UNSIGNED)
51
VHDL: Operadores
Concatenación (&)
 Permite definir vectores a partir de líneas u otros vectores
signal A :std_logic_vector (3 downto 0);
signal B :std_logic_vector (3 downto 0);
signal C: std_logic_vector (5 downto 0);
A <= “0110”;
B <=“1000”;
C <= A(3 downto 1) & B(2 downto 0);
52
C será “011000”
VHDL: Sumador en C2
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity SuRes is
port ( a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
suma : out std_logic_vector(4 downto 0));
end;
architecture Behavioral of SuRes is
begin
suma <= (a(3) & a) + b ;
end;
53
Se incluye el
paquete SIGNED
Se previene OF
definiendo la salida
con un bit más
Se completa formato
con bit de signo
VHDL: Sumador en C2
Se completa formato
con bit de signo
54
VHDL: Sumadores/Restadores
De acuerdo con la representación de datos adoptada
 Incluir el paquete que corresponde
 Completar formato en forma adecuada
Si el tamaño de bus está acotado y se requiere detectar OF
 Se debe agregar en la descripción del sumador
55
Descripción algorítmica
Elementos sintácticos
Circuitos secuenciales sincrónicos
Ejemplos
El bloque process
Es una construcción de un mayor nivel de abstracción
Su uso está ligado a un tipo de descripción “ALGORITMICA”
Describe comportamiento como una secuencia de eventos
Permite otros elementos sintácticos
 Condicionales
 Selección
 Bucles
57
El bloque process
SINTAXIS:
process (lista_sensible)
[declaraciones;]
begin
sentencias_secuenciales;
end process ;
Tiene dos estados posibles:
 En ejecución
 Suspendido
Es un ambiente secuencial donde las sentencias se procesan en orden
Los procesos actúan (“se ejecutan”) en paralelo
58
El bloque process: Elementos sintácticos
Sentencia condicional IF...THEN...ELSE
if condición then
sentencias
elsif condición then
sentencias
Esta estructura puede anidarse.
Modela una selección
jerárquica.

else
sentencias
end if ;
59
elsif y else son optativas. Si
no se contemplan todas las
posibilidades, se infiere
almacenamiento.
El bloque process: Elementos sintácticos
Sentencia condicional IF...THEN...ELSE - Ejemplo
p < = b when a > b else
process ( a, b, c )
c when a > c else
begin
a when (a = c and c = b) else
if a > b then
‘0’ ;
p <= b;
elsif a > c then
Con asignación “concurrente”
p <= c;
elsif (a = c and c = b) then
p <= a;
else p <= ‘0’;
end if ;
La lista sensible debe incluir todas las
end process ;
señales cuyo cambio es importante.
60
El bloque process: Elementos sintácticos
Sentencia condicional IF...THEN...ELSE - Ejemplo
Se sintetiza un circuito combinacional
61
El bloque process: Elementos sintácticos
case expresión is
when caso1 = >
instrucciones
when caso2 = >
instrucciones

when others = >
instrucciones
end case ;




62
a
b
c
d
MUX
Sentencia de selección CASE
Sel (1:0)
case sel is
when “10” = > s <= a;
when “00” = > s <= b;
when “01” => s <= c;
when others = > s <= d;
end case ;
No hay prioridad entre las opciones
La expresión de selección debe ser discreta.
No puede haber casos duplicados.
Se deben cubrir todas las opciones de selección.
s
El bloque process: Elementos sintácticos
BUCLES
Mecanismos para repetir secciones de código VHDL
La interpretación HW de un bucle consiste en replicar
el módulo descripto en sus sentencias internas
La única sentencia VHDL sintetizable para describir un bucle
es el FOR - LOOP
63
El bloque process: Elementos sintácticos
BUCLES: FOR - LOOP
[etiqueta]: for identificador in rango_discreto loop
<sentencias>
end loop [etiqueta];
 El identificador toma en cada iteración valores sucesivos en
el rango, comenzando por el elemento de la izquierda
 No necesita ser declarado
 Por defecto es entero
 Existe mientras se ejecuta el loop
64
Bucles: Ejemplo
entity bucle is
Port ( a,b,c : in STD_LOGIC_VECTOR (3 downto 0);
All_bit_1 : out STD_LOGIC_VECTOR (3 downto 0));
end bucle;
architecture Behavioral of bucle is
begin
process (a,b,c)
begin
for i in 0 to 3 loop
All_bit_1(i) <= not (a(i) and b(i) and c (i));
end loop;
end process;
end Behavioral;
65
Bucles: Ejemplo
El bloque HW descripto en
el bucle se replica al
sintetizar el diseño
El bloque process: Elementos sintácticos
BUCLES: Sentencia NEXT
[etiqueta]: for identificador in rango_discreto loop
<sentencias>
Si se cumple condicion, se ignoran las
next when <condicion>;
sentencias posteriores a next y se salta a
<sentencias>
la siguiente iteración del bucle
end loop [etiqueta];
BUCLES: Sentencia EXIT
[etiqueta]: for identificador in rango_discreto loop
<sentencias>
exit when <condicion>; Si se cumple condicion, se sale del bucle.
<sentencias>
end loop [etiqueta];
67
Descripción de un elemento de memoria
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FF is
port ( entrada: in std_logic;
clk: in std_logic;
salida: out std_logic);
end;
architecture Behavioral of FF is
begin
process (clk)
Lista de sensibilidad
begin
if clk'event and clk = '1' then salida <= entrada ;
end if;
Descripción del
end process ;
flanco activo de reloj
end;
68
(rising_edge(clk))
Circuitos secuenciales sincrónicos
Se describen circuitos temporizados
Es necesario reconocer un flanco activo de reloj.
clk’event and clk = ‘1’
(rising_edge(clk))
Atributo event de la señal de reloj
Función que recibe el reloj como argumento
Expresiones reconocidas por XST para describir un flanco
ascendente de reloj
69
Procesos y bloques secuenciales sincrónicos
Lista de sensibilidad
Activación del bloque PROCESS
process (clk)
begin
if clk'event and clk = '1‘
then … ;
end if;
end process ;
En simulación, cada vez que
cambia alguna de las señales
se ejecuta el bloque
SIMULADOR:
 El bloque es una sentencia “concurrente”
Descripción del
flanco activo de reloj
70
 Las sentencias internas se ejecutan
secuencialmente
Procesos y simulación: Lista de sensibilidad
¿Qué se debe incluir en la lista de sensibilidad?
Todas las señales cuyo cambio es importante !!
Circuito combinacional
process (a,b,sel)
Circuito secuencial sincrónico
Todas las señales que definen valores
El reloj si todas las señales
de control son sincrónicas
El reset asincrónico si existe
process (clk, reset)
71
Descripción de un registro de desplazamiento
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
--Registro con reset sincrónico, carga paralela y
--desplazamiento a la izquierda, prioridades en ese orden.
entity regis is
port (
din: in STD_LOGIC_VECTOR (3 downto 0);
clk: in STD_LOGIC;
r, l, shl: in STD_LOGIC;
sli: in STD_LOGIC;
dout: out std_logic_vector (3 downto 0)
);
end regis;
72
Registro de desplazamiento: Continuación
architecture register_arch of regis is
begin
Todas las señales de control son sincrónicas
process (clk)
variable bout : std_logic_vector (3 downto 0);
Local al proceso
begin
if ( clk'event and clk = '1') then
Flanco ascendente del reloj.
if r = ‘1’ then bout := (others => ‘0’);
elsif l = ‘1’ then bout := din;
elsif shl ='1' then bout := bout (2 downto 0) & sli;
end if;
end if;
dout <= bout;
Operador de
end process;
concatenación
end register_arch;
73
Registro de desplazamiento: Continuación
74
Procesos: variables versus señales
Tener en cuenta:
Las señales se actualizan cuando se suspende el proceso
Las variables se actualizan en forma inmediata durante la
ejecución del proceso
Los procesos son ambientes secuenciales
Hay implicancias sobre el HW que se describe
75
Procesos: variables versus señales
Usando una señal (a)
Usando una variable (a)
process (clk)
variable a: std_logic;
begin
if rising_edge(clk) then
a := b or c;
salida <= a;
end if; end process ;
76
process (clk)
begin
if rising_edge (clk) then
a <= b or c; salida <= a;
end if; end process ;
Variables vs. Señales
Señales
Variables
Sintaxis
destino<= fuente
destino:= fuente
Utilidad
Modelan nodos físicos del
circuito
Representan
almacenamiento
local
Visibilidad
Comportamiento
Global (comunicación entre Local (dentro del
procesos)
proceso)
Se actualizan al avanzar el
Se actualizan
tiempo (suspensión proceso) inmediatamente
Descripción de un contador binario
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
-- Contador de 8 bits con reset asincrónico carga paralela y
-- habilitación de cuenta, con prioridades en ese orden.
-- La salida tc indica cuenta máxima.
entity contador is
port (
din: in STD_LOGIC_VECTOR (7 downto 0);
clk: in STD_LOGIC;
r, l, en: in STD_LOGIC;
tc: out STD_LOGIC;
cuenta: out std_logic_vector (7 downto 0)
);
end contador;
78
Contador binario: Continuación
architecture contador_arch of contador is
signal bout : std_logic_vector (7 downto 0);
begin
El reset es asincrónico
process (clk, r)
begin
if r = ‘1' then bout <= (others => '0');
elsif ( clk'event and clk = '1') then
if l = '1' then bout <= din;
elsif en = '1' then bout <= bout +1;
end if;
En la misma arquitectura coexisten
end if;
distintos estilos de descripción
end process;
cuenta <= bout;
tc <= '1' when bout = “11111111” else '0';
end contador_arch;
79
Contador binario: Continuación
Contador con
carga paralela,
reset asincrónico
y habilitación de
cuenta
Esquemático inferido
por el ambiente
80
Ejemplo: Definición de la interfaz
El subproceso “View schematic RTL”
muestra la interfaz del módulo y los
componentes que el sintetizador infiere
a partir de la descripción VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity modulo1 is
Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
clk : in STD_LOGIC;
r : in STD_LOGIC;
v: out STD_LOGIC;
s : out STD_LOGIC_VECTOR (4 downto 0));
end modulo1;
81
Módulo1
Ejemplo: Definición del funcionamiento
Señales internas
Registro con
reset asincrónico
Contador con
reset asincrónico
Descripción
de las salidas
82
architecture Behavioral of modulo1 is
signal cuenta:STD_LOGIC_VECTOR (1 downto 0);
signal registro: STD_LOGIC;
begin
process (clk,r)
begin
if r = '1' then registro <= (others => '0');
elsif clk'event and clk = '1' then
registro <= a;
end if; end process;
process (clk,r)
begin
if r = '1' then cuenta <= (others => '0');
elsif clk'event and clk = '1' then
cuenta <= cuenta + 1;
end if; end process;
s <= a(3) & a + registro when cuenta = "11“ else (others => '0');
v <= '0' when cuenta = "11" else '1';
end Behavioral;
Ejemplo: Circuito RTL inferido en ISE
83
Ejemplo: Simulación comportamental
Los estímulos cambian en el flanco descendente del reloj
Los estímulos cambian en el flanco ascendente del reloj
84
Consideraciones de diseño
Consideraciones generales
Documentar el desarrollo
Comentar el código
Utilizar nombres significativos, coherentes con la función del objeto
Respetar la estructura de la descripción VHDL
Se está describiendo Hardware
 Evitar construcciones típicas de otros lenguajes de alto nivel
 El sintetizador trabaja en base a patrones de descripción
 Seguir las recomendaciones de la herramienta que se utilice
86
Consideraciones sobre memoria implícita
 Causa: Las señales tienen valor actual y futuro
 Consecuencia: Si en la descripción VHDL no se
define el valor futuro, se mantiene el actual
Se sintetiza un elemento de memoria !!
87
VENTAJAS
Simplifica la creación de memoria.
CONTRAS
Puede crearse memoria no deseada
Circuitos combinacionales y memoria implícita
Las salidas sólo dependen de las entradas, no se permite que:
La señal que se está asignando intervenga en la asignación:
 s <= a when sel = ‘1’ else b;
 s <= a when sel = ‘1’ else s;
 s <= a when s = ‘1’ else b;
COMBINACIONAL
SECUENCIAL
Existan lazos combinacionales
88
COMBINACIONAL
SECUENCIAL
a <= b or c;
e <= d and a;
a <= b or c;
b <= d and a;
Circuitos combinacionales y memoria implícita
Descripción algorítmica
 Las instrucciones IF.. THEN.. ELSE, deben incluir ELSE
 Se deben especificar todas las alternativas de un CASE.
Descripción en flujo de datos
 Las asignaciones con selección deben cubrir todas las posibilidades
89
Consideraciones para diseños sincrónicos
Es aconsejable registrar las señales asincrónicas cuando
ingresan al sistema.
No colocar puertas en el reloj, utilizar señal de enable.
Utilizar un único reloj por proceso.
Si todas las señales de control son sincrónicas, basta el clk
en la lista de sensibilidad. Agregar el reset asincrónico.
90
¿Preguntas?
Descargar