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 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 Universidad de El Salvador Página 2 SIMULACION VHDL DE CIRCUITOS MSI 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 Universidad de El Salvador Página 3 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 Universidad de El Salvador Página 4 . 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.SIMULACION VHDL DE CIRCUITOS MSI utilizarlo en otro. por ejemplo: with S select C <= ‘1’ when “00”. Sentencias de asignación condicionales. miles. Se utilizarán tres tipos de sentencias de asignación concurrentes: Sentencias de asignación simples. comparadores. por ejemplo: Y <= A and B. y miles y miles de millones de renglones para describir en una tabla de verdad.SIMULACION VHDL DE CIRCUITOS MSI MARCO TEORICO La lógica combinacional es probablemente la más fácil de diseñar. cada uno de los cuales tiene una descripción más sencilla. ‘0’ when others. Las estructuras más importantes se describen en esta unidad desde una perspectiva de los lenguajes de descripción de hardware. Sentencias de selección. · Sentencias de asignación concurrentes. ya que el resultado para una determinada función sería el mismo. 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. 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. DESCRIPCIÓN VHDL DE LÓGICA COMBINACIONAL Para describir circuitos combinacionales utilizaremos sentencias de asignación concurrentes y procesos. Las sentencias de asignación concurrentes van fuera de proceso. La clave del desarrollo de estos sistemas es el pensamiento estructurado. decodificadores. Un circuito o sistema complejo se concibe como una colección de subsistemas más pequeños. 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. Universidad de El Salvador Página 5 . Estos bloques combinacionales de construcción constituyen los ladrillos con los que se edifican los sistemas combinacionales. Esto se debe a que en una declaración concurrente no importa el orden en que se escriban las señales. por ejemplo: Z <= B when S = ‘1’ else A. DISEÑO BASADO EN ELEMENTOS MSI Un circuito combinacional práctico puede tener docenas de entradas y salidas y puede requerir cientos. 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). sumadores y demás. De este modo. e incluso millones de términos para describir como una suma de productos. en concreto usando el lenguaje VHDL. STD_LOGIC_1164. END Multiplexor4a1Arch. · Ej_1: Multiplexor 4 a 1. hay que evitar que una misma señal aparezca en el lado izquierdo y en el lado derecho de la sentencia de asignación: -. No olvidar. svEntrada(3) WHEN OTHERS. Universidad de El Salvador Página 6 . por lo tanto.ALL.Importante. debe aparecer en su lista de sensibilidad. En VHDL las señales mantienen su valor hasta que se les asigna uno nuevo. 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. END Multiplexor4a1. svEntrada(1) WHEN "01". USE IEEE. LIBRARY IEEE.Evitar sentencias de este tipo: Y <= Y nand X. 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. 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. Es decir. sSalida: OUT std_logic. ARCHITECTURE Multiplexor4a1Arch OF Multiplexor4a1 IS BEGIN WITH svSeleccion SELECT sSalida <= svEntrada(0) WHEN "00". 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. La salida presentará aquella entrada cuyo índice concuerda con el número codificado en binario en las líneas de control (o selección). ENTITY Multiplexor4a1 IS PORT ( svEntrada: IN std_logic_vector(3 DOWNTO 0). -. cumpliéndose que N = 2M. · Ej_2: Decodificador 3 a 8 con salida activa a nivel alto. svEntrada(2) WHEN "10". si para una señal dada el valor de una señal está indefinido. svSeleccion: IN std_logic_vector(1 DOWNTO 0)). 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). LIBRARY IEEE. ya que esto modela elementos de memoria asíncronos.SIMULACION VHDL DE CIRCUITOS MSI Siempre hay que evitar la realimentación combinacional. · Procesos. el compilador sintetiza un latch (biestable) que almacena la señal. --Asignación a la salida en función de la señal de ENABLE. "00100000" WHEN "101". signal svAux: std_logic_vector(7 DOWNTO 0). sEnableH: IN std_logic). "00001000" WHEN "011". sEnableH) BEGIN -. svSalida <= svAux WHEN sEnableH = '1' ELSE "00000000". svSalida: OUT std_logic_vector(7 DOWNTO 0). "00000010" WHEN "001". END Decodificador3a8Arch.STD_LOGIC_1164. ARCHITECTURE Decodificador3a8EnArch OF Decodificador3a8En IS --Señal auxiliar para una asignación concurrente intermedia. "01000000" WHEN "110".. svSalida: OUT std_logic_vector(7 DOWNTO 0)). END Decodificador3a8En. "00001000" WHEN "011". ARCHITECTURE Decodificador3a8EnArch2 OF Decodificador3a8En IS BEGIN DecEnable: PROCESS (svEntrada. "00010000" WHEN "100". "00100000" WHEN "101". svSalida: OUT std_logic_vector(7 DOWNTO 0).ELSE).ALL. ENTITY Decodificador3a8En IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0). sEnableH: IN std_logic).ALL.STD_LOGIC_1164.Orden salidas: "76543210" svSalida <= "00000001" WHEN "000". "00000010" WHEN "001". "10000000" WHEN OTHERS. "00000100" WHEN "010". Ej_4: Decodificador 3 a 8 con salida activa a nivel alto y con señal de enable (Versión Secuencial). ENTITY Decodificador3a8En IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0). USE IEEE. ENTITY Decodificador3a8 IS PORT ( svEntrada: IN std_logic_vector(2 DOWNTO 0). USE IEEE.STD_LOGIC_1164. "00010000" WHEN "100". END Decodificador3a8En."76543210" svAux <= "00000001" WHEN "000".SIMULACION VHDL DE CIRCUITOS MSI USE IEEE.Definición del proceso de forma secuencial (estructura IF. LIBRARY IEEE. Universidad de El Salvador Página 7 . "10000000" WHEN OTHERS. END Decodificador3a8EnArch. ARCHITECTURE Decodificador3a8Arch OF Decodificador3a8 IS BEGIN WITH svEntrada SELECT -. "00000100" WHEN "010".ALL. "01000000" WHEN "110". BEGIN --Asignación del valor temporal WITH svEntrada SELECT -. Ej_3: Decodificador 3 a 8 con salida activa a nivel alto y con señal de enable (Versión Concurrente). LIBRARY IEEE. END Decodificador3a8. END PROCESS Dec7seg. WHEN OTHERS => svSalida <= "1111111". WHEN "0100" => svSalida <= "1001100". END DecodificadorBCD7seg. Ánodo común Þ Cada segmento se enciende con ‘0’. WHEN "001" => svSalida <= "00000010". END DecodificadorBCD7segArch.STD_LOGIC_1164. WHEN "0011" => svSalida <= "0000110". WHEN "011" => svSalida <= "00001000".SIMULACION VHDL DE CIRCUITOS MSI IF (sEnableH='1') THEN CASE svEntrada IS WHEN "000" => svSalida <= "00000001". WHEN "1001" => svSalida <= "0000100". WHEN "0001" => svSalida <= "1001111".Orden de las salidas (segmentos) “abcdefg” WHEN "0000" => svSalida <= "0000001". · Ej_5: Decodificador BCD a display de 7 segmentos (Ánodo Común). WHEN "110" => svSalida <= "01000000". 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. ARCHITECTURE DecodificadorBCD7segArch OF DecodificadorBCD7seg IS BEGIN Dec7seg: PROCESS (svEntrada) BEGIN CASE svEntrada IS -. WHEN "010" => svSalida <= "00000100". END CASE. END CASE. WHEN "1000" => svSalida <= "0000000". Cátodo común Þ Cada segmento se enciende con ‘1’. WHEN "0010" => svSalida <= "0010010". · Ej_6: Codificador 8 a 3. WHEN OTHERS => svSalida <= "10000000". USE IEEE. WHEN "100" => svSalida <= "00010000". END PROCESS DecEnable.ALL. WHEN "101" => svSalida <= "00100000". ELSE svSalida <= "00000000". Es necesario establecer una prioridad para los casos en los que sean varias las entradas activas en un momento determinado. END IF. WHEN "0101" => svSalida <= "0100100". END Decodificador3a8EnArch2. LIBRARY IEEE. WHEN "0111" => svSalida <= "0001110". svSalida: OUT std_logic_vector(6 DOWNTO 0)). ENTITY DecodificadorBCD7seg IS PORT ( svEntrada: IN std_logic_vector(3 DOWNTO 0). Universidad de El Salvador Página 8 . WHEN "0110" => svSalida <= "0100000". ELSIF iEntrada = 2 THEN svSalida <= "010".ALL.del proceso de codificación. svSalida: OUT std_logic_vector(2 DOWNTO 0)). ELSIF iEntrada = 4 THEN svSalida <= "100".STD_LOGIC_1164. ARCHITECTURE Codificador8a3Arch OF Codificador8a3 IS BEGIN Codif: PROCESS (iEntrada) BEGIN -. ENTITY Codificador8a3 IS -. END PROCESS. END PROCESS. END Codificador8a3. ELSIF iEntrada = 1 THEN svSalida <= "001".La sentencia ELSE NULL.Suele ser muy útil con el tipo std_logic. END Codificador8a3Arch. -. USE IEEE. IF iEntrada = 0 THEN svSalida <= "000". ELSIF iEntrada = 4 THEN svSalida <= "100". Uso de la macro NULL. END IF. Universidad de El Salvador Página 9 . ELSIF iEntrada = 2 THEN svSalida <= "010". ELSIF iEntrada = 6 THEN svSalida <= "110". · Ej_7: Codificador 8 a 3. ELSIF iEntrada = 7 THEN svSalida <= "111". VHDL’93 soporta la macro NULL.El uso de una estructura tipo IF_THEN_ELSE -.SIMULACION VHDL DE CIRCUITOS MSI LIBRARY IEEE. END IF. ‘H’. LIBRARY IEEE.El uso de un rango clarifica el código. svSalida: OUT std_logic_vector(2 DOWNTO 0)). ENTITY Codificador8a3 IS -. END Codificador8a3. ELSE svSalida <= "111". ELSIF iEntrada = 5 THEN svSalida <= "101". ‘L’.STD_LOGIC_1164. ELSIF iEntrada = 5 THEN svSalida <= "101". ELSIF iEntrada = 3 THEN svSalida <= "011". indica de forma clara que ante otras posibles -.ALL. el circuito no hará nada. ELSE NULL.valores no controlados asociados a la entrada. IF iEntrada = 0 THEN svSalida <= "000". PORT ( iEntrada: IN INTEGER RANGE 0 TO 7. ELSIF iEntrada = 6 THEN svSalida <= "110".El uso de una estructura tipo IF_THEN_ELSE -.del proceso de decodificación.contemplados por este tipo podrían originar comportamientos extraños. ‘U’… -.permite establecer de forma clara la prioridad -. la cual permite dar aún más claridad a la descripción de funcionamiento de los elementos modelados en VHDL. -. USE IEEE. END Codificador8a3Arch.El uso de un rango clarifica el código. ELSIF iEntrada = 3 THEN svSalida <= "011". ELSIF iEntrada = 1 THEN svSalida <= "001".permite establecer de forma clara la prioridad -. donde valores como ‘Z’. PORT ( iEntrada: IN INTEGER RANGE 0 TO 7. ARCHITECTURE Codificador8a3Arch OF Codificador8a3 IS BEGIN Codif: PROCESS (iEntrada) BEGIN -. END mux. En VHDL la arquitectura de este multiplexor para la entidad llamada mux sería: ARCHITECTURE mux_comportamiento OF mux IS BEGIN PROCESS(entrada1. END IF. TIPOS DE DESCRIPCION Como se ha dicho antes. 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. pero el mismo circuito puede ser descrito de varias formas. salida: OUT BIT). VHDL sirve para describir un circuito electrónico. control) BEGIN IF(control = '0') THEN salida <= entrada1. Universidad de El Salvador Página 10 . de forma que ésta presente un funcionamiento en condiciones normales o pase a un estado adicional de alta impedancia ‘Z’. ELSE salida <= entrada2. 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. entrada1. DESCRIPCION DE COMPORTAMIENTO Una descripción de comportamiento de un multiplexor de dos entradas. entrada2: IN BIT. 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. Los tres ejemplos de código son sólo las arquitecturas. El código se pone sólo para poder comparar las distintas formas de descripción. entrada2.SIMULACION VHDL DE CIRCUITOS MSI 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 no interfiera eléctricamente con otros elementos que podrían compartir la ruta de datos conectada a su salida. los tres podrían tener como entidad: ENTITY mux PORT(control. se trata casi de una descripción estructural. dos puertas AND de dos entradas U2 y U3 y una puerta lógica OR de dos entradas U4. la primera entrada de U1 es entrada1. Esta descripción hay varias instrucciones concurrentes. int3 : BIT. END mux_rtl. int2 <= entrada1 AND int1. BEGIN int1 <= NOT control. por lo que son ejecutadas cada vez que una señal interviene en su asignación. además también describe las conexiones entre estas puertas. END mux_comportamiento. un ejemplo sería: la entrada de U1 es la señal de control. etc. El código VHDL sería: ARCHITECTURE mux_estructural OF mux IS Universidad de El Salvador Página 11 . En el siguiente ejemplo se muestra una descripción de flujo de datos pura. int2. Aunque también son asignaciones a señales y no una lista de componentes y sus conexiones. ARCHITECTURE mux_rtl OF mux IS BEGIN salida <= entrada1 WHEN control = '0' ELSE entrada2.SIMULACION VHDL DE CIRCUITOS MSI END PROCESS. END mux_rtl. 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. puesto que se están describiendo señales y sus componentes. la salida de U1 se conecta a la segunda entrada de U2. DESCRIPCION ESTRUCTURAL Una descripción estructural consistiría en decir que el circuito tiene una puerta inversora U1. Realmente. int3 <= entrada2 AND control. salida <= int2 OR int3. int3:bit. END mux_estructural.rar en una carpeta de nombre: DesignSoft Tina Industrial V8”. int1). En el código anterior se deberían haber definido previamente las puertas inversor.com/?w2e2g9cqrv8pmoa Descomprimimos el archivo. int3. int3). U4: or_2_entradas PORT MAP(int2. BEGIN U1: inversor PORT MAP(control. int1.exe Universidad de El Salvador Página 12 . U3: and_2_entradas PORT MAP(entrada2. int2). and_2_entradas y or_2_entradas OBTENCION DEL SOFTWARE DE SIMULACION TINA http://www. U2: and_2_entradas PORT MAP(entrada1. salida).SIMULACION VHDL DE CIRCUITOS MSI SIGNALl int1.mediafire. int2. abrimos y ejecutamos el archivo . control. SIMULACION VHDL DE CIRCUITOS MSI Aparecerá el asistente para la instalación Universidad de El Salvador Página 13 . SIMULACION VHDL DE CIRCUITOS MSI Luego de finalizar la instalación.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 Universidad de El Salvador Página 14 . volvemos a la carpeta DesignSoft Tina Industrial V8. Cerramos el PCB_Key.exe Iniciamos Tina Universidad de El Salvador Página 15 .SIMULACION VHDL DE CIRCUITOS MSI 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. SIMULACION VHDL DE CIRCUITOS MSI DESARROLLO DE LOS CIRCUITOS: Pasos para la solución ejercicio 3: Ir a la barra de MENU opción TOOLS. buscamos el archivo correspondiente . para cargar el vhd respectivo damos clic en el botón a la derecha de CONTENT. En la ventana emergente colocamos el nombre del elemento que deseamos crear. luego en el submenú elegir New Macro Wizard. entendiéndose que las demás deberán de quedar sin marcar. colocamos el mismo nombre en DEFAULT LABEL.TSM Universidad de El Salvador Página 16 . solo dejamos la casilla de verificación AUTOGENERATED. aparecerá otra ventana emergente donde guardaremos el archivo con el mismo nombre pero con la extensión .vhd ACEPTAR A continuación. del conjunto de archivos .SIMULACION VHDL DE CIRCUITOS MSI Ahora vamos de nuevo a la barra de MENU->INSERT->MACRO Elegimos el elemento que deseamos aplicar.TSM y luego ACEPTAR Universidad de El Salvador Página 17 . 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 Universidad de El Salvador Página 18 .SIMULACION VHDL DE CIRCUITOS MSI Cuando tenemos los diferentes tipos de elementos MSI que integraran nuestro circuito. E : in STD_LOGIC. si fuere necesario. Y : out STD_LOGIC_VECTOR (2 downto 0) ). use IEEE. "00010000" when "100". "00001000" when "011". CODER 8 A 3 library IEEE. B : in STD_LOGIC.VHD EJERCICIO 1 DECODER 3 A 8 library IEEE. G : in STD_LOGIC. architecture DECODER1 of DECODER is signal ABC : STD_LOGIC_VECTOR (2 downto 0) . entity DECODER is port( A : in STD_LOGIC.all. entity CODER_8A3 is port( A : in STD_LOGIC. use IEEE. end DECODER. F : in STD_LOGIC. "10000000" when others . "00100000" when "101". "00000010" when "001". with ABC select Y <= "00000001" when "000".STD_LOGIC_1164. B : in STD_LOGIC.all. Y : out STD_LOGIC_VECTOR (7 downto 0) ).STD_LOGIC_1164. C : in STD_LOGIC. realizamos las conexiones pertinentes con la herramienta WIRE. end DECODER1. "01000000" when "110". "00000100" when "010".SIMULACION VHDL DE CIRCUITOS MSI Luego insertamos los SWITCHES necesarios. H : in STD_LOGIC. Universidad de El Salvador Página 19 . D : in STD_LOGIC. begin ABC <= A & B & C . 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 . C : in STD_LOGIC. "110" when "01000000". CODIGO FULL ADDER ENTITY full_adder IS PORT( A. X: OUT BIT). B. with ABCDEFGH select Y <= "111" when "10000000". Universidad de El Salvador Página 20 . "011" when "00001000". X : in STD_LOGIC. "101" when "00100000". END full_adder. CODIGO MUX 2 A 1 DE UN BIT ENTITY mux_2a1 IS PORT( A.all. DEMULTIPLEXOR 2 A 4 CON 2 VARIABLES DE SELECCIÓN library IEEE. begin ABCDEFGH <= A & B & C & D & E & F & G & H . 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). entity DEMUX is port( S1 : in STD_LOGIC. Cin: IN BIT. END mux_2a1. end CODER_8A3. ARCHITECTURE arch_mux OF mux_2a1 IS BEGIN X <= (((NOT S) AND A) OR (S AND B)). SUM. "100" when "00010000". use IEEE. S: IN BIT. "000" when others . Y : out STD_LOGIC_vector(3 downto 0) ). END arch_mux. "010" when "00000100". "001" when "00000010".Cout: OUT BIT).SIMULACION VHDL DE CIRCUITOS MSI end CODER8A3. END arch_adder.STD_LOGIC_1164. architecture CODER_8A3 of CODER8A3 is signal ABCDEFGH : STD_LOGIC_VECTOR (7 downto 0) . B. 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). S2 : in STD_LOGIC. Y(1) <= '0'. X2 : in STD_LOGIC. X) begin case S1S2 is when "00" => Y(0) <= X. end MUX2A1A. when others => Y(0) <= '0'. begin S1S2 <= S1 & S2 . when "11" => Y(0) <= '0'. Y(2) <= '0'. B. end case. Y(3) <= X. end MUX2A1. Y(3) <= '0'. Y(2) <= '0'. when "10" => Y(0) <= '0'.Cout: OUT BIT). Y(2) <= X. Cin: IN BIT. end DEMUXF.SIMULACION VHDL DE CIRCUITOS MSI end DEMUX. when "01" => Y(0) <= '0'. Y : out STD_LOGIC ). process (S1. architecture DEMUXF of DEMUX is signal S1S2 : STD_LOGIC_VECTOR (1 downto 0) . 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. END full_adder. end process. S : in STD_LOGIC.all. Y(3) <= '0'. entity MUX2A1 is port( X1 : in STD_LOGIC. Y(3) <= '0'. Y(3) <= '0'. Y(1) <= '0'.S2. Y(2) <= '0'. Universidad de El Salvador Página 21 . MUX DE 2 A 1 DE 4 BITS use IEEE.STD_LOGIC_1164. Y(1) <= X. architecture MUX2A1A of MUX2A1 is begin Y <= X1 when S = '1' else X2. Y(1) <= '0'. Y(2) <= '0'. SUM. Y(1) <= '0'. END arch_adder. 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). 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 Universidad de El Salvador Página 22 .SIMULACION VHDL DE CIRCUITOS MSI 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). SIMULACION VHDL DE CIRCUITOS MSI MULTIPLEXOR DE 2 A 1 DEMULTIPLEXOR DE 1 A 4 Universidad de El Salvador Página 23 . SIMULACION VHDL DE CIRCUITOS MSI FULL ADDER MULTIPLEXOR 2 A 1 DE 4 BITS Universidad de El Salvador Página 24 . SIMULACION VHDL DE CIRCUITOS MSI CAPTURAS DEL FUNCIONAMIENTO DE LOS CIRCUITOS EJERCICIO 1 DECODER 3 A 8 Universidad de El Salvador Página 25 . SIMULACION VHDL DE CIRCUITOS MSI Universidad de El Salvador Página 26 . SIMULACION VHDL DE CIRCUITOS MSI CODER 8 A 3 Universidad de El Salvador Página 27 . SIMULACION VHDL DE CIRCUITOS MSI MUX 2 A 1 DE UN BIT Universidad de El Salvador Página 28 . SIMULACION VHDL DE CIRCUITOS MSI DEMULTIPLEXOR DE DOS VARIABLES DE SELECCIÓN Universidad de El Salvador Página 29 . SIMULACION VHDL DE CIRCUITOS MSI FULL ADDER Universidad de El Salvador Página 30 . SIMULACION VHDL DE CIRCUITOS MSI MUX DE 2 A 1 DE 4 BITS Universidad de El Salvador Página 31 . SIMULACION VHDL DE CIRCUITOS MSI EJERCICIO 2 Universidad de El Salvador Página 32 . SIMULACION VHDL DE CIRCUITOS MSI EJERCICIO 3 Universidad de El Salvador Página 33 . SIMULACION VHDL DE CIRCUITOS MSI Universidad de El Salvador Página 34 . Al comienzo de cada diseño el compilador crea automáticamente una biblioteca llamada WORK con este objetivo. Un ejemplo de biblioteca general es la llamada Library IEEE. 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. 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. por eso es muy común que en la primera línea de un diseño en VHDL aparezca escrito "Library IEEE". existen otros paquetes de utilización general y también los diseñadores que trabajan con VHDL pueden definir sus propios paquetes. La terminación ALL. permite utilizar todas las definiciones y objetos que contiene dicho paquete. 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. Además del estándar. Un paquete muy utilizado es el paquete estándar IEEE_STD_LOGIC_1164. que contiene definiciones estándar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa. 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.SIMULACION VHDL DE CIRCUITOS MSI 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. lo que les permite reutilizar diseños realizados anteriormente como parte de nuevos diseños. 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.ALL. de ésta forma dicha biblioteca se hace visible para el diseño.ALL. 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 Universidad de El Salvador Página 35 . Sintaxis para la definición de paquetes. Por ejemplo USE IEEE_STD_LOGIC_1164. Las proporciona la propia herramienta de diseño.Std_Logic_1164 define la extensión de los operadores lógicos para los tipos std_logic y Std_logic_Vector. unsigned. Vital: Librería para soporte de simulación a nivel de puertas. .. Esto constituye una gran ventaja pues facilita el trabajo en equipo y la distribución de tareas entre distintos grupos de diseñadores. bit_vector. string. Librería por defecto donde se almacenan las unidades de diseño del usuario. paquetes aritméticos. time. Define los tipos std_logic y std_logic_vector. 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. Work: Es la librería donde se almacenan por defecto las unidades de diseño una vez compiladas. integer. real. Nombre de señal: modo tipo de señal). Define tipo de datos como ‘line’ y ‘text’ y procedimientos de lectura y escritura en archivos. Sintaxis para la declaración de una componente en VHDL COMPONENT nombre_componente PORT ( Nombre de señal: modo tipo de señal. Por ejemplo el paquete estándar IEEE. Librerias Las principales librerías VHDL son las siguientes: STD: Contiene los paquetes standard y texto. STD WORK IEEE textio Std_logic_1164 Universidad de El Salvador Página 36 . mientras que las declaraciones y definiciones contenidas en la primera parte del paquete son visibles para todos los diseños que los utilicen. Las proporciona la propia herramienta de desarrollo. IEEE: Contiene paquetes para tipos std_logic. Synopsys: Define los operadores y vectores derivados de IEEE. visibles solo dentro del paquete. 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. etc. 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. bit.SIMULACION VHDL DE CIRCUITOS MSI locales. etc. LIBRERIA STD PACKGE Standard DESCRIPCION Define los tipos y subtipos básicos de VHDL: boolean.. 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. END COMPONENT. character. esto significa que tanto diseñadores profesionales como principiantes. bastara con insertar la macro una vez.SIMULACION VHDL DE CIRCUITOS MSI IEEE Numeric_std IEEE IEEE IEEE IEEE IEEE SYNOPSYS SYNOPSYS Std_logic_arith Std_logic_signed Std_logic_textio numeric_bit numeric_std std_logic_unsigned std_logic_misc Define los tipos signed y unsigned y operaciones aritméticas entre Ellos Define los tipos signed y unsigned y operaciones aritméticas entre ellos. Define operaciones aritméticas con signo. operaciones de conversión Y comparación para std_logic_vector. subtipos. resulta muy fácil en TINA. como c o c++. operaciones de conversión y comparación para std_logic_vector. para disponer de ella simplemente copiando y pegando cuantas veces fuere necesario La creación o diseño de circuitos. para el modelo de circuitos de mayor complejidad La versatilidad que ofrece TINA. Paquete equivalente al Paquete std_logic_arith. se caracteriza por la similitud con otros editores mayormente difundidos o de gran comercialización. este brinda las herramientas adecuadas en un estilo y formato muy legible para todo tipo de usuarios. constantes y funciones complementarios para el paquete std_logic_1164. Define funciones extendidas y de conversión para dichos tipos. Define tipos. además se destaca la característica principal que puede ser exportado en muchos editores como TINA. OBSERVACIONES El lenguaje VHDL. Define operaciones aritméticas sin signo. Define operadores aritméticos sobre el tipo std_ulogic_vector y los considera como operadores no-signados. Define tipos de datos y procedimientos de lectura y escritura de archivos para std_logic y std_logic_vector. 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. encuentran muy favorable el desarrollo en esta plataforma industrial Universidad de El Salvador Página 37 . las operaciones que diferencian a cada elemento MSI.SIMULACION VHDL DE CIRCUITOS MSI 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. 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. que necesariamente se identificaran con los aspectos de un ambiente real El desarrollo de diferentes elementos MSI en TINA. no solo la creación de códigos vhdl. 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. permite al estudiante observar de forma más cercana. 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. Universidad de El Salvador Página 38 . permiten la creación de circuitos MSI de gran complejidad. ajustando los valores a diversos escenarios. 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. Víctor P.es/docencia/vhdli06/Capitol5/Cap5_a. Luis Corcoles. Andrés Iborra Nelson.SIMULACION VHDL DE CIRCUITOS MSI BIBLIOGRAFIA http://www. Universidad Rey Juan Carlos Diseño de Sistemas Combinacionales Con VHDL.org/wiki/Paquetes VHDL Digital Principles Switching Theory. José Torre. México 1996 Universidad de El Salvador Página 39 .cannic. Singh.htm http://es. Prentice-Hall.wikipedia.uab. Arun Prakash Circuitos combinacionales y puertas lógicas.K. A. Análisis y Diseño de Circuitos Lógicos Digitales.