Sunteți pe pagina 1din 64

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

Introduccin: Evolucin Tecnolgica


De los transistores hacia el diseo VLSI:
VDD

R1
4k

R4
1.6k

INT1
A
Q1
PN2222

V1 = 5V
V2 = 0V
TD = 0.1u
TR = 0.15u
TF = 0.15u
PW = 6u
PER = 13u

V2

R3
130

Q3
PN2222
V5

INT

5Vdc
Q2
PN2222

D3
D1N4004

OUT
V

V1 = 5V
V2 = 0V
TD = 0.1u
TR = 0.15u
TF = 0.15u
PW = 13u
PER = 26u

V3

Q1_bis
PN2222

INT2

Q4
PN2222

R2
1k

C1
0.1n

GND

Solucin: Hardware Description Languages (HDLs)

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.

Introduccin: Surgimiento de VHDL


1987
Los fabricantes de herramientas de diseo electrnico EDA (Electronic
Design Automation) comienzan a desarrollar software de diseo y
simulacin bajo este estndar industrial.

1993
Se realiza la primera revisin del estndar, lo que tiene como
consecuencia una nueva versin del mismo: IEEE 1076 93

1996
Nuevas herramientas comerciales de simulacin y sntesis lgica salen al
mercado cumpliendo con la nueva versin del estndar IEEE 107693
Incremento exponencial del uso de VHDL en la industria para el diseo de
C.I. bajo una metodologa Top-Down.
Desarrollo de libreras del estndar IEEE 1076.3 que permite la
portabilidad de los diseos entre distintos fabricantes de EDAs.
El estndar IEEE 1076.4 se complementa con libraras para modelar
estructuras de circuitos ASIC y FPGAs: VITAL(VHDL Initiative Towards
6
ASIC Libraries).

Para qu sirven los HDL?

1 si A = 0 Z
0 si A = 1
Modelizacin

Simulacin

Sntesis lgica

HDLs: Caractersticas
Inspirado en lenguajes de programacin de alto
nivel como C, o C++ (Software) para modelar y
describir funciones que sern implementadas
fsicamente (Hardware)
Existen 2 aspectos importantes en la descripcin
de Hardware que se facilitan con el uso de
HDLs:
Modelado del comportamiento abstracto del circuito
Modelado estructural a nivel fsico
8

HDLs: Niveles de abstraccin

Los modelos de alto nivel permiten


describir de forma abstracta la funcin
del HW

Los modelos de bajo nivel describen


con mas detalle las estructuras del
HW
9

Descripcin comportamental

10

Descripcin RTL

11

Nivel compuertas lgicas

12

Nivel de abstraccin
VHDL permite codificar un algoritmo (como un lenguaje de alto
nivel).
Los diferentes niveles de abstraccin del cdigo permiten realizar
una concepcin descendente TOP-DOWN.
El nivel RTL (Register Transfer Logic) donde los registros son
identificados es sintetizable. Despus de la sntesis, la herramienta
genera la netlist, es decir, el HDL Estructural con los componentes
de la biblioteca.
registros

S=fft(e,64)

Nivel 1

radix1

radix2

biblioteca

radix3

Nivel 2

Nivel RTL

Sntesis
lgica

netlist
13

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 diseo
asistido por computadora (CAD):
Relacin implcita con lenguajes de alto nivel como C.
Facilidad de documentar.
Cdigo porttil (se puede usar en diferentes
tecnologas o procesos).
NO ES UN LENGUAJE COMPUTACIONAL

15

Estructura del lenguaje


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 unidades
de 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
Librera

Editor de
Conexiones
elaboracin
16

VHDL: Unidades de diseo y sntesis


Entity: Descripcin de la interfaz con el mundo exterior. Aqu se
definen las terminales que permiten a una unidad de diseo
comunicarse con otras, engloba a a las terminales de Entrada,
Salida, y Bidireccionales definidas en la declaracin de puertos, y
cualquier parmetro o modelo general definido en la declaracin de
genricos.
Architecture: Descripcin de la funcionalidad del circuito,
descripcin de la estructura del diseo, puede ser descrita en
cualquiera de los niveles de abstraccin (comportamenta, RTL o
nivel de compuertas lgicas).
Entidad del Circuito

Arquitectura
17

VHDL: Unidades de diseo y sntesis


