Documentos de Académico
Documentos de Profesional
Documentos de Cultura
APLICACIÓN DE VHDL
1
Introducción
¾ VHDL Lenguaje de descripción de Hardware
¾ Usado en ASIC, CPLD, FPGA, etc.
¾ Combina:
z Documentación
z Simulación
z Síntesis
¾ Modelamiento según:
z Comportamiento (Behavioural
(Behavioural))
z Estructura
E t t ((St
(Structural
Structural)
St t l) l)
2
ASIC
¾ ASIC Circuito Integrado para Aplicaciones
Específicas
¾ Library ieee
ieee;;
¾ Señales
¾ Constantes
¾ Variables
¾ Los objetos
j de datos SIGNAL representan
p señales
lógicas, o cables en un circuito.
¾ Ejemplo de declaración:
¾ SIGNAL signal_name
signal_name:: type_name
¾ La variable type_name determina los valores
legales que la señal puede asumir y sus usos en
VHDL.
¾ Ejemplos:
j p
¾ BIT, BIT VECTOR, STD_LOGIC, STD_LOGIC
VECTOR , STD_ULOGIC , SIGNED, UNSIGNED,
INTEGER ENUMERATION y BOOLEAN
INTEGER, BOOLEAN.
Ing. Wilmer Naranjo 16
TIPO BIT y BIT_VECTOR
¾ Estos tipos están predefinidos en los estandares de
VHDL del IEEE 1076 y 1164.
¾ BIT puede
d tener
t los
l valores
l ‘1’ o ‘0’
¾ BIT_VECTOR es un arreglo lineal de objetos tipo bit.
¾ Ejemplo:
¾ SIGNAL X1: BIT
¾ SIGNAL C: BIT_VECTOR (1 TO 4)
¾ SIGNAL D: BIT_VECTOR (7 DOWNTO 0)
¾ C<= “1010”
1010 --C(1)=1,
--C(1)=1,
C(1)=1 C(2)=0,
C(2)=0 C(3)=1
C(3)=1, C(4)=0
¾ D<= “10010100” --D(7)=1,
--D(7)=1, D(6)=0, D(5)=0, D(4)=1
¾ --D(3)=0,
-- D(3)=0,
( ) , D(2)=1,
( ) , D(1)=0,
( ) , D(0)=0
( )
¾ TIPO BOOLEAN
¾ Tiene los valores TRUE o FALSE, que equivale a ‘1’ y a ‘0’.
¾ TIPO ENUMERATION
¾ Tiene valores que el usuario especifica.
especifica.
¾ TYPE enumerated_type_name IS (name name{,{, name
name})
});;
¾ TYPE State_type IS (estadoA
estadoA,, estadoB,
estadoB, estadoC)
estadoC);
¾ SIGNAL y: State_type;
State type;
State_type
type;
¾ Los valores legales para y son estadoA
estadoA,, estadoB y estadoC
Ing. Wilmer Naranjo 21
¾ OBJETO DE DATOS CONSTANTES
¾ Es aquel cuyo dato no puede cambiar
cambiar..
¾ CONSTANT constant_nombre : type_name:
type_name:=constant_valor
constant_valor;;
¾ CONSTANT zero : std_logic_vector (3 downto 0):=“0000
=“0000””;
A it éti
Aritméticos
Relacionales
Lógicos
Desplazamiento
Otros
OPERACIÓN OPERADOR
Igual =
Dif
Diferente
t /=
Mayor >
Mayor o igual >=
M
Menor
enor <
Menor o igual <=
Ing. Wilmer Naranjo 24
Operadores lógicos y de desplazamiento
OPERACIÓN OPERADOR
Y and
g
Y Negado nand
O or
O Negado nor
O-exclusiva xor
O-exclusiva negada xnor
Negación
egac ó not
ot
Desplazamiento lógico a la izquierda sll
Desplazamiento lógico a la derecha srl
Desplazamiento aritmético a la izquierda sla
Desplazamiento aritmético a la derecha sra
Desplazamiento circular a la izquierda rol
Desplazamiento circular a la derecha ror
Ing. Wilmer Naranjo 25
Operadores de adición
OPERACIÓN OPERADOR
Signo positivo +
Signo negativo -
Concatenación &
Operadores Otros
¾ Operadores de multiplicar: *, /, MOD, REM
¾ Operadores miscellaneous:: **,
miscellaneous ** ABS
Ing. Wilmer Naranjo 26
Tipos de datos
TIPO RANGO DESCRIPCIÓN
Integer MAXINT… MAXINT Números enteros
Natural 0…
0 MAXINT Números naturales
Positive 1… MAXINT Números positivos
Real MAXREAL… MAXREAL Números reales
Boolean TRUE,FALSE Números booleanos
Bit 0,1 Números binarios
Std_logic ‘0’ , ‘1’,’Z’ (tercer estado), ‘‘--’ Estándar Lógico
(don´´t care),’L’,’H’,,’U’,’X’,’W’
(don
Entity EJEMPLO is
Port ((A,B:
, in bit;;
A C
E C : out bit);
B
End EJEMPLO
Entity EJEMPLO1 is
Port (A,B:
(A B: in bit
bit_vector
vector (1 to 4);
A 4 4 C
E C : out bit_vector (1 to 4));
B 4
End EJEMPLO1
PACKAGE package
package_name
name IS
[TYPE declarartions]
[SIGNAL declarartions]
[COMPONENT declarartions]
END package_name
¾ Cuerpo de Paquete.
Opcional para definir funciones de VHDL
Ing. Wilmer Naranjo 32
Crear paquetes
¾ La biblioteca IEEE es solo de lectura, tipo global, no
puede interactuar ni modificar.
p modificar.
¾ Use work
work..nombre_del_paquete.
nombre_del_paquete.all ;
Ing. Wilmer Naranjo 33
SUBCIRCUITOS
¾ Una entidad de VHDL definida en un archivo de código g fuente
puede usarse como subcircuito en otro archivo de código
fuente..
fuente
¾ El subcircuito en VHDL se llama COMPONENTE
COMPONENTE..
¾ Un componente se declara en la arquitectura o en la
declaración de paquete
paquete..
¾ Laa ssintaxis
ta s de la
a dec
declaración
a ac ó de
del co
componente
po e te es ssimilar
a a la
a
declaración de la entidad
entidad..
¾ Una vez declarado, este puede instanciarse como un
subcircuito..
subcircuito
¾ COMPONENT component_name
¾ [GENERIC ( parameter_name
parameter_name:: integer:
integer:= default_value{;
default_value{;
¾ parameter
parameter_name
parameter_name:
name: integer
name: integer::= default_value});
default value});
default_value})
value});]
¾ PORT ([SIGNAL] signal_name {, signal_name}
signal_name}::[mode] type_name{
type_name{;;
¾ [SIGNAL] signal_name {, signal_name}
signal_name}::[mode] type_name});
type_name});
instance_name : component_name PORT MAP(
formal_name => actual_name {, formal_name => actual_name })
});;
Ing. Wilmer Naranjo 34
ARQUITECTURA
¾ Es la encargada de la descripción del funcionamiento de
un circuito.
¾ D
Describe
ib ell ffuncionamiento
i i t iinterno
t d
de llas entidades.
tid d
¾ Pueden existir varias arquitecturas para una misma
entidad.
Niveles de arquitectura:
- Nivel Algorítmico
- Nivel RTL
- Nivel Lógico
Ing. Wilmer Naranjo 35
Nivel Algorítmico, funcional o
de comportamiento
Entity decodificador is
Port ((e0,e1,en:
, , in bit;;
s0,s1,s2,s3 : out bit);
End decodificador Ing. Wilmer Naranjo 37
Nivel Algorítmico
g
architecture algoritmica of decodificador is begin
process (e0,e1,en)
begin
if en=‘0’ then
s0<=‘0’; s1<=‘0’; s2<=‘0’; s3<=‘0’;
elsif e1=‘0’
e1= 0 and e0=‘0’
e0= 0 then
s0<=‘1’;
elsif e1=‘0’ and e0=‘1’ then
s1< ‘1’;
s1<=‘1’;
elsif e1=‘1’ and e0=‘0’ then
s2<=‘1’;
elsif
l if e1=‘1’
1 ‘1’ and
d e0=‘1’
0 ‘1’ th
then
s3<=‘1’;
end if;
endd process;
end algoritmica;
Ing. Wilmer Naranjo 38
Nivel RTL (Register Transfer Level) o
d fl
de flujo
j dde d
datos
t (D(Data
t Fl
Flow))
¾ Instrucciones Generate
Ing. Wilmer Naranjo 43
COMPARADOR ASIGNACION
Entity comparador is
Port (A,B: in bit_vector (0 to 3); A 4 C
B E
C : out bit );
4
End comparador
architecture RTL of comparador is
BEGIN
C <= NOT ((A(0) ( ) XOR B(0))
( )) AND
NOT (A(1) XOR B(1)) AND
NOT (A(2) XOR B(2)) AND
NOT (A(3) XOR B(3));
end RTL;
¾ Otra forma:
¾ with - select - when - others
¾ Ejemplo:
With m select
T <=‘
<=‘11’ when 0 | 4 | 18
18;;
‘0’ when 14 | 16 | 20;
20;
‘z’ when others;
others;
Declaraciones secuenciales
end process nombre_del_proceso;
nombre del proceso;
Declaración if – then
then--else
Ejemplo:
Ejemplo:
If a
a=b
b then
E<=‘1
E<=‘1’;
else
E<=‘0
E<=‘ 0’;
end if;
if; Ing. Wilmer Naranjo 52
Declaración if – then
then--elsif
elsif--else
Ejemplo::
Ejemplo
If [A[3
[A[3]=‘1
]=‘1’] then Y <= “111 111””;
elsif [A[
[A[2
2]=
]=‘1
]=‘ 1’]] then Y <= “110
110””;
elsif [A[1
[A[1]=‘1
]=‘1’] then Y <= “101
101””;
elsif [A[0
[A[0]=‘1
]=‘1’] then Y <= “100
100””;
else Y <= “000000””;
end if;
if;
Ejemplo::
Ejemplo
C
Case A iis
when “001” => Y[0] <= '0';
when “010” => Y[1] <= '0';
when “011” => Y[2] <= '0';
when “111” => Y[3] <= '0';
end case;
Case A is
when “001” => Y[0] <= '0';
when “010” => Y[1] <= '0';
when “011” => Y[2] <= '0';
when “101” => Y[3] <= '0';
when
h others
th =>Y<=“1111”;
Y “1111”
end case;