Sunteți pe pagina 1din 37

INTRODUCCION

TEMA 2:
LENGUAJE VHDL

Breve historia

Caractersticas de VHDL

Introduccin

Codificacin orientada al hardware

Conceptos bsicos

Objetivos del tema

Organizacin del diseo

Descripcin de la arquitectura

Modelo de tiempos

Descripcin de circuitos digitales

Simulacin

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 1

Breve historia

Caractersticas de VHDL (1)

Qu significa VHDL?
VHDL = VHSIC Hardware
Description Language
VHSIC = Very High Speed Integrated
Circuits

Inicialmente, documentacin de diseos y


creacin de modelos de simulacin de
hardware para el DoD (1981).

Permite descripcin de hardware digital:


Puertas lgicas
Sistemas complejos (SPARC)

Universidad de Zaragoza, IEC.

Permite diseos modulares y jerrquicos.


Soporta distintas metodologas de diseo:
Arriba-abajo
Abajo-arriba
Mixto

Soporta varias tcnicas de modelado digital:


Descripcin algortmica
Ecuaciones booleanas
Mquinas de Estados Finitos (MEFs)

Soporta temporizacin:
Sncrona
Asncrona

Estndar IEEE Portabilidad


1987, se aprob el lenguaje estndar
IEEE 1076-1987
1992, cada 5 aos se revisa el proceso
de estandarizacin, IEEE 1076-1992

Es un lenguaje concurrente, aunque permite


definir dominios en los que las acciones se
suceden en orden secuencial

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 2

Codificacin orientada al
hardware

Caractersticas de VHDL (2)


t

Soporta tipos abstractos de datos.

Codificar pensando en puertas y FFs, no en


variables y funciones!!

Permite simular el diseo y generar formas


de onda
Entornos de test (test benchs).

Disear circuitos sncronos


Un nico reloj y flanco (si es posible).

Codificar en HDL no nos preserva de


problemas hardware: glitches, violacin de
restricciones temporales tsu, th.

Evitar:
Bucles combinacionales.
Buffers triestado.
Latches (usar slo FFs).
Set, Reset asncronos.
Relojes condicionales (Gated-clock).

Soporta distintos niveles de descripcin:


Comportamental
RTL
Lgico
A partir de un modelo en HDL se puede
sintetizar hardware a nivel de puertas con
herramientas especiales de sntesis
Independencia de la tecnologa.

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Comentar el cdigo fuente Reutilizacin

Lenguaje VHDL - 3

Objetivos del tema

CONCEPTOS BASICOS

Enmarcar los lenguajes de descripcin de


hardware dentro del proceso de sntesis
lgica

Objetos

Tipos

Presentar una introduccin a VHDL

Operadores

Reforzar la sintaxis y semntica de VHDL


con la presentacin de ejemplos

Conocer la sintaxis de VHDL, no implica


necesariamente saber disear hardware
con l
t

Introducir mediante ejemplos la influencia


del estilo de codificacin en el hardware
sintetizado

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 4

Objetos
t

Los objetos en VHDL contienen valores.

Clases de objetos:
Constant. Se les asigna un valor
inicial que no puede ser modificado.
Variable. Contiene un valor que
puede ser modificado.
Signal. Contiene una lista de valores
que incluye el valor actual y un
conjunto de posibles valores futuros.
File. Modelan ficheros en el entorno
del host. Se utilizan en test-benchs.

Estos objetos se crean mediante su


declaracin:

Tipos
t

Todos los objetos en VHDL son de algn


tipo. Es ilegal conectar seales que no son
del mismo tipo

Un tipo de datos se caracteriza por un


conjunto de valores que puede tener y un
conjunto de operaciones.
El tipo de cada objeto es esttico

Los tipos predefinidos en el lenguaje estn


declarados en el package STANDARD:
boolean, bit, bit_vector,
character, string, integer,
real, time, positive, natural.

El lenguaje permite crear nuevos tipos y


definir operaciones con esos tipos a travs
de funciones

Tipos de datos predefinidos:


- Scalar
- Composite
- Access
- File

variable R: natural := 0;
t

Declaraciones implcitas:
Puertos de una entidad
Indices de bucles

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 5

Tipos escalares
t

Composite
t

Existe una relacin de orden entre los


valores de los objetos de este tipo
INTEGER
constant MUX_ADDRESS: integer := 5;
-- Rango desde -(2**31) hasta (2**31-1)
-- Se puede especificar un rango menor
type INDEX is integer range 0 to 15;
constant MUX_ADDRESS: INDEX := 5;
type natural is integer range 0 to integer'high;
FLOATING POINT
variable F0 : real := 62.3E-2;
-- Se puede especificar un rango
type ANALOG_IN is real range 0.0 to 5.0;

Tipo matriz:
Una o ms dimensiones
Elementos del mismo tipo
Acceso indexado
1

0
1
2
3

t
ENUMERATION
-- Conjunto de valores definidos por el usuario
-- Hace ms legible el cdigo, se utiliza en la
-- definicin de mquinas de estado
type MICRO_OP is (LOAD, STORE, ADD, SUB);

Universidad de Zaragoza, IEC.

Campo2
Campo3
Campo4

Luis A. Barragn y Jos I. Artigas

type ADR_WORD is array (0 to 63) of BIT;


type DATA_WORD is array (7 downto 0) of BIT;
type ROM is array (0 to 125) of DATA_WORD;
-- arrays predefinidos: BIT_VECTOR
variable OP_CODE: BIT_VECTOR(1 to 5);
OP_CODE := "01001";
OP_CODE := ('0','1','0','0','1');
OP_CODE := (2=>'1', 5=>'1', others=>'0');

Tipo Registro:
Uno o ms campos
Campos de diferente tipo
Acceso por nombre

