Sie sind auf Seite 1von 129

Historia

 VHSIC HDL
 Very High Speed Integrated Circuit
 HDL = Hardware Description Language

 El DoD (Department of Defense, USA) y IEEE fomentaron el desarrollo de un


HDL
 Algunas Caracteristicas:
 Los diseños se pueden descomponer jerárquicamente “divide y conquistarás”
 Cada elemento tiene
 Interface bien definida (para conexiones)
 Especificación de Comportamiento (para simulación)
 Modelación de Concurrency, timing, y clocking
 Simulación de operaciónes lógicas y comportamiento en el tiempo
 Inicialmente fue creado para Descripción y Simulación, NO PARA SINTESIS

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 2


Estructura de un programa en VHDL
3

entity
entity Inhibit is
port ( X,Y: in BIT;
X Z Z: out BIT);
Y end Inhibit;

architecture Inhibit_arch of Inhibit is


begin
Z <= '1' when X='1' and Y='0' else '0';
end Inhibit_arch;

architecture

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 3


Entity
4
 Define el nombre
 Define el interface con
el mundo exterior,
todo lo que ven otros
módulos
(entidades)que lo usan
 Pines (port)
 Tipo de pines
 Modo de pines
entity entity-name is
port (signal-names : mode signal-type;
signal-names : mode signal-type;
...
signal-names : mode signal-type);
end entity-name;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 4


5

 entity-name
 Nombre de entidad definido por el programador
 signal-names
 Nombre (o lista de nombre) de los pines
 mode
 in entrada
 out salida, el valor no se puede leer desde el interior de la
entidad
 inout bidireccional, usada para las in/out de 3E de los PLD
 buffer salida, el valor SI se puede leer desde el interior de la
entidad
 signal type
 Un tipo ya definido o definido por el usuario (ver más adelante)

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 5


SEÑALES

X
A
C
Y B

D Z
F
E

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 6


Architecture
7

architecture architecture-name of entity-name is


type declarations
signal declarations
constant declarations
function definitions
procedure definitions
component declarations
begin
concurrent-statement
...
concurrent-statement
end architecture-name;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 7


8

 Define el funcionamiento de la entidad “qué hace”


 entity-name debe ser el mismo
 El nombre de la arquitectura
 Puede describirse una entidad de varias maneras: behavioral, estructural,
etc (todas pueden existir)
 Signal
 Se heredan las señales declaradas como pines en “entity”
 Se pueden definir señales que existen solo dentro de la arquitectura,
representan “alambres o conexiones” que no salen al exterior
 No tienen modo (dirección). Por eso pueden leerse o escribirse
 Declarations
 Todas las declaraciones son “locales”. Solo existen dentro de la
arquitectura (ni si quiera de la entitdad)

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 8


Diferentes formas de descripcion
9

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 9


Ejemplo:
10

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 10


Ejemplo: Descripcion Funcional
11

entity BUZZER is
port ( DOOR, IGNITION, SBELT: in std_logic;
WARNING: out std_logic);
end BUZZER;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 11


Ejemplo: Descripcion Funcional
12

architecture behavioral of BUZZER is


begin
WARNING <= (not DOOR and IGNITION) or (not SBELT and IGNITION);
end behavioral;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 12


Ejemplo:
13

DOOR_NOT

SBELT_NOT

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 13


Ejemplo: Descripcion Estructural
14

architecture structural of BUZZER is


-- Declarations
component AND2
port ( in1, in2: in std_logic;
out1: out std_logic);
end component;
component OR2
port ( in1, in2: in std_logic;
out1: out std_logic);
end component;
component NOT1
port ( in1: in std_logic;
out1: out std_logic);
end component;
-- declaration of signals used to interconnect gates
signal DOOR_NOT, SBELT_NOT, B1, B2: std_logic;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 14


Ejemplo: Descripcion Estructural
15

begin
-- Component instantiations statements
U0: NOT1 port map (DOOR, DOOR_NOT);
U1: NOT1 port map (SBELT, SBELT_NOT);
U2: AND2 port map (IGNITION, DOOR_NOT, B1);
U3: AND2 port map (IGNITION, SBELT_NOT, B2);
U4: OR2 port map (B1, B2, WARNING);
end structural;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 15


VHDL es concurrente
16

 ¿Qué significa concurrente?


 Cada Sentencia de los Lenguajes de Programación (Assembly,
Pascal, C++…),se ejecutan secuencialmente de acuerdo al
orden en el programa

 Las Declaraciones (concurrent-statement) del cuerpo de una


