Está en la página 1de 72

Introducción

a VHDL
II. 2005 Johannes Plett
v1.2
Contenidos 1/2
Introducción
Características fundamentales
Descripciones de diseño
ENTITY
PORTS
Tipos de datos
ARCHITECTURE
Operadores
Semántica
Lógica Concurrente
2
Contenidos 2/2
Lógica Secuencial
Registros
Clock Gating
Data Gating
Memoria Implícita
Máquinas de estados finitos
Paquetes
XILINX ISE
Model Sim
XILINX iMPACT
3
Introducción
VHDL = Very High Speed Integrated Circuit
Hardware Description Language
Lenguaje de descripción de Hardware
Usado en ASIC, CPLD, FPGA, etc.
Combina:
„ Documentación
„ Simulación
„ Síntesis
Modelamiento según:
„ Comportamiento (Behavioural)
„ Estructura (Structural)
4
Características fundamentales
No hay diferencia entre mayúscula y
minúscula (case sensitivity):
VARIABLE = VaRiAbLe

Espacios blancos no influyen:


d1 <= a1 AND b1;
Es equivalente a
d1 <= a1 AND b1;

5
Características fundamentales
Comentarios se diferencian mediante dos
guiones:
-- Este es un comentario
d1 <= a1 AND b1; -- Suma simple

Identificadores pueden contener letras (A-Z,


a-z), dígitos (0-9) y el underscore (_). Deben
empezar con una letra, no terminar con _ y
no deben ser igual a una palabra reservada.
6
Descripciones de diseño
Par declaración ENTITY y cuerpo
ARCHITECTURE

„ ENTITY describe el diseño de entrada y


salida

„ ARCHITECTURE describe el contenido


funcional del diseño
7
ENTITY
Ejemplo de una caja negra:

CAJA_NEGRA

rst
q[7:0]
d[7:0]

clk co

8
ENTITY

ENTITY caja_negra IS PORT(


clk,rst:IN std_logic;
d: IN std_logic_vector(7 DOWNTO 0);
q: OUT std_logic_vector(7 DOWNTO 0);
co: OUT std_logic);
END caja_negra;

¡Nótese el último paréntesis!


9
PORTS

Puntos de comunicación
Tienen asociados un pin de I/O
Clase especial de SIGNAL
Tienen asociados un nombre, modo y tipo
de SIGNAL

10
Modos de PORT
Modos de PORT
„ IN Datos entran, pero no salen
„ OUT Datos salen y no son usados
internamente
„ INOUT Datos son bidireccionales
„ BUFFER Datos salen y son realimentados
hacia el sistema

11
Tipos de datos IEEE 1067
VHDL es “Strongly Typed”, o sea no se
pueden asignar valores de una señal de
un tipo a una señal de otro tipo

BIT: Una señal que puede


tomar los valores ‘0’ o
‘1’
BIT_VECTOR: Agrupación de BITs

12
Tipos de datos IEEE 1067
SIGNAL a: BIT_VECTOR(0 TO 3);
a <= “0111”; --cremillas para
--vectores

Esto significa que a(0)=‘0’


a(1)=‘1’
a(2)=‘1’
a(3)=‘1’
13
Tipos de datos IEEE 1067
SIGNAL a: BIT_VECTOR(0 DOWNTO 3);
a <= “0111”; --cremillas para
--vectores

Esto significa que a(0)=‘1’


a(1)=‘1’
a(2)=‘1’
a(3)=‘0’
14
Tipos de datos IEEE 1067
INTEGER: A veces usado para
índices de loops,
constantes, etc.
BOOLEAN: Pueden tomar los
valores ‘true’ o ‘false’
ENUMERATED: Definido por usuario,
p.ej.:
TYPE estado IS (start, lento, rapido, stop);

15
Tipos de datos IEEE 1164

std_ulogic
std_ulogic_vector
std_logic
std_logic_vector

16
std_logic TYPE
‘0’ -- Forzando ‘0’
‘1’ -- Forzando ‘1’
‘Z’ -- Alta Impedancia
‘L’ -- ‘0’ débil
‘H’ -- ‘1’ débil
‘- ’ -- Don’t care

