Rosa Corti
Digital II - ECA
Departamento de Sistemas e Informática
2015
VHDL
Very High speed integrated circuit Hardware Description Language
Contenido
Lógica programable - Dispositivos FPGA
Lenguaje VHDL: Evolución y características
Unidades de diseño: Entidad y Arquitectura
Objetos VHDL: señales
Tipos de datos – Bibliotecas usuales
Descripción de circuitos combinacionales
Sentencias de asignación concurrente
Ejemplos
Descripción de circuitos secuenciales
El bloque Process
Representación de la señal de reloj
Sentencias algorítmicas
Ejemplos
Resolución de señales
3
Evolución de metodologías y dispositivos
La electrónica digital ha incrementado sus áreas de aplicación
y la complejidad de los sistemas que se pueden implementar
Niveles de integración
Metodologías de diseño
Ambientes de diseño EDA
4
Dispositivos de lógica programable.
Primera generación
Segunda generación
Tercera generación
PLA (Programmable Logic Array)
PAL (Programmable Array Logic)
GAL (Generic Array Logic)
CPLD (Complex Programmable Logic Device )
FPGA (Field Programmable Gate Array)
DIGITAL II
PLA
5
Qué es una FPGA?
Dispositivo semiconductor basado en una matriz de
bloques lógicos configurables, cuya interconexión
es programable. El usuario puede reconfigurarla,
para cumplir con requerimientos específicos.
Dispositivo semiconductor cuya funcionalidad
y características se pueden definir luego de
fabricado e instalado, reconfigurando el
hardware en el circuito integrado.
6
Esquema general de la arquitectura
Flexibilidad
Paralelismo
7
FPGA: ¿ Cómo cambiar la lógica ?
PLD convencionales
LUT´s
FPGA
8
Función lógica representada en el CLB
9
Elementos básicos de la FPGA
Celdas o bloques lógicos (CLB)
• Multiplexor
• Registro (FF)
• LUT (Look Up Table)
Distintos usos:
Representar funciones lógicas
Memoria distribuida en el chip
Registros de 16 posiciones
10
Los bits permanecen en el
dispositivo que se configura
Configuración de una FPGA:
BITSTREAM
Un bit de configuración controla
un switch de conexión o un bit de
lógica
11
Se cambian las conexiones
y las funciones lógicas
FPGA µP
Se cambian las instrucciones
Cambia el Software Cambia el Hardware
Programación de un dispositivo
FPGA: Aspectos importantes
Flexibilidad
Velocidad – Arquitectura paralela
Prototipado rápido y simple
Desarrollo tolerante a fallas
Reducción del tiempo de puesta en el mercado de los productos
Implementación de SoC
Alta capacidad de procesamiento
Mantenimiento y actualización de los diseños
Mantenimiento a largo plazo de las aplicaciones
12
El procesamiento digital
de señales (DSP) es su
principal aplicación
Sistemas de visión artificial
Sistemas de imágenes médicas
Codificación y encriptación
Reconocimiento de voz
Radioastronomía
Aeronáutica y defensa
Dominios de aplicación
Fuente: Genera (2008) – www.generatecnologias.es
13
Fabricantes y participación en el mercado
www.xilinx.com
www.altera.com
www.microsemi.com
www.latticesemi.com
www.quicklogic.com
Fuente: High Tech Marketing (2011)
14
Volumen del mercado global FPGA: US$5.4 billion en 2013,
US$9.9 billion en 2020 (TABB Group - abril 2015)
Precios de dispositivos
www.em.avnet.com – 05/06/2013
1111
15
16
Diseño digital
CI de gran nivel de integración
Nuevas metodologías para manejar la
complejidad creciente de los diseños
Un lenguaje permite la edición más rápida y sencilla
Una descripción con esquemas resulta más fácil de entender
Descripción por esquemas Descripción VHDL
Nivel RT: Ingreso del diseño (Digital II)
Descripción mixta 17
18
Lenguajes de descripción de HW
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
19
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
Existen otros HDL populares como ABEL y VERILOG
VHDL: Antecedentes históricos
Necesidad de estandarizar los diseños
Se realizaron modificaciones al estándar en 2001 y 2008
20
Se inicia como un leguaje de modelado y especificación.
Ligado a actividades de
Documentación
Simulación
Luego se incorporan herramientas de síntesis capaces
de manejar este tipo de descripciones
VHDL: Evolución
Ambientes integrados de diseño
21
Flujo de diseño VHDL orientado a FPGA
Análisis Código Síntesis Simulación
funcional
Mapeo, rutas
y ubicación
Simulación
post PAR Bitstream
VHDL
Construcciones básicas
23
VHDL: Características
Independencia tecnológica
Lenguaje de alto nivel
Organización del diseño
Reutilización de diseños
Control de flujo
¡¡ Se está describiendo HW!!
Portabilidad
Uso de componentes
Situaciones físicas en un circuito
Comportamiento paralelo
Es un diseño y no un programa
24
VHDL: Unidades de diseño básicas
Componentes
Dispositivo
VHDL Entidad Arquitectura
Declaración de I/O Descripción
comportamental
Caja negra Caja blanca
Descripción de un dispositivo VHDL
Diseño VHDL
Entidad
Archivo de texto
library IEEE;
use IEEE.std_logic_1164.all;
entity Puerta is
port (A, B:in std_logic_vector (3 downto 0);
C: out std_logic_vector (3 downto 0) );
end Puerta;
architecture Behavioral of Puerta is
begin
C <= A and B;
end Behavioral;
AND
1
2
3
Arquitectura
25
26
Colecciones de
unidades de diseño
Secciones mínimas de
código compilables en
forma independiente
Compuesto por
unidades de diseño
Bibliotecas
VHDL
Modelo
VHDL
Organizan el código
Promueven el reuso
Bibliotecas y unidades de diseño
27
Unidades de diseño VHDL
Se almacenan en bibliotecas (lenguaje y usuario)
Tienen relación jerárquica entre ellas
Entidad
Arquitectura
Cuerpo
Declaración
Configuración
Componentes
Paquetes
Tipos de datos
Constantes
Componentes
Subprogramas
………..
28
Unidades de diseño: Entidad
library IEEE;
use IEEE.std_logic_1164.all;
entity Puerta is
port ( A, B:in std_logic_vector (3 downto 0);
C: out std_logic_vector (3 downto 0) );
end Puerta;
Declaración de bibliotecas
Visibilidad de paquetes
Declaración de
puertos
INTERFAZ
Da nombre al módulo y define su conexión con el exterior
29
Puertos de la entidad
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).
port (nombre_señal : modo tipo_señal) ;
Modo
Tipo Define los valores y operaciones legales
Define cómo se lo utiliza
Los puertos de una entidad son señales
30
Objetos VHDL: señales
a
b
c
d
s
nd
x nc
Modelan hilos de un circuito
SEÑALES
31
Objetos VHDL
Un objeto en VHDL es un elemento que contiene
información de un tipo específico de datos.
Señales
Constantes
Variables
VHDL es un lenguaje fuertemente tipado.
32
VHDL: Tipos de datos
Un tipo de datos define los valores legales y los operadores
aplicables para los objetos de ese tipo.
Tipos de datos escalares Sus valores constituyen
una unidad indivisible
Tipos de datos compuestos Sus valores pueden dividirse en
unidades atómicas más pequeñas
No hay tipos propios del lenguaje,
existen tipos predefinidos
Se pueden definir tipos de datos en forma sencilla
Bibliotecas del sistema
33
VHDL: Tipos de datos
Tipos de datos predefinidos
Bit_vector (n-1 downto 0)
Modela buses
Es un arreglo de n bits
Escalares
Biblioteca Standard (STD)
BIT
BOOLEAN
INTEGER
REAL
Orientados a síntesis
Compuestos
34
Datos predefinidos: Ejemplos
Signal valor: integer range 0 to 255;
valor <= 128;
Signal Bus1, Bus2: Bit_vector (7 downto 0);
Bus1 <= “11001010”;
Bus2 <= “11” & Bus1(6 downto 1);
Operador concatenación
Declaración
Declaración
Asignación
Asignación
35
Datos definidos por el usuaro: Ejemplos
Type desplazamiento is (arriba, abajo, izquierda, derecha);
Signal puntero: desplazamiento;
Puntero <= arriba;
Escalar enumerado
Type memoria is array ( 0 to 63) of std_logic_vector(15 downto 0);
Signal MiMem: memoria;
Mimem (15) <= (others => ‘1’);
Mimen (7) <= “1111000011110000”;
Compuesto
36
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
Std_logic_vector (n-1 downto 0)
Modela líneas (escalar)
Modela buses (enumerado)
Los valores posibles en síntesis para un objeto de estos tipos son:
‘0’ valor bajo
‘1’ valor alto
‘Z’ alta impedancia
Biblioteca: IEEE
Paquete: std_logic_1164
37
library IEEE;
use IEEE.std_logic_1164.all;
entity circuito is
port ( a, b, c, d: in std_logic;
s: out std_logic );
end;
architecture arch_flu of circuito is
signal nc, nd, x: std_logic;
begin
nc <= not c;
nd <= not d;
x <= b and nc and nd ;
s <= a or x;
end arch_flu;
b
c s
nd
x nc
a
d
VHDL: Descripción de un circuito
Cada sentencia VHDL describe
un bloque HW
Interface del componente
38
Unidades de diseño: Arquitectura
architecture arch_flu of Circuito is
signal nc, nd, x: std_logic;
begin
nc <= not c;
nd <= not d;
x <= b and nc and nd ;
s <= a or x;
end arch_flu;
Descripción de la
funcionalidad del módulo
Declaración objetos utilizados
b
c s
nd
x nc
a
d
Se ligan arquitectura y entidad
Descripción de flujo de datos
Descripción algorítmica
Descripción estructural
VHDL
Descripción de circuitos combinacionales
40
Asignación concurrente de señal
Salida <= (a or b) and c;
Asignación condicional: WHEN … ELSE
Salida <= a when cond = “011” else b when cond < “010” else c;
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 en flujo de datos: Sentencias
41
Asignación con selección: WITH … SELECT … WHEN
Descripción en flujo de datos: Sentencias
with sel select
salida <= a when “00”,
b when “01”,
c when “11”,
d 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
Multiplexores
42
architecture Behavioral of Cod_7seg is
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
"0010000" when "1001", --9
"0001000" when "1010", --A
"0000011" when "1011", --b
"1000110" when "1100", --C
"0100001" when "1101", --d
"0000110" when "1110", --E
"0001110" when "1111", --F
"1000000" when others; --0
end;
Lógica negativa
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Cod_7seg is
port ( HEX : in std_logic_vector( 3 downto 0);
LED:out in std_logic_vector( 6 downto 0));
end;
Descripción de Codificadores
43
Descripción de una memoria ROM
architecture behavioral of MROM is
type mem is array ( 0 to 15) of std_logic_vector(7 downto 0);
signal mi_Rom : mem;
begin
mi_Rom <= (
0 => "00000000",
1 => "00000001",
2 => "00000010",
3 => "00000011",
4 => "00000100",
5 => "11110000",
6 => "11110011",
7 => "11110111",
others => "11111111");
datos <= Mi_rom (CONV_INTEGER(dir));
end behavioral;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity MROM is
port ( dir : in std_logic_vector(3 downto 0);
datos : out std_logic_vector(7 downto 0) );
end MROM;
Esquemático RTL
Tipo de datos
del usuario
44
VHDL: Operadores usados en Digital II
Lógicos
Relacionales
Aritméticos
Concatenación
Existe una gran cantidad de
operadores definidos para
distintos tipos de datos
Sólo un subconjunto está
orientado a síntesis
45
VHDL: Operadores usados en Digital II
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
signal A, B, C, D: std_logic_vector (7 downto 0);
A <= “11001010”;
B <=“10011010”;
C <= A or B; (11011010)
D <= A and B; (10001010)
46
Relacionales = (igual) /= (distinto)
< (menor) <= (menor o igual)
> (mayor) >= (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 !!!
VHDL: Operadores usados en Digital II
47
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 ? NO !!
48
Comparación de vectores
VHDL: Operadores relacionales
¿ 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?
49
La interpretación que se da a los datos std_logic_vector
depende de los paquetes que se incluyan en el diseño
Interpretación de std_logic_vector
STD_LOGIC_ARITH
STD_LOGIC_UNSIGNED
STD_LOGIC_SIGNED
Desarrollados por Synopsis.
Se distribuyen como parte de
la biblioteca IEEE.
Los incorporan muchos de los ambientes de diseño
Se instalaron como un estándar “de facto”
50
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use IEEE.STD_LOGIC_SIGNED.all;
STD_LOGIC_VECTOR se interpreta como entero en C2
STD_LOGIC_VECTOR se interpreta como entero sin signo
Interpretación de std_logic_vector
51
Paquete NUMERIC_STD (IEEE):
library IEEE;
use IEEE.NUMERIC_STD.all; Para darle visibilidad:
Define los tipos signed y unsigned y operaciones aritméticas.
Define funciones de conversión entre signed, unsigned, integer
y std_logic_vector.
Se recomienda incorporarlo para desarrollos futuros
Se opera con datos signed o unsigned y luego se usa un cast para
convertirlos a std_logic_vector.
Interpretación de std_logic_vector
52
Ejemplo de comparación de vectores
COMP será falso si se incluyó el paquete UNSIGNED
signal A :std_logic_vector (3 downto 0);
signal B :std_logic_vector (3 downto 0);
signal COMP: boolean;
A <= “0110”;
B <= “1000”;
COMP <= A > B; COMP verdadero si se
incluyó el paquete SIGNED
VHDL: Operadores de comparación
53
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;
54
VHDL: Comparador sin signo
Circuito RTL inferido por el ambiente
Simulación del modelo
55
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;
56
VHDL: Comparador en C2
Circuito RTL inferido
por el ambiente
Simulación del modelo
57
Aritméticos + (suma) - (resta)
Definidos para datos enteros (integer)
VHDL: Operadores usados en Digital II
Se pueden utilizar con vectores std_logic_vector
Se debe incluir el paquete correspondiente (SIGNED o UNSIGNED)
58
Concatenación (&)
Permite definir vectores a partir de líneas u otros vectores
VHDL: Operadores usados en Digital II
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); C será “011000”
59
VHDL: Sumador / Restador 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);
sub : in std_logic;
s : out std_logic_vector(4 downto 0));
end;
architecture Behavioral of SuRes is
begin
s <= (a(3) & a) + b when sub = '0'
else (a(3) & a) - b;
end;
Se completa formato
con bit de signo
Se previene OF
definiendo la salida
con un bit más
Se incluye el
paquete SIGNED
60
VHDL: Sumador / Restador en C2
61
VHDL: Sumador / Restador en C2
Simulación del modelo
Al trabajar con un bit más en la salida, se previene el sobreflujo
62
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
VHDL
Descripción de circuitos secuenciales sincrónicos
64
Circuitos secuenciales sincrónicos
Las salidas dependen del estado interno del sistema
y, dependiendo del modelo, de las entradas.
MOORE
Interviene la señal de reloj
65
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)
begin
if clk'event and clk = '1' then salida <= entrada ;
end if;
end process ;
end;
Descripción de un elemento de memoria
Lista de sensibilidad
Descripción del
flanco activo de reloj
66
Procesos y bloques secuenciales sincrónicos
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
Activación del bloque PROCESS Lista de sensibilidad
Descripción del
flanco activo de reloj Las sentencias internas se ejecutan
secuencialmente
SIMULADOR:
El bloque es una sentencia concurrente
67
Se describen circuitos temporizados
Es necesario reconocer un flanco activo de reloj.
clk’event and clk = ‘1’
Expresiones reconocidas por XST para describir un flanco
ascendente de reloj
Circuitos secuenciales sincrónicos
(rising_edge(clk))
Atributo event de la señal de reloj
Función que recibe el reloj como argumento
68
El bloque process
Es una construcción de un mayor de abstracción
Su uso está ligado a un tipo de descripción “ALGORITMICA”
Permite otros elementos sintácticos
Condicionales
Selección
Bucles
Están ligados a una descripción de más alto nivel
69
Simulación de un FFD
El simulador adecúa
las ondas, respetando
el sincronismo
70
Sentencia condicional IF...THEN...ELSE
if condición then
sentencias
elsif condición then
sentencias
else
sentencias
end if ;
Esta estructura puede anidarse
elsif y else son optativas. Si
no se contemplan todas las
posibilidades, se infiere
almacenamiento.
Modela una selección
jerárquica.
El bloque process: Elementos sintácticos
Indicada para describir las señales de control
de bloques secuenciales sincrónicos
71
Sentencia condicional IF...THEN...ELSE
process ( a, b, c )
begin
if a > b then
p <= b;
elsif a > c then
p <= c;
elsif (a = c and c = b) then
p <= a;
else p <= ‘0’;
end if ;
end process ;
p < = b when a > b else
c when a > c else
a when (a = c and c = b) else
‘0’ ;
Con asignación “concurrente”
La lista sensible debe incluir todas las
señales cuyo cambio es importante.
Procesos y circuitos combinacionales
72
Sentencia de selección CASE
case expresión is
when caso1 = >
instrucciones
when caso2 = >
instrucciones
when others = >
instrucciones
end case ;
La expresión de selección debe ser discreta.
No puede haber casos duplicados.
Se deben cubrir todas las opciones de selección.
El bloque process: Elementos sintácticos
case sel is
when “10” = > s <= a;
when “00” = > s <= b;
when “01” => s <= c;
when others = > s <= d;
end case ;
MU
X
Sel (1:0)
a
d
sc
b
73
case sel is
when “10” = > s <= a;
when “00” = > s <= b;
when “01” => s <= c;
when others = > s <= d;
end case ;
Sentencia de selección CASE
La expresión de selección debe ser discreta.
No puede haber casos duplicados.
Se deben cubrir todas las opciones de selección.
Procesos y circuitos combinacionales
with sel select
s <= a when “10” ,
b when “00”,
c when “01”,
d when others;
MU
X
Sel (1:0)
a
d
sc
b
Con asignación “concurrente”
74
Modelado y simulación de la concurrencia
Se modela HARDWARE usando SOFTWARE
Concurrente Secuencial
C F
E
A
B
Las puertas deben funcionar
al mismo tiempo !!
No se puede modelar y simular en un
lenguaje convencional
VHDL: Simulación de la concurrencia
Las señales se actualizan luego de que el
simulador “procesa” una sentencia concurrente.
Cada vez que se presenta un evento
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SimCon is
port ( a,b,c : in std_logic;
e,f : out std_logic);
end ;
architecture Behavioral of SimCon is
begin
e<= a and b;
f<= b or c;
end ;
¿Qué se debe incluir en la lista de sensibilidad?
Todas las señales cuyo cambio es importante !!
Procesos y simulación: Lista de sensibilidad
process (a,b,sel)
Circuito combinacional
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
76
process (clk, reset)
77
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;
78
architecture register_arch of regis is
begin
process (clk)
variable bout : std_logic_vector (3 downto 0);
begin
if ( clk'event and clk = '1') then
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;
end process;
end register_arch;
Registro de desplazamiento: Continuación
Flanco ascendente del reloj.
Todas las señales de control son sincrónicas
Operador de
concatenación
Local al proceso
Deben ser declaradas dentro del proceso y son locales a él.
Su asignación es inmediata pero secuencial, al estar
en distintas sentencias en el proceso.
El orden de las sentencias es importante
Deben tener un valor asignado antes de utilizarlas.
No tienen significado físico
a := b or c;
d := e and a;
El bloque process y las variables
Variables vs. Señales
Señales Variables
Sintaxis destino<= fuente destino:= fuente
Utilidad Modelan nodos físicos del
circuito
Representan almacenamiento
local
Visibilidad Global (comunicación entre
procesos) Local (dentro del
proceso)
Comportamiento Se actualizan al avanzar el
tiempo (suspensión proceso) Se actualizan
inmediatamente
81
Registro de desplazamiento: Continuación
82
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;
83
architecture contador_arch of contador is
signal bout : std_logic_vector (7 downto 0);
begin
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;
end if;
end process;
cuenta <= bout;
tc <= '1' when bout = “11111111” else '0';
end contador_arch;
Contador binario: Continuación
El reset es asincrónico
En la misma arquitectura coexisten
distintos estilos de descripción
84
Contador binario: Continuación
Esquemático inferido
por el ambiente
Contador con
carga paralela,
reset asincrónico
y habilitación de
cuenta
85
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;
Circuito ejemplo: 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 Módulo1
86
architecture Behavioral of modulo1 is
signal cuenta:STD_LOGIC_VECTOR (1 downto 0);
signal registro: STD_LOGIC_VECTOR (3 downto 0);;
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;
Circuito ejemplo: funcionamiento
Señales internas
Registro con
reset asincrónico
Contador con
reset asincrónico
Descripción
de las salidas
87
Circuito ejemplo: RTL inferido en ISE
88
Ejemplo: Simulación comportamental
Los estímulos cambian en el flanco descendente del reloj
Los estímulos cambian en el flanco ascendente del reloj
VHDL
Resolución de señales. Descripción de líneas y buses
compartidos
90
VHDL: Resolución de señales
91
VHDL: Resolución de señales
No se puede asignar valor a una señal en dos
sentencias “concurrentes” diferentes
¿¿¿ Cómo se pueden describir estos circuitos ???
92
VHDL: Resolución de señales
Descripción VHDL
Implementación HW
Tipos de datos resueltos
Buffers de tres estados
93
‘0’ -- 0 fuerte
‘1’ -- 1 fuerte
‘Z’ -- alta impedancia - tres estados
‘U’ -- no inicializado
‘X’ -- valor desconocido fuerte (conflicto entre val. fuertes)
‘W’ --valor desconocido débil (conflicto entre val. débiles)
‘L’ --0 débil
‘H’ --1 débil
‘-’ --sin importancia (don’t care)
Tipos std_ulogic y std_logic
Ambos tipos de datos pueden tomar 9 valores diferentes
94
Tipos std_ulogic y std_logic
¿¿¿ En qué se diferencian ???
Ambos tipos de datos pueden asumir
los mismos valores
Std_logic agrega a Std_ulogic una
FUNCIÓN DE RESOLUCIÓN
que plasma un modelo capaz de
resolver conflictos entre señales
95
Basado en fuerzas y valores lógicos.
Niveles lógicos básicos: 0; 1; L y H.
Las fuerzas pueden ser S, R y Z .
Modelo de resolución de señales
El estado de una línea en un
momento dado es la combinación
de una fuerza y un nivel lógico.
96
Se evalúa el valor de la fuerza (S>R>Z). La línea toma la fuerza y valor lógico de la señal ganadora.
Si las fuerzas son iguales, se evalúa el valor lógico, si son iguales, la línea toma el valor de cualquiera de ellos.
Si son valores lógicos distintos , la línea resulta X ó W según corresponda
Modelo de resolución de señales
En una contención (dos señales compiten por tomar control
sobre una línea)
97
0 1 H L Z
0 0 X 0 0 0
1 X 1 1 1 1
H 0 1 H W H
L 0 1 W L L
Z 0 1 H L Z
Función de resolución en std_logic
98
HAB. Hab Y
0 Z
1 ent
ent
Y
Buffer de tres estados
Es un componente HW que al estar deshabilitado,
entrega un nivel de alta impedancia como salida
Permite que varios módulos compartan líneas o buses tomando
control sobre los mismos según un esquema de acceso
07/09/2015 99
VHDL: Buffer de 3 estados
BufT
BufT
100
VHDL: Buffer de 3 estados
101
VHDL: Buffer de 3 estados
HAB.
HAB.
O
aux2
hab_2
hab_1
aux1
102
VHDL: Buffer de 3 estados
En síntesis XST detecta la descripción de un buffer T o de dos buffers T
Buffers T sólo disponibles en los bloques IO
En las descripciones del ejemplo hay un solo pad de salida
Al mapear se utiliza un solo buffer conectado al puerto
Se completa con lógica
Spartan3
103
Buffer de 3 estados: Ejemplo
Reset asincrónico prioritario
Carga paralela sincrónica
Reset asincrónico prioritario
Carga paralela sincrónica
Si no resetea ni carga, cuenta up
Si ER = 1 toma control el Registro
Si EC = 1 toma control el Contador
Registro
Contador
Bus DaIO
104
Buffer de 3 estados: Ejemplo
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sistema1 is
Port ( lr,lc : in std_logic; -- señales de carga paralela
r,clk : in std_logic;
er,ec : in std_logic; -- Habilitaciones bloques
daio : inout std_logic_vector(3 downto 0)); -- bus I/O
end ;
RTL TOP
Definición de la interfaz
07/09/2015 105
Buffer de 3 estados: Ejemplo
architecture Behavioral of Sistema1 is
signal regA, cuenta:std_logic_vector(3 downto 0); -- Registro y contador
begin
process (clk,r) -- Descripción registro
begin
if r = '1' then regA<= (others => '0');
elsif clk = '1' and clk'event then if lr = '1' then
regA <= daio;
end if; end if;
end process;
process (clk,r) -- Descripción Contador
begin
if r = '1' then cuenta <= (others => '0');
elsif clk'event and clk = '1' then if lc = '1' then
cuenta <= daio; else cuenta <= cuenta +1;
end if; end if;
end process;
106
Buffer de 3 estados: Ejemplo
-- ======= Inicio bus io de 3 estados ======
-- Con 1 buffer T (4 lineas), quitar comentario a:
-- daio <= regA when er ='1' else cuenta when ec
= '1'else (others => 'Z');
-- Con 2 buffer T (4 lineas c/u), quitar comentario:
daio <= regA when er ='1' else (others =>'Z');
daio <= cuenta when ec = '1' else (others =>'Z');
-- ======== Fin bus io de 3 estados =======
end Behavioral;
Los Buffers T trabajan con lógica negativa
¿Preguntas?