Package declaration: Archivo que concentra las declaraciones
recurrentemente utilizadas dentro de una serie de diseos (tipos de
datos, sub-programas, sub-rutinas) que sern accesibles a mltiples
unidades de diseo.

Package body: Contiene la definicin de los sub-programas, subrutinas, funciones y procesos declarados en el Empaquetado.
Configuration: Asocia la Entidad a la Arquitectura para formar los
componentes de un diseo. Permite asociar una Entidad a distintas
versiones de la Arquitectura sintetizadas, lo que permite modificar la
funcionalidad sin modificar la estructura externa del circuito.

18

Estructura de un cdigo en VHDL


Definicin de Libreras
Declaracin de la Entidad

Definicin de la Arquitectura
Declaraciones de:
signals
constants
variables
components
types

Library IEEE;
use IEEE.std_logic_1164.ALL;

entity NAME_OF_ENT is
Port ( 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 is
signal 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;

Estructura de un cdigo en VHDL:


architecture NAME_OF_ARC of NAME_OF_ENT is
Arquitectura
signal SIG_A, SIG_B : type of signal;
Configuracin
Declaraciones :

signals
constants
variables
components
types

Proceso
(instruccin
concurrente)

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;

Instrucciones concurrentes
VHDL permite describir una funcin materal con la ayuda de
instrucciones concurrentes.
Un process es un tipo de instruccin concurrente (tambin lo son
los procedures y las functions.
Las seales se usan para contectar entre si los procesos

(sncronos y combinatorios) y las instrucciones concurrentes:


A
procesos
combin.

CLK
Proceso
sncrono

seales

B
C
S3

procesos
combin.

instr concurrente

S1
instr concurrente

S2
21

Estructura de VHDL

C <= A and B;
E <= C or D;

A
B

C
D

Operador seal
A, B , C, D : seales
Seal : tipo correspondiente a
las seales en sistemas fsicos
(cables)

Instruccin concurrente:
Instrucciones paralelas
para que el simulador
tome en cuenta el
tiempo de propagacin
de las seales dentro de
un circuito.
22

Asignacin Concurrente:
Dentro de una arquitectura podemos asignar un valor a
una seal (cable), a una variable (nodo R/W) o a una
constante (nodo R).
Las asignaciones concurrentes dentro de una
arquitectura de ejecutan al mismo tiempo (no es un
cdigo sncrono):
VAR := VAR + 1;
SIG <= SIG + 1;
Las instrucciones concurrentes tales como los process
son pedazos de cdigo secuencial y solo se ejecutan
cuando se cumplen sus condiciones de activacin (lista
de sensibilidad).

23

Seales/variables
ENTITY mux IS
PORT (a, b, c, selx, sely : IN
BIT;
data_out
:
OUT BIT);
END mux;
ARCHITECTURE ex OF mux IS
SIGNAL sig
: BIT;
BEGIN
sig <= a and selx or b and
not(selx);

La seal sig es conocida


En toda la arquitectura.

process_b: PROCESS(sig,b, c, sely)


VARIABLE var : BIT;
BEGIN
var := 0 ;
IF (sely = 0) THEN
var := '1';
ELSIF (sig = '1') THEN
var := c;
ELSE
var := '0';
END IF;
data_out <= var xor b;
END PROCESS process_b;
END ex;

La variable var es local (solo en el process).


Esta se actualiza instantneamente.
La seal se actualiza al final del proceso
24

Procesos (Process)
Un proceso es una instruccin concurrente definida
con la ayuda de instrucciones secuenciales internas al
proceso.
El proceso se activa si al menos una de las seales de
la lista de sensibilidad cambia de estado lgico.
Ejemplo :
P1 : process(X,Y)
begin
if X= 1 then
Z <= Y;
else
Z <= 0 ;
end if;
end process P1;

Lista de sensibilidad

Z
Y

25

Objetos:
Signal
Port

function
constant

variable

procedure

component

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
26

Tipologa
Las seales, variables y constantes deben pertencer a
un tipo. Con la biblioteca STD, los tipos son:

Files

Access

Scalar

Composite

Physical

Enumerated

Record

BIT
BOOLEAN
Real

Array
BIT_VECTOR
Integer
INTEGER
NATURAL
POSITIVE
27

Instruccin de afectacin. Combinatorios


Para el siguiente circuito :

sel
a
mux

b
c

Una instruccin de afectacin permite codificar directamente la


ecuacin lgica :

S <= c and ((a and not(sel)) or (b and sel));


28

Instruccin de afectacin condicional


WHEN...ELSE
La afectacin de la seal s depende de
condiciones descritas despues del WHEN :
sel

s <=

'0 when c = '0' else


a when sel = '0' else
b when sel = '1' else
'0';

a
mux

b
c

29

Instruccin de afectacin condicional


WITH ... SELECT
La expresin que sigue al WITH se evala y permite la afectacin
condicional de la seal s :
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 <=
(a and c) when '0',
(b and c) when OTHERS;
END behavior;

sel
a
b

mux

Nota : esta instruccin permite codificar fcilmente un multiplexor


30

Ejemplo: Full Adder

entity FullAdder is
port (X, Y, Cin: in bit;
Cout, Sum: out bit );
end FullAdder;
palabras
reservadas

X
Y
Cin

FullAdder

Sum

-- entradas
-- salidas
comentarios

Cout

31

Ejemplo: Full Adder

architecture ecuaciones of FullAdder is


begin
Sum <= X xor Y xor Cin;
Cout <= (X and Y) or (X and Cin) or (Y and Cin);
end ecuaciones;
Nombre de la
Arquitectura (arbitrario)

Arquitectura perteneciente
a la entidad FullAdder
(MISMO NOMBRE)

32

Componentes
Si
ya
tenemos
una
biblioteca
con
componentes ya diseados (FAs, MUXs, ),
podemos utilizarlos para el diseo de otros
sistemas que necesiten estos componentes ya
diseados.
Se habla de instanciamiento de componentes:
crear copias de un componente para
implementar un sistema ms complejo.

33

Ejemplo: Full Adder de 4 bits

A(3) B(3)

A(2) B(2)

A(1) B(1)

A(0) B(0)

entity
Co

C(3)
FullAdder

FullAdder

S(3)

S(2)

C(2)

FullAdder

S(1)

C(1)

Ci

FullAdder

S(0)

34

Ejemplo: Full Adder de 4 bits


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
S
Co

Adder4

A
B
Ci
35

Ejemplo: Full Adder de 4 bits

FullAdder
es un
componente

architecture estructura of Adder4 is


component FullAdder
port (X, Y, Cin : in bit;
Cout, Sum : out bit);
end component;
signal C : bit_vector (3 downto 1) ;

--entradas
--salidas
--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) );
instancias
FA1: FullAdder port map ( A(1), B(1), C(1), C(2), S(1) );
de FullAdder
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;
36