Con esto ahora queda lo siguiente:

17
Declaración ENTITY

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY caja_negra IS PORT(
clk,rst:IN std_logic;
d: IN std_logic_vector(7 DOWNTO 0);
q: OUT std_logic_vector(7 DOWNTO 0);
co: OUT std_logic);
END caja_negra;
Modo Tipo

18
ARCHITECTURE
Descrpición de que hay dentro de la caja
negra
Behavioural (Comportamiento)
„ Abstracto (Alto nivel)
IF a = b THEN state <= state5;
„ Ecuaciones Booleanas
x <= (a OR b) AND c;
Structural (Estructura)
„ Uso de bloques (componentes) ya hechos
19
Declaración de ARCHITECTURE
ARCHITECTURE arch_name OF ent_name IS
-- Definición opcional de señales
BEGIN

… código

END arch_name

20
Par Entity/Architecture
ENTITY logic IS PORT( logic

a,b,c: IN std_logic; a d
b
f: OUT std_logic); c g1 f
END logic;

USE WORK.gatespg.ALL;
ARCHITECTURE archlogic OF logic IS
SIGNAL d: std_logic;
BEGIN Behavioural
d <= a AND b;
Structural
g1: nor2 PORT MAP (c, d, f);
END archlogic;
21
Operadores
Lógicos:
„ AND, NAND, OR, NOR, XOR, XNOR, NOT
Relacionales:
„ = (igual), /= (no igual), < (menor que),
„ <= (menor igual), > (mayor), >= (mayor igual)
Aritméticos
„ + (más), - (menos)
Aritméticos Unarios
„ - (negación aritmética)
22
Operadores
Concatenación
„ & (concatenar)
Operadores sobrecargados:
„ Se pueden extender (sobrecargar)
operadores para aceptar virtualmente
cualquier tipo señal. Así, el paquete
std_logic_1164 hace válido lo siguiente:
SIGNAL pc IS std_logic_vector(15 DOWNTO 0);
pc < pc + 3;

23
Semantica
Lógica Concurrente
„ Operaciones fuera de procesos se evalúan
simultáneamente -> No es un lenguaje como
C! Es una forma diseñar un circuito digital.

Lógica Secuencial
„ Operaciones dentro de un proceso se
procesan secuencialmente. Procesos se
evalúan simultáneamente.

24
Lógica Concurrente
1. Asignación simple
x <= a XOR b;
Para SIGNALS (y con ello PORTS) se
tiene que <= es el operador, el lado
izquierdo el destino y el lado derecho la
fuente. Ojo: Destino y fuente deben ser
del mismo tipo. Para VARIABLES se
tiene que el operador es :=
¡Ojo, que son
var := c AND d; secuenciales!
25
Lógica Concurrente
2. Asignación condicional
z WHEN/ELSE

a <= b AND c WHEN c=‘1’ ELSE b OR d;

b a

c
c

26
Lógica Concurrente
WITH/SELECT

WITH sel SELECT A


B
z <= A when “00”, C
Z

D
B when “01”,
C when “10”, sel[1:0]

D when others;

27
Lógica Concurrente
3. Asignación por Instancias

inst: nand2 PORT MAP (h, g, f);

28
Lógica Secuencial
PROCESS

nombre: PROCESS (sensitivity list)


--Declaración de variables
BEGIN
… código
END PROCESS nombre;

29
Lógica Secuencial
Proceso
„ Al inicializarse, todos los procesos son
ejecutados una vez. De ahí en adelante todo
depende de las señales.
Sensitivity List
„ Un proceso es invocado cuando uno o más
señales dentro de su sensitivity list cambian
de estado.
„ Un proceso sin sensitivity list es válido, pero
se activa con cualquier evento.
„ El orden en la lista obviamente no importa.
30
Lógica Secuencial
Ejemplo:

