SimulacionVHDLCircuitosMSI
-
Upload
angel-vazquez -
Category
Documents
-
view
145 -
download
0
Transcript of SimulacionVHDLCircuitosMSI
Universidad de El Salvador
Facultad de Ingeniería y Arquitectura
Escuela de Ingeniería Eléctrica
Ciclo I/2012
“Simulación VHDL de circuitos MSI”
Guía No 2
CATEDRA: SISTEMAS DIGITALES I
DOCENTE: ING. SALVADOR GERMAN
AUTORES: MAGAÑA VÁSQUEZ, ÁNGEL AROLDO MV02001
CRESPO LEIVA, ERICK ARMANDO CL03022
Ciudad Universitaria, 31 de Mayo de 2012
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 2
INDICE
Portada……………………………………………………………………………………………………………………………………………i
Índice……………………………………………………………………………………..………………………………………………………ii
Introducción…………………………………………………………………………………………………………………………………..3
Objetivos……………………………………………………………………………………………………………………………………….4
Marco Teórico……………………………………………………………………………………………………………………………….5
Obtención del Software…………………………………………………………………………………………………………..…..12
Pasos para la Instalación del Software………………………………………………………………………………………….12
Desarrollo de los Circuitos…………………………………………………………………………………………………………….16
Descripción de los pasos para la obtención de la solución……………………………………………….16
Código VHDL…………………………………………………………………………………………………………………….19
Graficos de cada Circuito en TINA……………………………………………………………………………………22
Capturas del funcionamiento del circuito en TINA………………………………………………………….25
Resultados de la
Investigación……………………………………………………….……………………………………………………………………….35
Observaciones………………………………………………………………………………………………………………………………37
Conclusiones…………………………………………………………………………………………………………………………………38
Bibliografía……………………………………………………………………………………………………………………………………39
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 3
INTRODUCCION
En abril de 1949, el ingeniero alemán Werner Jacobi (Siemens AG) completa la primera solicitud de
patente para circuitos integrados con dispositivos amplificadores de semiconductores. Jacobi
realizó una típica aplicación industrial para su patente, la cual no fue registrada. Más tarde, la
integración de circuitos fue conceptualizada por el científico de radares Geoffrey W.A. Dummer,
que estaba trabajando para la Royal Radar Establishment del Ministerio de Defensa Britanico. El
primer circuito integrado fue desarrollado en 1959 por el ingeniero Jack Kilby pocos meses
después de haber sido contratado por la firma Texas Instrument. Se trataba de un dispositivo
de Germanio que integraba seis transistores en una misma base semiconductora para formar
un oscilador electrónico de rotación de fase. Los circuitos integrados se encuentran en todos los
aparatos electrónicos modernos, como automóviles, televisores, reproductores de CD,
reproductores de MP3, teléfonos móviles, computadoras, etc. El desarrollo de los circuitos
integrados fue posible gracias a descubrimientos experimentales que demostraron que los
semiconductores pueden realizar algunas de las funciones de las valvula termoiónica. La
integración de grandes cantidades de diminutos transistores en pequeños chips fue un enorme
avance sobre el ensamblaje manual de los tubos de vacío (válvulas) y en la fabricación de circuitos
electrónicos utilizando componentes electronicos. Son tres las ventajas más importantes que
tienen los circuitos integrados sobre los circuitos electrónicos construidos con componentes
discretos: su menor costo; su mayor eficiencia energética y su reducido tamaño. El bajo costo es
debido a que los CI son fabricados siendo impresos como una sola pieza por fotolitografia a partir
de una oblea electronica, generalmente de Silicio, permitiendo la producción en cadena de
grandes cantidades, con una muy baja tasa de defectos. La elevada eficiencia se debe a que, dada
la miniaturización de todos sus componentes, el consumo de energía es considerablemente
menor, a iguales condiciones de funcionamiento que un homólogo fabricado con componentes
discretos. Finalmente, el más notable atributo, es su reducido tamaño en relación a los circuitos
discretos; para ilustrar esto: un circuito integrado puede contener desde miles hasta varios
millones de transistores en unos pocos centímetros cuadrados. En ese momento (finales de los
años setenta) se constata el enorme desfase que existe entre tecnología y diseño. La considerable
complejidad de los chips que se pueden fabricar, implica unos riesgos y costes de diseño
desmesurados e imposibles de asumir por las empresas. Es entonces, cuando diversos grupos de
investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripción de hardware"
cada uno con sus peculiaridades. Empresas tales como IBM con su IDL, el TI - HDL de Texas
Instruments, ZEUS de General Electric, etc., así como los primeros prototipos empleados en las
universidades, empezaron a desarrollarse buscando una solución a los problemas que presentaba
el diseño de los sistemas complejos. Sin embargo, estos lenguajes nunca alcanzaron el nivel de
difusión y consolidación necesarios por motivos distintos. Unos, los industriales, por ser propiedad
de la empresa permanecieron encerrados en ellas y no estuvieron disponibles para su
estandarización y mayor difusión, los otros, los universitarios, perecieron por no disponer de
soporte ni mantenimiento adecuado. Alrededor de 1981 el Departamento de Defensa de los
Estados Unidos desarrolla un proyecto llamado VHSIC (Very High Speed Integrated Circuit ) su
objetivo era rentabilizar las inversiones en hardware haciendo más sencillo su mantenimiento. Se
pretendía con ello resolver el problema de modificar el hardware diseñado en un proyecto para
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 4
utilizarlo en otro, lo que no era posible hasta entonces porque no existía una herramienta
adecuada que armonizase y normalizase dicha tarea, era el momento de los HDL's.
OBJETIVOS
OBJETIVO GENERAL
Simular los principales circuitos digitales MSI mediante librerías VHDL
OBJETIVOS ESPECIFICOS
Utilizar la herramienta TINA para simular los circuitos MSI
Realizar el aprendizaje necesario para diseñar nuestros propios circuitos MSI
Comprender el funcionamiento básico de los principales circuitos MSI
Realizar la programación de circuitos MSI con VHDL
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 5
MARCO TEORICO
La lógica combinacional es probablemente la más fácil de diseñar, ya que en cada momento las salidas de un circuito combinacional sólo dependen del estado actual de sus entradas (el circuito no tiene memoria). En esta unidad se modelarán los circuitos combinacionales más utilizados en el diseño lógico mediante el lenguaje de descripción de
hardware VHDL. DISEÑO BASADO EN ELEMENTOS MSI Un circuito combinacional práctico puede tener docenas de entradas y salidas y puede requerir cientos, miles, e incluso millones de términos para describir como una suma de productos, y miles y miles de millones de renglones para describir en una tabla de verdad. De este modo, la mayoría de los problemas de diseño lógico combinacional reales son demasiado grandes para resolverse mediante la aplicación de la “fuerza bruta” de técnicas teóricas. La clave del desarrollo de estos sistemas es el pensamiento estructurado. Un circuito o sistema complejo se concibe como una colección de subsistemas más pequeños, cada uno de los cuales tiene una descripción más sencilla. Estos bloques combinacionales de construcción constituyen los ladrillos con los que se edifican los sistemas combinacionales. Uno de los bloques electrónicos más importantes de este tipo lo constituyen los denominados elementos MSI (Medium Scale of Integration) combinacionales estudiados en la asignatura de Electrónica Digital: multiplexores, decodificadores, comparadores, sumadores y demás. Las estructuras más importantes se describen en esta unidad desde una perspectiva de los lenguajes de descripción de hardware, en concreto usando el lenguaje VHDL.
DESCRIPCIÓN VHDL DE LÓGICA COMBINACIONAL Para describir circuitos combinacionales utilizaremos sentencias de asignación concurrentes y procesos. · Sentencias de asignación concurrentes. Las sentencias de asignación concurrentes van fuera de proceso. Esto se debe a que en una declaración concurrente no importa el orden en que se escriban las señales, ya que el resultado para una determinada función sería el mismo. Se utilizarán tres tipos de sentencias de asignación concurrentes: Sentencias de asignación simples, por ejemplo: Y <= A and B; Sentencias de asignación condicionales, por ejemplo: Z <= B when S = ‘1’ else A; Sentencias de selección, por ejemplo: with S select C <= ‘1’ when “00”; ‘0’ when others;
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 6
Siempre hay que evitar la realimentación combinacional, ya que esto modela elementos de memoria asíncronos. Es decir, hay que evitar que una misma señal aparezca en el lado izquierdo y en el lado derecho de la sentencia de asignación: -- Evitar sentencias de este tipo: Y <= Y nand X; · Procesos. Se debe respetar las siguientes reglas:
Si una señal es leída en el interior de un proceso (aparece en el lado derecho de una sentencia de asignación o en una condición), debe aparecer en su lista de sensibilidad.
Si a una señal se le asigna un valor de forma condicional (con sentencias if o case) nos debemos asegurar que no existen condiciones para las cuales el valor de la señal no se ha definido en el código. En VHDL las señales mantienen su valor hasta que se les asigna uno nuevo; por lo tanto, si para una señal dada el valor de una señal está indefinido, el compilador sintetiza un latch (biestable) que almacena la señal.
MULTIPLEXORES Un circuito multiplexor acepta N entradas y presenta una salida en la que aparecerá el valor lógico asociado a una de estas entradas. La selección de cuál de esas entradas es la que aparece en la salida se determina por un conjunto de M señales de control, cumpliéndose que N = 2M. La salida presentará aquella entrada cuyo índice concuerda con el número codificado en binario en las líneas de control (o selección).
· Ej_1: Multiplexor 4 a 1. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Multiplexor4a1 IS PORT ( svEntrada: IN std_logic_vector(3 DOWNTO 0); sSalida: OUT std_logic; svSeleccion: IN std_logic_vector(1 DOWNTO 0)); END Multiplexor4a1; ARCHITECTURE Multiplexor4a1Arch OF Multiplexor4a1 IS BEGIN WITH svSeleccion SELECT sSalida <= svEntrada(0) WHEN "00", svEntrada(1) WHEN "01", svEntrada(2) WHEN "10", svEntrada(3) WHEN OTHERS; -- Importante. No olvidar. END Multiplexor4a1Arch;
DECODIFICADORES Un decodificador es un circuito lógico con N entradas y 2N salidas que funciona de forma tal que en cada instante se encuentra activa la salida correspondiente con la codificación binaria codificada en la entrada. · Ej_2: Decodificador 3 a 8 con salida activa a nivel alto.
LIBRARY IEEE;
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 7
USE IEEE.STD_LOGIC_1164.ALL; ENTITY Decodificador3a8 IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0); svSalida: OUT std_logic_vector(7 DOWNTO 0)); END Decodificador3a8; ARCHITECTURE Decodificador3a8Arch OF Decodificador3a8 IS BEGIN WITH svEntrada SELECT -- Orden salidas: "76543210" svSalida <= "00000001" WHEN "000", "00000010" WHEN "001", "00000100" WHEN "010", "00001000" WHEN "011", "00010000" WHEN "100", "00100000" WHEN "101", "01000000" WHEN "110", "10000000" WHEN OTHERS; END Decodificador3a8Arch;
Ej_3: Decodificador 3 a 8 con salida activa a nivel alto y con señal de enable (Versión Concurrente). LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Decodificador3a8En IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0); svSalida: OUT std_logic_vector(7 DOWNTO 0); sEnableH: IN std_logic); END Decodificador3a8En; ARCHITECTURE Decodificador3a8EnArch OF Decodificador3a8En IS --Señal auxiliar para una asignación concurrente intermedia. signal svAux: std_logic_vector(7 DOWNTO 0); BEGIN --Asignación del valor temporal WITH svEntrada SELECT -- "76543210" svAux <= "00000001" WHEN "000", "00000010" WHEN "001", "00000100" WHEN "010", "00001000" WHEN "011", "00010000" WHEN "100", "00100000" WHEN "101", "01000000" WHEN "110", "10000000" WHEN OTHERS; --Asignación a la salida en función de la señal de ENABLE. svSalida <= svAux WHEN sEnableH = '1' ELSE "00000000";
END Decodificador3a8EnArch;
Ej_4: Decodificador 3 a 8 con salida activa a nivel alto y con señal de enable (Versión Secuencial). LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Decodificador3a8En IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0); svSalida: OUT std_logic_vector(7 DOWNTO 0); sEnableH: IN std_logic); END Decodificador3a8En; ARCHITECTURE Decodificador3a8EnArch2 OF Decodificador3a8En IS BEGIN DecEnable: PROCESS (svEntrada, sEnableH) BEGIN -- Definición del proceso de forma secuencial (estructura IF..ELSE).
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 8
IF (sEnableH='1') THEN CASE svEntrada IS WHEN "000" => svSalida <= "00000001"; WHEN "001" => svSalida <= "00000010"; WHEN "010" => svSalida <= "00000100"; WHEN "011" => svSalida <= "00001000"; WHEN "100" => svSalida <= "00010000"; WHEN "101" => svSalida <= "00100000"; WHEN "110" => svSalida <= "01000000"; WHEN OTHERS => svSalida <= "10000000"; END CASE; ELSE svSalida <= "00000000"; END IF; END PROCESS DecEnable; END Decodificador3a8EnArch2;
· Ej_5: Decodificador BCD a display de 7 segmentos (Ánodo Común). Ánodo común Þ Cada segmento se enciende con ‘0’. Cátodo común Þ Cada segmento se enciende con ‘1’.
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DecodificadorBCD7seg IS PORT ( svEntrada: IN std_logic_vector(3 DOWNTO 0); svSalida: OUT std_logic_vector(6 DOWNTO 0)); END DecodificadorBCD7seg; ARCHITECTURE DecodificadorBCD7segArch OF DecodificadorBCD7seg IS BEGIN Dec7seg: PROCESS (svEntrada) BEGIN CASE svEntrada IS -- Orden de las salidas (segmentos) “abcdefg” WHEN "0000" => svSalida <= "0000001"; WHEN "0001" => svSalida <= "1001111"; WHEN "0010" => svSalida <= "0010010"; WHEN "0011" => svSalida <= "0000110"; WHEN "0100" => svSalida <= "1001100"; WHEN "0101" => svSalida <= "0100100"; WHEN "0110" => svSalida <= "0100000"; WHEN "0111" => svSalida <= "0001110"; WHEN "1000" => svSalida <= "0000000"; WHEN "1001" => svSalida <= "0000100"; WHEN OTHERS => svSalida <= "1111111"; END CASE; END PROCESS Dec7seg; END DecodificadorBCD7segArch;
CODIFICADORES Un codificador es un circuito lógico con 2N entradas y N salidas que funciona de forma tal que en cada instante se encuentra codificado en binario en la salida el número decimal correspondiente a la entrada activa. Es necesario establecer una prioridad para los casos en los que sean varias las entradas activas en un momento determinado. · Ej_6: Codificador 8 a 3.
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 9
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Codificador8a3 IS -- El uso de un rango clarifica el código. PORT ( iEntrada: IN INTEGER RANGE 0 TO 7; svSalida: OUT std_logic_vector(2 DOWNTO 0)); END Codificador8a3; ARCHITECTURE Codificador8a3Arch OF Codificador8a3 IS BEGIN Codif: PROCESS (iEntrada) BEGIN -- El uso de una estructura tipo IF_THEN_ELSE -- permite establecer de forma clara la prioridad -- del proceso de codificación. IF iEntrada = 0 THEN svSalida <= "000"; ELSIF iEntrada = 1 THEN svSalida <= "001"; ELSIF iEntrada = 2 THEN svSalida <= "010"; ELSIF iEntrada = 3 THEN svSalida <= "011"; ELSIF iEntrada = 4 THEN svSalida <= "100"; ELSIF iEntrada = 5 THEN svSalida <= "101"; ELSIF iEntrada = 6 THEN svSalida <= "110"; ELSE svSalida <= "111"; END IF; END PROCESS; END Codificador8a3Arch;
· Ej_7: Codificador 8 a 3. Uso de la macro NULL. VHDL’93 soporta la macro NULL, la cual permite
dar aún más claridad a la descripción de funcionamiento de los elementos modelados en VHDL. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Codificador8a3 IS -- El uso de un rango clarifica el código. PORT ( iEntrada: IN INTEGER RANGE 0 TO 7; svSalida: OUT std_logic_vector(2 DOWNTO 0)); END Codificador8a3; ARCHITECTURE Codificador8a3Arch OF Codificador8a3 IS BEGIN Codif: PROCESS (iEntrada) BEGIN -- El uso de una estructura tipo IF_THEN_ELSE -- permite establecer de forma clara la prioridad -- del proceso de decodificación. IF iEntrada = 0 THEN svSalida <= "000"; ELSIF iEntrada = 1 THEN svSalida <= "001"; ELSIF iEntrada = 2 THEN svSalida <= "010"; ELSIF iEntrada = 3 THEN svSalida <= "011"; ELSIF iEntrada = 4 THEN svSalida <= "100"; ELSIF iEntrada = 5 THEN svSalida <= "101"; ELSIF iEntrada = 6 THEN svSalida <= "110"; ELSIF iEntrada = 7 THEN svSalida <= "111"; ELSE NULL; -- La sentencia ELSE NULL; indica de forma clara que ante otras posibles -- valores no controlados asociados a la entrada, el circuito no hará nada. -- Suele ser muy útil con el tipo std_logic, donde valores como ‘Z’, ‘H’, ‘L’, ‘U’… -- contemplados por este tipo podrían originar comportamientos extraños. END IF; END PROCESS; END Codificador8a3Arch;
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 10
DISPOSITIVOS TRIESTADO Los dispositivos triestado básicamente consisten en componentes básicos combinacionales que presentan una señal adicional que permite controlar la salida, de forma que ésta presente un funcionamiento en condiciones normales o pase a un estado adicional de alta impedancia ‘Z’, de forma que no interfiera eléctricamente con otros elementos que podrían compartir la ruta de datos conectada a su salida.
TIPOS DE DESCRIPCION
Como se ha dicho antes, VHDL sirve para describir un circuito electrónico, pero el mismo circuito puede ser descrito de varias formas. Las formas de hacerlo son:
Descripción de comportamiento Descripción de flujo de datos (RTL Registred Transfer Level) Descripción estructural
A continuación se presenta una descripción de cada tipo de descripción y un ejemplo en VHDL, obviamente aún no se ha visto la sintaxis de VHDL por lo que habrá partes del código que el lector no pueda entender. El código se pone sólo para poder comparar las distintas formas de descripción. Los tres ejemplos de código son sólo las arquitecturas, los tres podrían tener como entidad:
ENTITY mux PORT(control, entrada1, entrada2: IN BIT; salida: OUT BIT); END mux;
DESCRIPCION DE COMPORTAMIENTO
Una descripción de comportamiento de un multiplexor de dos entradas, una salida y una señal de selección sería: la salida será igual a la primera entrada si la señal de control está desactivada y la salida será la segunda entrada si la señal de control está activada.
En VHDL la arquitectura de este multiplexor para la entidad llamada mux sería:
ARCHITECTURE mux_comportamiento OF mux IS BEGIN PROCESS(entrada1, entrada2, control) BEGIN IF(control = '0') THEN salida <= entrada1; ELSE salida <= entrada2; END IF;
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 11
END PROCESS; END mux_comportamiento;
DESCRIPCION DE FLUJO DE DATOS
En una descripción de flujo de datos del mismo multiplexor la salida sería la ecuación lógica: s=(entrada1 AND NOT control) OR (entrada2 AND control)
En VHDL la arquitectura sería:
ARCHITECTURE mux_rtl OF mux IS SIGNAL int1, int2, int3 : BIT; BEGIN int1 <= NOT control; int2 <= entrada1 AND int1; int3 <= entrada2 AND control; salida <= int2 OR int3; END mux_rtl;
Esta descripción hay varias instrucciones concurrentes, por lo que son ejecutadas cada vez que una señal interviene en su asignación. Realmente, se trata casi de una descripción estructural, puesto que se están describiendo señales y sus componentes. Aunque también son asignaciones a señales y no una lista de componentes y sus conexiones. En el siguiente ejemplo se muestra una descripción de flujo de datos pura.
ARCHITECTURE mux_rtl OF mux IS BEGIN salida <= entrada1 WHEN control = '0' ELSE entrada2; END mux_rtl;
DESCRIPCION ESTRUCTURAL
Una descripción estructural consistiría en decir que el circuito tiene una puerta inversora U1, dos puertas AND de dos entradas U2 y U3 y una puerta lógica OR de dos entradas U4, además también describe las conexiones entre estas puertas, un ejemplo sería: la entrada de U1 es la señal de control, la salida de U1 se conecta a la segunda entrada de U2, la primera entrada de U1 es entrada1, etc.
El código VHDL sería:
ARCHITECTURE mux_estructural OF mux IS
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 12
SIGNALl int1, int2,int3:bit; BEGIN U1: inversor PORT MAP(control, int1); U2: and_2_entradas PORT MAP(entrada1, int1, int2); U3: and_2_entradas PORT MAP(entrada2, control, int3); U4: or_2_entradas PORT MAP(int2, int3, salida); END mux_estructural;
En el código anterior se deberían haber definido previamente las puertas inversor, and_2_entradas y or_2_entradas
OBTENCION DEL SOFTWARE DE SIMULACION TINA
http://www.mediafire.com/?w2e2g9cqrv8pmoa
Descomprimimos el archivo.rar en una carpeta de nombre: DesignSoft Tina Industrial V8”, abrimos
y ejecutamos el archivo .exe
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 13
Aparecerá el asistente para la instalación
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 14
Luego de finalizar la instalación, volvemos a la carpeta DesignSoft Tina Industrial V8.0 y abrimos la
carpeta crack y le damos COPIAR al archivo PCB_Key.exe
Lo PEGAMOS en la carpeta raíz de Tina que es C:\DesignSoft\Tina-8 Industrial
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 15
Lo ejecutamos, vamos a ayuda ->autorización ->autorizar ->otros y rellenamos el cuadro de texto
SITEKEY con 0000-0000-0000-0000-0000-0000-0000-0000-0000-0000-0000-0000-00, le damos
OK y tendremos activada la licencia. Cerramos el PCB_Key.exe
Iniciamos Tina
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 16
DESARROLLO DE LOS CIRCUITOS:
Pasos para la solución ejercicio 3:
Ir a la barra de MENU opción TOOLS, luego en el submenú elegir New Macro Wizard; En la
ventana emergente colocamos el nombre del elemento que deseamos crear, solo dejamos la
casilla de verificación AUTOGENERATED, entendiéndose que las demás deberán de quedar sin
marcar; colocamos el mismo nombre en DEFAULT LABEL, para cargar el vhd respectivo damos clic
en el botón a la derecha de CONTENT, buscamos el archivo correspondiente .vhd ACEPTAR
A continuación, aparecerá otra ventana emergente donde guardaremos el archivo con el mismo
nombre pero con la extensión .TSM
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 17
Ahora vamos de nuevo a la barra de MENU->INSERT->MACRO
Elegimos el elemento que deseamos aplicar, del conjunto de archivos .TSM y luego ACEPTAR
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 18
Cuando tenemos los diferentes tipos de elementos MSI que integraran nuestro circuito, podemos
copiarlo y pegarlo las veces que lo necesitemos, en el ejemplo puede observarse que tanto el FULL
ADDER como el MUX_2a1, se necesitan 4 veces cada uno para obtener el circuito deseado
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 19
Luego insertamos los SWITCHES necesarios, realizamos las conexiones pertinentes con la
herramienta WIRE, si fuere necesario, incluir compuertas básicas como en este caso se utiliza de la
barra de herramientas GATES->INVERTER o cualesquiera que se consideren para cada caso
CODIGOS .VHD
EJERCICIO 1
DECODER 3 A 8
library IEEE; use IEEE.STD_LOGIC_1164.all; entity DECODER is port( A : in STD_LOGIC; B : in STD_LOGIC; C : in STD_LOGIC; Y : out STD_LOGIC_VECTOR (7 downto 0) ); end DECODER; architecture DECODER1 of DECODER is signal ABC : STD_LOGIC_VECTOR (2 downto 0) ; begin ABC <= A & B & C ; with ABC select Y <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when others ; end DECODER1;
CODER 8 A 3
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity CODER_8A3 is
port(
A : in STD_LOGIC;
B : in STD_LOGIC;
C : in STD_LOGIC;
D : in STD_LOGIC;
E : in STD_LOGIC;
F : in STD_LOGIC;
G : in STD_LOGIC;
H : in STD_LOGIC;
Y : out STD_LOGIC_VECTOR (2 downto 0)
);
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 20
end CODER8A3;
architecture CODER_8A3 of CODER8A3 is
signal ABCDEFGH : STD_LOGIC_VECTOR (7 downto 0) ;
begin
ABCDEFGH <= A & B & C & D & E & F & G & H ;
with ABCDEFGH select Y <=
"111" when "10000000",
"110" when "01000000",
"101" when "00100000",
"100" when "00010000",
"011" when "00001000",
"010" when "00000100",
"001" when "00000010",
"000" when others ;
end CODER_8A3;
CODIGO MUX 2 A 1 DE UN BIT
ENTITY mux_2a1 IS
PORT(
A, B, S: IN BIT;
X: OUT BIT);
END mux_2a1;
ARCHITECTURE arch_mux OF mux_2a1 IS
BEGIN
X <= (((NOT S) AND A) OR (S AND B));
END arch_mux;
CODIGO FULL ADDER
ENTITY full_adder IS
PORT(
A, B, Cin: IN BIT;
SUM,Cout: OUT BIT);
END full_adder;
ARCHITECTURE arch_adder OF full_adder IS
BEGIN
SUM <= (NOT A AND NOT B AND Cin) OR (NOT A AND B AND NOT Cin) OR (A AND NOT B AND NOT Cin) OR (A AND B
AND Cin);
Cout <= (NOT A AND B AND Cin) OR (A AND NOT B AND Cin) OR (A AND B AND NOT Cin) OR (A AND B AND Cin);
END arch_adder;
DEMULTIPLEXOR 2 A 4 CON 2 VARIABLES DE SELECCIÓN
library IEEE; use IEEE.STD_LOGIC_1164.all; entity DEMUX is port( S1 : in STD_LOGIC; S2 : in STD_LOGIC; X : in STD_LOGIC; Y : out STD_LOGIC_vector(3 downto 0) );
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 21
end DEMUX; architecture DEMUXF of DEMUX is signal S1S2 : STD_LOGIC_VECTOR (1 downto 0) ; begin S1S2 <= S1 & S2 ; process (S1,S2, X) begin case S1S2 is when "00" => Y(0) <= X; Y(1) <= '0'; Y(2) <= '0'; Y(3) <= '0'; when "01" => Y(0) <= '0'; Y(1) <= X; Y(2) <= '0'; Y(3) <= '0'; when "10" => Y(0) <= '0'; Y(1) <= '0'; Y(2) <= X; Y(3) <= '0'; when "11" => Y(0) <= '0'; Y(1) <= '0'; Y(2) <= '0'; Y(3) <= X; when others => Y(0) <= '0'; Y(1) <= '0'; Y(2) <= '0'; Y(3) <= '0'; end case; end process; end DEMUXF;
MUX DE 2 A 1 DE 4 BITS use IEEE.STD_LOGIC_1164.all; entity MUX2A1 is port( X1 : in STD_LOGIC; X2 : in STD_LOGIC; S : in STD_LOGIC; Y : out STD_LOGIC ); end MUX2A1; architecture MUX2A1A of MUX2A1 is begin Y <= X1 when S = '1' else X2; end MUX2A1A;
Se utilizo el código del MUX de 2 a 1 de un bit y se utilizo conexiones en cascada para su implementacion
EJERCICIO 2
NO SE UTILIZO CODIGO VHDL
EJERCICIO 3
ENTITY full_adder IS PORT( A, B, Cin: IN BIT; SUM,Cout: OUT BIT); END full_adder;
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 22
ARCHITECTURE arch_adder OF full_adder IS BEGIN SUM <= (NOT A AND NOT B AND Cin) OR (NOT A AND B AND NOT Cin) OR (A AND NOT B AND NOT Cin) OR (A AND B AND Cin); Cout <= (NOT A AND B AND Cin) OR (A AND NOT B AND Cin) OR (A AND B AND NOT Cin) OR (A AND B AND Cin); END arch_adder;
Para la implementación se utilizaron Sumadores Totales conectados en paralelo y compuertas basicas
GRAFICOS DE CADA CIRCUITO EN TINA
DECODER 3 A 8
CODER 8 A 3
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 23
MULTIPLEXOR DE 2 A 1
DEMULTIPLEXOR DE 1 A 4
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 24
FULL ADDER
MULTIPLEXOR 2 A 1 DE 4 BITS
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 25
CAPTURAS DEL FUNCIONAMIENTO DE LOS CIRCUITOS
EJERCICIO 1
DECODER 3 A 8
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 26
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 27
CODER 8 A 3
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 28
MUX 2 A 1 DE UN BIT
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 29
DEMULTIPLEXOR DE DOS VARIABLES DE SELECCIÓN
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 30
FULL ADDER
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 31
MUX DE 2 A 1 DE 4 BITS
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 32
EJERCICIO 2
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 33
EJERCICIO 3
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 34
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 35
RESULTADOS DE LA INVESTIGACION
Bibliotecas
Una biblioteca en VHDL es un lugar en donde se guarda la información relacionada con un diseño determinado. Al comienzo de cada diseño el compilador crea automáticamente una biblioteca llamada WORK con este objetivo. Además de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseño. Un ejemplo de biblioteca general es la llamada Library IEEE, que contiene definiciones estándar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa, por eso es muy común que en la primera línea de un diseño en VHDL aparezca escrito "Library IEEE", de ésta 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.
Sintaxis para la definición de paquetes.
La sintaxis para la definición de un paquete es la siguiente:
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
PACKAGE BODY nombre_paquete IS
Declaración de tipos
Declaración de constantes
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
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 36
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.
Sintaxis para la declaración de una componente en VHDL
COMPONENT nombre_componente
PORT ( Nombre de señal: modo tipo de señal;
...
Nombre de señal: modo tipo de señal);
END COMPONENT;
Extensión (Overload) de los operadores en VHDL La validez de los operadores dados anteriormente se ha extendido a otros tipos para los que no estaban originalmente definidos. Por ejemplo el paquete estándar IEEE.Std_Logic_1164 define la extensión de los operadores lógicos para los tipos std_logic y Std_logic_Vector. Sin embargo la extensión de los operadores de relación y aritméticos para los tipos std_logic y std_logic_vector no están definidos en el paquete standard sino en otro paquete llamado Work_Std_arith. DISEÑO JERARQUICO EN VHDL En VHDL un diseño puede utilizar componentes que son a su vez otros circuitos o sistemas más sencillos previamente diseñados. Esto constituye una gran ventaja pues facilita el trabajo en equipo y la distribución de tareas entre distintos grupos de diseñadores. A medida que se sube hacia el nivel de jerarquía máxima la arquitectura se hace más general mientras que en los niveles inferiores el grado de detalles es mayor.
Librerias
Las principales librerías VHDL son las siguientes:
STD: Contiene los paquetes standard y texto. Work: Es la librería donde se almacenan por defecto las unidades de diseño una
vez compiladas. IEEE: Contiene paquetes para tipos std_logic, unsigned, paquetes aritméticos, etc.
Las proporciona la propia herramienta de desarrollo. Synopsys: Define los operadores y vectores derivados de IEEE.
Vital: Librería para soporte de simulación a nivel de puertas. Las proporciona la propia herramienta de diseño.
LIBRERIA PACKGE DESCRIPCION STD Standard Define los tipos y subtipos básicos de
VHDL: boolean, bit, bit_vector,
character, string, integer, real, time,
etc.
STD textio Define tipo de datos como ‘line’ y
‘text’ y procedimientos de lectura y
escritura en archivos.
WORK Librería por defecto donde se almacenan
las unidades de diseño del usuario.
IEEE Std_logic_1164 Define los tipos std_logic y
std_logic_vector.
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 37
IEEE Numeric_std Define los tipos signed y unsigned y
operaciones aritméticas entre Ellos
Define los tipos signed y unsigned y
operaciones aritméticas entre ellos.
IEEE Std_logic_arith Define operaciones aritméticas con
signo, operaciones de conversión y
comparación para std_logic_vector.
IEEE Std_logic_signed Define operaciones aritméticas sin
signo, operaciones de conversión Y
comparación para std_logic_vector.
IEEE Std_logic_textio Define tipos de datos y procedimientos
de lectura y escritura de archivos para
std_logic y std_logic_vector.
IEEE numeric_bit Define funciones extendidas y de
conversión para dichos tipos.
IEEE numeric_std Paquete equivalente al Paquete
std_logic_arith.
SYNOPSYS
std_logic_unsigned Define operadores aritméticos sobre el
tipo std_ulogic_vector y los considera
como operadores no-signados.
SYNOPSYS
std_logic_misc Define tipos, subtipos, constantes y
funciones complementarios para el
paquete std_logic_1164.
OBSERVACIONES
El lenguaje VHDL, se caracteriza por la similitud con otros editores mayormente difundidos o de gran comercialización, como c o c++, además se destaca la característica principal que puede ser exportado en muchos editores como TINA, para el modelo de circuitos de mayor complejidad
La versatilidad que ofrece TINA, en cuanto a la facilidad que ofrece su simulador para la creación de circuitos que contienen el mismo elemento un sin número de veces, bastara con insertar la macro una vez, para disponer de ella simplemente copiando y pegando cuantas veces fuere necesario
La creación o diseño de circuitos, resulta muy fácil en TINA, este brinda las herramientas adecuadas en un estilo y formato muy legible para todo tipo de usuarios, esto significa que tanto diseñadores profesionales como principiantes, encuentran muy favorable el desarrollo en esta plataforma industrial
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 38
CONCLUSIONES
En cuanto al desarrollo de la investigación y en base a los objetivos definidos para la realización de esta podemos concluir que:
El uso de las librerías VHDL, permiten la creación de circuitos MSI de gran complejidad, ya que estas ofrecen funciones predefinidas que simplemente han de cargarse para su uso
El Software de diseño Tina, permite gracias a su versatilidad, no solo la creación de códigos vhdl, sino también la simulación respectiva en un ambiente grafico que nos ofrece gran calidad
Diversos manuales inyectan una documentación de gran profundidad, si se quiere ser un desarrollador mas experto en la creación de código VHDL
La simulación de los circuitos nos permitió realizar las pruebas necesarias, ajustando los valores a diversos escenarios, que necesariamente se identificaran con los aspectos de un ambiente real
El desarrollo de diferentes elementos MSI en TINA, permite al estudiante observar de forma más cercana, las operaciones que diferencian a cada elemento MSI, atendiendo con particularidad cada característica que los desenvuelve en su desempeño
La obtención del software para efectos estudiantiles no está considerada por los desarrolladores de TINA,
SIMULACION VHDL DE CIRCUITOS MSI
Universidad de El Salvador Página 39
BIBLIOGRAFIA
http://www.cannic.uab.es/docencia/vhdli06/Capitol5/Cap5_a.htm
http://es.wikipedia.org/wiki/Paquetes VHDL
Digital Principles Switching Theory, A.K. Singh, Arun Prakash
Circuitos combinacionales y puertas lógicas; Luis Corcoles, José Torre, Universidad Rey
Juan Carlos
Diseño de Sistemas Combinacionales Con VHDL; Andrés Iborra
Nelson, Víctor P; Análisis y Diseño de Circuitos Lógicos Digitales, Prentice-Hall, México 1996