GRUPO DE DISEÑO HARDWARE SOFTWARE DIET ESCET URJC W H S W Informe técnico: 001_01 Fecha: 03-03-2006 Proyecto: Subproyecto: Herramientas software: Componentes hardware: Docencia VHDL Veribest Ad-hoc IT_001_01 Diseño VHDL de módulos combinacionales básicos Resumen: El presente documento presenta la primera parte de las prácticas de diseño VHDL que han de realizar los alumnos del segundo parcial de la asignatura de Fundamentos de los Computadores de primer curso de la Ingeniería Superior en Informática. Se deben diseñar y simular dos ejemplos sencillos de redes de puertas básicas y distintas variedades de los siguientes módulos combinacionales básicos: decodificadores, codificadores, multiplexores, desplazadores y comparadores. José Ignacio Martínez Torre Despacho 160 Edificio Departamental II Grupo de Diseño HwSw DIET (ESCET) Tel: +34 91 664 74 96 Universidad Rey Juan Carlos Fax: +34 91 488 70 49 28933 Móstoles Madrid ESPAÑA Email: joseignacio.martinez@urjc.es niversidad Rey Juan Carlos
DOCENCIA - VHDL Diseño VHDL de módulos combinacionales básicos Grupo de diseño Hardware Software DIET ESCET URJC C/ Tulipán s/n, E-28933, Móstoles, Madrid, ESPAÑA Teléfono (34) 91 664 74 96 Fax (34) 91 664 74 90
Tabla de contenidos DISEÑO VHDL DE MÓDULOS COMBINACIONALES BÁSICOS1 PRÁCTICA 1: SÍNTESIS DE PUERTAS AND-OR-NOT.1 Práctica 1a: Ejemplo2..1 PRÁCTICA 2: DECODIFICADORES..2 Práctica 2a: decodificador de 3 a 82 Práctica 2b: decodificador de 4 a 16.3 Práctica 2d: conversor de BCD a 7 segmentos..3 PRÁCTICA 3: CODIFICADORES 4 Práctica 3a: codificador sin prioridad de 8 a 3.4 Práctica 3c: codificador con prioridad de 8 a 3 4 PRÁCTICA 4: MULTIPLEXORES 5 Práctica 4a: multiplexor 4 a 1 de 1 bit..5 Práctica 4b: multiplexor 4 a 1 vectorial de 4 bits.5 PRÁCTICA 5: DESPLAZADORES..6 Práctica 5a: desplazador binario.6 Práctica 5b: desplazador vectorial.6 PRÁCTICA 6: COMPARADORES..6 Práctica 6a: comparador encadenable de 1 bit..7 Práctica 6b: comparador encadenable de 4 bits.7 Práctica 6c: comparador encadenable de 8 bits.7 CÓDIGO VHDL DE LAS PUERTAS BÁSICAS..9 AND29 OR2.9 INV 9 NAND2.10 NOR2 10 XOR2 10 XNOR2.10 BIBLIOGRAFÍA..11
INTRODUCCIÓN A VERIBEST JIMT Capítulo 1 Diseño VHDL de módulos combinacionales básicos Todas las prácticas son ejemplos de sistemas y módulos digitales combinacionales presentados en los apuntes del Tema 2 de la asignatura de Fundamentos de Computadores durante el segundo parcial. El código VHDL de las prácticas resueltas y propuestas se encuentra en sus respectivos apartados. Este código ha de ser utilizado obligatoriamente para todas las entidades que se piden, respetando los nombres de las unidades y de los puertos, para facilitar la prueba de las prácticas entregadas. Se pide que el alumno realice la síntesis y la simulación de todas las prácticas exigidas, escribiendo todas las unidades de test necesarias para verificar de forma eficiente y completa el funcionamiento de los diseños. En el Apéndice A aparece el código VHDL de las puertas lógicas básicas. A continuación se detallan todas las prácticas que hay que realizar y entregar: Práctica 1: síntesis de puertas And-Or-Not Diseñar los ejemplos de sistemas combinacionales como redes de puertas básicas de las transparencias de teoría FC 2P T2 72 a FC 2P T2 78. Práctica 1a: Ejemplo2 Diseñar y simular Z mediante una red de puertas And-Or-Not de dos niveles en VHDL. Ejemplo2 entity ejemplo2 is z = x2 (x1 + x0) (x3 + x2 + x0) (x2 + x1 + x0) 1
IT_001_01 port (x3,x2,x1,x0: in std_logic; z: out std_logic); end ejemplo1; architecture funcional of ejemplo2 is z <= after retardo; Test Ejemplo2 entity test_ejemplo2 is end test_ejemplo2; architecture test of test_ejemplo2 is component ejemplo2 end component; for all: ejemplo2 use entity work.ejemplo2(funcional); signal x3,x2,x1,x0,z: std_logic; UUT: ejemplo2 port map (); x0 <= '0', '1' after 100 ns, ; x1 <= '0', '1' after 200 ns, ; x2 <= '0', '1' after 400 ns, ; x3 <= '0', '1' after 800 ns; end test; Práctica 2: decodificadores Realizar el diseño funcional y estructural de decodificadores de distinto tamaño. También se pide utilizar uno de los decodificadores para sintetizar un conversor de BCD a 7 segmentos. Ver FC 2P T2 86 a FC 2P T2 103. Práctica 2a: decodificador de 3 a 8 Diseñar el decodificador de 3 a 8 en VHDL con una descripción funcional de las ecuaciones que satisface. Decodificador de 3 a 8 entity decodificador3a8 is port (enable,x2,x1,x0: in std_logic; y7,y6,y5,y4,y3,y2,y1,y0: out std_logic); end decodificador3a8; architecture funcional of decodificador3a8 is y7 <= enable and x2 and x1 and x0; y6 <= ; y1 <= ; y0 <= enable and not(x2) and not(x1) and not(x0); Test del Decodificador de 3 a 8 entity test_decodificador3a8 is end test_decodificador3a8; architecture test of test_decodificador3a8 is 2
INTRODUCCIÓN A VERIBEST JIMT component decodificador3a8 end component; for all: decodificador3a8 use entity work(); signal enable,x2,x1,x0,: std_logic; UUT: decodificador3a8 port map (); enable <= '0', '1' after 800 ns; x0 <= '0', '1' after 100 ns, ; x1 <= '0', '1' after 200 ns, ; x2 <= '0', '1' after 400 ns, ; end test; Práctica 2b: decodificador de 4 a 16 Diseñar el decodificador de 4 a 16 en VHDL mediante una red de decodificadores de 3 a 8. Decodificador de 4 a 16 entity decodificador4a16 is port (enable: in std_logic; x: in std_logic_vector(3 downto 0); y: out std_logic_vector(15 downto 0)); end decodificador4a16; architecture estructural of decodificador4a16 is component decodificador3a8 port (enable,x2,x1,x0: in std_logic; y7,y6,y5,y4,y3,y2,y1,y0: out std_logic); end component; component and2 port (a, b: in std_logic; s: out std_logic); end component; component inv port (a: in std_logic; s: out std_logic); end component; signal E0, E1, not_x3 : std_logic; And1: and2 port map (enable,x(3),e1); DecE1: decodificador3a8 port map (E1,x(2),x(1),x(0),y(15),y(14),y(13),y(12),y(11),y(10), y(9),y(8)); Not0: inv port map (x(3),not_x3); And0: and2 port map (enable,not_x3,e0); DecE0: decodificador3a8 port map (E0,x(2),x(1),x(0),y(7),y(6),y(5),y(4),y(3),y(2), y(1),y(0)); end estructural; Práctica 2d: conversor de BCD a 7 segmentos Diseñar el codificador BCD a 7 segmentos en VHDL mediante una descripción estructural (FC-2P-T2-100) con un decodificador de 4 a 16 y puertas Or (operador VHDL o componentes). architecture estructural of Bcd7seg is component decodificador4a16 port (enable: in std_logic; x: in std_logic_vector(3 downto 0); y: out std_logic_vector(15 downto 0)); end component; signal vectorx: std_logic_vector(3 downto 0); signal dec_o_int: std_logic_vector(15 downto 0); 3
IT_001_01 vectorx <= x3&x2&x1&x0; Dec: decodificador4a16 port map (enable,vectorx,dec_o_int); a <= dec_o_int(0) or ; g <= dec_o_int(2) or ; end estructural; Práctica 3: codificadores Realizar el diseño funcional y estructural de codificadores sin prioridad y con prioridad de distinto tamaño. Ver FC 2P T2 104 a FC 2P T2 120. Práctica 3a: codificador sin prioridad de 8 a 3 Diseñar un codificador sin prioridad de 8 a 3 en VHDL mediante una descripción funcional. Codificador sin prioridad de 8 a 3 entity CodSinPrioridad8a3 is port (enable: in std_logic; x: in std_logic_vector(7 downto 0); y: out std_logic_vector(2 downto 0); activo: out std_logic); end CodSinPrioridad8a3; architecture funcional of CodSinPrioridad8a3 is y(2) <= x3 or x1 or (x2 and x0) or (not(x2) and not (x0)); y(1) <= ; y(0) <= ; activo <= ; Práctica 3c: codificador con prioridad de 8 a 3 Diseñar un codificador con prioridad de 8 a 3 en VHDL. Ahora la prioridad es codificar el bit menos significativo de los recibidos. Codificador con prioridad de 8 a 3 entity CodConPrioridadMenosSig8a3 is port (enable_in: in std_logic; x: in std_logic_vector(7 downto 0); y: out std_logic_vector(2 downto 0); activo, enable_out: out std_logic); end CodConPrioridadMenosSig8a3; architecture funcional of CodConPrioridadMenosSig8a3 is z7 <= ; -- selección de entrada menos significativa z0 <= x(0); y(2) <= enable_in and ( or ); -- codificador sin prioridad y(0) <= ; activo <= ; enable_out <= ; 4
INTRODUCCIÓN A VERIBEST JIMT Práctica 4: multiplexores Realizar el diseño funcional y estructural de multiplexores binarios y vectoriales de distinto tamaño. Ver FC 2P T2 121 a FC 2P T2 134. Práctica 4a: multiplexor 4 a 1 de 1 bit Diseñar un multiplexor de 4 a 1 de 1 bit de ancho en VHDL mediante una descripción funcional. Multiplexor 4 a 1 de 1 bit entity Mux4a1_1bit is port (enable: in std_logic; x: in std_logic_vector(3 downto 0); sel: out std_logic_vector(1 downto 0); y: out std_logic); end Mux4a1_1bit; architecture funcional of Mux4a1_1bit is y <= enable and ((x(0) and ); Práctica 4b: multiplexor 4 a 1 vectorial de 4 bits Sintetizar un multiplexor de 4 a 1 de 4 bits de ancho en VHDL mediante una descripción funcional. Multiplexor 4 a 1 vectorial de 4 bits entity Mux4a1_4bits is port (enable: in std_logic; x3,x2,x1,x0: in std_logic_vector(3 downto 0); sel: out std_logic_vector(1 downto 0); y: out std_logic_vector(3 downto 0); end Mux4a1_4bits; architecture funcional of Mux4a1_4bits is y(3) <= enable and ((x(0) and ); y(0) <= ; architecture estructural of Mux4a1_4bits is multiplexor: for i in 3 downto 0 generate puertas: Mux4a1_1bit port map (enable, ); 5
IT_001_01 end generate; end estructural; Práctica 5: desplazadores Realizar la descripción funcional y estructural de dos desplazadores, uno binario y uno vectorial. Ver FC 2P T2 139 a FC 2P T2 148. Práctica 5a: desplazador binario Diseñar el desplazador del ejemplo anterior en VHDL mediante una descripción funcional. Desplazador binario entity Desplazador_1bit is port (enable,dnd,derizq: in std_logic; x4,x3,x2,x1,x0,xmenos1: in std_logic; y3,y2,y1,y0: out std_logic); end Desplazador _1bit; architecture funcional of Desplazador_1bit is ; -- usar una estructura tipo case Práctica 5b: desplazador vectorial Diseñar el desplazador del ejemplo anterior en VHDL para entradas vectoriales de 4 bits mediante una descripción estructural basada en el desplazador anterior (Desplazador_1bit). Desplazador vectorial entity Desplazador_4bits is port (enable,dnd,derizq: in std_logic; x4,x3,x2,x1,x0,xmenos1: in std_logic_vector(3 downto 0); y3,y2,y1,y0: out std_logic); end Desplazador_4bits; architecture estructural of Desplazador_4bits is y3(3) <= enable and x and ; y0(0) <= ; end estructural; Práctica 6: comparadores Diseñar la síntesis funcional y estructural de comparadores encadenables binarios y vectoriales. Ver FC 2P T2 149 a FC 2P T2 156. 6
INTRODUCCIÓN A VERIBEST JIMT Práctica 6a: comparador encadenable de 1 bit Diseñar el comparador de 1 bit encadenable en VHDL mediante una descripción funcional. Comparador encadenable de 1 bit entity Comparador_1bit is port (a,b: in std_logic; agtbin,aeqbin,altbin: in std_logic; agtbout,aeqbout,altbout: out std_logic); end Comparador_1bit; Práctica 6b: comparador encadenable de 4 bits Diseñar el comparador de 4 bits encadenable en VHDL mediante una descripción funcional. Comparador encadenable de 4 bits entity Comparador_4bits is port (a,b: in std_logic_vector(3 downto 0); agtbin,aeqbin,altbin: in std_logic; agtbout,aeqbout,altbout: out std_logic); end Comparador_4bits; Práctica 6c: comparador encadenable de 8 bits Diseñar un comparador de 8 bits encadenable en VHDL usando el comparador de 4 bits anterior. Comparador encadenable de 8 bits entity Comparador_8bits is port (a,b: in std_logic_vector(7 downto 0); agtbin,aeqbin,altbin: in std_logic; agtbout,aeqbout,altbout: out std_logic); end Comparador_8bits; architecture estructural of Comparador_8bits is component Comparador_4bits port (a,b: in std_logic_vector(3 downto 0); agtbin,aeqbin,altbin: in std_logic; agtbout,aeqbout,altbout: out std_logic); end component; ; end estructural; 7
IT_001_01 8
INTRODUCCIÓN A VERIBEST JIMT Apéndice A Código VHDL de las puertas básicas A continuación se da el código VHDL de los componentes y sistemas que se pueden diseñar. And2 entity and2 is port (a, b: in std_logic; s: out std_logic); end and2; architecture funcional of and2 is s <= a and b after retardo; Or2 entity or2 is port (a, b: in std_logic; s: out std_logic); end or2; architecture funcional of or2 is s <= a or b after retardo; Inv entity inv is port (a: in std_logic; s: out std_logic); end inv; 9
IT_001_01 architecture funcional of inv is s <= not a after retardo; Nand2 entity nand2 is port (a, b: in std_logic; s: out std_logic); end nand2; architecture funcional of nand2 is s <= not (a and b) after retardo; Nor2 entity nor2 is port (a, b: in std_logic; s: out std_logic); end nor2; architecture funcional of nor2 is s <= not(a or b) after retardo; Xor2 entity xor2 is port (a, b: in std_logic; s: out std_logic); end xor2; architecture funcional of xor2 is s <= a xor b after retardo; Xnor2 entity xnor2 is port (a, b: in std_logic; s: out std_logic); end xnor2; architecture funcional of xnor2 is s <= not(a xor b) after retardo; 10
INTRODUCCIÓN A VERIBEST JIMT Bibliografía [1] http://www.escet.urjc.es/~jmartine/fc_2p [2] http://www.escet.urjc.es/~jmartine/ltc [3] Ayuda on-line de Veribest. [4] J-P. Deschamps. Síntesis de Circuitos Digitales. 1ª edición. Thomson. 2002. [5] Z. NAVABI, VHDL, Analysis and Modeling of Digital Systems, McGraw-Hill, 1993 [6] Ll. TERÉS, Y. TORROJA, S. OLCOZ, E. VILLAR, VHDL - Lenguaje Estándar de Diseño Electrónico, McGraw-Hill, 1998. [7] J.-P. DESCHAMPS, J.Mª. ANGULO, Diseño de Sistemas Digitales, Paraninfo, 1992 (2ª edición). 11
IT_001_01 12
DOCENCIA - VHDL Diseño VHDL de módulos combinacionales básicos José Ignacio Martínez Torre Grupo de diseño Hardware Software DIET ESCET URJC C/ Tulipán s/n, E-28933, Móstoles, Madrid, ESPAÑA Teléfono (34) 91 664 74 96 Fax (34) 91 664 74 90