ARCHITECTURE arch_ej OF ej IS
BEGIN
nand: PROCESS (a,b)
BEGIN
c <= NOT (a AND b);
END PROCESS nand;
END archlist;
31
Lógica Secuencial
Control de flujo
IF <condición> THEN <acción> ELSE <acción> END IF;
FOR <rango> LOOP <acción> END LOOP;
WHILE <condición> LOOP <acción> END LOOP;
CASE <condición> IS WHEN <valor> => <acción>;
WHEN <valor> => <acción>;
WHEN others => <acción>;
END CASE;
WAIT ON <señal> UNTIL <expresión>;

32
Lógica Secuencial
Variables
„ Son usadas para almacenar valores
inmediatos dentro de un proceso.
„ Pueden existir solamente dentro de un
proceso, o sea no pueden comunicar
información entre procesos.
„ Pueden ser de cualquier tipo de SIGNAL.
„ Su valor asignado está disponible
inmediatamente.
„ Se asignan mediante :=, por ejemplo
c := a AND b;
33
Lógica Secuencial
IF:
PROCESS (a,b)
BEGIN
IF a = b THEN
result <= “00”;
ELSIF a < b THEN
result <= “01”;
ELSE
result <= “10”;
END IF;
END PROCESS;
34
Lógica Secuencial
CASE:
PROCESS (luz)
BEGIN
CASE luz IS
WHEN rojo =>
prox_luz <= verde;
WHEN amarilla =>
prox_luz <= rojo;
WHEN verde =>
prox_luz <= amarilla;
END CASE;
END PROCESS;
35
Lógica Secuencial
WAIT
„ El WAIT puede reemplazar la sensitivity list
de un proceso:

PROCESS
BEGIN
WAIT ON a, b;
suma <= a + b;
END PROCESS;

36
Registros
Con registro se refiere a un latch, flip-flop
o un banco de flip-flops.
Hay dos maneras de generar flip-flops:
„ Generar una instancia de un flip-flop
(Structural VHDL)
„ Usar un proceso sensible a un flanco de un
clock (Behavioural VHDL)
IF statement
WAIT statement

37
Structural Registers

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE WORK.lpmpkg.ALL;
ENTITY reg IS PORT (
d, clk: IN std_logic;
q: OUT std_logic);
END registered;
ARCHITECTURE arch_reg OF reg IS
BEGIN
flipflop: MFF generic map (lpm_width=>, lpm_fftyp=>lpm_dff)
PORT MAP (data=>d, clock=>clk, enable=>one, sste=>zero,
sclr=>zero, sload=>zero, testenab=>zero, testin=>zero);
END arch_reg;

38
Behavioural Registers
ENTITY reg IS PORT (
d, clk: IN std_logic;
q: OUT std_logic);
END reg;
ARCHITECTURE arch_reg OF reg IS
BEGIN
flipflop: PROCESS (clk)
BEGIN
IF clk’EVENT AND clk = ‘1’ THEN
q <= d;
END IF;
END PROCESS flipflop;
END arch_reg;
39
Behavioural Registers
ENTITY reg IS PORT (
d, clk: IN std_logic;
q: OUT std_logic);
END reg;
¡Esto es un
ARCHITECTURE arch_reg OF reg IS template para un
BEGIN registo!
flipflop: PROCESS (clk)
BEGIN
IF clk’EVENT AND clk = ‘1’ THEN
q <= d;
END IF;
END PROCESS flipflop;
END arch_reg;
40
Behavioural Registers
clk’EVENT AND clk = ‘1’ implican que las
acciones siguientes se ejecutan después
de un flanco de subida del clock.
clk’EVENT es básicamente redundante,
pero es exigido por el template del
sistema de síntesis.
La ausencia de un ELSE en el IF-THEN
implica que, si la condición no se cumple,
q retiene su valor actual (memoria
implícita).
41
Behavioural Registers
ENTITY reg IS PORT (
d, clk: IN std_logic;
q: OUT std_logic);
END reg;
ARCHITECTURE arch_reg OF reg IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL clk’EVENT AND clk = ‘1’;
q <= d;
END PROCESS;
END arch_reg;
42
Behavioural Registers
ENTITY reg IS PORT (
d, clk: IN std_logic;
q: OUT std_logic);
END reg;
ARCHITECTURE arch_reg OF reg IS
BEGIN Template para
un registro
PROCESS
BEGIN
WAIT UNTIL clk’EVENT AND clk = ‘1’;
q <= d;
END PROCESS;
END arch_reg;
43
Clock Gating
ARCHITECTURE behaviour OF d_type IS
SIGNAL clken: std_logic;
BEGIN
clken <= clk WHEN en = ‘1’;
PROCESS
BEGIN
WAIT UNTIL clk’EVENT AND clken = ‘1’;
q <= d;
END PROCESS; d q
en
END behaviour; clk