La construccin de tipos y sub-tipos


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;

Tipos diferentes

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);

Herencia de
propiedades de
tipo
37

Los operadores
Lgicos
Relacionales

Aditivos
De signo

and, or, nand, nor, xor


=, /=, <, <=, >, >=
+, & (concatenacin)
+, -

Multiplicativos
Diversos

** (exponente)
abs (valor absoluto)
not (negacin)

*, /, 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)

Nota: Cualquier operador que implique un operador aritmtico requerir de


la librera correspondiente.

38

Bibliotecas y Libreras
En VHDL es posible utilizar componentes, funciones y
procesos descritos previamente por otros diseadores o
por las empresas que usan este estndar.
Estas unidades estarn almacenadas en una biblioteca
(librera) que puede ser agregada al proyecto con el fin
de utilizar sus componentes en un nuevo diseo.
Los componentes se sintetizan dentro de la librera de
trabajo
El nombre lgico para una librera de trabajo es work.
La localizacin fsica de este repertorio debe ser
especificada en la herramienta que se utilice.
Normalmente, las herramientas de diseo con VHDL
definen y usan la librera work automticamente.
39

Bibliotecas
Para utilizar los componentes de una librera, sta debe ser
especificada como se muestra:
library <library_name>;
use <library_name>.<package_name>.ALL;

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 work;
Library std;
use std.standard.ALL;

No necesitan ser
especificadas

40

Library
Otras libreras o empaquetados requieren ser
especificados al inicio del cdigo en VHDL:

std_logic
std_ulogic,
std_logic_vector
std_ulogic_vector

package std_logic_1164 defined by IEEE


Library ieee

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity
41

Bibliotecas
La biblioteca WORK corresponde al repertorio de trabajo
del usuario:
Biblioteca
ALTERA

Empaquetado
maxplus2
megacore

Descripcin

