Post on 05-Feb-2018
Tutorial: Diseño digital con
lenguajes de descripción material
(VHDL)
Dr. Andrés David García García
Departamento de Mecatrónica
Escuela de Diseño, Ingeniería y Arquitectura
Campus Estado de México
Introducción: Justificación de los HDL’s
Debido a los rápidos avances en las tecnologías de integración
(semiconductores) de los C.I., la complejidad de los sistemas
digitales ha aumentado rápidamente en los últimos 30 años.
Objetivos:
Reducir tiempos y costos de fabricación
Reducir tamaños de PCBs
Aumentar la eficiencia de los dispositivos
2
Introducción: Evolución Tecnológica
De los transistores hacia el diseño VLSI:
Solución: 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
Introducción: Surgimiento de VHDL
1980
El departamento de defensa de los Estados Unidos de América lanza un
concurso público con el propósito de crear una metodología de diseño de
circuitos de fácil documentación (self-documenting):
Común para cualquier diseñador,
Independiente tecnológicamente,
Re-utilizable en nuevas tecnologías 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 estándar.
Resultado: VHDL
4
Introducción: Surgimiento de VHDL
1983
VHDL: Desarrollado inicialmente con la colaboración de IBM, TI, e
Intermetrics.
Grupo de trabajo de personas con experiencia en lenguajes de alto nivel
y diseño en metodología “top-down”.
VHDL: Metodología de diseño y manipulación de la información estándar.
Facilita desarrollar, actualizar e implementar sistemas electrónicos
digitales. Adaptable a nuevas tecnologías una vez que la tecnología
actual se haya vuelto obsoleta.
1987
El Departamento de Defensa de EUA impone el uso de VHDL.
La IEEE avala el estándar de VHDL bajo el número: IEEE1076.
Avión-caza F-22, primer proyecto donde se exigió utilizar VHDL.
5
Introducción: Surgimiento de VHDL
1987
Los fabricantes de herramientas de diseño electrónico EDA (Electronic
Design Automation) comienzan a desarrollar software de diseño y
simulación bajo este estándar industrial.
1993
Se realiza la primera revisión del estándar, lo que tiene como
consecuencia una nueva versión del mismo: IEEE 1076 ’93
1996
Nuevas herramientas comerciales de simulación y síntesis lógica salen al
mercado cumpliendo con la nueva versión del estándar IEEE 1076’93
Incremento exponencial del uso de VHDL en la industria para el diseño de
C.I. bajo una metodología “Top-Down”.
Desarrollo de librerías del estándar IEEE 1076.3 que permite la
portabilidad de los diseños entre distintos fabricantes de EDA’s.
El estándar IEEE 1076.4 se complementa con librarías para modelar
estructuras 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
Modelización Simulación Síntesis lógica
HDLs: Características
Inspirado en lenguajes de programación de altonivel como C, o C++ (Software) para modelar ydescribir funciones que serán implementadasfísicamente (Hardware)
Existen 2 aspectos importantes en la descripciónde Hardware que se facilitan con el uso deHDLs:
Modelado del comportamiento abstracto del circuito
Modelado estructural a nivel físico
8
HDLs: Niveles de abstracción
9
Los modelos de alto nivel permiten
describir de forma abstracta la función
del HW
Los modelos de bajo nivel describen
con mas detalle las estructuras del
HW
Descripción comportamental
10
Descripción RTL
11
Nivel compuertas lógicas
12
Nivel de abstracción
VHDL permite codificar un algoritmo (como un lenguaje de alto
nivel).
Los diferentes niveles de abstracción del código permiten realizar
una concepción descendente TOP-DOWN.
El nivel RTL (Register Transfer Logic) donde los registros son
identificados es sintetizable. Después de la síntesis, la herramienta
genera la netlist, es decir, el HDL Estructural con los componentes
de la biblioteca.
13
S=fft(e,64) radix1 radix2 radix3
Síntesis
lógicaNivel 1 Nivel 2 Nivel RTL netlist
registros biblioteca
Módulos y jerarquía: Diseño Top-Down
Partición en varias partes del diseño
Reducción de la complejidad material
Permite el trabajo en red de diseñadores
Permite el estudio de soluciones alternativas
Permite la creación de macros en software
Permite la creación de modelos de simulación genéricos
14
Características de VHDL
VHDL: Proximidad con las herramientas de diseño
asistido por computadora (CAD):
Relación implícita con lenguajes de alto nivel como C.
Facilidad de documentar.
Código portátil (se puede usar en diferentes
tecnologías o procesos).
NO ES UN LENGUAJE COMPUTACIONAL
15
Estructura del lenguaje
16
Cinco unidades de diseño sintetizables:
Entity
Architecture
Package declaration
Package body
Configuration
La Entidad, el Empaquetado y la
Configuración son unidades principales
de diseño, visibes dentro de la librería.
Una librería es un conjunto de unidades
de diseño.
La Arquitectura y el Cuerpo del
Empaquetado son unidades de diseño
secundarias y no son visibles dentro de
la librería.
Un archivo de descripción en VHDL
consiste de una Entidad y una
Arquitectura.
Compilador
Editor de Conexiones
E A P B C
Librería
elaboración
VHDL: Unidades de diseño y síntesis
Entity: Descripción de la interfaz con el mundo exterior. Aquí sedefinen las terminales que permiten a una unidad de diseñocomunicarse con otras, engloba a a las terminales de Entrada,Salida, y Bidireccionales definidas en la declaración de “puertos”, ycualquier parámetro o modelo general definido en la declaración de“genéricos”.
Architecture: Descripción de la funcionalidad del circuito,descripción de la estructura del diseño, puede ser descrita encualquiera de los niveles de abstracción (comportamenta, RTL onivel de compuertas lógicas).
17
Entidad del Circuito
Arquitectura
VHDL: Unidades de diseño y síntesis
Package declaration: Archivo que concentra las declaracionesrecurrentemente utilizadas dentro de una serie de diseños (tipos dedatos, sub-programas, sub-rutinas) que serán accesibles a múltiplesunidades de diseño.
Package body: Contiene la definición 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 diseño. 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 código 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;
Definición de Librerías
Declaración de la Entidad
Definición de la Arquitectura
Declaraciones de:
signalsconstantsvariablescomponentstypes
Estructura de un código 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;
Configuración
Declaraciones :
signalsconstantsvariablescomponentstypes
Proceso (instrucción
concurrente)
Instrucciones concurrentes
VHDL permite describir una función materal con la ayuda de
instrucciones concurrentes.
Un process es un tipo de instrucción concurrente (también lo son
los procedures y las functions.
Las señales se usan para contectar entre si los procesos
(síncronos y combinatorios) y las instrucciones concurrentes:
21
Proceso
síncronoseñales
procesos
combin.
procesos
combin.
CLK
A
S1
C
B
instr concurrente
instr concurrenteS2
S3
Estructura de VHDL
22
C <= A and B;
E <= C or D;
A, B , C, D : señales
Señal : tipo correspondiente a
las señales en sistemas físicos
(cables)
Operador “señal”
AB
C
DE
Instrucción concurrente:
Instrucciones “paralelas”
para que el simulador
tome en cuenta el
tiempo de propagación
de las señales dentro de
un circuito.
Asignación Concurrente:
Dentro de una arquitectura podemos asignar un valor a
una señal (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
código síncrono):
VAR := VAR + ‘1’;
SIG <= SIG + ‘1’;
Las instrucciones concurrentes tales como los “process”
son pedazos de código secuencial y solo se ejecutan
cuando se cumplen sus condiciones de activación (lista
de sensibilidad).23
Señales/variables
24
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);
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 señal sig es conocida
En toda la arquitectura.La variable var es local (solo en el process).
Esta se actualiza instantáneamente.
La señal se actualiza al final del proceso
Procesos (Process)
Un proceso es una instrucción concurrente definidacon la ayuda de instrucciones secuenciales internas alproceso.
El proceso se activa si al menos una de las señales dela lista de sensibilidad cambia de estado lógico.
25
Ejemplo :
P1 : process(X,Y)
begin
if X=‘ 1 ’ then
Z <= Y;
else
Z <= ‘ 0 ’;
end if;
end process P1;
X
YZ
Lista de sensibilidad
Objetos:
26
Los objetos deben ser declarados antes de ser utilizados
Los puertos, señales, variables y constantes deben ser tipos
(integer, real, natural, …)
La conversión implícita de tipos es imposible, se deben crear
funciones de conversión
Signal
Port
variable
constant
function
procedure
component
Tipología
27
Las señales, variables y constantes deben pertencer a
un tipo. Con la biblioteca STD, los tipos son:
Files AccessComposite
Array
Record
Scalar
Enumerated
Real Integer
Physical
INTEGER
NATURAL
POSITIVE
BIT_VECTOR
BIT
BOOLEAN
Instrucción de afectación. Combinatorios
28
S <= c and ((a and not(sel)) or (b and sel));
Para el siguiente circuito : sel
mux
a
b
c
s
Una instrucción de afectación permite codificar directamente la
ecuación lógica :
Instrucción de afectación condicional
WHEN...ELSE
29
La afectación de la señal s depende de
condiciones descritas despues del WHEN :
s <= '0 ’ when c = '0' else
a when sel = '0' else
b when sel = '1' else
'0';
sel
mux
a
b
c
s
Instrucción de afectación 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 <= (a and c) when '0',
(b and c) when OTHERS;
END behavior;
La expresión que sigue al WITH se evalúa y permite la afectación
condicional de la señal s :
Nota : esta instrucción permite codificar fácilmente un multiplexor
sel
mux
a
b
c
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 <= 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)
Componentes
Si ya tenemos una “biblioteca” concomponentes ya diseñados (FA´s, MUX´s, …),podemos utilizarlos para el diseño de otrossistemas que necesiten estos componentes yadiseñados.
Se habla de “instanciamiento” de componentes:crear “copias” de un componente paraimplementar un sistema más 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; Señales 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) ; --señal 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 construcción 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
Lógicos
Relacionales
Aditivos
De signo
Multiplicativos
Diversos
and, or, nand, nor, xor
=, /=, <, <=, >, >=
+, -
& (concatenación)
+, -
*, /, 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 (negación)
Nota: Cualquier operador que implique un operador aritmético requerirá de la librería correspondiente.
Bibliotecas y Librerías
39
En VHDL es posible utilizar componentes, funciones yprocesos descritos previamente por otros diseñadores opor las empresas que usan este estándar.
Estas unidades estarán almacenadas en una biblioteca(librería) que puede ser agregada al proyecto con el finde utilizar sus componentes en un nuevo diseño.
Los componentes se sintetizan dentro de la librería detrabajo
El nombre lógico para una librería de trabajo es “work”.La localización física de este repertorio debe serespecificada en la herramienta que se utilice.
Normalmente, las herramientas de diseño con VHDLdefinen y usan la librería “work” automáticamente.
Bibliotecas
40
• Para utilizar los componentes de una librería, ésta debe ser especificada como se muestra:
• “Work” y “Standard” (o STD) son librerías siempre visibes, es decir, no se requieren especificar dentro del código VHDL
• Todos los tipos de datos y funciones predefinidas en el estándar VHDL se localizan dentro del standard package que se localiza en la librería: std library
• Bit, bit vector, character, string, time, integer, …
library <library_name>;
use <library_name>.<package_name>.ALL;
library work;
Library std;
use std.standard.ALL;
No necesitan ser especificadas
Library
41
Otras librerías o empaquetados requieren ser
especificados al inicio del código 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 DescripciónALTERA maxplus2 primitivos y macros ALTERA
megacore megafunciones
LPM lpm_components megafonciones LPM
IEEE std_logic_1164 declaración de tipo STD_LOGIC
std_logic_unsigned aritmética con vectores sin signo
std_logic_signed aritmética con vectores con signo
std_logic_arith declaración de tipos UNSIGNED y SIGNED. Funciones aritméticas y de conversión
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 aritméticoslpm_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
Estándar industrial para los parámetros y E/S de funciones
lógicas
Código optimizado para las arquitecturas ALTERA
Xilinx tiene su propia biblioteca LPM
VHDL para circuitos digitales
44
salidas
Combinatorio :
Secuencial :
lógicaentradas
Estado_flógica
entradas D
CLK
estado
Resultado para lógica secuencial
Lógica combinatoria
Con la ayuda de una instrucción concurrente de
afectación. (vistos previamente)
Con la ayuda de un proceso (process)
Con la ayuda de instanciación de componentes (código
estructural o jerárquico)
45
Hay varios estilos de codificación:
Proceso (Process)
Un proceso es una “subrutina” dentro de la arquitectura que solo se efectúa (activa) cuando algunas de las señales internas a éste cambian de estado.
Sintaxis:process (lista de sensibilidad)
begin
instrucciones combinatorias o
secuenciales
end process;
46
Código dentro de un proceso
IF ... THEN
47
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 función
La afectación de S depende de las condiciones del
IF y ELSIF
sel
mux
a
b
c
s
Código dentro de un proceso
CASE …WHEN
48
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;
end process;
La expresión que sigue al CASE se evalua y
permite la afectación condicional de la señal s :
Note : Este código permite
construir facilmente un
multiplexor
sel
mux
a
b
c
s
Precauciones para procesos combinatorios
49
Conclusión : Nunca olvidar una señal de entrada a un proceso en la lista de
sensibilidad
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;
A
B
C
SEL
S
Que pasaría si c se omite de la lista de
de sensibilidad ?
1
Síntesis de un « latch »:
50
PROCESS(A,B)
BEGIN
IF A = '1' THEN
Q <= B;
-- ELSE
-- Q <= ‘ 0 ’;
END IF;
END PROCESS;
A
B
Q
Con ELSE : síntesis de una AND
Sin ELSE : síntesis de un LATCH
Cuando las condiciones no son muy precisas en las instrucciones
condicionales => memorisación se traduce como una síntesis en
flip-flops tipo "latch".
Nota : Un Flip-Flop D es preferible a un LATCH
B
A
D
E
Operaciones aritméticas
Por default sobre los tipos INTEGER
Sobre tipos STD_LOGIC, UNSIGNED,
STD_LOGIC_VECTOR y SIGNED utilizar la
biblioteca IEEE1164 con las sublibrerías:
51
std_logic_1164 Declaración de tipos STD_LOGIC y STD_LOGIC_VECTOR
std_logic_unsigned Aritmética de tipos STD_LOGIC_VECTOR sin signo
std_logic_signed Aritmética de tipos STD_LOGIC_VECTOR con signo
std_logic_arith Declaración de UNSIGNED y SIGNED.Funciones aritméticas y de conversión
Operaciones posibles : + , - , *La síntesis llama automáticamente a las macrofunciones LPM
Lógica Síncrona
52
Una sola solución : uso de un process síncronocon un solo reloj en la lista de sensibilidad
Estado_flógicaEntradas D
CLK
estado
Proceso síncrono
Estado_fLógicaentradas D
CLK
estado
Proceso síncrono= registro
Codigo de la
lógica
Por separado
ó
Lógica Síncrona
Los circuitos secuenciales siempre van acompañados 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 síncrono elemental
síntesis de un Flip-Flop D
54
PROCESS(CLK)
BEGIN
IF CLK’event and CLK = '1' THEN
Q <= D;
END IF;
END PROCESS;
CLK
D
Q
D QD
CLK
Q
Reloj únicamente Indicación del flanco de subida
Note : es mejor añadir el atributo ‘event
Aún cuando no sea muy útil
Flip-Flop D con RESET síncrono
55
PROCESS (CLK)
BEGIN
IF (CLK’event and CLK = '1')
THEN
IF N_RST = ‘0’ THEN
Q <= ‘0’;
ELSE
Q<= D;
END IF;
END IF;
END PROCESS;
D Q
CLK
QN_RST
D
CLK
N_RS
T
D
Q
Flip-Flop D con RESET asíncrono
56
PROCESS (CLK, N_RST)
BEGIN
IF N_RST = ‘0’ THEN
Q <= ‘0’;
ELSIF (CLK’event and CLK = ‘1’) THEN
Q<= D;
END IF;
END PROCESS;
CLK
N_RST
D
Q
Que pasaría si no hay clk´event ?
Añadir la señal de reset asíncrono
dentro de la lista de sensibilidad
D Q
CLK
Q
N_RST
D
La condición sobre el reset es prioritaria
Flip-Flop D con “enable”
57
PROCESS (CLK)
BEGIN
IF EN= ‘0’ THEN
NULL; -- Q <= Q;
ELSIF CLK’event and CLK = ‘1’ THEN
Q<= D;
END IF;
END PROCESS;
D
ENA
Q
CLK
QD
La condición sobre el “enable” tiene prioridad
EN
Físicamente, la señan de “enable” equivale a un FF cuya
entrada está controlada por un MUX
Ejemplo de lógica síncrona:
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 <= D;
ELSE
CPT <= CPT + '1';
END IF;
END IF;
END PROCESS;
S <= CPT;
END ex;
Estado_F D
CLK
Estado+1S
La lógica combinatoria
se codifica dentro del proceso
Síncrono usando CPT<= CPT+1
El número de F-F D generado
= dimensión de CPT
El empaquetado
ieee.std_logic_unsigned debe ser
declarado para aritmética de
números sin signo
Ejemplo de un FlipFlop JK
59
PROCESS(CLK, RST)
BEGIN
IF RST = ‘0’ THEN
Q <= ‘0’;
ELSIF CLK’event and CLK = '1' THEN
Q <= (J and not(Q)) or (not(K) and Q);
END IF;
END PROCESS;
Q_N <= not (Q);
J QJ
CLK
K
Q
K Q_NQ_N
Máquina de estados
60
Máquina de MOORE :
D
Entradas estado
CLK
Estado_F
Salidas
Proceso combinatorio : P2Proceso combinatorio : P3
Proceso síncrono : P1Ejemplo de código :
Máquina de estados
61
ARCHITECTURE Ejemplo OF maquina_de_cafe IS
type ST is (elección,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;
Creación de un tipo que
engloba la lista de estados
Ejemplo de máquina 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 máquina de estados
63
type ST is (S0,S1,S2,S3);
signal estado,estado_f : ST;
P1: process(CLK)
begin
if(CLK='1') then
estado <= estado_f;
end if;
end process P1;
P2: process(estado)
begin
if(estado=S1) then
MON <= '1';
else
MON <='0';
end if;
if(estado=S3) then
DES<= '1';
else
DES<='0';
end if;
end process P2;
bas
MON
DES
alto
m d
S1
S3
S0
S2
m='1'
d='1'
alto='1'bajo='1'
MON='1'
DES='1'
P3: process(estadot,m,d,alto,bajo)
begin
case estado is
when S0 =>if (m='1') then
estado_f<=S1;
else estado_f<=estado;
end if;
when S1 => if (alto='1') then
estado_f<=S2;
else
estado_f<=estado;
end if;
when S2 => if (d='1') then
estado_f<=S3;
else
estado_f<=estado;
end if;
when S3 => if (bajo='1') then
estado_f<=S0;
else
estado_f<=estado;
end if;
end case;
end process P3;
Bibliografía 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