Digital Design with Programmable Logic Devices

Anuncio
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:
VDD
R1
4k
R4
1.6k
INT1
A
Q1
PN2222
V
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
B
OUT
V
V1 = 5V
V2 = 0V
TD = 0.1u
TR = 0.15u
TF = 0.15u
PW = 13u
PER = 26u
V3
Q1_bis
PN2222
INT2
V
Q4
PN2222
R2
1k
2
1
C1
0.1n
GND
0
 Solución: Hardware Description Languages (HDLs)
3
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
6
ASIC Libraries).
¿Para qué sirven los HDL?
A
1 si A = 0 Z
0 si A = 1
Modelización
A
A
Z
Z
Simulación
Síntesis lógica
7
HDLs: Características
 Inspirado en lenguajes de programación de alto
nivel como C, o C++ (Software) para modelar y
describir funciones que serán implementadas
físicamente (Hardware)
 Existen 2 aspectos importantes en la descripción
de Hardware que se facilitan con el uso de
HDLs:
 Modelado del comportamiento abstracto del circuito
 Modelado estructural a nivel físico
8
HDLs: Niveles de abstracción
 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
9
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.
registros
S=fft(e,64)
Nivel 1
radix1
radix2
biblioteca
radix3
Nivel 2
Nivel RTL
Síntesis
lógica
netlist
13
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
 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.
E
A
P
B
C
Compilador
Librería
Editor de
Conexiones
elaboración
16
VHDL: Unidades de diseño y síntesis
 Entity: Descripción de la interfaz con el mundo exterior. Aquí se
definen las terminales que permiten a una unidad de diseño
comunicarse con otras, engloba a a las terminales de Entrada,
Salida, y Bidireccionales definidas en la declaración de “puertos”, y
cualquier 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 en
cualquiera de los niveles de abstracción (comportamenta, RTL o
nivel de compuertas lógicas).
Entidad del Circuito
Arquitectura
17
VHDL: Unidades de diseño y síntesis
 Package declaration: Archivo que concentra las declaraciones
recurrentemente utilizadas dentro de una serie de diseños (tipos de
datos, sub-programas, sub-rutinas) que serán accesibles a múltiples
unidades de diseño.
 Package body: Contiene la definición 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 diseño. 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 código en VHDL
Definición de Librerías
Declaración de la Entidad
Definición 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 código en VHDL:
architecture NAME_OF_ARC of NAME_OF_ENT is
Arquitectura
signal SIG_A, SIG_B : type of signal;
Configuración
Declaraciones :
signals
constants
variables
components
types
Proceso
(instrucción
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 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:
A
procesos
combin.
CLK
Proceso
síncrono
señales
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
E
Operador “señal”
 A, B , C, D : señales
 Señal : tipo correspondiente a
las señales en sistemas físicos
(cables)
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.
22
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
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 señal 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 instantáneamente.
La señal se actualiza al final del proceso
24
Procesos (Process)
 Un proceso es una instrucción concurrente definida
con la ayuda de instrucciones secuenciales internas al
proceso.
 El proceso se activa si al menos una de las señales de
la lista de sensibilidad cambia de estado lógico.
Ejemplo :
P1 : process(X,Y)
begin
if X=‘ 1 ’ then
Z <= Y;
else
Z <= ‘ 0 ’;
end if;
end process P1;
Lista de sensibilidad
X
Z
Y
25
Objetos:
Signal
Port
function
constant
variable
procedure
component
 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
26
Tipología
 Las señales, 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
Instrucción de afectación. Combinatorios
Para el siguiente circuito :
sel
a
mux
s
b
c
Una instrucción de afectación permite codificar directamente la
ecuación lógica :
S <= c and ((a and not(sel)) or (b and sel));
28
Instrucción de afectación condicional
WHEN...ELSE
La afectación de la señal 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
s
b
c
29
Instrucción de afectación condicional
WITH ... SELECT
La expresión que sigue al WITH se evalúa y permite la afectación
condicional de la señal 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
s
c
Nota : esta instrucción permite codificar fácilmente 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 diseñados (FA´s, MUX´s, …),
podemos utilizarlos para el diseño de otros
sistemas que necesiten estos componentes ya
diseñados.
 Se habla de “instanciamiento” de componentes:
crear “copias” de un componente para
implementar un sistema más 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;
Señales vectoriales A, B y S
formadas por 4 bits
S
Co
4
4
Adder4
4
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
--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) );
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 construcción 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
 Lógicos
 Relacionales
 Aditivos
 De signo
and, or, nand, nor, xor
=, /=, <, <=, >, >=
+, & (concatenación)
+, -
 Multiplicativos
 Diversos
** (exponente)
abs (valor absoluto)
not (negació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)
Nota: Cualquier operador que implique un operador aritmético requerirá de
la librería correspondiente.
38
Bibliotecas y Librerías
 En VHDL es posible utilizar componentes, funciones y
procesos descritos previamente por otros diseñadores o
por 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 fin
de utilizar sus componentes en un nuevo diseño.
 Los componentes se sintetizan dentro de la librería de