LPM

lpm_components

megafonciones LPM

IEEE

std_logic_1164
std_logic_unsigned
std_logic_signed
std_logic_arith

declaracin de tipo STD_LOGIC


aritmtica con vectores sin signo
aritmtica con vectores con signo
declaracin de tipos UNSIGNED y
SIGNED. Funciones aritmticas y
de conversin

primitivos y macros ALTERA


megafunciones

Bibliotecas de ALTERA :
42

Biblioteca LPM de ALTERA


Estndar industrial para los parmetros y E/S de funciones
lgicas
Cdigo optimizado para las arquitecturas ALTERA
Compuertas
lpm_and
lpm_clshift

lpm_inv
lpm_or

lpm_bustri
lpm_constant

lpm_mux
lpm_xor lpm_decode

lpm_add_sub

lpm_mult

csdpram
lpm_latch

lpm_ram_io
lpm_tff

Circuitos aritmticos
lpm_abs
lpm_compare

lpm_counter

Memorias
csfifo

lpm_ram_dq
lpm_dff lpm_rom

Xilinx tiene su propia biblioteca LPM


43

VHDL para circuitos digitales

Combinatorio :
entradas

lgica

salidas

Resultado para lgica secuencial

Secuencial :
entradas

lgica

Estado_f

estado

CLK

44

Lgica combinatoria
Hay varios estilos de codificacin:
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

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
La afectacin de S depende de las condiciones del
IF y ELSIF
combi : process(a,b,c,sel)
begin
if c='0' then
s <= '0';
elsif sel='0' then
s <= a;
else
s <= b;
end if;
end process;

La lista de sensibilidad contiene todas


las entradas de la funcin

sel

a
mux

47

Cdigo dentro de un proceso


CASE WHEN
La expresin que sigue al CASE se evalua y
permite la afectacin condicional de la seal s :
sel

combi : process(a,b,c,sel)
begin
case sel is
when '0' => s <= a and c;
when '1' => s <= b and c;
when others => null;
end case;

a
b

mux

Note : Este cdigo permite


construir facilmente un
multiplexor

end process;
48

Precauciones para procesos combinatorios

combi :
process(a,b,c,sel)
begin
if c='0' then
s <= '0';
elsif sel='0' then
s <= a;
else
s <= b;
end if;
end process;

Que pasara si c se omite de la lista de


de sensibilidad ?
A
B
C

SEL

Conclusin : Nunca olvidar una seal de entrada a un proceso en la lista de


sensibilidad
49

Sntesis de un latch :
Cuando las condiciones no son muy precisas en las instrucciones
condicionales => memorisacin se traduce como una sntesis en
flip-flops tipo "latch".
PROCESS(A,B)
BEGIN
IF A = '1' THEN
Q <= B;
-ELSE
-Q <= 0 ;
END IF;
END PROCESS;

A
B

Con ELSE : sntesis de una AND


Sin ELSE : sntesis de un LATCH

B
D

Nota : Un Flip-Flop D es preferible a un LATCH


50

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:
std_logic_1164
std_logic_unsigned
std_logic_signed
std_logic_arith

Declaracin de tipos STD_LOGIC y STD_LOGIC_VECTOR


Aritmtica de tipos STD_LOGIC_VECTOR sin signo
Aritmtica de tipos STD_LOGIC_VECTOR con signo
Declaracin de UNSIGNED y SIGNED.
Funciones aritmticas y de conversin

+,-,*

Operaciones posibles :
La sntesis llama automticamente a las macrofunciones LPM
51

Lgica Sncrona
Una sola solucin : uso de un process sncrono
con un solo reloj en la lista de sensibilidad

Proceso sncrono
Entradas

lgica

Estado_f D

estado

CLK

Codigo de la
lgica
Por separado

Proceso sncrono
entradas

Lgica

= registro
Estado_f D

estado

CLK

52

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
procedure

53

Proceso sncrono elemental


sntesis de un Flip-Flop D
Reloj nicamente

Indicacin del flanco de subida

PROCESS(CLK)
BEGIN
IF CLKevent and CLK = '1' THEN
Q <= D;
END IF;
END PROCESS;

Note : es mejor aadir el atributo event


An cuando no sea muy til

CLK
D
Q

CLK

54

Flip-Flop D con RESET sncrono