44
Data Gating
ARCHITECTURE behaviour OF d_type IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL clk’EVENT AND clk = ‘1’;
IF en = ‘1’ THEN
q <= d; en

END IF; d
q
END PROCESS
END behaviour; clk

45
Memoria Implícita
SIGNALS tienen un valor actual y pueden ser
asignados un valor futuro.
Si el valor futuro no puede ser determinado, un
registro es creado para preservar el valor actual.
Ventaja: Facilita la creación de memoria
Desventaja: Puede generar registros no
deseados.
Solución: Siempre definir todos los casos en
lógica condicional (IF, CASE, etc.) -> ELSE y
WHEN OTHERS.
46
Máquinas de estados finitos
Máquina de Moore
„ Salida depende del estado solamente
Máquina de Mealy
„ Salida depende del estado y la entrada.
Puede cambiar de manera asíncrona al
cambiar una de las entradas.
1 0
0 Máquina de
Moore
1 0 1
Start found1 found0 Detect
/0 /0 /0 /0

0 1
47
Máquinas de estados finitos
La implementación de máquinas de
estados finitos en VHDL es bastante fácil
y eficiente.
Por lo general se usa un bloque
secuencial y uno combinacional, de
manera de definir la salida en uno y el
próximo estado en otro.

48
Paquetes
Se pueden construir paquetes de diseños
para reutilizarlos.
VHDL es parecido a lenguajes orientados
a objetos.
Modelamiento estructural (Structural)

49
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux2to1 IS PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END mux2to1;

ARCHITECTURE arch_mux2to1 OF mux2to1 IS


BEGIN
c <= (a AND NOT sel) OR (b AND sel);
END arch_mux2to1;

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE mymuxpkg IS
COMPONENT mux2to1 PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END COMPONENT;
END mymuxpkg;
50
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux2to1 IS PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END mux2to1;

ARCHITECTURE arch_mux2to1 OF mux2to1 IS ¡Nótese el uso