Arquitectura en VHDL se ejecutan CONCURRENTEMENTE “al
mismo tiempo”
 El Simulador se encarga de actualizar constantemente todas las
señales, sin importar el orden dentro del cuerpo de la Arquitectura
 VHDL describe el “Hardware”, por lo tanto todo debe funcionar al
mismo tiempo desde que se enciende la fuente
 Sin embargo, existen maneras de construir un grupo de
Declaraciones Secuenciales

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 16


18

 COMENTARIOS
 -- indica linea de comentarios
 SIMBOLOS ESPECIALES
 +-/*().,:;&‘“<>=!#
 := /= >= <= <> --
 IDENTIFICADORES
 Letras, números, _
 No puede empezar con número o _
 No _ _
 No puede terminar en _
 Case Un-Sensitive
 No usar keywords o símbolos especiales

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 18


19

 NUMEROS  CADENA DE BITS


 Base 10 por default
 Usado para definir
 2#10110111#
 16#4AB# tipos
 bit
 CARACTERES  bit_vector
Entre ‘ ‘
 Ej

 ‘1’
 CADENAS
 B“10110111 ”
 Entre “ ”
 0”345”
 X”4AB ”

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 19


20  KEYWORDS (palabras reservadas)
[VHDL ’87]
ABS CONFIGURATION INOUT OR THEN
ACCESS CONSTANT IS OTHERS TO
AFTER DISCONNECT LABEL OUT TRANSPORT
ALIAS DOWNTO LIBRARY PACKAGETYPE
ALL ELSE LINKAGE PORT UNITS
AND ELSIF LOOP PROCEDURE UNTIL
ARCHITECTURE END MAP PROCESS USE
ARRAY ENTITY MOD RANGE VARIABLE
ASSERT EXIT NAND RECORD WAIT
ATTRIBUTE FILE NEW REGISTER WHEN
BEGIN FOR NEXT REM WHILE
BLOCK FUNCTION NOR REPORT WITH
BODY GENERATE NOT RETURN XOR
BUFFER GENERIC NULL SELECT
BUS GUARDED OF SEVERITY
CASE IF ON SIGNAL
COMPONENT IN OPEN SUBTYPE

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 20


21

[VHDL ’93]

GROUP POSTPONED ROR SRA


IMPURE PURE SHARED SRL
INERTIAL REJECT SLA UNAFFECTED
LITERAL ROL SLL XNOR

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 21


Clases de Objetos
23

 Constant
 Tienen un valor inicial antes de la simulación
 No se puede modificar durante la simulación
 Variable
 Tienen un valor
 Se puede cambiar con sentencias de asignación
 Signal
 Tienen un valor actual y un conjunto de posibles valores
futuros
 File
 Representan archivos
 Se usan para hacer “Test Benches”

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 23


Declaracion de Objetos
24

<clase> <identificador del objeto> : <tipo> [:=<valor inicial>]

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 24


Signal
25

 Representan las
señales o conexiones
internas (alambres
internos)
signal signal names : signal type;  Parecido a definicion
de port en la entidad
 Pero, no se especifica
mode
 Se pueden
leer/escribir dentro de
la arquitectura
 Son locales
 En la arquitectura se
pueden definir varias
o ninguna

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 25


Variable
26

 Similar a signal
 Fisicamente no
representan nada
variable variable names : variable type;  Uso parecido a
Lenguages de
Programación

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 26


Constant
27

constant constant-name : type-name := value;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 27


Precedencia
29

Tipo Operador

Logical and or nand nor xor


Relational = /= < <= > >=
Adding + - &
Unary (sign) + -
Multiplying * / mod rem
Miscellaneous ** abs not

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 29


Aritmeticos
30

OPERADOR DESCRIPCION
+ Suma, signo positivo
- Resta, signo negativo
* Multiplicación
/ División
mod Módulo de 2 números
rem Resto de la división
entera
** Exponenciación
abs Valor absoluto

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 30


Logicos
31

OPERADOR DESCRIPCION

and AND

or OR

nand NAND

nor NOR

xor OR Exclusiva

Xnor NOR Exclusiva

not Complemento

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 31


Relacionales
32

OPERATOR DESCRIPTION
= Igual a
/= Distinto de
> Mayor que
< Menor que
>= Mayor o Igual que  Para
comparar
<= Menor o Igual que operandos
en una
expresión
 Resultado :
True /
False
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 32
Asignacion
33

OPERATOR DESCRIPTION

:= Para asignar valores a constantes y


variables
<= Para asignar valores a señales
(“conectar”)

 Para asignar el
valor de una
expresión a un
objeto

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 33


Concatenacion
34

OPERATOR DESCRIPTION

& Para concatenar


vectores
 Concatena vectores
 La dimension del vector
resultante es la suma
de los vectores
signal A : std_logic_vector (2 downto 0); originales
signal B, C : std_logic_vector (3 downto 0);
 No se puede usar en el
lado izq de una
B <= ‘0’ & A ; asignación
C <= ‘0’ & B(3 downto 1);
 Se puede usar para
“shift” desplazamientos
de bits

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 34


35

signal A : std_logic_vector (7 downto 0);


signal B : std_logic_vector (0 to 7);

signal C : std_logic_vector (15 downto 0);

C <= A(7 downto 0)& B(0 to 7);

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 35


Tipos predefinidos (library)
37

 Determina Tipos Predefinidos VHDL


 rango de valores que puede bit
tomar un objeto
bit vector
 los operadores asociados
(+,/,AND…) boolean
 Todos los objetos (signal, character
variable, constant, file) en Integer
VHDL deben tener un tipo real
 VHDL tiene pocos tipos severity_level
predefinidos string
 Se utiliza más los user-defined Time
types
Strongly
Typed
Language

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 37


38

 integer
 -2^31 + 1 hasta +2^31 – 1
 boolean
 true, false
 character
 caracteres ISO 8 bit, los 128 primeros son ASCII
 ….

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 38


User Defined” types
39

 Los tipos más usados en


VHDL no son los
predefinidos, sino los
type type-name is (value-list); definidos por el usuario
(o ya estan en librerias)
 La mayoría son
“enumerados”, es decir se
listan los posibles valores. Ej:
boolean, character
 La sintaxis se muestra
 value-list
 es la lista separada por
comas de los posibles valores
 lista de identificadores
definidos por el usuario o
caracteres entre ´ ´

type estado_luces_trafico is (reset, stop, wait, go);

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 39


40
 Un ejemplo del
uso de caracteres
como lista de type STD_ULOGIC is ( 'U', -- Uninitialized
valores en la 'X', -- Forcing Unknown
definición de un '0', -- Forcing 0
tipo definido por '1', -- Forcing 1
el usuario 'Z', -- High Impedance
 En este caso, está 'W', -- Weak
definido en el Unknown
package IEEE 'L', -- Weak 0
1164 'H', -- Weak 1
'-' -- Don't care
);
subtype STD_LOGIC is resolved STD_ULOGIC;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 40


Subtypes

 También se
subtype subtype-name is type-name range start to end; pueden definir
subtype subtype-name is type-name range start downto end; subtipos a partir
de un tipo
 Los valores del
subtype dos_val_logicos is std_logic range ´0´ to ´1´; subtipo deben
ser “parte” o ser
subtype cuatro_val_logicos is std_logic range ´X´ to ´Z´; un “rango”
contínuo de
subtype neg_int is integer range -2147483647 to -1;
valores del tipo
subtype bit_num is integer range 31 downto 0; original

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 41


subtype dos_val_logicos is std_logic range ´0´ to ´1´;

subtype cuatro_val_logicos is std_logic range ´X´ to ´Z´;

subtype neg_int is integer range -2147483647 to -1;

subtype bit_num is integer range 31 downto 0;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 42


43

 NATURAL y
POSITIVO
 Hay dos
subtipos muy
usados
definidos en
VHDL subtype natural is integer range 0 to highest-integer;

subtype positive is integer range 1 to highest-integer;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 43


Constantes

 Facilitan la lectura,
constant constant-name: type-name := value; mantenimiento y
portabilidad de
cualquier código
(en este caso
VHDL)
constant BUS_SIZE: integer := 32; --ancho del bus
 El valor puede ser
constant MSB: integer := BUS_SIZE - 1; --bit MSB
incluso una
constant Z: character := ´Z´; --sinonimo Alta Z “expresión”
 Son útiles en la
definición de tipos
y subtipos

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 44


Arrays

type type-name is array (start to end) of element-type;


type type-name is array (start downto end) of element-type;

type type-name is array (range-type) of element-type;


type type-name is array (range-type range start to end) of element-type;
type type-name is array (range-type range start downto end) of element-
type;

 Igual que en otros lenguajes


 Conjunto de elementos ordenados del mismo tipo,
donde cada elemento puede seleccionarse mediante
un índice
 La dimensión del array se define mediante los
valores entre ( )

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 45


46
 Ejemplos de
Arrays

type monthly_count is array (1 to 12) of integer;

type byte is array (7 downto 0) of STD_LOGIC;

constant WORD_LEN: integer := 32;


type word is array (WORD_LEN-1 downto 0) of STD_LOGIC;

constant NUM_REGS: integer := 8;


type reg_file is array (1 to NUM_REGS) of word;
type traffic_light_state is (reset, stop, wait, go);
type statecount is array (traffic_light_state) of integer;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 46


Tipos del Ejemplo anterior
 Accediendo a
los elementos M(11) --tipo monthly_count
del array B(5) --tipo byte
W(WORD_LEN -5) --tipo word
 nombre (indice) R(0) --tipo reg_file
S(reset) --tipo statecount

B := (´1´, ´1´, ´1´, ´1´, ´1´, ´1´, ´1´, ´1´);


 Inicializando W := (0=>´0´, 8=>´0´, 16=>´0´, 24=>´0´,
Si son STD_LOGIC se others=>´1´,);
puede usar “strings”
B := “11111111”;
W :=“11111110111111101111111011111110”;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 47


48  Slices de un
array
 La dirección del M(6 to 9) --tipo monthly_count
“slice” debe B(3 downto 0) --tipo byte
concordar con W(15 downto 8) --tipo word
la del array R(1,7 downto 0) --tipo reg_file
original S(stop to go) --tipo statecount

 Concatenación
 Operador &
 Combina arrays ´0´ & ´1´ & “1Z” --equivale a “011Z”
o slices en el
orden escrito de B(6 downto 0) & B(7) --desplaza circularmente a la izq el bit 7
izquierda a
derecha

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 48


49
 std_logic_vector
 Define un grupo ordenado
de std_logic bits
 Definido como user-
defined en IEEE 1164
 Es el array más usado

type std_logic_vector is array (natural range < >) of std_logic

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 49


Concurrent vs. Sequential
51

 Concurrente  Secuencial
 Sentencias no se ejecutan  Sentencias son
de acuerdo al orden en ejecutadas
que están escritas secuencialmente de
 Son como aseveraciones acuerdo al orden en que
 Sentencias existen
estan escritas
siempre y se activan  Las sentencias o
cuando es necesario instrucciones son
Decodificadas-
 Es fundamental en
Ejecutadas por la
cualquier HDL maquina sequencial de
la CPU
 En lenguajes como C,
C++, Basic, Pascal …

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 51


Concurrent vs. Sequential

 En VHDL el código puede ser:


 Concurrente(paralelo) o Secuencial (serie)
 VHDL es “concurrente” inherentemente
 Es secuencial solamente el código dentro de: PROCESS,
FUNCTION, o PROCEDURE
 Concurrent == Dataflow
 También se conoce con este nombre
 Circuitos lógicos combinacionales y secuenciales
 Combinacionales  Generalmente con código
concurrente.
 Secuenciales  Solo con código secuencial.

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 52


Concurrent Code

 Assignment (usando operadores logicos,


aritmeticos, ...)
 Sentencias WHEN/ELSE
 Sentencias WITH/SELECT/WHEN
 Sentencias GENERATE
 Sentencias BLOCK

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 53


Design Flow

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 54


ESPE/DEEE ING. BYRON NAVAS 28/1/2018 56
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 57
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 58
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 59
Dataflow
61

 Descripción de un circuito de acuerdo al Flujo de


Datos y Operaciones aplicadas
 Casi como describir las conexiones realizadas cuando
se diseña un circuito gráficamente (schematic con
ORCAD)
 Se usan declaraciones concurrentes y de asignacion
 Abstraccion intermedia entre Structural y Behavioral
 Conexiones entre objetos abstractos, no entre
componentes

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 61


Dataflow
Concurrent Signal Assignment

signal-name <= expression ;


 Significa:
 signal-name OBTIENE
expression
 Es decir, indica la conexión
realizada

 Strong Type
 El tipo de la expresión debe
ser compatible o un subtipo de
signal-name
 En arrays, el tipo y la dimensión
deben ser compatibles
 El rango y dirección no
necesariamente

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 62


MUX 4 -1

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 63


ESPE/DEEE ING. BYRON NAVAS 28/1/2018 64
Conditional Concurrent Signal Assignment

signal-name <= expression when boolean-expression else


expression when boolean-expression else
...
expression when boolean-expression else
expression ;

 Se usa keywords when y else


 La “expression” se asigna a “signal-name” cuando
“boolean-expression” es verdadera
 “boolean expression” esta formado por terminos
booleanos y operadores and,or, not
 Cada término puede ser una comparación con operadores
relacionales
 Puede estar una sola condición en cada asignación o
varias condiciones en una sola asignación.

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 65


Examples

MUX 4 -1

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 66


ESPE/DEEE ING. BYRON NAVAS 28/1/2018 67
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 68
Selected Concurrent Signal Assignment
 Se usa keywords with,
with expression select select y when
signal-name <= signal-value when choices ,  Se evalúa si la
“expression” concuerda con
signal-value when choices , alguno de los “choices”. Si
... es verdadero, el
correspondiente “signal-
signal-value when choices ; value” se asigna a “signal-
name”
 “choices” puede ser una
lista de valores separados
por ¦ (similar a una or)
 Se puede usar others en el
último when para cubrir las
restantes posibilidades
 Esta forma de descripción
(selected) parece un listado
de una Tabla de Verdad

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 69


Examples
70

MUX 4 -1

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 70


71

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 71


Example : 3 to 8 Decoder
72

U2

1 15
2 A Y0 14
3 B Y1 13
C Y2 12
6 Y3 11
4 G1 Y4 10
5 G2A Y5 9
G2B Y6 7
Y7

74LS138

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 72


Example : 3 to 8 Decoder
73

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 73


74

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 74


Example : 3 to 8 Decoder
75

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 75


U3

5 11
1 D0 A 10
2 D1 B 9
4 D2 C 8
D3 D 6
3 E 13
BI F 12
G

74LS49

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 76


Generate

<LABEL_1>:
for <name> in <lower_limit> to <upper_limit> generate
begin
<statement>;
<statement>;
end generate;

 Permite repetir una seccion de codigo


varias veces
 Debe tener un “label”
 Ambos limites deben ser “estaticos”
 (valores fijos, no señales o expresiones)
 caso contrario, codigo generado no
sintetizable

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 77


Generate>Ejemplos

 el ejemplo
realiza una
operacion and
bit-a-bit entre los
dos nibbles de y
 no es necesario
declarar
identificador ‘i’
 0 y 3 son limites
estaticos

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 78


Generate>Errores

 limite_sup es una
entrada (no
estatica)
 produce codigo no
sintetizable

 resp es asignado
varias veces
 error de
compilacion “ resp
is multiple driven”

ESPE/DEEE ING. BYRON NAVAS 79


28/1/2018
Generate>IF/GENERATE

 Variacion de
<LABEL_1>: for/generate
if <condition> generate
begin  Puede anidarse
<statement>;
end generate; if/generate
dentro de
for/generate (o
al contrario)

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 80


Block

Simple Guarded  2 tipos:


• Para • Incluye una expresion Simple y
agrupar/particionar “guard”
codigo • Las sentencias dentro Guarded
de un “guarded
block” se ejecutan
SOLO cuando la
 Podria
“guarded expression”
es TRUE
anidarse
dentro de
otro

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 81


Block

block_label: block
<declarative part>
begin SIMPLE
<concurrent statements> BLOCK
end block [block_label];

block_label: block (<guard expression>)


<declarative part>
begin GUARDED
<concurrent guarded and unguarded statements> BLOCK
end block [block_label];

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 82


Block>Ejemplo

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 83


library IEEE; --byron navas
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 84


≈LIBRARY & PACKAGE
ESPE/DEEE ING. BYRON NAVAS 28/1/2018 86
leddcd.vhd

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 87


cntr.vhd

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 88


ESPE/DEEE ING. BYRON NAVAS 28/1/2018 89
cntdisp.vhd TOP FILE

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 90


Package

PACKAGE package_name IS

END package_name;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 91


COMPONENT component_name IS
PORT (
port_name : signal_mode signal_type;
port_name : signal_mode signal_type;
...
);
END COMPONENT;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 92


Component Declaration

COMPONENT component_name IS
PORT (
port_name : signal_mode signal_type;
port_name : signal_mode signal_type;
...
);
END COMPONENT;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 93


Component Instantiation

label: component_name PORT MAP (port_list);

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 94


ESPE/DEEE ING. BYRON NAVAS 28/1/2018 95
≈Functional
Sequential Code

 Existen solo dentro de PROCESS, FUNCTION,


PROCEDURE
 Sequential code == Behavioral code
 Sirve para circ. combinacionales/secuenciales
 Algunas sentencias secuenciales son:
 IF
 WAIT
 CASE
 LOOP

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 97


Process

[label:] PROCESS (sensitivity list)


[VARIABLE name type [range] [:= initial_value;]]
BEGIN
(sequential code)
END PROCESS [label];

 Seccion secuencial de VHDL


 Contiene una “sensitivity list”
 Proceso se declara en el codigo, pero
 Se ejecuta (activa) cuando una señal de sensitivity
list cambia

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 98


ENTENDIENDO LOS PROCESOS

entradas que
activan el proceso
señal modificada
en el proceso
n ≥1
S n =1
L

otras entradas al
proceso

ESPE/DEEE ING. BYRON NAVAS 28/1/2018 99


MIS AMIGOS LOS PROCESOS

Se crean varios procesos para


SL p1 controlar diversas señales
independientemente

Las señales modificadas en los


procesos, pueden ingresar a un
SL p2 circuito para generar una
funcion.

p1 F
SL p3
p2
p3

Los procesos existen, pero se combinacional / secuencial


activan cuando alguna de las
señales de la “sensitivity list”
cambia

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
0
Ejemplo

Asynchronous Reset D-FF

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
1
if/then/else “sequential”

 Similar a otros lenguajes


 Beginners les gusta usar mucho
 PERO,puede crear complicaciones :
“Decodificadores de prioridad indeseados”

IF conditions THEN assignments;


ELSIF conditions THEN assignments;
...
ELSE assignments;
END IF;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
2
ESPE/DEEE ING. BYRON NAVAS 28/1/2018
10
3
SIGNALS/VARIABLES
104

 SIGNALS  VARIABLES
 Declarada en ENTITY,  Solo en código
PACKAGE, secuencial (PROCESS,
ARCHITECTURE FUNCTION,
PROCEDURE)
 GLOBAL  LOCAL

 Seactualiza al final  Seactualiza


del PROCESS inmediatamente en la
siguiente linea

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
4
ESPE/DEEE ING. BYRON NAVAS 28/1/2018
10
10
55
CASE “sequential”

 Estructura condicional similar a switch en C++


 Se emplea keywords
 CASE, IS,WHEN
 Se debe cubrir TODAS las
posibilidades/combinaciones para no inferir
Latches indeseados
 Entonces es util usar ‘others’
CASE identifier IS
WHEN value => asssignments;
WHEN value => asssignments;
...
WHEN OTHERS => asssignments;
END CASE;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
6
MAQUINAS SECUENCIALES

PROCESS (reset, clock)


BEGIN
IF (reset='1') THEN
pr_state <= state0;
ELSIF (clock'EVENT AND clock='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


10
7
CIRCUITOS SECUENCIALES
Modelo General

PROXIMO ESTADO
ESTADO ACTUAL

DECOD. DECOD. SALIDAS


ELEMENTO
ENTRADAS DE DE
DE
PROXIMO SALIDA
MEMORIA
ESTADO

CLK

28/1/2018 © ING BYRON NAVAS - FIE - ESPE 108


Tipos de Circ. Sec. Sincrónicos

 Mealy Machine (Clase A)


D.P.E. E.M D.S.  Igual al Modelo General
 Moore Machine (Clase B)
 Salidas dependen solo
del Estado Presente
D.P.E. E.M D.S.
 (Clase C)
 No tienen Decod de
Salida
D.P.E. E.M

© ING BYRON NAVAS - FIE - ESPE 28/1/2018


109 10
9
PROCESS (input, pr_state)
BEGIN
CASE pr_state IS
WHEN state0 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state1;
ELSE ...
END IF;
WHEN state1 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state2;
ELSE ...
END IF;
WHEN state2 =>
IF (input = ...) THEN
output <= <value>;
nx_state <= state2;
ELSE ...
END IF;
...
END CASE;
ESPE/DEEE END PROCESS;
ING. BYRON NAVAS 28/1/2018
11
0
2 PROCESOS EN 1

señal modificada
en el proceso

S
L señal modificada
en el proceso

S
L

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


11
1
 Declaracion de Estados

ARCHITECTURE OF IS
TYPE estado IS (estadoA, estadoB,…);
SIGNAL pr_state, nx_state: estado;
BEGIN

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


11
2
ESPE/DEEE 11
28/1/2018 3
ING. BYRON NAVAS
 Describe exactamente la interconexión entre
señales y entidades pero no gráficamente, sino
en VHDL
 Es equivalente un
 Diagrama Esquemático (Schematic)
 Net List

 Una Descripción ESTRUCTURADA utiliza


components

byron navas ESPE/DEE 1/28/2018


11
4
Component Declaration
architecture architecture-name of entity-name is
115
 Antes de usar un type declarations
Componente en el Cuerpo signal declarations
constant declarations
de la Arquitectura, debe function definitions
Declararse en el lugar procedure definitions
apropiado (antes de component declarations
begin…end) begin
concurrent-statement
 Es en realidad exactamente ...
igual a la declaración de concurrent-statement
end architecture-name;
pines (port) de la Entidad
correspondiente que se
desea usar component component-name
 La Entidad puede haberse port (signal-names : mode signal-type;
definido previamente en el signal-names : mode signal-type;
mismo Diseño o puede estar
en una Librería ...
signal-names : mode signal-type);
end component;
byron navas ESPE/DEE 1/28/2018
115
Component Statement INSTANTIATION
116
 Instanciación = Dar vida a un nuevo elemento
basado en uno existente
 “component-name” es el nombre de una Entidad (entity)
previamente definida, que será usada dentro de la
Arquitectura actual (no necesariamente la misma
Arquitectura)
 Cada instancia debe llamarse por un único nombre “label”
 port map es una lista de cómo se conectan los pines de la
Entidad instanciada con las señales de la Arquitectura actual
 Por Orden (como en paso de parametros en C++)
 Explicitamente

label: component-name port map (signal1, signal2, ..., signaln);


label: component-name port map (port1=>signal1, port2=>signal2, ...,
portn=>signaln);

byron navas ESPE/DEE 1/28/2018


116
EJEMPLO

DETECTOR DE NUMEROS PRIMOS


byron navas ESPE/DEE 1/28/2018
11
7
library IEEE;
use IEEE.std_logic_1164.all;
entity prime is
port ( N: in STD_LOGIC_VECTOR (3 downto 0);
F: out STD_LOGIC );
end prime;
architecture prime1_arch of prime is
signal N3_L, N2_L, N1_L: STD_LOGIC;
signal N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: STD_LOGIC;
component INV port (I: in STD_LOGIC; O: out STD_LOGIC); end component;
component AND2 port (I0,I1: in STD_LOGIC; O: out STD_LOGIC); end component;
component AND3 port (I0,I1,I2: in STD_LOGIC; O: out STD_LOGIC); end component;
component OR4 port (I0,I1,I2,I3: in STD_LOGIC; O: out STD_LOGIC); end component;
begin
U1: INV port map (N(3), N3_L);
U2: INV port map (N(2), N2_L);
U3: INV port map (N(1), N1_L);
U4: AND2 port map (N3_L, N(0), N3L_N0);
U5: AND3 port map (N3_L, N2_L, N(1), N3L_N2L_N1);
U6: AND3 port map (N2_L, N(1), N(0), N2L_N1_N0);
U7: AND3 port map (N(2), N1_L, N(0), N2_N1L_N0);
U8: OR4 port map (N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0, F);
end prime1_arch;

byron navas ESPE/DEE 1/28/2018


11
8
for – generate LOOP
 ¿Se puede label: for identifier in range generate
Instanciar varios concurrent-statement
end generate;
componentes
similares library IEEE;
automáticamente use IEEE.std_logic_1164.all;
? entity inv8 is
port ( X: in STD_LOGIC_VECTOR (1 to 8);
 for y generate Y: out STD_LOGIC_VECTOR (1 to 8) );
permiten realizar end inv8;
architecture inv8_arch of inv8 is
un Ciclo component INV port (I: in STD_LOGIC; O: out STD_LOGIC);
Repetitivo de end component;
Instanciación begin
g1: for b in 1 to 8 generate
U1: INV port map (X(b), Y(b));
end generate;
end inv8_arch;
byron navas ESPE/DEE 1/28/2018
11
9
Haciendo Descripcíones más Flexibles generic
 Cuando se compila un archivo
VHDL, el valor de las entity entity-name is
constantes debe estar generic (constant-names : constant-type;
definido constant-names : constant-type;
 Sin embargo, ¿Sería útil, por ...
ejemplo, poder dejar constant-names : constant-type);
indefinido el tamaño de un
Bus (std_logic_vector) de una port (signal-names : mode signal-type;
Entidad? signal-names : mode signal-type;
 Esto permitiría que la misma ...
entidad sea instanciada en signal-names : mode signal-type);
distintas aplicaciones pero con
diferentes tamaños de buses end entity-name;
 Esto es posible usando generic
constants
 Las constantes se declaran en la
Entidad
 Las constantes se usan dentro de
la Arquitectura de la Entidad
 Pero, el valor real se define al
instanciar la entidad dentro de
otra Arquitectura

byron navas ESPE/DEE 1/28/2018


12
0
se declara constante
genérica WIDTH de valor
no definido

library IEEE; se puede usar la


use IEEE.std_logic_1164.all; constante genérica en la
entity businv is Entidad y Arquitectura
generic (WIDTH: positive);
port ( X: in STD_LOGIC_VECTOR (WIDTH-1 downto 0);
Y: out STD_LOGIC_VECTOR (WIDTH-1 downto 0) );
end businv;
architecture businv_arch of businv is
component INV port (I: in STD_LOGIC; O: out STD_LOGIC); end
component;
begin Se instancia varias veces el
componente INV, pero en
g1: for b in WIDTH-1 downto 0 generate
realidad no está definido
U1: INV port map (X(b), Y(b)); todavía cuántas veces
end generate;
end businv_arch;

byron navas ESPE/DEE 1/28/2018


12
1
library IEEE;
Se declara nueva Entidad que
use IEEE.std_logic_1164.all;
usará la Entidad “businv”
entity businv_example is definida anteriormente
port ( IN8: in STD_LOGIC_VECTOR (7 downto 0);
OUT8: out STD_LOGIC_VECTOR (7 downto 0);
IN16: in STD_LOGIC_VECTOR (15 downto 0);
OUT16: out STD_LOGIC_VECTOR (15 downto 0);
IN32: in STD_LOGIC_VECTOR (31 downto 0);
OUT32: out STD_LOGIC_VECTOR (31 downto 0) );
end businv_example; Se declara el componente
architecture businv_ex_arch of businv_example is “businv” para instanciarlo
component businv posteriormente
generic (WIDTH: positive);
port ( X: in STD_LOGIC_VECTOR (WIDTH-1 downto 0);
Y: out STD_LOGIC_VECTOR (WIDTH-1 downto 0) ); Se realizan 3
end component; instanciaciones de la
begin Entidad “businv”.
U1: businv generic map (WIDTH=>8) port map (IN8, OUT8); Además de port map, se
incluye generic map donde
U2: businv generic map (WIDTH=>16) port map (IN16, OUT16);
U3: businv generic map (WIDTH=>32) port map (IN32, OUT32);se define el valor de la
constante genérica WIDTH
end businv_ex_arch;

byron navas ESPE/DEE 1/28/2018


12
2
ESPE/DEEE 12
28/1/2018 3
ING. BYRON NAVAS
Process

process (signal-name, signal-name, ..., signal-name)


type declarations
variable declarations
constant declarations
function definitions
procedure definitions
begin
sequential-statement
...
sequential-statement
end process;

byron navas ESPE/DEE 1/28/2018


12
4
If

if boolean-expression then sequential-statement


end if;

if boolean-expression then sequential-statement


else sequential-statement
end if;

if boolean-expression then sequential-statement


elsif boolean-expression then sequential-statement
...
elsif boolean-expression then sequential-statement
end if;

if boolean-expression then sequential-statement


elsif boolean-expression then sequential-statement
...
elsif boolean-expression then sequential-statement
else sequential-statement
end if;

byron navas ESPE/DEE 1/28/2018


12
5
Case

case expression is
when choices => sequential-statements
...
when choices => sequential-statements
end case;

byron navas ESPE/DEE 1/28/2018


12
6
p1 N1
p1

u2

u1
p3

u3

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


12
7
 CHIP1

 N1> U1.P1, U2.P1, U3.P3

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


12
8
CLK40M
40MHz TO 4-BIT HEX TO
RST 1 Hz CLK UP/DOWN 7SEG SEG(6:0)
DIVIDER COUNTER DECODER
U_D

TOP

ESPE/DEEE ING. BYRON NAVAS 28/1/2018


12
9

Das könnte Ihnen auch gefallen