Tutorial: Diseo digital con
lenguajes de descripcin material
(VHDL)
Dr. Andrs David Garca Garca
Departamento de Mecatrnica
Escuela de Diseo, Ingeniera y Arquitectura
Campus Estado de Mxico
Introduccin: Justificacin de los HDLs
Debido a los rpidos avances en las tecnologas de integracin
(semiconductores) de los C.I., la complejidad de los sistemas
digitales ha aumentado rpidamente en los ltimos 30 aos.
Objetivos:
Reducir tiempos y costos de fabricacin
Reducir tamaos de PCBs
Aumentar la eficiencia de los dispositivos
2
Introduccin: Evolucin Tecnolgica
De los transistores hacia el diseo VLSI:
Solucin: Hardware Description Languages (HDLs) 3
Q1
PN2222
Q1_bis
PN2222
A
B
Q2
PN2222
INT
Q3
PN2222
INT1
Q4
PN2222
INT2
R1
4k
R2
1k
R3
130
R4
1.6k
VDD
C1
0.1n1
2
OUTV2
TD = 0.1u
TF = 0.15uPW = 6uPER = 13u
V1 = 5V
TR = 0.15u
V2 = 0V
V3
TD = 0.1u
TF = 0.15uPW = 13uPER = 26u
V1 = 5V
TR = 0.15u
V2 = 0V
GND
V5
5VdcD3
D1N4004
0
VV
V
Introduccin: Surgimiento de VHDL
1980
El departamento de defensa de los Estados Unidos de Amrica lanza un
concurso pblico con el propsito de crear una metodologa de diseo de
circuitos de fcil documentacin (self-documenting):
Comn para cualquier diseador,
Independiente tecnolgicamente,
Re-utilizable en nuevas tecnologas de semiconductor.
El proyecto se fund dentro del programa VHSIC (Very High Speed
Integrated Circuits) y bajo la bandera de la IEEE con el fin de generar un
HDL estndar.
Resultado: VHDL
4
Introduccin: Surgimiento de VHDL
1983
VHDL: Desarrollado inicialmente con la colaboracin de IBM, TI, e
Intermetrics.
Grupo de trabajo de personas con experiencia en lenguajes de alto nivel
y diseo en metodologa top-down.
VHDL: Metodologa de diseo y manipulacin de la informacin estndar.
Facilita desarrollar, actualizar e implementar sistemas electrnicos
digitales. Adaptable a nuevas tecnologas una vez que la tecnologa
actual se haya vuelto obsoleta.
1987
El Departamento de Defensa de EUA impone el uso de VHDL.
La IEEE avala el estndar de VHDL bajo el nmero: IEEE1076.
Avin-caza F-22, primer proyecto donde se exigi utilizar VHDL.
5
Introduccin: Surgimiento de VHDL
1987
Los fabricantes de herramientas de diseo electrnico EDA (ElectronicDesign Automation) comienzan a desarrollar software de diseo y
simulacin bajo este estndar industrial.
1993
Se realiza la primera revisin del estndar, lo que tiene comoconsecuencia una nueva versin del mismo: IEEE 1076 93
1996
Nuevas herramientas comerciales de simulacin y sntesis lgica salen almercado cumpliendo con la nueva versin del estndar IEEE 107693
Incremento exponencial del uso de VHDL en la industria para el diseo deC.I. bajo una metodologa Top-Down.
Desarrollo de libreras del estndar IEEE 1076.3 que permite laportabilidad de los diseos entre distintos fabricantes de EDAs.
El estndar IEEE 1076.4 se complementa con libraras para modelarestructuras de circuitos ASIC y FPGAs: VITAL(VHDL Initiative Towards
ASIC Libraries). 6
Para qu sirven los HDL?
7
1 si A = 0
0 si A = 1
A Z A
Z
A Z
Modelizacin Simulacin Sntesis lgica
HDLs: Caractersticas
Inspirado en lenguajes de programacin de altonivel como C, o C++ (Software) para modelar ydescribir funciones que sern implementadasfsicamente (Hardware)
Existen 2 aspectos importantes en la descripcinde Hardware que se facilitan con el uso deHDLs:
Modelado del comportamiento abstracto del circuitoModelado estructural a nivel fsico
8
HDLs: Niveles de abstraccin
9
Los modelos de alto nivel permitendescribir de forma abstracta la funcin
del HW
Los modelos de bajo nivel describencon mas detalle las estructuras del
HW
Descripcin comportamental
10
Descripcin RTL
11
Nivel compuertas lgicas
12
Nivel de abstraccin
VHDL permite codificar un algoritmo (como un lenguaje de altonivel).
Los diferentes niveles de abstraccin del cdigo permiten realizaruna concepcin descendente TOP-DOWN.
El nivel RTL (Register Transfer Logic) donde los registros sonidentificados es sintetizable. Despus de la sntesis, la herramienta
genera la netlist, es decir, el HDL Estructural con los componentes
de la biblioteca.
13
S=fft(e,64) radix1 radix2 radix3
Sntesis
lgicaNivel 1 Nivel 2 Nivel RTL netlist
registros biblioteca
Mdulos y jerarqua: Diseo Top-Down
Particin en varias partes del diseo
Reduccin de la complejidad material
Permite el trabajo en red de diseadores
Permite el estudio de soluciones alternativas
Permite la creacin de macros en software
Permite la creacin de modelos de simulacin genricos
14
Caractersticas de VHDL
VHDL: Proximidad con las herramientas de diseoasistido por computadora (CAD):
Relacin implcita con lenguajes de alto nivel como C.
Facilidad de documentar.
Cdigo porttil (se puede usar en diferentestecnologas o procesos).
NO ES UN LENGUAJE COMPUTACIONAL
15
Estructura del lenguaje
16
Cinco unidades de diseo sintetizables:
Entity
Architecture
Package declaration
Package body
Configuration
La Entidad, el Empaquetado y la Configuracin son unidades principales
de diseo, visibes dentro de la librera.
Una librera es un conjunto de unidadesde diseo.
La Arquitectura y el Cuerpo del Empaquetado son unidades de diseo
secundarias y no son visibles dentro de
la librera.
Un archivo de descripcin en VHDL consiste de una Entidad y una
Arquitectura.
Compilador
Editor de Conexiones
E A P B C
Librera
elaboracin
VHDL: Unidades de diseo y sntesis
Entity: Descripcin de la interfaz con el mundo exterior. Aqu sedefinen las terminales que permiten a una unidad de diseocomunicarse con otras, engloba a a las terminales de Entrada,Salida, y Bidireccionales definidas en la declaracin de puertos, ycualquier parmetro o modelo general definido en la declaracin degenricos.
Architecture: Descripcin de la funcionalidad del circuito,descripcin de la estructura del diseo, puede ser descrita encualquiera de los niveles de abstraccin (comportamenta, RTL onivel de compuertas lgicas).
17
Entidad del Circuito
Arquitectura
VHDL: Unidades de diseo y sntesis
Package declaration: Archivo que concentra las declaracionesrecurrentemente utilizadas dentro de una serie de diseos (tipos dedatos, sub-programas, sub-rutinas) que sern accesibles a mltiplesunidades de diseo.
Package body: Contiene la definicin de los sub-programas, sub-rutinas, funciones y procesos declarados en el Empaquetado.
Configuration: Asocia la Entidad a la Arquitectura para formar loscomponentes de un diseo. Permite asociar una Entidad a distintasversiones de la Arquitectura sintetizadas, lo que permite modificar lafuncionalidad sin modificar la estructura externa del circuito.
18
Estructura de un cdigo en VHDLLibrary IEEE;use IEEE.std_logic_1164.ALL;
entity NAME_OF_ENT isPort ( NAME, NAME : in type of input;
NAME, NAME: out type of output;NAME : bidir type of bidir);
end NAME_OF_ENT;
architecture NAME_OF_ARC of NAME_OF_ENT issignal SIG_A, SIG_B : type of signal;variable VAR_A, VAR_B : type of variable;constan CONS_A: type of constant;type NAME_OF_TYPE is (values of type);component NAME_OF_COMP is
port ( .; in type of input:..: out type of output);
end component NAME_OF_COMP;Begin------ concurrent instruction ----------;------ concurrent instruction ----------;end NAME_OF_ARC;
Definicin de Libreras
Declaracin de la Entidad
Definicin de la Arquitectura
Declaraciones de:
signalsconstantsvariablescomponentstypes
Estructura de un cdigo en VHDL:
Arquitectura architecture NAME_OF_ARC of NAME_OF_ENT issignal SIG_A, SIG_B : type of signal;variable VAR_A, VAR_B : type of variable;constan CONS_A: type of constant;type NAME_OF_TYPE is (values of type);component NAME_OF_COMP is
port ( .; in type of input:..: out type of
output);end component NAME_OF_COMP;
Begin------ concurrent instruction ----------;------ concurrent instruction ----------;
process (list of sensibility)begin------ sequential instructions -----;------ sequential instructions -----;end process;
------ concurrent instruction ----------;end NAME_OF_ARC;
Configuracin
Declaraciones :
signalsconstantsvariablescomponentstypes
Proceso (instruccin
concurrente)
Instrucciones concurrentes
VHDL permite describir una funcin materal con la ayuda deinstrucciones concurrentes.
Un process es un tipo de instruccin concurrente (tambin lo sonlos procedures y las functions.
Las seales se usan para contectar entre si los procesos
(sncronos y combinatorios) y las instrucciones concurrentes:
21
Proceso
sncronoseales
procesos
combin.
procesos
combin.
CLK
A
S1
C
B
instr concurrente
instr concurrenteS2
S3
Estructura de VHDL
22
C
Asignacin Concurrente:
Dentro de una arquitectura podemos asignar un valor auna seal (cable), a una variable (nodo R/W) o a una
constante (nodo R).
Las asignaciones concurrentes dentro de unaarquitectura de ejecutan al mismo tiempo (no es un
cdigo sncrono):
VAR := VAR + 1;
SIG
Seales/variables
24
ENTITY mux ISPORT (a, b, c, selx, sely : IN BIT;
data_out : OUT BIT);
END mux;
ARCHITECTURE ex OF mux ISSIGNAL sig : BIT;
BEGIN
sig
Procesos (Process)
Un proceso es una instruccin concurrente definidacon la ayuda de instrucciones secuenciales internas alproceso.
El proceso se activa si al menos una de las seales dela lista de sensibilidad cambia de estado lgico.
25
Ejemplo :
P1 : process(X,Y)
begin
if X= 1 then
Z
Objetos:
26
Los objetos deben ser declarados antes de ser utilizados Los puertos, seales, variables y constantes deben ser tipos
(integer, real, natural, )
La conversin implcita de tipos es imposible, se deben crear funciones de conversin
Signal
Port
variable
constant
function
procedure
component
Tipologa
27
Las seales, variables y constantes deben pertencer aun tipo. Con la biblioteca STD, los tipos son:
Files AccessComposite
Array
Record
Scalar
Enumerated
Real Integer
Physical
INTEGER
NATURAL
POSITIVE
BIT_VECTOR
BIT
BOOLEAN
Instruccin de afectacin. Combinatorios
28
S
Instruccin de afectacin condicional
WHEN...ELSE
29
La afectacin de la seal s depende de
condiciones descritas despues del WHEN :
s
Instruccin de afectacin condicional
WITH ... SELECT
30
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY toto IS
port(a,b,c,sel: in std_logic;
s: out std_logic);
END toto;
ARCHITECTURE behavior OF toto IS
BEGIN
with sel select
S
Ejemplo: Full Adder
31
entity FullAdder is
port (X, Y, Cin: in bit; -- entradas
Cout, Sum: out bit ); -- salidas
end FullAdder;
palabras
reservadas
comentarios
FullAdderX
Y
Cin
Sum
Cout
Ejemplo: Full Adder
32
architecture ecuaciones of FullAdder is
begin
Sum
Componentes
Si ya tenemos una biblioteca concomponentes ya diseados (FAs, MUXs, ),podemos utilizarlos para el diseo de otrossistemas que necesiten estos componentes yadiseados.
Se habla de instanciamiento de componentes:crear copias de un componente paraimplementar un sistema ms complejo.
33
Ejemplo: Full Adder de 4 bits
34
FullAdder FullAdder FullAdder FullAdderCi
A(0) B(0)A(1)A(2)A(3) B(1)B(2)B(3)
S(0)S(1)S(2)S(3)
C(1)C(2)C(3)Co
entity
Ejemplo: Full Adder de 4 bits
35
entity Adder4 is
port (A, B : in bit_vector (3 downto 0); --entradas
Ci : in bit; --entrada
S : out bit_vector (3 downto 0); --salidas
Co : out bit ); --salida
end Adder4; Seales vectoriales A, B y S
formadas por 4 bits
4
4
A
B
Ci
4S
Co Adder4
Ejemplo: Full Adder de 4 bits
36
architecture estructura of Adder4 is
component FullAdder
port (X, Y, Cin : in bit; --entradas
Cout, Sum : out bit); --salidas
end component;
signal C : bit_vector (3 downto 1) ; --seal interna que comunica
--los componentes FullAdder
begin --intanciar 4 copias de FullAdder
FA0 : FullAdder port map ( A(0), B(0), Ci, C(1), S(0) );
FA1: FullAdder port map ( A(1), B(1), C(1), C(2), S(1) );
FA2: FullAdder port map ( A(2), B(2), C(2), C(3), S(2) );
FA3: FullAdder port map ( A(3), B(3), C(3), Co, S(3) );
end estructura;
instancias
de FullAdder
FullAdder
es un
componente
La construccin de tipos y sub-tipos
37
type COLORES is (ROJO, AMARILLO, AZUL, VERDE, NARANJA);
type BOOLEAN is (FALSE, TRUE);
type BIT is ('0', '1');
type UN_A_DIX is range 1 to 10;
type DIX_A_UN is range 10 downto 1;
type TAB1 is array (0 to 31) of BIT;
type TAB2 is array (0 to 1023, 0 to 31) of BIT;
type BIT_VECTOR is array (NATURAL range ) of BIT;
subtype NATURAL is INTEGER range 0 to INTEGER'HIGH;
subtype POSITIVE is INTEGER range 1 to INTEGER'HIGH;
subtype UNO_A_DIEZ is NATURAL range (1 to 10);
subtype DIEZ_A_UNO is NATURAL range (10 downto 1);
Tipos diferentes
Herencia de
propiedades de
tipo
Los operadores
38
Lgicos
Relacionales
Aditivos
De signo
Multiplicativos
Diversos
and, or, nand, nor, xor
=, /=, =
+, -
& (concatenacin)
+, -
*, /, mod, rem
A = (A / B) * B + (A rem B)
signe(A rem B) = signe(A)
abs(A rem B) < abs(B)
(-A) / B = -(A / B) = A / (-B)
N, A = B * N + (A mod B)
signe(A mod B) = signe(B)
abs(A mod B) < abs(B)** (exponente)
abs (valor absoluto)
not (negacin)
Nota: Cualquier operador que implique un operador aritmtico requerir de la librera correspondiente.
Bibliotecas y Libreras
39
En VHDL es posible utilizar componentes, funciones yprocesos descritos previamente por otros diseadores opor las empresas que usan este estndar.
Estas unidades estarn almacenadas en una biblioteca(librera) que puede ser agregada al proyecto con el finde utilizar sus componentes en un nuevo diseo.
Los componentes se sintetizan dentro de la librera detrabajo
El nombre lgico para una librera de trabajo es work.La localizacin fsica de este repertorio debe serespecificada en la herramienta que se utilice.
Normalmente, las herramientas de diseo con VHDLdefinen y usan la librera work automticamente.
Bibliotecas
40
Para utilizar los componentes de una librera, sta debe ser especificada como se muestra:
Work y Standard (o STD) son libreras siempre visibes, es decir, no se requieren especificar dentro del cdigo VHDL
Todos los tipos de datos y funciones predefinidas en el estndar VHDL se localizan dentro del standard package que se localiza en la librera: std library
Bit, bit vector, character, string, time, integer,
library ;
use ..ALL;
library work;
Library std;
use std.standard.ALL;
No necesitan ser especificadas
Library
41
Otras libreras o empaquetados requieren serespecificados al inicio del cdigo en VHDL: std_logic
std_ulogic,
std_logic_vector
std_ulogic_vector
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity
package std_logic_1164 defined by IEEE
Library ieee
Bibliotecas
42
Bibliotecas de ALTERA :
Biblioteca Empaquetado DescripcinALTERA maxplus2 primitivos y macros ALTERA
megacore megafunciones
LPM lpm_components megafonciones LPM
IEEE std_logic_1164 declaracin de tipo STD_LOGICstd_logic_unsigned aritmtica con vectores sin signostd_logic_signed aritmtica con vectores con signostd_logic_arith declaracin de tipos UNSIGNED y
SIGNED. Funciones aritmticas y de conversin
La biblioteca WORK corresponde al repertorio de trabajo del usuario:
Biblioteca LPM de ALTERA
43
Compuertaslpm_and lpm_inv lpm_bustri lpm_mux
lpm_clshift lpm_or lpm_constant lpm_xor lpm_decode
Circuitos aritmticoslpm_abs lpm_counter lpm_add_sub lpm_mult
lpm_compare
Memoriascsfifo lpm_ram_dq csdpram lpm_ram_io
lpm_dff lpm_rom lpm_latch lpm_tff
Estndar industrial para los parmetros y E/S de funciones lgicas
Cdigo optimizado para las arquitecturas ALTERA
Xilinx tiene su propia biblioteca LPM
VHDL para circuitos digitales
44
salidas
Combinatorio :
Secuencial :
lgicaentradas
Estado_flgica
entradas D
CLK
estado
Resultado para lgica secuencial
Lgica combinatoria
Con la ayuda de una instruccin concurrente de afectacin. (vistos previamente)
Con la ayuda de un proceso (process)
Con la ayuda de instanciacin de componentes (cdigo estructural o jerrquico)
45
Hay varios estilos de codificacin:
Proceso (Process)
Un proceso es una subrutina dentro de la arquitectura que solo se efecta (activa) cuando algunas de las seales internas a ste cambian de estado.
Sintaxis:process (lista de sensibilidad)
begin
instrucciones combinatorias o
secuenciales
end process;
46
Cdigo dentro de un proceso
IF ... THEN
47
combi : process(a,b,c,sel)
begin
if c='0' then
s
Cdigo dentro de un proceso
CASE WHEN
48
combi : process(a,b,c,sel)
begin
case sel is
when '0' => s s null;
end case;
end process;
La expresin que sigue al CASE se evalua y
permite la afectacin condicional de la seal s :
Note : Este cdigo permite
construir facilmente un
multiplexor
sel
mux
a
b
c
s
Precauciones para procesos combinatorios
49
Conclusin : Nunca olvidar una seal de entrada a un proceso en la lista de
sensibilidad
combi :
process(a,b,c,sel)
begin
if c='0' then
s
Sntesis de un latch :
50
PROCESS(A,B)
BEGIN
IF A = '1' THEN
Q
Operaciones aritmticas
Por default sobre los tipos INTEGER
Sobre tipos STD_LOGIC, UNSIGNED, STD_LOGIC_VECTOR y SIGNED utilizar la
biblioteca IEEE1164 con las sublibreras:
51
std_logic_1164 Declaracin de tipos STD_LOGIC y STD_LOGIC_VECTORstd_logic_unsigned Aritmtica de tipos STD_LOGIC_VECTOR sin signostd_logic_signed Aritmtica de tipos STD_LOGIC_VECTOR con signostd_logic_arith Declaracin de UNSIGNED y SIGNED.
Funciones aritmticas y de conversin
Operaciones posibles : + , - , *La sntesis llama automticamente a las macrofunciones LPM
Lgica Sncrona
52
Una sola solucin : uso de un process sncronocon un solo reloj en la lista de sensibilidad
Estado_flgicaEntradas D
CLK
estado
Proceso sncrono
Estado_fLgicaentradas D
CLK
estado
Proceso sncrono= registro
Codigo de la
lgica
Por separado
Lgica Sncrona
Los circuitos secuenciales siempre van acompaados de una red combinacional.
Para una sintaxis VHDL limpia SIEMPRE DEBE separarse la red combinacional de la parte secuencial
Los procesos secuenciales van siempre dentro de un process
Los procesos combinatorios pueden asignarse dentro de la Arquitectura, en un process, en una function o en un
procedure53
Proceso sncrono elemental
sntesis de un Flip-Flop D
54
PROCESS(CLK)
BEGIN
IF CLKevent and CLK = '1' THEN
Q
Flip-Flop D con RESET sncrono
55
PROCESS (CLK)
BEGIN
IF (CLKevent and CLK = '1')
THEN
IF N_RST = 0 THEN
Q
Flip-Flop D con RESET asncrono
56
PROCESS (CLK, N_RST)
BEGIN
IF N_RST = 0 THEN
Q
Flip-Flop D con enable
57
PROCESS (CLK)
BEGIN
IF EN= 0 THEN
NULL; -- Q
Ejemplo de lgica sncrona:
el contador
58
ARCHITECTURE ex OF compteur IS
SIGNAL CPT : STD_LOGIC_VECTOR(7 downto 0);
BEGIN
PROCESS (CLK)
BEGIN
IF clk = '1' THEN
IF LOAD = '1' THEN
CPT
Ejemplo de un FlipFlop JK
59
PROCESS(CLK, RST)
BEGIN
IF RST = 0 THEN
Q
Mquina de estados
60
Mquina de MOORE :
D
Entradas estado
CLK
Estado_F
Salidas
Proceso combinatorio : P2Proceso combinatorio : P3
Proceso sncrono : P1Ejemplo de cdigo :
Mquina de estados
61
ARCHITECTURE Ejemplo OF maquina_de_cafe IS
type ST is (eleccin,pieza,moneda,cafe);
signal estado,estado_futuro : ST;
BEGIN
P1 : PROCESS(CLK)
...estado
Ejemplo de mquina de estados
62
bas
MON
DES
alto
m d
S1
S3
S0
S2
m='1'
d='1'
alto='1'bajo='1'
MON='1'
DES='1'
Ejemplo de mquina de estados
63
type ST is (S0,S1,S2,S3);
signal estado,estado_f : ST;
P1: process(CLK)
begin
if(CLK='1') then
estado
Bibliografa sugerida:
Roth, Ch. Jr. Digital Systems Design Using VHDL.PWS Publishing Company, 2a Ed.
Roth, Ch. Jr. Fundamentals of Logic Design, PWS Publishing Company, 2a Ed.
Brown, Vranesic. Fundamentals of Digital Logic with VHDL, McGrawHill. 2nd edition.
K. C. Chang. Digital Design and Modeling with VHDL and Synthesis. IEEE computer society press.
Sjoholm, Lindh. VHDL for Designers. Prentice Hall
64