1 / 24

Circuitos Digitales II

Departamento de Ingeniería Electrónica Facultad de Ingeniería. Circuitos Digitales II. Elementos del VHDL (2da parte) Semana No.4 Semestre 2008-2 Prof. Gustavo Patiño gpatino@udea.edu.co Prof. Eugenio Duque eaduque@udea.edu.co. Temario. Ejemplo de Asignaciones

lajos
Télécharger la présentation

Circuitos Digitales II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Departamento de Ingeniería Electrónica Facultad de Ingeniería Circuitos Digitales II Elementos del VHDL (2da parte) Semana No.4 Semestre 2008-2 Prof. Gustavo Patiño gpatino@udea.edu.co Prof. Eugenio Duque eaduque@udea.edu.co

  2. Temario • Ejemplo de Asignaciones • Modelo estructural de Nivel de Puertas Lógicas • Modelo estructural RTL Asignación condicional • Modelo estructural RTL Asignación seleccionada • Modelo comportamental definido dentro de un process y usando IF-ELSE • Modelo comportamental definido dentro de un process y usando CASE • Modelo comportamental definido dentro de un process y usando FOR • Operadores Aritméticos • VHDL Estructural • Síntesis vs Simulación • Test Bench (Banco de Prueba)

  3. Recordando…. • Instrucciones de Asignación concurrentes • Sólo dentro de arquitecturas • Tipos de asignación concurrentes : • Asignación básica de señal • Asignación de señal condicional • When – Else • Asignación de señal seleccionada • With – Select – When • Instrucciones de Asignación dentro de Process • Instrucciones secuenciales • Tipos de asignación : • Asignación básica de señal • Asignación de señal condicional • If – Elsif – Else – Endif • Asignación de señal seleccionada • Case – When – End case

  4. Ejemplo Final de Tipos de Asignación : Mux de dos entradas de 4 bits Seis (6) formas diferentes de escribir el mismo sistema. Diferentes niveles de abstracción.

  5. Modelo de Nivel de Puertas Lógicas -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT ( select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTURE gates_only OF quad_2_input IS BEGIN data_q(0) <= (data_a(0) AND NOT select_data) OR (data_b(0) AND select_data); data_q(1) <= (data_a(1) AND NOT select_data) OR (data_b(1) AND select_data); data_q(2) <= (data_a(2) AND NOT select_data) OR (data_b(2) AND select_data); data_q(3) <= (data_a(3) AND NOT select_data) OR (data_b(3) AND select_data); END gates_only;

  6. Modelo RTL Asignación condicional -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT ( select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTURE conditional_assignOF quad_2_input IS BEGIN data_q <= data_a WHEN select_data = ’0’ ELSE data_b; ENDconditional_assign;

  7. Modelo RTL Asignación seleccionada -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT ( select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTUREusing_select OF quad_2_input IS BEGIN WITH select_data SELECT data_q <= data_a WHEN ’0’, data_b WHEN OTHERS, ENDusing_select;

  8. Modelo comportamental definido dentro de un process y usando IF-ELSE -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT (select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTUREprocess_if OF quad_2_input IS BEGIN PROCESS (select_data, data_a, data_b) BEGIN IF (select_data = ’0’) THEN data_q <= data_a; ELSE data_q <= data_b; END IF; END PROCESS; ENDprocess_if;

  9. Modelo comportamental definido dentro de un process y usando CASE -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT (select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTUREprocess_caseOF quad_2_input IS BEGIN PROCESS (select_data, data_a, data_b) BEGIN CASE select_data IS WHEN ’0’ => data_q <= data_a; WHEN OTHERS => data_q <= data_b; END CASE; END PROCESS; ENDprocess_case;

  10. Modelo comportamental definido dentro de un process y usando FOR -- MUX de dos entradas de cuatro bits LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY quad_2_input IS PORT (select_data : IN STD_LOGIC; data_a, data_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END quad_2_input; ARCHITECTUREprocess_loopOF quad_2_input IS BEGIN PROCESS (select_data, data_a, data_b) BEGIN FOR i IN 0 to 3 LOOP data_q(i) <= (data_a(i) AND NOT select_data) OR (data_b(i) AND select_data); END LOOP; END PROCESS; ENDprocess_loop;

  11. Arithmetic Operators in VHDL (1) To use basicarithmeticoperationsinvolvingstd_logic_vectorsyouneedtoincludethefollowinglibrarypackages: LIBRARYieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; or USE ieee.std_logic_signed.all;

  12. Arithmetic Operators in VHDL (2) You can use standard+, -operatorstoperformaddition and subtraction: signalA : STD_LOGIC_VECTOR(3 downto 0); signalB : STD_LOGIC_VECTOR(3 downto 0); signalC : STD_LOGIC_VECTOR(3 downto 0); …… C <= A + B;

  13. VHDL Estructural • Hasta ahora, cada dispositivo se ha diseñado, compilado y simulado en forma independiente. • Para conectar varios dispositivos, se requiere definir una arquitectura estructural (componentes + conexiones) • Ejemplo mínimo: Test Bench

  14. VHDL Estructural (…cont) • Beneficios: • Al sintetizar una descripción estructural, los elementos individuales VHDL se colapsan dentro de un solo bloque, resultando quizá en lógica más eficiente. • Portabilidad. • Problemas: • Fácilmente se equivocan las conexiones. • No se puede rescatarse el diseño original a partir del archivo de síntesis.

  15. Modelo para VHDL estructural ENTITY nombre IS PORT(...); END ENTITY nombre; ARCHITECTURE estructural OF nombre IS COMPONENT tipo1 PORT( … ); END COMPONENT; COMPONENT tipo2 PORT( … ); END COMPONENT; … SIGNAL señal1, señal2, … BEGIN c1: tipo1 PORT MAP( …); c2: tipo2 PORT MAP(…); ... ... END ARCHITECTURE estructural;

  16. VHDL Estructural (…cont) • Components • Once you have defined an entity, the next thing is to instantiate it as a component within another entity’s architecture. • The interface of the componentmust be defined in any architecture that instantiates it. Then, any number of port map statements create instances of that component. • Example : Here is how to connect eight of the full adders to give a eight-bit adder:

  17. Ejemplo : Sumador completo de 1- bit library ieee; -- add this to the IEEE library use ieee.std_logic_1164.all; -- includes std_ulogic entity full_adder is port(a, b, c : in std_ulogic; sum, carry : out std_ulogic); end full_adder; architecture imp of full_adder is begin sum <= (a xor b) xor c; -- combinational logic carry <= (a and b) or (a and c) or (b and c); end imp;

  18. Ejemplo : Sumador completo de 8- bits usando components library ieee; use ieee.std_logic_1164.all; entity add2 is port (A, B : in std_logic_vector(7 downto 0); sum_out : out std_logic_vector(8 downto 0)); end add2; architectureimpof add2 is component full_adder port (a, b, c : in std_ulogic; sum, carry : out std_ulogic); end component; signal carry : std_ulogic_vector(6 downto 0); begin bit0 : full_adder port map (a => A(0), b => B(0), c => ’0’, sum => sum_out(0), carry => carry(0)); bit1 : full_adder port map (a => A(1), b => B(1), c => carry(0), sum => sum_out (1), carry => carry(1)); bit2 : full_adder port map (a => A(2), b => B(2), c => carry(1), sum => sum_out (2), carry => carry(2)); bit3 : full_adder port map (a => A(3), b => B(3), c => carry(2), sum => sum_out (3), carry => carry(3)); bit4 : full_adder port map (a => A(4), b => B(4), c => carry(3), sum => sum_out (4), carry => carry(4)); bit5 : full_adder port map (a => A(5), b => B(5), c => carry(4), sum => sum_out (5), carry => carry(5)); bit6 : full_adder port map (a => A(6), b => B(6), c => carry(5), sum => sum_out (6), carry => carry(6)); bit7 : full_adder port map (a => A(7), b => B(7), c => carry(6), sum => sum_out (7), carry => sum_out (8)); end imp;

  19. Síntesis vs Simulación • Todos los diseños sintetizables pueden ser simulados. • No todos los diseños para simulación pueden ser sintetizados. • Considere, por ejemplo, el siguiente código:

  20. Síntesis vs Simulación (…cont) • La entrada din es asignada a dout después de 10ns (after 10ns) • Puede esto representar un sistema del mundo real ? SI • Será posible de implementar esto en un dispositivo ? TAL VEZ • Será posible de implementar esto en todos los dispositivos ? NO • Esta arquitectura puede ser simulado más no sintetizado. • Algunas herramientas de diseño en VHDL sólo permiten el uso de palabras claves sintetizables. • La mayoría de las herramientas aceptan un subconjunto sintetizable de VHDL’93.

  21. Test Bench (Banco de Prueba) -- Modelo VHDL para elaboración de un testbench en VHDL: LIBRARY IEEE; USE IEEE.std_logic_1164.all; LIBRARY WORK; USE WORK.all; ----------------------------------------------------------------------- -- Declaración del banco de prueba ----------------------------------------------------------------------- ENTITY mux2a1_tb IS END ENTITY mux2a1_tb; • Eventualmente WORK es la colección de diseños que se desean simular. • No hay interface externa. • Básicamente debido a que la declaración de un Testbenchno es en si mismo un bloque circuital. • Es sólo la especificación temporal de variaciones de señales para efectos de simulación.

  22. Componentes del TestBench ---------------------------------------------------------------- -- Definición del banco de prueba ---------------------------------------------------------------- ARCHITECTURE prueba OF mux2a1_tb IS -- Declaración del componente bajo prueba (cbp) COMPONENT mux2a1 IS PORT( s : IN std_logic ; -- selector a,b : IN std_logic_vector(7 DOWNTO 0); -- entradas o : OUT std_logic_vector(7 DOWNTO 0) -- salida ); END COMPONENT mux2a1; -- Declaración de señales de prueba SIGNAL clk : std_logic; SIGNAL a,b,o : std_logic_vector(7 DOWNTO 0);

  23. Instancias y procesos del testbench BEGIN cbp : COMPONENT mux2a1 -- instancia del dispositivo PORT MAP( clk ,a,b,o); reloj:PROCESS IS -- generación de reloj BEGIN clk <= '1'; WAIT FOR 25 ns ; clk <= '0'; WAIT FOR 25 ns ; END PROCESS reloj; estimulación: PROCESS IS-- patrones de estimulación BEGIN a <= "01010101"; -- define entrada 'a' b <= "00001111"; -- define entrada 'b' WAIT ; END PROCESS estimulación; END ARCHITECTUREprueba; Component/Port map : Genera una instancia del componente y lo conecta a las señales del circuito al cual pertenece. Wait/waitfor: Le indican al simulador que esperen infinitamente por el tiempo especificado.

  24. Taller próxima clase • Actividad en clase • Taller para realizar en la próxima em preparación para el Quiz No.1. • Multiplicador de 4 bits. • Quiz No. 1. • Miércoles 03 de diciembre del 2008.

More Related