Campo1

FISICOS
-- Representan medidas de magnitudes fsicas
-- Existe un tipo TIME cuya unidad es fs
constant TH : time := 10 ns;

type OPCODE is (LD, ST, ADD, SUB);


type ADR is array (0 to 63) of BIT;
type INSTRUCTION is record
OPCODE_FIELD: OPCODE;
OPERAND1 : ADR;
OPERAND2 : ADR;
end record;

Lenguaje VHDL - 6

Tipos de datos
t

Operadores

Un SUBTIPO es un tipo con una restriccin.


Se especifica el tipo base y el rango de
restricciones
Se comprueba cada asignacin para
garantizar que el valor entra dentro del
rango del subtipo

type MATRIZ is
array(integer range<>, integer range <>) of integer;
subtype IMAGEN is MATRIZ (0 to 255, 0 to 255);
subtype POSITIVE is INTEGER range 1 to INTEGERHIGH
t

ALIAS. Define nombres alternativos para


partes de un objeto ya existente
signal SCON : bit_vector (7 downto 0);
alias RI : bit is SCON (0)
variable DATA_WORD : BIT_VECTOR (15 downto 0);
alias DATA_BUS : BIT_VECTOR (7 downto 0) is
DATA_WORD (15 downto 8);

Se definen sobre los tipos de datos


predefinidos, aunque se pueden sobrecargar.

package std_logic_arith
package std_logic_unsigned
package std_logic_signed

ARITMTICOS
+
*
/
mod
rem
**
abs
RELACIN
SIGN O

DESPL.
sll
srl
sla
sra
rol
ror

/=

Luis A. Barragn y Jos I. Artigas

>

<=

>=

CONCATENACIN

Universidad de Zaragoza, IEC.

<

LOGICOS
AND
OR
NAND
NOR
XOR
NOT

&

Lenguaje VHDL - 7

ORGANIZACIN DEL
DISEO

Entidad

Entidad:
Declaracin de la entidad.
Descripcin de la arquitectura.
Declaracin de la configuracin.

Entidad = Abstraccin Hardware de un


Sistema Digital

Las entidades pueden ser jerrquicas.


Una entidad E1 puede, a su vez, estar
constituida por otras entidades
Una entidad E2 se puede utilizar como
componente de otra entidad E1
Una entidad consta de:
Declaracin de la Entidad
Descripcin de la Arquitectura
Declaracin de la Configuracin

Empaquetamientos y libreras.

Entorno de trabajo con Synopsys.

E2
E1

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 8

Declaracin de la entidad

Modo de un puerto

Especifica el nombre de la entidad y el


interfaz con su entorno (los puertos)
Los puertos son seales; su
declaracin es implcita.

No especifica la estructura de la entidad.


Visin de caja negra (Encapsulado).

Design Entity

Entity Declaration

El Modo define la direccin del flujo de


datos visto desde la entidad. Pueden ser:
IN, slo pueden ser ledos
OUT, slo se les puede asignar valor
INOUT, BUFFER. se les puede leer y
asignar un valor desde dentro de la
entidad.

Architecture Body

IN

Config. Declaration

Universidad de Zaragoza, IEC.

Modos

INOUT

-- Declara el nombre de la entidad,


-- los puertos de entrada y salida, los
-- modos y los tipos de dichos puertos
ENTITY E1 IS
PORT (A, B, C, D : in BIT;
M, N, P, Q : out BIT );
END E1;
Nombres

OUT

Lectura de un INOUT, lee el


valor del flujo de datos
entrante

BUFFER
R/W

Lectura de un BUFFER,
como solo tiene una fuente,
lee el valor asignado

Tipos

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 9

Descripcin de la arquitectura
t

Declaracin de configuracin

Contiene la descripcin interna de la entidad.


Estilos de modelado:
Estructural: Conexin de componentes.
Comportamental:

Realiza la correspondencia entre:


Entidad/Arquitectura
Entidad/Componente

Algoritmo secuencial (Alto Nivel


Abstraccin)
Ecuaciones booleanas (Bajo Nivel
Abstraccin)

Una vez que la configuracin se ha


compilado, VHDL puede simular el
modelo global
Entity E1

Una entidad puede tener varias arquitecturas,


que representan diferentes implementaciones
de la misma.

component E2
...
end component

ARCHITECTURE mi_arq OF E1 IS

-- Declaracin de items que sern


-- utilizados dentro del cuerpo de
-- la arquitectura
-- Los nombres de los puertos y
-- genricos no requieren ser
-- declarados

Design Entity
Entity Declaration

...

I_1: E2
E1_A1

E1_A2

Entity E2

BEGIN
Architecture Body

Config. Declaration

-- Instrucciones Concurrentes
-- El orden textual no importa
-- ya que se ejecutan en paralelo
END mi_arq;

Universidad de Zaragoza, IEC.

-- Descripcin de entidad E1 en
-- fichero E1.vhd
configuration CFG_E1 of E1 is
for E1_A2
for I_1: E2
use configuration WORK.CFG_E2_A1;
end for;
end for;
end CFG_E1;

E2_A1

Luis A. Barragn y Jos I. Artigas

E2_A2

-- Descripcin de E2 entity en
-- fichero E2.vhd
configuration CFG_E2_A1 of E2 is
for E2_A1
end for;
end CFG_E2_A1

Lenguaje VHDL - 10

Entidad de diseo vs.


placa de circuito impreso
t

Declaracin de Entidad
Definir zcalos

Empaquetamientos y libreras (1)


t

Arquitectura
Soldar zcalos en la
placa y Rutear pistas
En un mismo zcalo se
pueden insertar distintos
C.I. compatibles
funcionalmente y pin a
pin segn: velocidad,
precio, consumo,...

