Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SISTEMAS DIGITALES I
1
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
2
Ejemplo de entidad y arquitectura
ENTITY nand2 IS I1
PORT(I1,I2: IN BIT; O
O: OUT BIT); I2
END nand2;
ARCHITECTURE C1 OF nand2 IS
BEGIN
O<=NOT(I1 AND I2);
END C1;
3
Estructura Básica de un programa VHDL.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY <nombre_entidad> IS
PORT(<nombre_pin>: <modo><tipo>;
<nombre_pin>: <modo><tipo>);
END <nombre_entidad>;
Tipos de datos
4
Ejemplos de tipos de datos
BIT: describe valores binarios. Rango: ‘0’, ‘1’
Ejemplo:
ENTITY nand2 IS
PORT(A,B: IN BIT;
F: OUT BIT);
END nand2;
BIT_VECTOR: describe cadenas de bits. Rango: conjunto de
bits. Se escribe entre comillas: “1010”
Ejemplo:
ENTITY manejador IS
PORT (S: IN BIT_VECTOR (3 DOWNTO 0);
X: OUT BIT_VECTOR (1 TO 7));
END manejador;
5
Estructura de un programa
escrito en VHDL
En VHDL una arquitectura ARCHITECTURE nombre_arq OF nombre_ent IS
tiene dos partes: La
región de las declaraciones [Declaración de señales]
[Declaración de tipos]
y el cuerpo de la [Declaración de variables]
arquitectura. [Declaración de constantes]
[Declaración de componentes]
La región de declaraciones [Especificación de atributos]
precede la palabra clave
BEGIN. Puede ser usada BEGIN
6
Descripción Estructural o lógica
En la descripción estructural el cuerpo
de la arquitectura se transforma en una component nombre_componente
descripción exacta del esquema lógico.
En la descripción estructural VHDL usa
port (señales_entrada: modo tipo;
las declaraciones de componentes
señales_salida: modo tipo);
La cantidad de declaraciones de
componentes debe de corresponder con
la cantidad de componentes distintas end component;
que formarán parte del circuito físico
que realiza la función lógica a diseñar.
La declaración component posee una
estructura similar a la de una entidad,
pero no tiene la misma connotación.
7
Descripción Estructural o lógica
Ej: Realizar la
descripción en VHDL de A
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;
8
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.
9
Descripción Estructural o lógica
10
Descripción Estructural o lógica
Ej: Realizar la
descripción VHDL de
tipo estructural de un
decodificador de 2
entradas y 4 salidas,
activadas con el nivel
bajo, y una entrada
de habilitación,
también activa en el
nivel bajo.
11
Descripción Estructural o lógica
begin
--instanciación de componentes
En el cuerpo de la U1: INV port map (A(0),AN(0));
arquitectura se observa la U2: INV port map (A(1),AN(1));
instanciación de los 7 U3: INV port map (NEN,EN);
componentes, los cuales U4: NAND3 port map (AN(1), EN, AN(0), NY(0));
son conectados usando la U5: NAND3 port map (AN(1), EN, A(0), NY(1));
cláusula port map con U6: NAND3 port map (A(1), EN, AN(0), NY(2));
asociación implícita. U7: NAND3 port map (A(1), EN, A(0), NY(3));
end decod_a;
12
Descripción por flujo de datos
o RTL
Ejemplo: La arquitectura por descripción
En la aproximación por flujo de de flujo de datos de una compuerta XOR
de dos entradas es:
datos se utilizan declaraciones
architecture XOR2 of XOR is
de asignación de señales, así
begin
como operadores lógicos que
--asignación de señales
no se emplean en el estilo de Y <= (not A and B) or (A and not B);
escritura estructural. end XOR2;
Los operadores lógicos que
tiene el VHDL en sus librerías
son: not, and, or, nand, nor,
xor y xnor.
13
Descripción por flujo de datos
o RTL
El VHDL, como otros Lógicos: AND, OR, XOR, NOT, NAND,
lenguajes de programación NOR y XNOR
posee un conjunto de Aritméticos: +, -, * (multiplicación solo
operadores que se usan con por 2) y /
las señales o con las De relación: =, /=, <, >, <=, >=
variables declaradas en sus De concatenación: &
diseños.
14
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
Los valores '0' y '1' son valores tipo de datos vector es el siguiente:
15
Descripción por flujo de datos
o RTL
En el cuerpo de la arquitectura de -- asignación de señales
un diseño VHDL por RTL se usan, Nombre de la señal1<=expresion;
sentencias concurrentes de
-- asignación condicional de señales
asignación de señales, cuyo formato
Nombre de la señal2<=expresión1
se presenta a continuación. when expresión booleana else
En una descripción RTL, el valor de expresión2;
la expresión del miembro de la Nombre de la señal3<=expresión3
derecha de la asignación de señales when expresión booleana else
( <= ), se lo transfiere al nombre …
de la señal del miembro de la Nombre de la señal4<=expresiónX
izquierda. when expresión booleana else
ExpresiónY;
Ambos miembros deben ser del
mismo tipo, para que no existan
incompatibilidades.
E=(a0b0)(a1b1)(a2b2)(a3b3)
16
Descripción por flujo de datos
o RTL
Library ieee;
Ejemplo 8: Use ieee.std_logic_1164.all;
Realice una descripción en
VHDL de la arquitectura de Entity comp is
un comparador de dos Port (a, b: in bit_vector(3 downto 0);
entradas, a y b, de 4 bits E: out bit);
cada una y una salida E de 1 End comp;
bit.
Architecture comparador_2 of comp is
Otra solución más compacta Begin
se puede construir usando la --asignación de señales
estructura when – else. Esta
solución no necesita del E<=‘1’ when (a=b) else ‘0’;
conocimiento del circuito
lógico del comparador. end comparador_2;
17
Descripción por flujo de datos
o RTL
Otro tipo de sentencia de asignación
concurrente usada en la descripción
por flujo de datos es la asignación --asignación de señal seleccionada
de señal seleccionada, cuya sintaxis
se expresa a continuación. Este tipo with expresión select
de declaración de asignación utiliza
la estructura with – select – when señal <= valor1 de la señal when alternativa 1,
En esta estructura se evalúa la valor2 de la señal when alternativa 2,
expresión que acompaña a la ...
declaración with y cuando el valor valorX de la señal when alternativa n;
coincide con una de las alternativas
señaladas después de la palabra
clave when, entonces el valor
correspondiente a esta alternativa se
lo asigna al nombre de la señal.
18
Descripción por flujo de datos
o RTL
Cuando no se cubren todos
los posibles valores de las --asignación de señal seleccionada
alternativas, se debe usar la
with expresión select
palabra clave de VHDL
others, con el último when señal <= valor1 de la señal when alternativa 1,
en este tipo de asignación valor2 de la señal when alternativa 2,
...
de señales. valorn de la señal when others;
19
Descripción por flujo de datos
o RTL
Ejemplo 10: entity detector is
port (N: in integer range (15 downto 0);
Escriba en VHDL la P: out std_logic);
end detector;
descripción de un circuito
combinacional, el cual recibe architecture num_par of detector is
Begin
en sus entradas los dígitos del -- asignación de señal seleccionada
sistema decimal codificados with N select
P <= ‘1’ when 0 | 2 | 4 | 6 | 8,
en NBCD y tiene una salida P, ‘0’ when 1 | 3 | 5 | 7 | 9,
que va a ‘1’ cuando se detecta ‘-’ when others; -- opcionales
end num_par;
en sus entradas un dígito par.
20
Descripción por flujo de datos
o RTL
architecture MUX1 of MUX is
Begin
--asignación de señales
end MUX1;
21
Descripción por flujo de datos
o RTL
Ejemplo 13: Diseñe un
buffer con tercer estado
cuyo circuito se --file: ejemplo13.vhd
muestra. library ieee;
use ieee.std_logic_1164.all;
entity ejemplo13 is
port (EN_L, A: in std_logic;
Y : out std_logic);
end ejemplo13;
22
Descripción por flujo de datos
o RTL
Ejemplo 15: library ieee;
use ieee.std_logic_1164.all;
Empaquetar el diseño
del buffer con tercer PACKAGE bufferPCK is
estado cuyo circuito se component ejemplo13
port( EN_L, A: in std_logic;
muestra en la figura. Y: out std_logic);
end component;
end bufferPCK;
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
23
Sentencia when - else
Permite realizar asignaciones condicionales de valores, expresiones u
objetos o señales. Su sintaxis de declaración es:
24
Sentencia with-select
Su sintaxis es la siguiente:
25
Sentencias Secuenciales
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
26
Sentencia Wait on
Wait on produce el mismo efecto que la lista de sensibilidad de un
proceso. Por ejemplo:
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:
27
Ejemplo de Case-When
architecture CON_CASE of SUMADOR is
begin
process
variable X: bit_vector(2 downto 0);
begin
X<= ENABLE & A & B;
case X is
when “100”=> SUMA <=“00”;
when “101”| “110” => SUMA <=“01”;
when “111” => SUMA <= “10”;
when others => null;
end case;
end process;
end CON_CASE
Bucles
28
For - Loop
Ejemplo For-loop
….
for I in 0 to 31 loop
if SENAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;
end if;
end loop;
….
29
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.
30
Loop
[etiqueta:] loop
sentencias secuenciales
end loop [etiqueta];
31