Engineering">
Lab 6 Digital 2 01112021
Lab 6 Digital 2 01112021
Lab 6 Digital 2 01112021
LABORATORIO 6
VHDL
1. Objetivo.- Introducir al alumno en el desarrollo y programación del
lenguaje VHDL
2. Marco Teórico.- 'VHDL' es un lenguaje de especificación definido por el IEEE
(Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) utilizado
para describir circuitos digitales y para la automatización de diseño electrónico . VHDL
es acrónimo proveniente de la combinación de dos acrónimos: VHSIC (Very High
Speed Integrated Circuit) y HDL (Hardware Description Language). Aunque puede ser
usado de forma general para describir cualquier circuito digital se usa principalmente
para programar PLD (Programable Logic Device - Dispositivo Lógico Programable),
FPGA (Field Programmable Gate Array), ASIC y similares.
Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas
CAD) y los diagramas de bloques, pero estos no son prácticos en diseños complejos.
Otros lenguajes para el mismo propósito, pero con un nivel de abstracción superior son
Verilog y ABEL.
Dentro del VHDL hay varias formas con las que se puede diseñar el mismo circuito y es
tarea del diseñador elegir la más apropiada.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
Secuencia de diseño
Procedimiento de diseño
El primer paso del diseño consiste en la construcción del diagrama en bloque del
sistema. En diseños complejos como en software los programas son generalmente
jerárquicos y VHDL ofrece un buen marco de trabajo para definir los módulos que
integran el sistema y sus interfaces, dejando los detalles para pasos posteriores.
El segundo paso es la elaboración del código en VHDL para cada módulo, para sus
interfaces y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se
puede utilizar cualquier editor para esta tarea, aunque el entorno de los programas de
VHDL incluye su propio editor de texto. Después de que se ha escrito algún código se
hace necesario compilarlo. El compilador de VHDL analiza este código y determina los
errores de sintaxis y chequea la compatibilidad entre módulos. Crea toda la información
necesaria para la simulación. El próximo paso es la simulación, la cual le permite
establecer los estímulos a cada módulo y observar su respuesta. El VHDL da la
posibilidad de crear bancos de prueba que automáticamente aplica entradas y compara
las salidas con las respuestas deseadas. La simulación es un paso dentro del proceso de
verificación. El propósito de la simulación es verificar que el circuito trabaja como se
desea, es decir es más que comparar entradas y salidas. En proyectos complejos se hace
necesario invertir un gran tiempo en generar pruebas que permitan evaluar el circuito en
un amplio rango de operaciones de trabajo. Encontrar errores en este paso del diseño es
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
mejor que al final, en donde hay que repetir entonces una gran cantidad de pasos del
diseño. Hay dos dimensiones a verificar:
Después de la verificación se está listo para entrar en la fase final del diseño. La
naturaleza y herramientas en esta fase dependen de la tecnología, pero hay tres pasos
básicos. El primero es la síntesis, que convierte la descripción en VHDL en un conjunto
de componentes que pueden ser realizados en la tecnología seleccionada. Por ejemplo,
con PLD se generan las ecuaciones en suma de productos. En ASIC genera una lista de
compuertas y un netlist que especifica cómo estas compuertas son interconectadas. El
diseñador puede ayudar a la herramienta de síntesis especificando requerimientos a la
tecnología empleada, como el máximo número de niveles lógicos o la capacidad de
salida que se requiere. En el siguiente paso de ajuste (fiting) los componentes se ajustan
a la capacidad del dispositivo que se utiliza. Para PLD esto significa que acopla las
ecuaciones obtenidas con los elementos AND – OR que dispone el circuito. Para el caso
de ASIC se dibujarían las compuertas y se definiría como conectarlas. En el último paso
se realiza la verificación temporal, ya que a esta altura es que se pueden calcular los
elementos parásitos, como las capacidades de las conexiones. Como en cualquier otro
proceso creativo, puede ser que ocasionalmente se avance dos pasos hacia delante y uno
hacia atrás (o peor).
Estructura de programa
VHDL fue diseñado con base a los principios de la programación estructurada. La idea
es definir la interfaz de un módulo de hardware mientras deja invisible sus detalles
internos. La entidad (ENTITY) en VHDL es simplemente la declaración de las entradas
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
ENTITY Nombre_entidad IS
PORT ( Nombre de señal: modo tipo de señal;
. . .
Nombre de señal: modo tipo de señal ) ;
END nombre_entidad ;
Nombre de señal; es una lista de uno o más identificadores separados por una
coma y seleccionados por el usuario para identificar las señales externas de la
interfaz.
MODO es una de las 4 siguientes palabras reservadas para indicar la dirección
de la señal:
Modo Descripción
IN En este modo las señales solo entran en la entidad
OUT Las señales salen de la entidad
Este modo se utiliza para las señales que además de salir de la entidad pueden
BUFFER
usarse como entradas realimentadas
Este modo se utiliza para señales bidireccionales. Se emplea en salida con
INOUT tres estados. Se puede asignar como sustituto de los tres modos anteriores,
pero no se aconseja pues dificulta la comprensión del programa.
TIPO Características
BIT En este tipo las señales solo toman los valores de "1" y "0"
Booleana En este tipo las señales solo toman los valores de True y False
En este tipo las señales toman 9 valores, entre ellos tenemos: "1",
Std_logic
"0", "Z" (para el 3.er estado), "-" (para los opcionales).
En este tipo las señales toman valores enteros. Los 1 y los 0 se
Integer
escriben sin “
En este tipo los valores de las señales son una cadena de unos y
Bit_Vector
ceros. Ejemplo: “1000”
En este tipo los valores de las señales son una cadena de los nueve
Std_Logic_Vector
valores permisibles para el tipo std_logic.
Contiene todos los caracteres ISO de 8 bits, donde los primeros 128
Character
son los caracteres ASCII.
Ejemplo: “1-0Z” -231 + 1 231 - 1 Integer -2 147 483 647 2 147 483 647
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
Operadores
Tipo Std_logic
U Uninitialized (Sin inicializar)
X Forcing Unknown (Forzar valor desconocido)
0 Forcing 0 (Forzar un cero)
1 Forcing 1 (Forzar un uno)
Z High Impedance (Alta impedancia)
W Weak Unknown (Valor débil desconocido)
L Weak 0 (Cero débil)
H Weak 1 (uno débil)
- Don’t care (Cualquier valor)
Además el usuario puede definir otros tipos de señales, lo que resulta muy conveniente
en algunos casos, como en el diseño de máquinas de estados. El lenguaje VHDL
concede máxima importancia a los tipos de señales, no se admite realizar una asignación
mezclando tipos diferentes. Un PORT de una entidad y sus modos y tipos pueden ser
vistos por otros módulos que la utilicen. La operación interna de la entidad está definida
en la architecture cuya sintaxis general se muestra a continuación.
Ejemplo, escriba la declaración de la entidad para un circuito digital con dos entradas a
y b y una salida F según se muestra en la siguiente figura.
ENTITY ejemplo1 IS
PORT ( a, b : IN bit;
F : OUT bit );
END ejemplo1 ;
BEGIN
Enunciado concurrente
. . .
Enunciado concurrente
END nombre_arquitectura;
Las declaraciones y definiciones que preceden al BEGIN, pueden estar presentes todas,
algunas o ninguna. Esto depende del tipo de diseño que se esté realizando. No obstante
la declaración de señales se utiliza mucho, pues contribuye entre otras cosas a la
claridad del diseño.
Operadores en VHDL
Operadores Definidos en VHDL para los tipos: Lógicos AND, OR, XOR, NOT,
NAND, NOR, XNOR Bit y Booleanos De relación =, /=, <, >, >=, <= Integer, Bit y
Bit_Vector Concatenación & Bit, Bit_Vector y para las cadenas Aritméticos +, -, *, /,
Mod, Rem, Abs, ** Integer* Mod: Módulo de la división. Rem: Resto de la división
Abs: valor absoluto.
o exponentiation.
‘-‘;
END and_2ent;
Ejemplo; Realice el programa en VHDL de un circuito con dos entradas y una salida f.
La entidad es la misma anterior, pero supongamos que la función que realiza el circuito
es tal que la salida será 0 solo si las entradas son iguales (operación XOR).
Ejemplo: Escriba en VHDL un fichero para obtener una compuerta NOR de dos
entradas. Utilice señales tipo Booleana y asignaciones condicionales de la forma
WHEN... ELSE.....
ENTITY Boole_4 IS
PORT ( a, b: IN Boolean;
Y: OUT Boolean);
END Boole_4;
ENTITY Boole_5 IS
PORT ( a, b: IN Boolean;
Y: OUT Boolean);
END Boole_5;
Sintaxis para el trabajo con vectores. Los vectores se describen como: a(3), a(2), a(1),
a(0), siempre comenzando por 0.Cuando un vector se declara en orden descendente
utilizando la palabra clave DOWNTO por ejemplo (3 DOWNTO 0), debemos
interpretar que el MSB es a(3) y el LSB es a(0). Si se declara (0 to 3), entonces el LSB
es a(3) y el MSB es a(0).
Bibliotecas
aparezca escrito "Library IEEE", de esta forma dicha biblioteca se hace visible para el
diseño.
Paquetes
En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en
los diferentes diseños que invoquen su utilización. Un paquete muy utilizado es el
paquete estándar IEEE_STD_LOGIC_1164.ALL; La utilización de un paquete en un
diseño se realiza invocando su empleo mediante la cláusula USE y el nombre del
paquete. Por ejemplo USE IEEE_STD_LOGIC_1164.ALL;
La terminación ALL, permite utilizar todas las definiciones y objetos que contiene
dicho paquete. Además del estándar, existen otros paquetes de utilización general y
también los diseñadores que trabajan con VHDL pueden definir sus propios paquetes, lo
que les permite reutilizar diseños realizados anteriormente como parte de nuevos
diseños.
PACKAGE nombre_paquete IS
Declaración de tipos
Declaración de señales.
Declaración de constantes
Declaración de componentes
Definición de funciones
Definición de procedimientos
END nombre_paquete
Esta última parte que aparece entre los dos END, la relacionada con el cuerpo del
paquete puede o no existir y en el caso de existir las declaraciones y definiciones
contenidos en la misma son locales, visibles solo dentro del paquete, mientras que las
declaraciones y definiciones contenidas en la primera parte del paquete son visibles para
todos los diseños que los utilicen.
COMPONENT nombre_componente
PORT ( Nombre de señal: modo tipo de señal;
...
Nombre de señal: modo tipo de señal);
END COMPONENT;
Entradas Salida a b c T 0 0 - 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0
ENTITY T IS
PORT (a,b,c: IN BIT;
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
T: OUT BIT);
END T;
ARCHITECTURE T OF T IS
BEGIN
T <= ‘1’ WHEN a = ‘0’ AND b = ‘1’ AND c = ‘1’ ELSE
‘1’ WHEN a = ’1’ AND b = ‘0’ AND c = ‘0’ ELSE
‘0’;
END T;
PACKAGE TPKG IS
COMPONENT T -- El nombre del componente tiene que ser igual a la
entidad que se empaqueta
PORT (a,b,c: IN BIT;
T: OUT BIT);
END COMPONENT;
END TPKG;
Ejemplos de programas
Para llevar a cabo un diseño en VHDL, se recomienda hacer uso de las librerías
genéricas de la IEEE, para garantizar la flexibilidad del diseño a cualquier herramienta
de compilación y síntesis, además en el diseño se tienen dos partes principales: la
entidad es como una caja negra en la que se definen entradas y salidas pero no se tiene
acceso al interior, y es lo que usa cuanto se reutiliza un diseño dentro de otro; la
arquitectura, que es donde se describe el diseño de la forma que se ha visto antes.
Otros elementos del lenguaje son las librerías, paquetes, funciones...
Multiplexor
Este ejemplo simula un multiplexor de dos entradas. Es un ejemplo sencillo que muestra
como describir un elemento a partir de su funcionamiento.
entity MUX2a1 is
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
port( a: in std_logic;
b: in std_logic;
sel: in std_logic;
z: out std_logic);
end entity
entity MUX4a1 is
port( a: in std_logic;
b: in std_logic;
c: in std_logic;
d: in std_logic;
z: out std_logic;
sel: in std_logic_vector(1 downto 0));
end entity;
architecture dataflow of MUX4a1 is
begin
process(a,b,c,d,sel) begin
case sel is
when "00" => z <= a;
when "01" => z <= b;
when "10" => z <= c;
when "11" => z <= d;
end case;
end process;
end dataflow;
Biestable
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
entity BIEST is
port(RST: in std_logic; -- Reset
asincrono
CLK: in std_logic; -- Reloj
D: in std_logic; -- Dato de
entrada
Q: out std_logic); -- Salida (dato
guardado en el biestable)
end BIEST;
architecture D of BIEST is
begin
biest_D : process(RST, CLK)
begin
if RST = '1' then -- Reset
asincrono
Q <= '0';
elsif CLK'event and CLK = '1' then -- Condicion de
reloj activo por flanco de subida
Q <= D;
end if;
end process;
end D;
Contador
Este es un ejemplo de un sistema que contará pulsos de un reloj digital (CLK) hasta
llegar a 1000 y entonces volverá a empezar. La inicialización se consigue con un reset
(RST).
library IEEE; --
bibliotecas
use ieee.std_logic_1164.all;
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
use ieee.std_logic_unsigned.all;
entity CONTADOR is
port(RST: in std_logic;
CLK: in std_logic; -- entradas
salida: inout std_logic_vector(9 downto 0)); -- salidas
end entity;
Después de compilar este programa habría que indicar a la herramienta encargada del
diseño las restricciones oportunas para asignar las señales de entrada y salida a las
patillas del chip donde se programará o bien usar este diseño dentro de otro.
Corrección Hamming
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity hamcorr is
port(
DU: in STD_LOGIC_VECTOR(1 to 7);
DC: out STD_LOGIC_VECTOR( 1 to 7);
NOERROR: out STD_LOGIC
);
end hamcorr;
architecture hamcorr of hamcorr is
function syndrome (D:STD_LOGIC_VECTOR)
return STD_LOGIC_VECTOR is
variable SYN: STD_LOGIC_VECTOR (2 downto 0);
begin
SYN(0):= D(1) xor D(3) xor D(5) xor D(7);
SYN(1):= D(2) xor D(3) xor D(6) xor D(7);
SYN(2):= D(4) xor D(5) xor D(6) xor D(7);
return(SYN);
end syndrome;
begin
process(DU)
variable i : INTEGER;
begin
DC<=DU;
i:=CONV_INTEGER(syndrome(DU));
if i=0 then NOERROR <='1';
else NOERROR <='0'; DC(i) <=not DU(i); end if;
end process;
end hamcorr;
Con este código obtenemos la corrección de los errores de una palabra mediante
Hamming.
Hola Mundo
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________
entity hola is
end entity hola;
PRACTICA EN LABORATORIO