Configuracin
Insertar en cada zcalo
un integrado

Universidad de Zaragoza, IEC.

Empaquetamientos:
Pueden contener declaraciones y
definiciones de objetos a usar en
diferentes diseos.
Constan de:
Declaracin: Componentes, constantes,
tipos, funciones y procedimientos.
Cuerpo: Cuerpos de las funciones y
procedimientos declarados.
package EX_PACK is
z
z --Declarations
z
end;

Luis A. Barragn y Jos I. Artigas

package body EX_PACK is


z
z --Body Declarations
z
end;

Libreras:
Los diseos, una vez compilados, se
almacenan en Libreras.
Una librera es un directorio. Los
diseos compilados son ficheros.

Lenguaje VHDL - 11

Empaquetamientos y libreras (2)


t

Entorno de trabajo con


Synopsys
odf.sym

Existen libreras predefinidas:


STD: Contiene los empaquetamientos

CLK
RST

STANDARD, define los tipos, subtipos y


funciones bsicas del lenguaje.
TEXTIO contiene declaraciones de tipos,
subtipos y programas para operaciones
ASCII.

Smbolo

ppp.sch

WORK: librera de trabajo

odf

Aqu se almacenan las entidades de diseo


del usuario

I_2

ctl

STD_LOGIC_1164
STD_LOGIC_ARITH

I_3

odf.vhd

Estas declaraciones pueden ser importadas


y utilizadas por otros diseos utilizando la
clausula USE.

library IEEE;
use IEEE.std_logic_1164.all

Entity Declaration

Ejemplo: Suponiendo que EX_PACK se


ha compilado en la librera DESIGN_LIB:
library DESIGN_LIB;
use DESIGN_LIB.EX_PACK.ALL;

Universidad de Zaragoza, IEC.

odf

I_1

Esquemtico

IEEE: Contiene empaquetamientos:

OUT_DATA(15:0)

IN_DATA(15:0)
DATA_RDY

VHDL

Architecture Body

Config. Declaration

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 12

DESCRIPCION DE LA
ARQUITECTURA

Arbol de directorios

Introduccin

Estilos de modelado

Sentencia PROCESS

Sentencias secuenciales
Sentencias de asignacin
Sentencia IF
Sentencia CASE
Sentencia LOOP

Sentencia COMPONENT

Ejemplo

VLSI1
home
synopsys
sd4
packages
usuario
IEEE
WORK
src

lib

std_logic_1164.vhd
std_logic_arith.vhd
...

Universidad de Zaragoza, IEC.

xxx.vhd
xxx.sym
xxx.sch

xxx.syn
xxx.sim
xxx.mra

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 13

Introduccin
t

Estilos de modelado (1)

La descripcin de una arquitectura se


compone de un conjunto de sentencias
concurrentes que se ejecutan de forma
asncrona entre s y se comunican mediante
seales

ARCHITECTURE name OF entity IS

-- Declaracin de items que sern utilizados


-- dentro del cuerpo de la arquitectura
BEGIN
Sentencias Concurrentes

El orden textual de las mismas no importa

Cdigo vs. estilo de modelado

La sentencia fundamental es el proceso que


define los lmites de un dominio secuencial

PROCESS

Comportamental

Secuencial

El resto de sentencias concurrentes son


formas particulares de procesos
Architecture

Statement A

Statement B

Signal Assignment
Process
Component
Block

Universidad de Zaragoza, IEC.

Statement C

Concurrente

COMPONENT instantation
t

Conjunto de procesos ejecutandose


asncronamente

Estructural

END name;
t

En la descripcin de una arquitectura dada


se pueden mezclar los dos estilos de
modelado

VHDL tiene un dominio secuencial en el


que opera un funcionamiento puramente
algortmico y un dominio concurrente en el
que evolucionan los procesos a ritmo de
eventos discretos

Procedure
Generate
Assert

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 14

Estilos de modelado (2)


Nombre y pines de la entidad

RS_Latch
Q

RESET

Ecuaciones Booleanas
Dominio Concurrente.

N_RESET

0
0 1

1
1

1 0

Descripcin comportamental
Algoritmo secuencial.

SET RESET
0
0
1
1

Descripcin comportamental

entity RS_Latch is
Port (N_SET : In BIT;
N_RESET: In BIT;
Q : Out BIT;
N_Q : Out BIT);
end RS_Latch;

SET

N_SET

Estilos de modelado (3)

0
1
0
1

1
1
0
Q

1
0
1
Q

Universidad de Zaragoza, IEC.

architecture SEQUENTIAL of RS_Latch is


begin
process (N_SET, N_RESET)
begin
if (N_SET='1' and N_RESET='0') then
Q <= '0' after 2 ns;
N_Q <= '1' after 2 ns;
elsif (N_SET='0' and N_RESET='1') then
Q <= '1' after 2 ns;
N_Q <= '0' after 2 ns;
elsif (N_SET='0' and N_RESET='0') then
Q <= '1' after 2 ns;
N_Q <= '1' after 2 ns;
end if;
end process;
end SEQUENTIAL;

Luis A. Barragn y Jos I. Artigas

architecture DATAFLOW of RS_Latch is


signal Qtmp, N_Qtmp: BIT;
begin
-- Q y N_Q son de modo OUT, no pueden ser ledos
-- no pueden aparecer en el lado derecho
-- de una sentencia de asignacin
-- Solucin definir seales temporales
Q <= Qtmp;
N_Q <=N_Qtmp;
Qtmp <= (not(N_SET)) or
(Qtmp and N_RESET) after 2 ns;
N_Qtmp <= (not(N_RESET)) or
(N_Qtmp and N_SET) after 2 ns;
end DATAFLOW;