PROCESS (CLK)
BEGIN
IF (CLKevent and CLK = '1')
THEN
IF N_RST = 0 THEN
Q <= 0;
ELSE
Q<= D;
END IF;
END IF;
END PROCESS;

CLK

N_RS
T
D
Q
N_RST
D

CLK

55

Flip-Flop D con RESET asncrono


Aadir la seal de reset asncrono
dentro de la lista de sensibilidad
PROCESS (CLK, N_RST)
BEGIN
IF N_RST = 0 THEN
Q <= 0;
ELSIF (CLKevent and CLK = 1) THEN
Q<= D;
END IF;
END PROCESS;

La condicin sobre el reset es prioritaria

CLK
N_RST

D
Q

CLK

Que pasara si no hay clkevent ?


N_RST
56

Flip-Flop D con enable


La condicin sobre el enable tiene prioridad
PROCESS (CLK)
BEGIN
IF EN= 0 THEN
NULL; -- Q <= Q;
ELSIF CLKevent and CLK = 1 THEN
Q<= D;
END IF;
END PROCESS;

D
EN
CLK

D Q
ENA

Fsicamente, la sean de enable equivale a un FF cuya


entrada est controlada por un MUX
57

Ejemplo de lgica sncrona:


el contador
La lgica combinatoria
ARCHITECTURE ex OF compteur IS
SIGNAL CPT : STD_LOGIC_VECTOR(7 downto 0); se codifica dentro del proceso
BEGIN
Sncrono usando CPT<= CPT+1
PROCESS (CLK)
BEGIN
IF clk = '1' THEN
IF LOAD = '1' THEN
CPT <= D;
ELSE
1
Estado_F D
Estado S
CPT <= CPT + '1';
END IF;
CLK
END IF;
END PROCESS;
El empaquetado
S <= CPT;
ieee.std_logic_unsigned debe ser
END ex;
El nmero de F-F D generado
declarado para aritmtica de
nmeros sin signo
= dimensin de CPT

58

Ejemplo de un FlipFlop JK

PROCESS(CLK, RST)
BEGIN
IF RST = 0 THEN
Q <= 0;
ELSIF CLKevent and CLK = '1' THEN
Q <= (J and not(Q)) or (not(K) and Q);
END IF;
END PROCESS;
Q_N <= not (Q);

CLK
K Q_N

Q_N

59

Mquina de estados
Mquina de MOORE :
Entradas

Estado_F

estado
Salidas

CLK

Ejemplo de cdigo :
Proceso combinatorio : P3

Proceso sncrono : P1
Proceso combinatorio : P2
60

Mquina de estados
Creacin de un tipo que
engloba la lista de estados

ARCHITECTURE Ejemplo OF maquina_de_cafe IS


type ST is (eleccin,pieza,moneda,cafe);
signal estado,estado_futuro : ST;
BEGIN
P1 : PROCESS(CLK)
...estado <= estado_futuro;
P2 : PROCESS(estado)
if (estado = x) then
...sorties <=
end if;
if (estado = y) then

P3 : PROCESS(entradas,estado)
...estado_futuro <=
END Ejemplo;
61

Ejemplo de mquina de estados


m='1'

MON
DES

S0

S1

alto='1'

bajo='1'

alto

DES='1'

S3

MON='1'

d='1'

S2

bas

62

Ejemplo de mquina de estados


P3: process(estadot,m,d,alto,bajo)
begin
m='1'
estado is
MON
S0
S1 MON='1' case
when S0 =>if (m='1') then
DES
estado_f<=S1;
alto='1'
alto
bajo='1'
else estado_f<=estado;
m d
end if;
d='1'
DES='1' S3
S2
when S1 => if (alto='1') then
estado_f<=S2;
else
bas
estado_f<=estado;
P2: process(estado)
end if;
begin
when S2 => if (d='1') then
if(estado=S1) then
type ST is (S0,S1,S2,S3);
estado_f<=S3;
MON <= '1';
signal estado,estado_f : ST;
else
else
estado_f<=estado;
MON <='0';
P1: process(CLK)
end if;
end if;
begin
when S3 => if (bajo='1') then
if(estado=S3) then
if(CLK='1') then
estado_f<=S0;
DES<= '1';
estado <= estado_f;
else
else
end if;
estado_f<=estado;
DES<='0';
end process P1;
end if;
end if;
end case;
end process P2;
63
end process P3;

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

S-ar putea să vă placă și