Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 1/76
Tema: Metodologas de Diseo Electrnico Universidad Politcnica de Cartagena Departamento de Electrnica, Tecnologa de Computadoras y Proyectos Titulacin: Ingeniero de Telecomunicacin Asignatura: Arquitectura y Tecnologa de Computadores Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 2/76 Motivacin del tema Conocimientos previos: lgebra booleana, simplificacin de funciones lgicas Circuitos combinacionales y secuenciales bsicos Diagramas de esquemas Conocimientos desarrollados: Caractersticas de las herramientas de diseo electrnico Justificacin del uso de HLDs para diseo de circuitos VLSI Introduccin al diseo con VHDL 2 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 3/76 Objetivos Analizar las metodologas de diseo electrnico Comprender los niveles de abstraccin al describir un sistema electrnico, ubicando en ellos el lenguaje VHDL Comprender el sistema de modelado del hardware que implementa el VHDL, mediante procesos concurrentes Analizar la sintaxis bsica del lenguaje, que capacite al alumno para la definicin de circuitos sencillos Describir, sintetizar y simular los componentes de un sistema a nivel RTL, combinacionales y secuenciales Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 4/76 Desarrollo de contenidos Metodologas de Diseo Electrnico 3 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 5/76 Sumario Introduccin Niveles de abstraccin/descripcin de circuitos Metodologas de Diseo Electrnico Conceptos bsicos de VHDL Resumen Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 6/76 Introduccin Nuevas tecnologas de fabricacin de C.I. Computadoras y software ms potentes Nuevas herramientas: - EDA - Metodologas Crculo productivo del Diseo Electrnico 4 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 7/76 Sumario Introduccin Niveles de abstraccin/descripcin de circuitos Metodologas de Diseo Electrnico Conceptos bsicos de VHDL Resumen Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 8/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico 5 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 9/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico acceso remoto modem conexin local perifrico servidor almacenamiento cliente estacin Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 10/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico PROCESADOR MEMORIA UART 6 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 11/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico Generado con Xilinx Foundation 3.1i Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 12/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico Generado con Xilinx Foundation 3.1i 7 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 13/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 14/76 Niveles de abstraccin/descripcin de circuitos Niveles: sistema chip transferencia de registros puertas lgicas circuito elctrico fsico 8 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 15/76 Sumario Introduccin Niveles de abstraccin/descripcin de circuitos Metodologas de Diseo Electrnico Conceptos bsicos de VHDL Resumen Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 16/76 Metodologas de diseo electrnico Diseo con transistores Diseo con ecuaciones booleanas Diseo con esquemticos Diseo con Lenguajes de Descripcin Hardware (HDLs) 9 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 17/76 Diseo a nivel de transistor Diseo a medida (full-custom) Herramientas de diseo fsico: Simulacin de circuitos elctricos (SPICE) Diseo de patrones geomtricos (layout) Verificacin de Reglas de Diseo (DRC) Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 18/76 Diseo con ecuaciones booleanas Diseo con bibliotecas de primitivas (ASICs, PLDs) Diseo lgico (a nivel puerta) Generacin de ecuaciones booleanas Tcnicas de minimizacin Utilidad: decodificadores, multiplexores, etc. Ejemplo: sum:=(a$b)$cin; cout:=(a&b)#(a&cin)#(b&cin); sum:=(a$b)$cin; cout:=(a&b)#(a&cin)#(b&cin); 10 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 19/76 Diseo con esquemticos Concepto de jerarqua Bloques funcionales: interfaz + arquitectura Utilizacin de libreras de bloques Niveles de anidacin ilimitados Metodologa de abajo hacia arriba (bottom-up) Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 20/76 Diseo con esquemticos Concepto de jerarqua Bloques funcionales: interfaz + arquitectura Utilizacin de libreras de bloques Niveles de anidacin ilimitados Metodologa de abajo hacia arriba (bottom-up) Generado con Xilinx Foundation 3.1i 11 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 21/76 Diseo con HDLs HDL = Hardware Description Languaje Descripcin textual del circuito (no grfica) Adecuado para diseos complejos Especificacin estructural o comportamental Metodologa de arriba hacia abajo (top-down) Independencia de la tecnologa hasta la sntesis Ejemplos: VHDL, Verilog, Abel, SystemC, Handel-C... Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 22/76 Sumario Introduccin Niveles de abstraccin/descripcin de circuitos Metodologas de Diseo Electrnico Conceptos bsicos de VHDL Resumen 12 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 23/76 VHDL: mbito de aplicacin Fsico (silicio) Circuito elctrico Puertas lgicas Transfer. de registro Chip Sistema Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 24/76 VHDL: mbito de aplicacin Fsico (silicio) Circuito elctrico Puertas lgicas Transfer. de registro Chip Sistema Espectro de Espectro de utilizacin del utilizacin del VHDL VHDL 13 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 25/76 VHDL: metodologa de diseo Especificacin VHDL Sntesis Modelo a nivel de puerta Implementacin (P&R) Modelo para pruebas Modelo fsico Netlist Modelo RTL Layout / Configuracin Algoritmo ASIC/FPGA ASIC/FPGA restricciones / primitivas restricciones / primitivas Test-bench Funcionalidad prestaciones Simulacin Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 26/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos 14 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 27/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos --comentario: 3 ejemplos --de sentencias de asignacin suma <= (a AND b) AND cin; reg <= 00101 XOR dato; salida <= datoA + datoB; --comentario: 3 ejemplos --de sentencias de asignacin suma <= (a AND b) AND cin; reg <= 00101 XOR dato; salida <= datoA + datoB; Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 28/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos IF (control=1) THEN salida <= datoA AND datoB; ELSE salida <= datoA OR datoB; END IF; IF (control=1) THEN salida <= datoA AND datoB; ELSE salida <= datoA OR datoB; END IF; 15 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 29/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos CASE sel IS WHEN 00 => sal <= a AND b; WHEN 01 => sal <= a OR b; WHEN OTHERS => sal <= 0000; END CASE; CASE sel IS WHEN 00 => sal <= a AND b; WHEN 01 => sal <= a OR b; WHEN OTHERS => sal <= 0000; END CASE; Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 30/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos FOR i IN 1 TO 8 LOOP salida(9-i) <= entrada(i); END LOOP; FOR i IN 1 TO 8 LOOP salida(9-i) <= entrada(i); END LOOP; 16 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 31/76 VHDL: sintaxis general VHDL es insensible a maysculas/minsculas Utiliza ; para terminar una sentencia Utiliza -- para indicar un comentario Altamente tipado: poca conversin de tipos automtica Sentencias/sintaxis similares a otros lenguajes: Asignacin a seal Control de flujo condicional Seleccin Bucles Procesos PROCESS (seal1, seal2) --declaracion de variables BEGIN --cuerpo del proceso ... --sentencias secuenciales; END PROCESS; PROCESS (seal1, seal2) --declaracion de variables BEGIN --cuerpo del proceso ... --sentencias secuenciales; END PROCESS; Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 32/76 Ejemplo: multiplexor (I) 17 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 33/76 Ejemplo: multiplexor (I) Circuito lgico: Entidad Generado con Xilinx Foundation 3.1i Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 34/76 Ejemplo: multiplexor (I) Circuito lgico: Entidad library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; 18 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 35/76 Ejemplo: multiplexor (I) Circuito lgico: Entidad Arquitectura library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 36/76 Ejemplo: multiplexor (I) Circuito lgico: Entidad Arquitectura Descripcin algortmica ARQUITECTURE comportamental OF mux2to1 IS BEGIN PROCESS (ent_a, ent_b, selec) BEGIN IF (selec='1') THEN sal<=ent_a; ELSE sal<=ent_b; END IF; END PROCESS; END comportamental; library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; 19 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 37/76 Ejemplo: multiplexor (II) Circuito lgico: Entidad Arquitectura library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 38/76 Ejemplo: multiplexor (II) Circuito lgico: Entidad Arquitectura Descripcin de flujo de datos ARQUITECTURE flujo_datos OF mux2to1 IS SIGNAL selec_n, selec_a, selec_b: std_logic; BEGIN selec_n <= NOT(selec); selec_a <= selec AND ent_a; selec_b <= selec_n AND selec_b; sal <= selec_a OR selec_b; END flujo_datos; library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; 20 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 39/76 Ejemplo: multiplexor (III) Circuito lgico: Arquitectura library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; Entidad Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 40/76 Ejemplo: multiplexor (III) Circuito lgico: library IEEE; use IEEE.STD_LOGIC_1164.ALL; --Declaracin de la entidad del circuito ENTITY mux2to1 IS PORT (ent_a: IN std_logic; ent_b: IN std_logic; selec: IN std_logic; sal : OUT std_logic); END mux2to1; ARQUITECTURE estructural OF mux2to1 IS SIGNAL selec_n, selec_a, selec_b: std_logic; COMPONENT comp_and IS PORT (e1: IN std_logic; e2: IN std_logic; s: OUT std_logic); END COMPONENT; COMPONENT comp_or IS PORT (e1: IN std_logic; e2: IN std_logic; s: OUT std_logic); END COMPONENT; COMPONENT comp_inv IS PORT (e: IN std_logic; s: OUT std_logic); END COMPONENT; BEGIN I_1: comp_inv PORT MAP (selec, selec_n); I_2: comp_and PORT MAP (ent_a, selec, selec_a); I_3: comp_and PORT MAP (ent_b, selec_n, selec_b); I_4: comp_or PORT MAP (selec_a, selec_b, sal); END estructural; Arquitectura Descripcin estructural Entidad 21 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 41/76 Sumario Introduccin Niveles de abstraccin/descripcin de circuitos Metodologas de Diseo Electrnico Conceptos bsicos de VHDL Resumen Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 42/76 Resumen Existen diferentes niveles de descripcin de circuitos Las herramientas de CAD electrnico utilizan diferentes metodologas de diseo segn los niveles sobre los que actan Los HDLs son la mejor alternativa para diseo digital VLSI: mayor capacidad descriptiva, legibilidad, reusabilidad, e independencia de la tecnologa Las descripciones en VHDL se basan en la definicin de una entidad y una o varias arquitecturas asociadas La funcionalidad de la arquitectura se especifica mediante uno o varios procesos concurrentes 22 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 43/76 Tema: Descripcin de componentes RTL con VHDL Universidad Politcnica de Cartagena Departamento de Electrnica, Tecnologa de Computadoras y Proyectos Titulacin: Ingeniero de Telecomunicacin Asignatura: Arquitectura y Tecnologa de Computadores Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 44/76 Desarrollo de contenidos Descripcin de componentes RTL con VHDL 23 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 45/76 Sumario Introduccin Descripcin de componentes combinacionales RTL Descripcin de componentes secuenciales RTL Resumen Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 46/76 Multiplexores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multiplexor IS GENERIC(n : positive := 8); PORT (sel : IN std_logic_vector(1 DOWNTO 0); A : IN std_logic_vector(n-1 DOWNTO 0); B : IN std_logic_vector(n-1 DOWNTO 0); C : IN std_logic_vector(n-1 DOWNTO 0); mux_out: OUT std_logic_vector(n-1 DOWNTO 0)); END multiplexor; ARCHITECTURE Behavioral OF multiplexor IS BEGIN PROCESS (sel, A, B, C) BEGIN CASE sel IS WHEN "00" => MUX_OUT <= A; WHEN "01" => MUX_OUT <= B; WHEN others => MUX_OUT <= C; END CASE; END PROCESS; END Behavioral; Ejemplo 2.5.1: Multiplexor de 3 entradas de tamao arbitrario sel mux_out A C B n n n n 2 24 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 47/76 Codificadores/decodificadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cod_8_3 IS PORT ( A : IN std_logic_vector(7 DOWNTO 0); Y : OUT std_logic_vector(2 DOWNTO 0)); END cod_8_3; ARCHITECTURE Behavioral OF cod_8_3 IS BEGIN PROCESS(A) BEGIN CASE A IS WHEN "00000001" => Y <= "000"; WHEN "00000010" => Y <= "001"; WHEN "00000100" => Y <= "010"; WHEN "00001000" => Y <= "011"; WHEN "00010000" => Y <= "100"; WHEN "00100000" => Y <= "101"; WHEN "01000000" => Y <= "110"; WHEN OTHERS => Y <= "111"; END CASE; END PROCESS; END Behavioral; Ejemplo 2.5.2: Codificador de 8 a 3 A[0] Y[0] Y[1] Y[2] A[7] Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 48/76 Codificadores/decodificadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cod_8_3 IS PORT ( A : IN std_logic_vector(7 DOWNTO 0); Y : OUT std_logic_vector(2 DOWNTO 0)); END cod_8_3; ARCHITECTURE Behavioral OF cod_8_3 IS BEGIN PROCESS(A) BEGIN CASE A IS WHEN "00000001" => Y <= "000"; WHEN "00000010" => Y <= "001"; WHEN "00000100" => Y <= "010"; WHEN "00001000" => Y <= "011"; WHEN "00010000" => Y <= "100"; WHEN "00100000" => Y <= "101"; WHEN "01000000" => Y <= "110"; WHEN "10000000" => Y <= "111"; WHEN OTHERS => Y <= "---"; END CASE; END PROCESS; END Behavioral; Ejemplo 2.5.4: Codificador de 8 a 3 con indiferencias A[0] Y[0] Y[1] Y[2] A[7] 25 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 49/76 Codificadores/decodificadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY hex2led IS PORT ( enable : IN std_logic; HEX : IN std_logic_vector (3 DOWNTO 0); LED : OUT std_logic_vector (6 DOWNTO 0)); END hex2led; ARCHITECTURE Behavioral OF hex2led IS BEGIN PROCESS (enable, HEX) BEGIN IF (enable = 1) THEN LED <= "1111111"; -- apaga los 7 segmentos ELSE CASE HEX IS --n segmento:6543210 WHEN "0001" => LED <= "1111001"; --1 WHEN "0010" => LED <= "0100100"; --2 WHEN "0011" => LED <= "0110000"; --3 WHEN "0100" => LED <= "0011001"; --4 WHEN "0101" => LED <= "0010010"; --5 -- 0 WHEN "0110" => LED <= "0000010"; --6 -- --- WHEN "0111" => LED <= "1111000"; --7 -- 5 | | 1 WHEN "1000" => LED <= "0000000"; --8 -- --- <- 6 WHEN "1001" => LED <= "0010000"; --9 -- 4 | | 2 WHEN "1010" => LED <= "0001000"; --A -- --- WHEN "1011" => LED <= "0000011"; --B -- 3 WHEN "1100" => LED <= "1000110"; --C WHEN "1101" => LED <= "0100001"; --D WHEN "1110" => LED <= "0000110"; --E WHEN "1111" => LED <= "0001110"; --F WHEN OTHERS => LED <= "1000000"; --0 END CASE; END IF; END PROCESS; END BEHAVIORAL; Ejemplo 2.5.3: Convertidor de cdigo hexadecimal a 7 segmentos LED[0] HEX[0] enable HEX[3] LED[6] Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 50/76 Codificadores con prioridad LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY codific_prior IS PORT ( A : IN std_logic_vector(7 DOWNTO 0); valid : OUT std_logic; Y : OUT std_logic_vector(2 DOWNTO 0)); END codific_prior; ARCHITECTURE Behavioral OF codific_prior IS BEGIN PROCESS (A) BEGIN valid <= '1'; IF (A(7)='1') THEN Y <= "111"; ELSIF (A(6)='1') THEN Y <= "110"; ELSIF (A(5)='1') THEN Y <= "101"; ELSIF (A(4)='1') THEN Y <= "100"; ELSIF (A(3)='1') THEN Y <= "011"; ELSIF (A(2)='1') THEN Y <= "010"; ELSIF (A(1)='1') THEN Y <= "001"; ELSIF (A(0)='1') THEN Y <= "000"; ELSE Y <= "---"; valid <= '0'; END IF; END PROCESS; END Behavioral; Ejemplo 2.5.5: Codificador con prioridad de 8 a 3 A[0] Y[0] Y[1] Y[2] A[7] valid 26 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 51/76 Comparadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comparador IS GENERIC(n : positive := 8); PORT ( enable : IN std_logic; A : IN std_logic_vector(n-1 DOWNTO 0); B : IN std_logic_vector(n-1 DOWNTO 0); AmenorB : OUT std_logic; AmayorB : OUT std_logic; AigualB : OUT std_logic); END comparador; ARCHITECTURE Behavioral OF comparador IS BEGIN PROCESS (enable, A, B) BEGIN IF (enable = '0') THEN AmenorB <= '0'; AmayorB <= '0'; AigualB <= '0'; ELSE IF ( A < B ) THEN AmenorB <= '1'; ELSE AmenorB <= '0'; END IF; IF ( A > B ) THEN AmayorB <= '1'; ELSE AmayorB <= '0'; END IF; IF ( A = B ) THEN AigualB <= '1'; ELSE AigualB <= '0'; END IF; END IF; END PROCESS; END Behavioral; Ejemplo 2.5.6: Comparador de n bits con entrada de habilitacin A AmenorB AmayorB AigualB B enable n n Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 52/76 Buffers triestado -- buffer triestado de tamano arbitrario LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY triestado IS GENERIC(n : positive := 8); PORT(enable: IN std_logic; din : IN std_logic_vector(n-1 DOWNTO 0); dout : OUT std_logic_vector(n-1 DOWNTO 0)); END triestado; ARCHITECTURE Behavioral OF triestado IS BEGIN PROCESS (enable, din) BEGIN IF (enable='1') THEN dout <= din; ELSE dout <= (OTHERS =>'Z'); END IF; END PROCESS; END Behavioral; Ejemplo 2.5.7: Buffer triestado de tamao arbitrario din dout enable n n 27 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 53/76 Desplazadores y rotadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY desplazador IS PORT ( A : IN std_logic_vector(7 DOWNTO 0); sel : IN std_logic_vector(1 DOWNTO 0); Y : OUT std_logic_vector(7 DOWNTO 0)); END desplazador; ARCHITECTURE Behavioral OF desplazador IS BEGIN PROCESS (A, sel) BEGIN CASE sel IS WHEN "00" => Y <= A; WHEN "01" => Y(7 DOWNTO 1) <= A(6 DOWNTO 0); Y(0) <= 0; WHEN "10" => Y(7 DOWNTO 2) <= A(5 DOWNTO 0); Y(1 DOWNTO 0) <= (OTHERS=>0); WHEN OTHERS => Y(7 DOWNTO 3) <= A(4 DOWNTO 0); Y(2 DOWNTO 0) <= (OTHERS=>0); END CASE; END PROCESS; END Behavioral; Ejemplo 2.5.9: Desplazador lgico a la izquierda A Y sel 8 8 2 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 54/76 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY desplazador IS PORT ( A : IN std_logic_vector(7 DOWNTO 0); sel : IN std_logic_vector(1 DOWNTO 0); Y : OUT std_logic_vector(7 DOWNTO 0)); END desplazador; ARCHITECTURE Behavioral OF desplazador IS BEGIN PROCESS (A, sel) BEGIN CASE sel IS WHEN "00" => Y <= A; WHEN "01" => Y(7 DOWNTO 1) <= A(6 DOWNTO 0); Y(0) <= 0; WHEN "10" => Y(7 DOWNTO 2) <= A(5 DOWNTO 0); Y(1 DOWNTO 0) <= (OTHERS=>0); WHEN OTHERS => Y(7 DOWNTO 3) <= A(4 DOWNTO 0); Y(2 DOWNTO 0) <= (OTHERS=>0); END CASE; END PROCESS; END Behavioral; A Y sel Desplazadores y rotadores Ejemplo 2.5.9: Desplazador lgico a la izquierda Y <= A sor 2 Y <= A(1 DOWNTO 0) & A(7 DOWNTO 2); Rotar a la Drcha. Y <= A rol 2 Y <= A(5 DOWNTO 0) & A(7 DOWNTO 6); Rotar a la Izada. Y <= A sra 2 Y <= A(7) & A(7) & A(7 DOWNTO 2); Desplazam. Aritmtico a la Drcha. Y <= A sla 2 Y <= A(5 DOWNTO 0) & A(0) & A(0); Desplazam. Aritmtico a la Izqda. Y <= A srl 2 Y <= 00 & A(7 DOWNTO 2); Desplazam. Lgico a la Drcha. Y <= A sll 2 Y <= A(5 DOWNTO 0) & 00; Desplazam. Lgico a la Izqda. Sintaxis 2* Sintaxis 1 Operacin *En realidad, esta sintaxis slo permite operar sobre tipos de datos definidos como bit_vector, y no sobre std_logic_vector, como veremos ms adelante. No obstante, la biblioteca numeric_std sobrecarga estos operadores para que tambin puedan utilizarse con sus tipos de datos, signed y unsigned. 28 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 55/76 Unidades aritmtico-lgicas LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.numeric_std.all; ENTITY alu IS GENERIC( n : positive := 8); PORT ( cod_op : IN std_logic_vector(2 DOWNTO 0); datoA : IN std_logic_vector(n-1 DOWNTO 0); datoB : IN std_logic_vector(n-1 DOWNTO 0); resultado: OUT std_logic_vector(n-1 DOWNTO 0)); END alu; ARCHITECTURE Behavioral OF alu IS BEGIN PROCESS (cod_op, datoA, datoB) BEGIN CASE cod_op IS --operaciones logicas WHEN "000" => resultado <= datoA; WHEN "001" => resultado <= datoA AND datoB; WHEN "010" => resultado <= datoA OR datoB; WHEN "011" => resultado <= datoA XOR datoB; --operaciones aritmeticas WHEN "100" => resultado <= std_logic_vector(signed(datoA) + 1); WHEN "101" => resultado <= std_logic_vector(signed(datoA) + signed(datoB)); WHEN "110" => resultado <= std_logic_vector(signed(datoA) - signed(datoB)); WHEN OTHERS =>resultado <= std_logic_vector(signed(datoA) - 1); END CASE; END PROCESS; END Behavioral; Ejemplo 2.5.10: Unidad aritmtico- lgica trivial datoA resultado cod_op datoB n n n 3 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 56/76 Sumario Introduccin Descripcin de componentes combinacionales RTL Descripcin de componentes secuenciales RTL Resumen 29 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 57/76 Biestables LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY milatch IS GENERIC( n : positive := 8); PORT (enable : IN std_logic; din : IN std_logic_vector(n-1 DOWNTO 0); dout : OUT std_logic_vector(n-1 DOWNTO 0)); END milatch; ARCHITECTURE Behavioral OF milatch IS BEGIN PROCESS (enable, din) BEGIN IF (enable = '1') THEN dout <= din; END IF; END PROCESS; END Behavioral; Ejemplo 2.6.1: Descripcin de latches tipo D sincronizados (gated D latch) din dout enable n n Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 58/76 Biestables LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY biestableD IS PORT ( clk : IN std_logic; din : IN std_logic; dout : OUT std_logic); END biestableD; ARCHITECTURE Behavioral OF biestableD IS BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN dout <= din; END IF; END PROCESS; END Behavioral; Ejemplo 2.6.2: Descripcin de un flip-flop tipo D din clk dout 30 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 59/76 Biestables LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY biestableD IS PORT ( clk : IN std_logic; reset: IN std_logic; din : IN std_logic; dout : OUT std_logic); END biestableD; ARCHITECTURE Behavioral OF biestableD IS BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (reset = '1') THEN dout <= '0'; ELSE dout <= din; END IF; END IF; END PROCESS; END Behavioral; Ejemplo 2.6.3: Descripcin de un flip-flop tipo D con reset sncrono din clk dout reset Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 60/76 Biestables LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY biestableD IS PORT ( clk : IN std_logic; reset: IN std_logic; din : IN std_logic; dout : OUT std_logic); END biestableD; ARCHITECTURE Behavioral OF biestableD IS BEGIN PROCESS (clk, reset) BEGIN IF (reset = '1') THEN dout <= '0'; ELSIF (clk'EVENT AND clk = '1') THEN dout <= din; END IF; END PROCESS; END Behavioral; Ejemplo 2.6.4: Descripcin de un flip-flop tipo D con reset asncrono din clk dout reset 31 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 61/76 Biestables LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY biestableD IS PORT ( clk : IN std_logic; enable : IN std_logic; din : IN std_logic; dout : OUT std_logic); END biestableD; ARCHITECTURE Behavioral OF biestableD IS BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (enable = '1') THEN dout <= din; END IF; END IF; END PROCESS; END Behavioral; Ejemplo 2.6.5: Descripcin de un flip-flop tipo D con habilitacin de reloj din clk dout enable Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 62/76 Registros de desplazamiento LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg_desplaza IS GENERIC (n : positive := 8); PORT ( clk : IN std_logic; reset : IN std_logic; load : IN std_logic; data : IN std_logic_vector(n-1 DOWNTO 0); sin : IN std_logic; sout : OUT std_logic); END reg_desplaza; ARCHITECTURE Behavioral OF reg_desplaza IS SIGNAL reg: std_logic_vector (n-1 DOWNTO 0); BEGIN PROCESS (reset, clk) BEGIN IF (reset='1') THEN reg <= (OTHERS=>'0'); ELSIF (clk'EVENT AND clk='1') THEN IF (load='1') THEN reg <= data; ELSE reg <= reg(n-2 DOWNTO 0) & sin; --desplaza a izquierdas END IF; END IF; END PROCESS; sout <= reg(n-1); END Behavioral; Ejemplo 2.6.8: Registro de desplazamiento con reset asncrono, carga sncrona, y entrada/salida serie data clk sout reset load sin n 32 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 63/76 Contadores LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; ENTITY contador IS GENERIC( n : positive := 8); PORT ( clk, reset, ce, load, dir : IN std_logic; din : IN std_logic_vector(n-1 DOWNTO 0); count : OUT std_logic_vector(n-1 DOWNTO 0)); END contador; ARCHITECTURE Behavioral OF contador IS SIGNAL count_aux: unsigned (n-1 DOWNTO 0); BEGIN PROCESS (clk, reset) BEGIN IF reset='1' THEN count_aux <= (OTHERS => '0'); ELSIF clk='1' AND clk'EVENT THEN IF load='1' THEN count_aux <= unsigned(din); ELSE IF ce='1' THEN IF dir='1' THEN count_aux <= count_aux + 1; ELSE count_aux <= count_aux - 1; END IF; END IF; END IF; END IF; END PROCESS; count <= std_logic_vector(count_aux); END Behavioral; Ejemplo 2.6.9: Contador sncrono, reset asncrono, entradas de carga y habilitacin sncronas din clk count reset ce load dir n n Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 64/76 Tema: Sntesis de alto nivel Universidad Politcnica de Cartagena Departamento de Electrnica, Tecnologa de Computadoras y Proyectos Titulacin: Ingeniero de Telecomunicacin Asignatura: Arquitectura y Tecnologa de Computadores 33 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 65/76 Desarrollo de contenidos Sntesis de alto nivel Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 66/76 Sumario Introduccin Inferencia de memoria ROM Inferencia de memoria RAM Inferencia de Mquinas de Estado 34 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 67/76 Memoria --Infiere memoria ROM de lectura asincrona --(por ello en Xilinx se implementara, por defecto, como memoria distribuida) library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity rom_asinc is Generic (data_width : integer := 8; address_width : integer := 5; mem_depth : integer := 32); Port(address : in STD_LOGIC_VECTOR(address_width-1 downto 0); data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) ); end rom_asinc; architecture Behavioral of rom_asinc is type rom_type is array (mem_depth-1 downto 0) of STD_LOGIC_VECTOR (data_width-1 downto 0); constant rom : rom_type :=( "10001010", "11110000", "10101010", "00001111", -- 3 "01010101", "00000000", "11111111", "11001100", -- 7 "01010101", "00000000", "11111111", "11001100", -- 11 "01010101", "00000000", "11111111", "11001100", -- 15 "10001010", "11110000", "10101010", "00001111", -- 19 "01010101", "00000000", "11111111", "11001100", -- 23 "01010101", "00000000", "11111111", "11001100", -- 27 "01010101", "00000000", "11111111", "11001100" ); --31 begin data_out <= rom(to_integer(unsigned(address))); end Behavioral; Ejemplo 8.1: ROM de lectura asncrona address data_out m n Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 68/76 Memoria --Infiere memoria ROM de lectura sincrona --(por ello en Xilinx se implementara, por defecto, como block RAM) library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity rom_sinc is Generic (data_width : integer := 8; address_width : integer := 5; mem_depth : integer := 32); Port(address: in STD_LOGIC_VECTOR(address_width-1 downto 0); clk : in STD_LOGIC; data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) ); end rom_sinc; architecture Behavioral of rom_sinc is type rom_type is array (mem_depth-1 downto 0) of STD_LOGIC_VECTOR (data_width-1 downto 0); constant rom : rom_type :=( "10001010", "11110000", "10101010", "00001111", -- 3 "01010101", "00000000", "11111111", "11001100", -- 7 "01010101", "00000000", "11111111", "11001100", -- 11 "01010101", "00000000", "11111111", "11001100", -- 15 "10001010", "11110000", "10101010", "00001111", -- 19 "01010101", "00000000", "11111111", "11001100", -- 23 "01010101", "00000000", "11111111", "11001100", -- 27 "01010101", "00000000", "11111111", "11001100" ); --31 begin rd: process(clk) begin if (rising_edge(clk)) then data_out <= rom(to_integer(unsigned(address))); end if; end process; end Behavioral; Ejemplo 8.2: ROM de lectura sncrona address clk data_out m n 35 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 69/76 Sumario Introduccin Inferencia de memoria ROM Inferencia de memoria RAM Inferencia de Mquinas de Estado Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 70/76 Memoria --Infiere RAM de escritura sincrona pero lectura asincrona --(por ello en Xilinx se implementara, por defecto, como distributed RAM) library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity ram_asinc_read is Generic (data_width : integer := 8; address_width : integer := 5; mem_depth : integer := 32); Port(data_in : in STD_LOGIC_VECTOR(data_width-1 downto 0); we, clk : in STD_LOGIC; address : in STD_LOGIC_VECTOR(address_width-1 downto 0); data_out : out STD_LOGIC_VECTOR(data_width-1 downto 0) ); end ram_asinc_read; architecture Behavioral of ram_asinc_read is type mem_type is array (mem_depth-1 downto 0) of STD_LOGIC_VECTOR (data_width-1 downto 0); signal mem : mem_type; begin wr: process(clk, we, address) begin if (rising_edge(clk)) then if (we = '1') then mem(to_integer(unsigned(address))) <= data_in; end if; end if; end process; data_out <= mem(to_integer(unsigned(address))); end Behavioral; Ejemplo 8.3: RAM de escritura sncrona y lectura asncrona address clk data_out m n we data_in m 36 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 71/76 Sumario Introduccin Inferencia de memoria ROM Inferencia de memoria RAM Inferencia de Mquinas de Estado Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 72/76 Mquinas de Estado Ejemplo 8.8: FSM utilizando dos procesos Se pretende disear el algoritmo de control de un robot explorador para una misin en Marte. El robot ir tomando muestras de la superficie del planeta mientras se desplaza. Para controlar su movimiento, el frontal del robot posee un sensor (x) que detecta obstculos en la trayectoria actual cuando estn a menos de una distancia determinada, y dos salidas (zi y zd) que controlan el movimiento de sendas orugas. En ausencia de obstculos (x=0), el robot debe avanzar en la direccin en que se encuentre orientado (zizd=00). Cada vez que detecte un obstculo (x=1), el robot deber girar para evitarlo y continuar la exploracin. En cada obstculo el giro ser a derechas (zizd=01) o izquierdas (zizd=10) de forma alternativa, con el fin de evitar un posible movimiento en crculos y abarcar una mayor zona de exploracin. 0 1 A A/00 B/01 B C/00 B/01 C C/00 D/10 D A/00 D/10 Tabla de Estados 0 1 00 00/00 01/01 01 11/00 01/01 11 11/00 10/10 10 00/00 10/10 Tabla de Transiciones A C B D 0/00 1/01 1/10 0/00 0/00 0/00 1/10 1/01 Diagrama de Estados 37 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 73/76 Mquinas de Estado ... PROCESS (sreg, xin) BEGIN CASE sreg IS WHEN STATE0 => IF ( xin='1' ) THEN next_sreg<=STATE1; zi<='0'; zd<='1'; ELSE next_sreg<=STATE0; zi<='0'; zd<='0'; END IF; WHEN STATE1 => IF ( xin='0' ) THEN next_sreg<=STATE2; zi<='0'; zd<='0'; ELSE next_sreg<=STATE1; zi<='0'; zd<='1'; END IF; WHEN STATE2 => IF ( xin='1' ) THEN next_sreg<=STATE3; zi<='1'; zd<='0'; ELSE next_sreg<=STATE2; zi<='0'; zd<='0'; END IF; WHEN STATE3 => IF ( xin='0' ) THEN next_sreg<=STATE0; zi<='0'; zd<='0'; ELSE next_sreg<=STATE3; zi<='1'; zd<='0'; END IF; END CASE; END PROCESS; END BEHAVIORAL; Ejemplo 8.8: FSM utilizando dos procesos --dos procesos, salidas combinacionales LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY ROBOT IS PORT ( CLK,RESET,xin : IN std_logic; zd,zi : OUT std_logic); END; ARCHITECTURE BEHAVIORAL OF ROBOT IS TYPE type_sreg IS (STATE0,STATE1,STATE2,STATE3); SIGNAL sreg, next_sreg : type_sreg; BEGIN PROCESS (CLK, RESET) BEGIN IF ( RESET='1' ) THEN sreg <= STATE0; ELSIF CLK='1' AND CLK'event THEN sreg <= next_sreg; END IF; END PROCESS; ... Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 74/76 Tema: VHDL para simulacin Universidad Politcnica de Cartagena Departamento de Electrnica, Tecnologa de Computadoras y Proyectos Titulacin: Ingeniero de Telecomunicacin Asignatura: Arquitectura y Tecnologa de Computadores 38 Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 75/76 Desarrollo de contenidos VHDL para simulacin Sntesis de Sistemas Digitales con VHDL F. Javier Garrigs Guerrero 76/76 Sumario Introduccin Tipos de retardo en la asignacin a seal Tipos de simulaciones Tipos de simuladores Diseo de bancos de prueba (testbenches)
Uso de Recursos Tecnológicos Variados para Los Docentes Del Nivel Superior Del Instituto de Ciencias de La Educación, Universidad Autónoma Del Estado de Morelos, Febrero - Junio 2021.