Descripcin estructural
SET
U1

U2
RESET

architecture STRUCTURE of RS_Latch is


component NAND2
port ( A, B : in BIT;
C
: out BIT);
end component;
begin
U1: NAND2
PORT MAP(N_SET, N_Q, Q);
U2: NAND2
PORT MAP(N_RESET, Q, N_Q);
end STRUCTURE;

Lenguaje VHDL - 15

Sentencia PROCESS (1)

Sentencia PROCESS (2)

Un proceso es una sentencia concurrente

En el interior de un proceso las sentencias


se ejecutan en el orden secuencial marcado
por las sentencias de control de flujo de
programa tpicas de un lenguaje
imperativo. La ejecucin se hace en tiempo
cero.
Dominio Concurrente

Mecanismos para suspender un proceso:


Lista de sensibilidades
Sentencias WAIT

Es un error:
No utilizar ninguno de los dos
mecanismos en un proceso. El proceso
permanece en un bucle infinito
Utilizar lista de sensibilidades y
sentencias wait en el mismo proceso

Ejecucin temporal de un proceso con lista


de sensibilidades

process (sensitivity list);


Dominio secuencial

end process;
process (sensitivity list);
-- Declarations (var.)
begin
-- Sequential stmts
end process;
t

Un proceso puede
estar activo o en
suspenso. El proceso
se ejecuta hasta que
se suspende.

Universidad de Zaragoza, IEC.

process (A, B);


begin
Stmt_1;
z
Stmt_N;
end process;

Proceso
Activo

Activo
Eventos en
AoB
Suspenso

Suspenso

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 16

Sentencia PROCESS (3)


t

Sentencia PROCESS (4)

La sentencia WAIT, suspende el proceso:


Hasta que se cumple una condicin,
Ej: wait until A=B;
Hasta que se produce un evento en
seales, Ej: wait on A, B;
Durante un intervalo de tiempo,
Ej: wait for 10 ns;

Ejecucin temporal de un proceso con


sentencia WAIT:
process
begin
Stmt_1;
z
wait on A, B;
Stmt_I;
z
Stmt_N;
end process;

Universidad de Zaragoza, IEC.

Generacin de una seal de reloj


-- Mal Comportamental
-- Si no hay ni lista de sensibilidades ni sentencias wait
-- El proceso siempre est activo y permanece en un bucle
infinito
CLOCK: process
begin
if CLK = '1' then CLK <= '0' after 10 ns;
else CLK <= '1' after 15 ns;
end if;
end process;

Presencia de lista de sensibilidades en un


proceso wait on lista de sensibilidades

-- Comportamental1: Lista de sensibilidades


-- El proceso se suspende al ejecutar la ltima instruccin
-- Se reactiva cuando hay un evento en la seal CLK y
-- comienza la ejecucin a partir de la primera sentencia
CLOCK: process (CLK)
begin
if CLK = '1' then CLK <= '0' after 10 ns;
else CLK <= '1' after 15 ns;
end if;
end process;

Suspenso

-- Comportamental2: Sentencia wait


CLOCK: process begin
if CLK = '1' then
CLK <= '0' after 10 ns;
else CLK <= '1' after 15 ns;
end if;
wait on CLK;
end process;

Eventos en
AoB
Activo

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 17

Sentencias secuenciales
t

Sentencias de asignacin
t

Asignacin de seal:
Nombre_sig <= expresion;
Las seales a ambos lados del
operador de asignacin deben ser del
mismo tipo
Si hay varias asignaciones a la misma
seal dentro de un mismo proceso:
prevalece el valor de la ltima
Pueden aparecer en sentencias
secuenciales y concurrentes

Para consultas sobre la sintaxis:


Utilizar ayuda on-line iview &

Asignacin de variable:
Nombre_var := expresion;
Los objetos a ambos lados del
operador de asignacin deben ser del
mismo tipo
Mantienen su valor a lo largo del ciclo
de simulacin
Slo puede aparecer en el interior de
un proceso (dominio secuencial)

Sentencias de Flujo Control


IF
CASE
RETURN

LOOP
NEXT
EXIT

Sincronizacin
entre procesos
WAIT

Tipos de Sentencias Secuenciales

Subprogramas
PROCEDURE
FUNCTION

Universidad de Zaragoza, IEC.

Asignacin de Seales
Asignacin de Variables
Assertion

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 18

Sentencia IF
t

Sentencia CASE

Sentencia IF:
Cada una de las condiciones debe ser
booleana
Si una condicin es evaluada como
verdadera, el resto de las expresiones
no son evaluadas

when others

PROCESS
BEGIN
if S1='0' and S0='0' then
Z <= IN0 after 5 ns;
elsif S1='0' and S0='1' then
Z <= IN1 after 5 ns;
elsif S1='1' and S0='0' then
Z <= IN2 after 5 ns;
else Z <= IN3 after 5 ns;
end if;
wait on IN0,IN1,IN2,IN3, S1,S0;
END PROCESS

PROCESS (IN0, IN1,IN2,IN3,S1,S0)


subtype two_bits is BIT_VECTOR(1 downto 0);
BEGIN
case two_bits'(S1&S0) is
when "00" =>
IN0
Z <= IN0 after 5ns;
when "01" =>
IN1
Z <= IN1 after 5ns;
Z
MUX
when "10" =>
IN2
Z <= IN2 after 5ns;
IN3
when others =>
Z <= IN3 after 5ns;
S0 S1
end case;
END PROCESS;

IN0
IN1

MUX

Sentencia CASE
Se escoge una y slo una de las
alternativas
Cuando no se cubren todas las
alternativas es necesario la inclusin
como ltima alternativa de :

IN2
IN3
S0 S1

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 19

Sentencia LOOP (1)