trabajo
 El nombre lógico para una librería de trabajo es “work”.
La localización física de este repertorio debe ser
especificada en la herramienta que se utilice.
 Normalmente, las herramientas de diseño con VHDL
definen y usan la librería “work” automáticamente.
39
Bibliotecas
• Para utilizar los componentes de una librería, ésta debe ser
especificada como se muestra:
library <library_name>;
use <library_name>.<package_name>.ALL;
• “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 work;
Library std;
use std.standard.ALL;
No necesitan ser
especificadas
40
Library
 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
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
Descripción
LPM
lpm_components
megafonciones LPM
IEEE
std_logic_1164
std_logic_unsigned
std_logic_signed
std_logic_arith
declaración de tipo STD_LOGIC
aritmética con vectores sin signo
aritmética con vectores con signo
declaración de tipos UNSIGNED y
SIGNED. Funciones aritméticas y
de conversión
primitivos y macros ALTERA
megafunciones
Bibliotecas de ALTERA :
42
Biblioteca LPM de ALTERA
 Estándar industrial para los parámetros y E/S de funciones
lógicas
 Código 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 aritméticos
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
lógica
salidas
Resultado para lógica secuencial
Secuencial :
entradas
lógica
Estado_f
D
estado
CLK
44
Lógica combinatoria
Hay varios estilos de codificación:
 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
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
La afectación 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 función
sel
a
mux
s
b
c
47
Código dentro de un proceso
CASE …WHEN
La expresión que sigue al CASE se evalua y
permite la afectación condicional de la señal 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
s
c
Note : Este código 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 pasaría si c se omite de la lista de
de sensibilidad ?
A
B
C
SEL
1
S
Conclusión : Nunca olvidar una señal de entrada a un proceso en la lista de
sensibilidad
49
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".
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
B
D
A
Q
Q
E
Nota : Un Flip-Flop D es preferible a un LATCH
50
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:
std_logic_1164
std_logic_unsigned
std_logic_signed
std_logic_arith
Declaración de tipos STD_LOGIC y STD_LOGIC_VECTOR
Aritmética de tipos STD_LOGIC_VECTOR sin signo
Aritmética de tipos STD_LOGIC_VECTOR con signo
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
51
Lógica Síncrona
Una sola solución : uso de un process síncrono
con un solo reloj en la lista de sensibilidad
Proceso síncrono
Entradas
lógica
Estado_f D
estado
ó
CLK
Codigo de la
lógica
Por separado
Proceso síncrono
entradas
Lógica
= registro
Estado_f D
estado
CLK
52
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
procedure
53
Proceso síncrono elemental
síntesis de un Flip-Flop D
Reloj únicamente
Indicación del flanco de subida
PROCESS(CLK)
BEGIN
IF CLK’event and CLK = '1' THEN
Q <= D;
END IF;
END PROCESS;
Note : es mejor añadir el atributo ‘event
Aún cuando no sea muy útil
CLK
D
Q
D
D
Q
Q
CLK
54
Flip-Flop D con RESET síncrono
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;
CLK
N_RS
T
D
Q
N_RST
D
D
Q
Q
CLK
55
Flip-Flop D con RESET asíncrono
Añadir la señal de reset asíncrono
dentro de la lista de sensibilidad
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;
La condición sobre el reset es prioritaria
CLK
N_RST
D
Q
D
D
Q
Q
CLK
Que pasaría si no hay clk´event ?
N_RST
56
Flip-Flop D con “enable”
La condición sobre el “enable” tiene prioridad
PROCESS (CLK)
BEGIN
IF EN= ‘0’ THEN
NULL; -- Q <= Q;
ELSIF CLK’event and CLK = ‘1’ THEN
Q<= D;
END IF;
END PROCESS;
D
EN
CLK
D Q
ENA
Q
Físicamente, la señan de “enable” equivale a un FF cuya
entrada está controlada por un MUX
57
Ejemplo de lógica síncrona:
el contador
La lógica combinatoria
ARCHITECTURE ex OF compteur IS
SIGNAL CPT : STD_LOGIC_VECTOR(7 downto 0); se codifica dentro del proceso
BEGIN
Síncrono 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 número de F-F D generado
declarado para aritmética de
números sin signo
= dimensión de CPT
+
58
Ejemplo de un FlipFlop JK
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
J
Q
Q
CLK
K Q_N
Q_N
K
59
Máquina de estados
Máquina de MOORE :
Entradas
Estado_F
estado
Salidas
D
CLK
Ejemplo de código :
Proceso combinatorio : P3
Proceso síncrono : P1
Proceso combinatorio : P2
60
Máquina de estados
Creación de un tipo que
engloba la lista de estados
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;
61
Ejemplo de máquina de estados
m='1'
MON
DES
S0
S1
alto='1'
bajo='1'
alto
m
d
DES='1'
S3
MON='1'
d='1'
S2
bas
62
Ejemplo de máquina 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;
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
Descargar