BEGIN repetido de
c <= (a AND NOT sel) OR (b AND sel); LIBRARY y
END arch_mux2to1; USE!

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE mymuxpkg IS
COMPONENT mux2to1 PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END COMPONENT;
END mymuxpkg;
51
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux2to1 IS PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END mux2to1; Listas de
puertos
ARCHITECTURE arch_mux2to1 OF mux2to1 IS idénticas
BEGIN
c <= (a AND NOT sel) OR (b AND sel);
END arch_mux2to1;

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE mymuxpkg IS
COMPONENT mux2to1 PORT (
a, b, sel: IN std_logic;
c: OUT std_logic);
END COMPONENT;
END mymuxpkg;
52
Paquetes
El código del PACKAGE se guarda como
xxx.vhd en el directorio del projecto
En el top level code se incluye
USE WORK.mymuxpkg.ALL;
Se usa PORT MAP para asociar
SIGNALS con los I/O del COMPONENT
Nótese que PORT MAP es concurrente
La asignación puede ser explicita (por
nombre) o implícita (por orden)
53
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY toplevel IS PORT (
s: IN std_logic;
p, q, r: IN std_logic_vector(2 DOWNTO 0);
t: OUT std_logic_vector(2 DOWNTO 0));
END toplevel;
USE WORK.mymuxpkg.ALL;
ARCHITECTURE arch_toplevel OF toplevel IS
SIGNAL i: std_logic_vector(2 DOWNTO 0)
BEGIN
m0: mux2to1 PORT MAP (a=>i(2), b=>r(0), sel=>s, c=>t(0));
m1: mux2to1 PORT MAP (c=>t(1), b=>r(1), a=>i(1), sel=>s);
m2: mux2to1 PORT MAP (i(0), r(2), s, t(2));
END arch_toplevel;
54
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY toplevel IS PORT (
s: IN std_logic;
p, q, r: IN std_logic_vector(2 DOWNTO 0);
t: OUT std_logic_vector(2 DOWNTO 0));
END toplevel;
USE WORK.mymuxpkg.ALL;
ARCHITECTURE arch_toplevel OF toplevel IS Asociación
SIGNAL i: std_logic_vector(2 DOWNTO 0) por nombre
BEGIN
m0: mux2to1 PORT MAP (a=>i(2), b=>r(0), sel=>s, c=>t(0));
m1: mux2to1 PORT MAP (c=>t(1), b=>r(1), a=>i(1), sel=>s);
m2: mux2to1 PORT MAP (i(0), r(2), s, t(2));
END arch_toplevel;
Asociación por posición 55
Paquetes
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY toplevel IS PORT (
s: IN std_logic;
p, q, r: IN std_logic_vector(2 DOWNTO 0);
t: OUT std_logic_vector(2 DOWNTO 0));
END toplevel;
USE WORK.mymuxpkg.ALL; “=>” significa “conectado a”
ARCHITECTURE arch_toplevel OF toplevel IS
SIGNAL i: std_logic_vector(2 DOWNTO 0)
BEGIN
m0: mux2to1 PORT MAP (a=>i(2), b=>r(0), sel=>s, c=>t(0));
m1: mux2to1 PORT MAP (c=>t(1), b=>r(1), a=>i(1), sel=>s);
m2: mux2to1 PORT MAP (i(0), r(2), s, t(2));
END arch_toplevel;
56
XILINX ISE
File -> New Project

Ingresar nombre, ubicación y HDL como


Top Level Module Type

Ingresar las opciones siguientes:

57
Xilinx ISE

58
Xilinx ISE
Para agregar código VHDL: File Æ New
Escribir codigo y guardar como xxxx.vhd
Project Æ Add Source
Source Type es VHDL Design File
Doble click en Sythesize
Abrir Design Entry Utilities
Abrir Model Sim Simulator

59
Model Sim
En la ventana Objects se puede hacer click
con el botón derecho sobre una señal y con
Force… asignarle un valor.
Lo mismo se puede hacer con un clock
eligiendo Clock… en vez de Force…
En la ventana Wave se muestran las
diferentes señales, las cuales se pueden
simular paso a paso con el botón Run ( )

60
Model Sim

61
Model Sim

62
Xilinx iMPACT
Para programar el código en el chip (FPGA,
CPLD, ASIC, etc.) se usa el programa Xilinx
iMPACT
Xilinx iMPACT es un componente integrado en
el paquete Xilinx ISE Webpack
En la ventana principal de ISE hay que elegir
Configure Device (iMPACT) bajo Generate
Programming File en el menú Implement
Design.

63
Xilinx iMPACT

64
Xilinx iMPACT

65
Xilinx iMPACT

66
Xilinx iMPACT

67
Xilinx iMPACT

68
Xilinx iMPACT
Al hacer click con el botón derecho sobre el logo de Xilinx y seleccionar
Get Device ID aparece lo siguiente:

69
Xilinx iMPACT
Al hacer click con el botón derecho sobre el logo de Xilinx y seleccionar
Program aparece lo siguiente:

¡Es muy importante


seleccionar Erase
Before Programming
para no dañar el chip!

70
Referencias
“48451 Advanced Digital Systems Course Notes”,
Revision 2.1, K.K. Fung, UTS Sydney, Australia, 2004
“DSX Programming Manual”, B1 Series, Mark
Benjamin, UTS Sydney, Australia, 2004
Xilinx Inc. [http://www.xilinx.com]
“Plataforma de Desarrollo T.E.D.”, Johannes Plett,
PUC, 2005
[http://www.ing.puc.cl/~iee2782/PresentacionTED.pdf]
Página Web del curso
[http://www.ing.puc.cl/~iee2782/]

71
Preguntas?

72

También podría gustarte