t

Sentencia LOOP (2)

Sentencia LOOP:
La forma con while primero evalua la
condicin y si sta es verdadera se
ejecuta el contenido del bucle.
La forma con for especifica un
nmero de iteraciones. La declaracin
de la variable de iteracin es implcita.
No se le puede asignar valores dentro
del bucle y no existe fuera de l.
Dentro de un bucle se pueden utilizar las
sentencias: NEXT y EXIT.
L1:
L2:

while A < 10 loop


for I in 0 to 10;
-- Sentencias
next L2 when I = A;
-- exit L2 when I = A;
-- Sentencias
end loop L2;
-- Sentencias
end L1;

Universidad de Zaragoza, IEC.

---------- COMPARADOR DE 4 BITS ---------entity COMP4 is


PORT(A, B: in BIT_VECTOR(3 downto 0);
AEQB, AGTB, ALTB: out BIT);
end COMP4;
architecture LOOP_BEH of COMP4 is
begin
process(A,B)
variable var_EQ : bit := '0';
variable var_LT : bit := '0';
variable var_GT : bit := '0';
begin
L1: for I in 3 downto 0 loop
if(A(I)=B(I)) then
var_EQ := '1';
else
var_EQ := '0';
if (A(I) = '1') then var_GT := '1';
else var_LT := '1';
end if;
exit L1;
end if;
end loop L1;
AEQB <= var_EQ;
AGTB <= var_GT;
ALTB <= var_LT;
end process;
end LOOP_BEH;

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 20

Sentencia COMPONENT
t

Ejemplo (1)

Se utiliza para modelar una entidad como


un conjunto de componentes conectados
por seales

clock
CLK
I_1

Sentencia concurrente: el orden textual no


importa
Un componente se puede instanciar un
nmero arbitrario de veces. Cada instancia
debe tener una etiqueta nica

COUNT

RST
reset
RST
I_2

architecture STRUCT_A of GATING is


-- Declaracin de componentes
component AND2
port (X, Y: in BIT; Z : out BIT);
end component;
component NAND2
port(A, B:in BIT;
MR
C:out BIT);
RDY
Q
end component;
S1
D
A
component DFF
QN S2
port(D, CLK:in BIT;
CLK
Q, NQ:out BIT);
CTL
CK
end component;
DIN
signal S1, S2 : BIT;
begin
-- Instanciacin de componentes. Asocia
-- Asocia las seales de la entidad con los
-- puertos de los componentes
I_1: DFF port map (A, CK, S1, S2);
I_2: AND2 port map(S2, DIN, CTL);
I_3: NAND2 port map (C=>RDY, A=>S1, B=>MR);
end STRUCT_A;

Universidad de Zaragoza, IEC.

3bit_counter
CLK

Luis A. Barragn y Jos I. Artigas

I_3

entity reset is
PORT(RST: out bit);
end reset;
reset
RST

architecture rst_beh of reset is


begin
-- Forma de onda NO repetitiva
RST <= '0', '1' after 100 ns;
end rst_beh;
entity clock is
PORT(CLK: out bit);
end clock;

clock
CLK

architecture clk_beh of clock is


constant TCLK: time := 20 ns;
begin -- Forma de onda repetitiva
process begin
CLK <= '0', '1' after TCLK/2;
wait for TCLK;
end process;
end clk_beh;

Lenguaje VHDL - 21

Ejemplo (2)

MODELO DE TIEMPOS

entity 3bit_counter is
PORT(CLK,RST: in bit;
COUNT: out integer range 0 to 7);
end 3bit_counter;

t
t

Tiempo de simulacin es 2_D

Seales vs. variables

Asignacin concurrente de seales

Driver

architecture behavioral of 3bit_counter is


signal NEXT_COUNT: integer range 0 to 7;
signal COUNT_tmp : integer range 0 to 7;
begin

Ciclo de simulacin

Mltiples drivers

COUNT <= COUNT_tmp;


process begin
wait until CLK='1';
COUNT_tmp <= NEXT_COUNT;
end process;
3bit_counter
CLK
process(COUNT_tmp, RST)
RST
begin
if (COUNT_tmp = 7) then
NEXT_COUNT <= 0;
else
NEXT_COUNT <= COUNT_tmp + 1;
end if;
if(RST = 0) then
NEXT_COUNT <= 0;
end if;
end process;
end behavioral;

Universidad de Zaragoza, IEC.

COUNT

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 22

Ciclo de simulacin
t

Tiempo de simulacin es 2_D

La simulacin
Comienza con las asignaciones de seal
y todos los procesos suspendidos
Los procesos reaccionan ante eventos en
ciertas seales
Finaliza cuando no hay procesos activos
ni asignaciones de seal que hacer en
dicho tiempo T
Current
T
Simulation Time

2nd Half
AWAKE
PROCESS

Existe al menos un retraso delta desde


que se asigna un nuevo valor a una seal
hasta que sta adquiere dicho valor

2
1

B <= '1' after 20ns;


D <= C;
C <= B;
E <= D;
F <= E after 20ns;

*D
*C

Durante el ciclo de simulacin el tiempo


fsico no avanza

Universidad de Zaragoza, IEC.

-- Sea un conjunto de asignaciones


-- concurrentes de seales cuyos
-- valores iniciales son '0'

Next
Simulation Time
3

1st Half
UPDATE
SIGNALS

Retraso delta
No se corresponde con ningn retraso
real. El tiempo fsico de simulacin no
avanza.
Permite ordenar eventos que ocurren
en el mismo tiempo de simulacin
La ordenacin es causal

*
20 ns

*
40 ns

-- Una asignacin concurrente se


-- ejecuta siempre que ocurre un
-- evento en una seal que aparece
-- en su lado derecho

