Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SISTEMAS DIGITALES II
HDL: Lenguaje de Descripción
del Hardware
■ Similar a un lenguaje de computadora excepto que un
HDL describe Hardware que luego de simulado puede ser
construido.
■ Existen 2 HDL que son estándares IEEE: VHDL (Very High
Speed Integrated Circuit Hardware Description Lenguage)
y Verilog HDL.
■ El VHDL es más popular pero ambos se usan a nivel
industrial.
■ Inicio en 1980 en el Departamento de Defensa (DoD).
Luego en 1983 formalmente empezaron el proyecto VHDL
con: Intermetrics, Texas Instruments e IBM.
■ IEEE empezó la estandarización en 1984 que luego se
aprobó en 1987 con el número 1076.
■ En 1994 el IEEE publicó la revisión del estandar IEEE Std
1076-1993 que es la que se encuentra vigente.
VHDL
■ Trabaja con diseño jerárquico: top – down o down - top.
■ Independencia tecnológica que permite diseñar circuitos
cuya descripción no depende de la forma de
implementación física posterior.
■ Universalidad, es decir compatibilidad con un gran
número de herramientas CAD.
■ Diferentes tipos de Descripciones: Sistema, algorítmico,
RTL, Lógico, Conmutación, Eléctrico, Físico.
■ Características: Se declara una caja negra (entity) con
un identificador para el circuito, y sus terminales de
entrada y salida. También se declaran las direcciones de
los terminales (in, out) y el tipo de datos que admiten.
Luego se describe el circuito en sí dentro del cuerpo de
una arquitectura. Esta descripción difiere según el nivel.
Estructura de un programa en
VHDL
Cuando se utiliza VHDL, un sistema digital se divide en varios bloques para
efectuar el proceso lo más comprensible y que sea fácil de probar y de dar
mantenimiento. En VHDL, cada porción del diseño es considerado un
bloque, que es descrito en el lenguaje, mediante una entidad y una
arquitectura.
La entidad me describe el exterior de mi circuito y la arquitectura su
comportamiento interno.
entidad 1
Bloque 1 arquitectura 1
entidad 2 entidad 3
entidad 4
Bloque 4
arquitectura 4
Ejemplo de entidad y arquitectura
ENTITY nand2 IS A
PORT(I1,I2: IN BIT; F
O: OUT BIT); B
END nand2;
ARCHITECTURE C1 OF nand2 IS
BEGIN
O<=NOT(I1 AND I2)
END C1;
ENTITY <nombre_entidad> IS
PORT(<nombre_pin>: <modo><tipo>;
<nombre_pin>: <modo><tipo>);
END <nombre_entidad>;
tipo estructural de la B
Y
operación EXOR
■Y = AB + AB
ENTITY XOR IS
PORT (A,B: IN BIT;
Y: OUT BIT);
END XOR;
Descripción Estructural o lógica
La arquitectura puede ser la siguiente:
Architecture XOR1 of XOR is
-- declaración de señales
signal AN, BN : bit;
signal ANB, ABN : bit;
- - declaración de componentes
A AN
component INV ANB
port (I: in bit; B
Y
O: out bit);
end component;
component AND2
port (I1, I2: in bit; ABN
O: out bit); BN
end component;
component OR2
port (I1, I2: in bit;
O: out bit);
end component;
Descripción Estructural o lógica
■ Estamos usando 3 tipos begin
de componentes: un -- instanciación de componentes
inversor (declarado INV), U1: INV port map (A,AN);
una compuerta AND de U2: INV port map (B,BN);
dos entradas (declarada U3: AND2 port map (AN,B,ANB);
AND2) y una compuerta U4: AND2 port map (A,BN,ABN);
OR de dos entradas U5: OR2 port map (ANB,ABN,Y);
(declarada OR2). end XOR1;
■ Para la descripción de la
función lógica XOR se
emplearon dos instancias,
U1 y U2 de INV; dos
instancias U3 y U4 de
AND2 y una instancias U5
de OR2.
Descripción Estructural o lógica
■ En la asociación nominal o component OR2
explícita se vuelve port (I1, I2: in bit;
O: out bit);
irrelevante el orden de los end component;
parámetros, por cuanto
dentro del paréntesis se begin
indican explícitamente las ...
señales que se conectan a - - asociación explícita
los terminales de las
U5: OR2 port map(O=>Y, I1=>ANB,
componentes, mediante el I2=>ABN);
símbolo => de asignación
end XOR1;
Descripción Estructural o lógica
las señales o con las De relación: =, /=, <, >, <=, >=
variables declaradas en sus
De concatenación: &
diseños.
Descripción por flujo de datos
o RTL
■ La tabla presentada a Operadores Definidos para los tipos
continuación contiene
una clasificación de los
operadores definidos en Bit, Boolean, Bit_vector,
el lenguaje VHDL, así Lógicos: std_logic y std_logic_vector
como los tipos de datos De relación: Integer, Bit, y Bit_vector
sobre los que se pueden
operar los mismos. Aritméticos: Integer
■ Los operadores lógicos
han sido extendidos al Concatenación: Bit, Bit_vector y para las
cadenas
uso en cualquier tipo de
señal lógica, ya sea
bit_vector, std_logic, o
std_logic_vector.
Descripción por flujo de datos
o RTL
■ Cuando los operadores lógicos
se usan con los tipos de
señales std_logic o bit, ellos
poseen su significado usual. Un ejemplo de operaciones lógicas con el
tipo de datos vector es el siguiente:
Los valores '0' y '1' son valores
constantes y deben estar ’’01100101’’xor’’10101101’’=’’11001000’’
Begin
--asignación de señales
end MUX1;
entity ejemplo13 is
port (EN_L, A: in std_logic;
Y : out std_logic);
end ejemplo13;
File: bufferPCK.vhd
Sentencias Concurrentes
Introducción
Las sentencias concurrentes son aquellas que se
ejecutan simultáneamente en la simulación. Se utilizan
para el modelado del hardware, deben formar parte
siempre del cuerpo de arquitecturas o de bloques y son
las siguientes:
■ Procesos
■ Asignaciones concurrentes a señal
■ Llamadas concurrentes o procedimientos
■ Instanciaciones de componentes
Sentencia when - else
Permite realizar asignaciones condicionales de valores, expresiones u
objetos o señales. Su sintaxis de declaración es:
Introducción
Las sentencias secuenciales son aquellas que
solamente pueden aparecer dentro de procesos y
subprogramas. Se ejecutan ordenadamente, de tal
manera que el simulador finaliza completamente
una sentencia antes de pasar a la siguiente.
Todo lo contrario de lo que ocurre en las sentencias
concurrentes en donde no importa el orden.
Sentencia wait
PROCESO_1: process(A,B)
begin
…
end process PROCESO_1;
PROCESO_2: process
begin
…
wait on A,B;
end process PROCESO_2
Case - when
La sentencia case-when permite seleccionar una entre varias
alternativas excluyentes entre sí de una expresión determinada, su
sintaxis general es la siguiente:
….
for I in 0 to 31 loop
if SENAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;
end if;
end loop;
….
While - Loop
El bucle se repite en tanto que la condición que aparece tras while sea
verdadera.
Ejemplo While-loop
….
I:=0;
while (I>32) loop
if SEÑAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;
end if
I:= I+1;
end loop;
....
Ahora si se nesecita declarar una variable (I) para poder establecer la
condición del bucle, no resulta ventajosa con respecto a for loop.
Loop
[etiqueta:] loop
sentencias secuenciales
end loop [etiqueta];