* X, seal X es actualizada

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 23

Seales vs. variables (1)


t

Aunque ambas sintetizan en los mismos


elementos: cables o FFs, su semntica es
totalmente distinta.
La asignacin de un nuevo valor a una
variable es instantanea.
Visibilidad local. La declaracin y
asignacin de variables slo puede
aparecer en el interior de un proceso
(dominio secuencial)
No se recomienda el uso de variables
globales (VHDL'93)

Seales vs. Variables (2)

La asignacin de un nuevo valor a una


seal no es instantnea, existe al menos un
retraso .
Z <= A0 and A1 [after 6ns];
Son globales. No se pueden declarar
en el interior de un proceso
Pueden aparecer en sentencias
secuenciales y concurrentes

Universidad de Zaragoza, IEC.

CONDICIONES INICIALES
A=0, B=1, C=2, X=3

PROCESS
-- A, B, C, X son variables
-- Declaracin y asignacin
-- dentro del proceso
BEGIN
-- wait until the trailing
-- edge of the clock
wait until Clock = '1';
-- variable assignments
A:= B+C; -- 1+2
X:= A+C; -- 3+2
A:= X+C; -- 5+2
END PROCESS;

A=7, X=5

Luis A. Barragn y Jos I. Artigas

PROCESS
-- A, B, C, X son seales
-- Las seales se han de-- clarado fuera del proceso
BEGIN
-- wait until the trailing
-- edge of the clock
wait until Clock = '1';
-- signal assignments
A<= B+C; -- 1+2
X<= A+C; -- 0+2
A<= X+C; -- 3+2
END PROCESS;

A=5, X=2

Lenguaje VHDL - 24

Asignacin concurrente de
seales (1)
t

Asignacin concurrente de
seales (2)
t

architecture A1 of INV is
signal B, C : bit;
begin
-- El orden textual
A
-- no importa
Z <= NOT C;
B <= NOT A;
C <= NOT B;
end A1;

Una asignacin concurrente se ejecuta


siempre que ocurre un evento en una seal
que aparece en su lado derecho

Las sentencias de asignacin de seales se


ejecutan en respuesta a eventos en alguna
de las seales que aparecen en el miembro
derecho de la asignacin
La seal no adquiere su nuevo valor
de forma instantanea, existe al menos
un retraso .

Existe una sentencia PROCESS equivalente


Out <= In2 - In1 after 8 ns;

Asignaciones secuenciales vs. concurrentes


process(B)
begin -- Secuencial
A<= B;
Z <= A;
end process;

-- En T= 20 ns, ocurre evento en A

*
20 ns

Universidad de Zaragoza, IEC.

process (In1, In2)


begin
Ou t <= In2 - In1 after 8ns;
end process;

-- Concurrente
A<= B;
Z <= A;
B

A
B

Z
20ns

20ns + 3

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 25

Multiples drivers

Driver
Driver: lista de pares (valor, tiempo)
ordenados temporalmente (T, ) asociados
a una seal

Cada sentencia de asignacin concurrente


asocia un driver a la seal modificada
Una seal con ms de un driver debe de
tener una funcin de resolucin, en caso
contrario es un error.

El driver de una seal representa la


evolucin temporal futura de la misma

La sentencia de asignacin de seal crea en


el driver de la seal asignada un nuevo par
(valor, tiempo)
El valor es el resultado de evaluar la
expresin de la sentencia
El tiempo es igual a la suma del
tiempo actual de simulacin (en el que
se ejecuta la sentencia) ms el retardo
declarado a la derecha de la palabra
reservada AFTER.
Z

('0', 5ns) ('1' ,10ns + 3)

'U'

'0'
5

Universidad de Zaragoza, IEC.

DR1:
DR2:

('0' , 10ns)
('1' , 5ns)

architecture A1 of TWO_DR is
begin
Z <= A and B after 10 ns;
Z <= not C after 5 ns;
end;

Funcin
de
Resolucin

Analoga entre funcin de resolucin en


VHDL y los C.I. con salidas en colector
abierto: si existe un driver t.q. su valor =
'0', entonces la salida es '0'.

'1'
10

ns

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 26

DESCRIPCION DE
CIRCUITOS DIGITALES
t

Introduccin

Circuitos combinacionales

Circuitos secuenciales:
Latches
Flip-Flops

Mquinas de Estados Finitos (MEFs)

Introduccin

Universidad de Zaragoza, IEC.

En este apartado se dan plantillas o


patrones que modelan distintos tipos de
circuitos digitales.

Se indican algunos de los posibles


problemas que nos pueden aparecer:
Diferencias Simulacin vs. Sntesis.

VHDL es muy flexible, y no todas sus


construcciones sirven para describir
circuitos.
Nos centraremos en el subconjunto de
VHDL sintetizable para Synopsys.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 27

Circuitos combinacionales
t

Procesos => Cir. combinacionales

Sentencias de Asignacin concurrentes =>


Lgica Combinacional

library IEEE;
use IEEE.std_logic_1164.all;
entity COMBI is
port( A, B, C: in std_logic;
D: out std_logic);
end COMBI;

process (A, B)
begin
D <= (A and B) or C;
end process;

t
D

process (A, B, C)
begin
D <= (A and B) or C;
end process;

Modelo VHDL original

architecture BEHAVIORAL of COMBI is


begin
D <= (A and B) or C;
end BEHAVIORAL;
configuration CFG_COMBI of COMBI is
for BEHAVIORAL
A
end for;
end CFG_COMBI;
B

Si una seal es leda en el interior de un


proceso y no aparece en la lista de
sensibilidad se producen diferencias entre
sntesis y simulacin

Cdigo interpretado
por la herramienta de
sntesis

No sintetiza asignaciones a seales con la


clasula AFTER
C <= A and B after 10 ns;

Procesos => Lgica Combinacional


process (A, B, C)
begin
D <= (A and B) or C;
end process;

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 28

Sentencia IF => Circuitos


combinacionales (1)
t

Sentencia IF => Circuitos


combinacionales (2)
t

Las seales y variables (locales) mantienen


su valor hasta que se les asigna uno nuevo.

Tipo booleano
Cierto => 1
Falso => 0

Para asegurar que se sintetiza un circuito


combinacional, se debe asignar un valor a
la seal D_OUT independientemente de si la
condicin de la sentencia IF es cierta o
falsa

La seal COND es leda dentro del proceso


y debe aparecer en la lista de sensibilidad
process(A, B, COND)
begin
-- Asignar valor a D_OUT
-- en todas las condiciones
if (COND) then
D_OUT <= B;
else
D_OUT <= A;
end if;
end process;

process(A, B, COND)
begin
-- Asignar valor a D_OUT
-- en todas las condiciones
if (COND) then
D_OUT <= B;
else
D_OUT <= A;
end if;
process(A, B, COND)
end process;
begin
-- Dar a D_OUT
-- un valor por defecto
D_OUT <= A;
if (COND) then
D_OUT <= B;
end if;
end process;

B
COND
D_OUT
A

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 29

Sentencia CASE => Circuitos


combinacionales
t

Las sentencias CASE no siempre se


sintetizan en multiplexores

Latch

Para asegurar que se sintetiza un circuito


combinacional, se debe asignar un valor a
la seal Z para todo valor de SEL.

process (Enable,Data)
begin
if (Enable='1') then
Value <= Data;
end if;
end process;

PROCESS (A,B,C,D,SEL)
BEGIN
case SEL is
when "00" => Z <= A;
when "01" => Z <= B;
when "10" => Z <= C;
when others => Z <= D;
end case;
END PROCESS;

process (Enable, Data)


begin
Value <= '0';
if (Enable='1') then
Value <= Data;
end if;
end process;

A
B

MUX

Sentencia IF Latch

C
D

Data

Value

Enable

Data
Enable

Value

Si se desea evitar que la herramienta de


sntesis infiera latches, se debe asignar
valores a las seales y variables para todas
las condiciones de una sentencia IF o
CASE

SEL

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 30

Circuitos secuenciales
t

Flip-Flop

Se sintetiza un circuito secuencial:

Instanciacin de Flip Flops (o componentes con


FFs) en una descripcin estructural
Procesos activados por flanco de reloj en una
descripcin comportamental

process (CLK)
begin
if (CLK'EVENT and CLK='1') then
if (Reset = '1') then
Q <= '0';
else Q <= Data;
end if;
end if;
end process;

Patrones bsicos (descrip. comportamental)

process begin
-- Flanco Ascendente
wait until CLK='1';
...
end process;
process (CLK)
begin
if CLK'EVENT and CLK='1' then
...
end if;
end process;

process (CLK, RST)


begin
if RST= '1' then
...
elsif CLK'EVENT and CLK='1' then
...
end if;
end process;

Universidad de Zaragoza, IEC.

Flip Flop con RESET sncrono

Luis A. Barragn y Jos I. Artigas

Flip Flop con RESET y PRESET asncronos


process (CLK, RST, PRT)
begin
if (Reset = '1') then
Q <= '0';
elsif (PRT = '1') then
Q <= '1';
elsif (CLK'EVENT and CLK='1') then
Q <= Data;
end if;
end process;

Lenguaje VHDL - 31

Mquinas de Estados sncronas


t

Una MEF es una sex-tupla:


Vector de estados S={Sj}
Vector de entrada I={Ij}
Vector de salida O={Oj}
Funcin de transicin I S S
Funcin de salida I S O
Estado inicial o de reset R

MEFs
Tipos:
MOORE, correspondencia entre
estado y vector de salida biunvoca
Funcin de salida S O

Funcin de
Transicin

Next
state

Registros
S

Funcin
de Salida

Current state

Se utilizan para describir y simular


subsistemas de control
MEALY, el vector de salida depende
del estado y del vector de entrada
Funcin de salida: I S O

Niveles de descripcin:
Algortmico 
Tablas de Transicin de estados
Ecuaciones booleanas y registros

Descripcin algortmica. Requisitos:


Claridad
Sintetizable

Universidad de Zaragoza, IEC.

Funcin de
Transicin

Next
state

Registros
S

Funcin
de Salida

Current state

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 32

Descripcin en 2 procesos de
MEF sncronas
t

Descripcin en 2 procesos de
MEF sncronas
t

Descripcin en 2 procesos:
Proceso secuencial, actualiza el estado
Proceso combinacional, deriva el
siguiente estado y actualiza las salidas
Para evitar "glitches", registrar salidas
ENTITY fsm
ARCHITECTURE Beh2 OF fsm

INPUTS

CASE
Para cada estado:
Transicin de estados;
Generacin de salidas;

OUTPUTS

Combinacional:
PROCESS( Current_state, All_inputs)

Secuencial:
PROCESS BEGIN
-- Un unico CLK
wait until CLK ='1';

Next_state

Current_state

END PROCESS;

Current_state <= Next_state;

Seq: PROCESS BEGIN


-- All FFs driven by the same clock
wait until CLK='1';
current_state <= next_state;
END PROCESS seq;
END beh2;

END PROCESS;

Universidad de Zaragoza, IEC.

Estructura General:

ARCHITECTURE beh2 OF fsm IS


type STATE_TYPE is (S0,S1,S2);
signal current_state, next_state: STATE_TYPE;
BEGIN
combi: PROCESS(current_state, all_inputs, RST)
BEGIN
signals <= default assignments;
CASE current_state is
WHEN S0 =>
0/0
IF input = '0' THEN
output <= '0';
S0
next_state <= S0;
ELSE
output <= '1';
1/1
next_state <= S2;
END IF;
unconditional signal generation;
S2
WHEN S1 =>
.................
WHEN OTHERS =>
-- Fail safe behavior
-- illegal state recovery
END CASE;
-- Power on reset initialization
IF reset_conditions THEN
transition to reset state R
and reset signals;
END IF;
END PROCESS combi;

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 33

SIMULACION

Entornos de test

Entornos de test

Un entorno de test (test bench) es otra


entidad de diseo que se utiliza para verificar
la correccin funcional de nuestro diseo.
Se pueden utilizar construcciones VHDL
no sintetizables.

Partes de un entorno de test:


Entidad a testear (EUT). Se instancia
como un componente
Generador de Estmulos. Estos se aplican a los puertos de entrada de la EUT.
Monitor de los resultados: Fichero de
datos o Waveform Viewer.

Generacin de estmulos
Vectores de test
Ficheros

Comparar resultados obtenidos con valores


esperados.
TEST BENCH

Generador
de Estmulos
Monitor de
Resultados

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

CLK
RST,
IN_DATA

OUT_DATA

EUT:
Engloba todo
el hardware
que va a ser
sintetizado

Lenguaje VHDL - 34

Vectores de test almacenados


en tabla (1)

Generacin de estmulos
t

Los estmulos pueden:


ser generados mediante cdigo VHDL
no sintetizable
ser vectores de datos almacenados en:

Utilizacin:
Los estmulos pueden ser vectores de
entrada almacenados en una tabla
Los resultados esperados se pueden
almacenar junto con el correspondiente
vector de entrada para su comparacin
con el resultado obtenido

Ejemplo:
Declaracin

vector o tabla
fichero ASCII
t

Generacin de estmulos:
Patrones NO Repetitivos
Patrones Repetitivos
--No repetitivo
RST <= '1', '0' after 20 ns;

--Repetitivo
process begin
CLK <= '0';
wait for 10 ns;
CLK <= '1';
wait for 10 ns;
end process;
--Repetitivo
process begin
CLK <= '1', '0' after 20 ns;
wait for 50 ns;
end process;

Universidad de Zaragoza, IEC.

type test_vector is record


input1, input2, output: std_logic;
end record;
type test_vector_table is
array(natural range <>) of test_vector;
constant input_vectors: test_vector_table := (
(input1 => '0', input2 => '0', output => '0'),
...
(input1 => '1', input2 => '1', output => '1')
);

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 35

Vectores de test almacenados


en tabla (2)

Ficheros (1)

Aplicacin de estmulos a las entradas


de EUT y comprobacin de las salidas

Utilizacin:
Los estmulos pueden ser vectores de
entrada almacenados en un fichero
ASCII
Los resultados se pueden escribir en un
fichero para posterior comprobacin

Construcciones:

-- Instanciacin de EUT
U1:eut port map(CLK=>actual_clk,I1=>actual_input1,
I2=>actual_input2, O=>actual_output);
-- Aplicacin de los estmulos
process begin
for i in input_vectors'range loop
-- Aplicar vector de test
-- en el flanco de bajada del reloj
actual_clk <= '0';
actual_input1 <= input_vectors(i).input1;
actual_input2 <= input_vectors(i).input2;
wait for 10 ns;
actual_clk <= '1';
wait for 10 ns;
-- Comprobar resultados de simulacin
assert(actual_output=input_vectors(i).output)
report "Resultado incorrecto";
end loop;
assert FALSE -- Parar la simulacin
report "Fin";
end process;

Universidad de Zaragoza, IEC.

Package TEXTIO
-- Definiciones de tipos
type STRING is array (POSITIVE range <>) of CHARACTER
type LINE is access STRING;-- Pointer to a STRING value
type TEXT is file of STRING;
type SIDE is (RIGHT, LEFT);-- Justify output data
type WIDTH is NATURAL;-- Specify widths of output fields
-- Funciones y Procedimientos predefinidos
function ENDFILE (F: TEXT) return BOOLEAN;
procedure READLINE(F: in TEXT, L: out LINE);
procedure READ(L:inout LINE; VALUE:out <tipo>;
GOOD: out BOOLEAN);
procedure WRITELINE(F: out TEXT; L: in LINE);
procedure WRITE(L:inout LINE; VALUE:out <tipo>;
JUSTIFIED: in SIDE; FIELD: in WIDTH);
<tipo> cualquiera de los definidos en el package STANDARD

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 36

Ficheros (2)
t

Ejemplo:

-- Instanciacin de EUT
U1:eut port map(CLK=>actual_clk,I1=>actual_input1,
I2=>actual_input2, O=>actual_output);
-- Aplicacin de los estmulos
READ FILE: process
file INPUT_FILE:
text is in "./eut_test.vec";
variable MY_LINE: line;
variable IN1, IN2, OUT: std_logic;
BEGIN
WHILE (NOT (endfile (INPUT_FILE))) LOOP
readline(INPUT_FILE, MY_LINE);
read (MY_LINE, IN1);
read (MY_LINE, IN2);
read (MY_LINE, OUT);
-- Aplicar valores leidos
actual_clk <= '0';
actual_input1 <= IN1;
actual_input2 <= IN2;
wait for 10 ns;
actual_clk <= '1';
wait for 10 ns;
assert (actual_output = OUT)
report "Resultado incorrecto";
END LOOP;
assert FALSE -- Parar la simulacin
report "Fin";
END PROCESS;

Universidad de Zaragoza, IEC.

Luis A. Barragn y Jos I. Artigas

Lenguaje VHDL - 37