Sei sulla pagina 1di 5

Código FGL 029

GUÍA DE TRABAJO PRÁCTICO - EXPERIMENTAL


Versión 01
Talleres y Laboratorios de Docencia ITM
Fecha 2014-08-20

1. IDENTIFICACIÓN DE LA GUÍA

Nombre de la guía: Descripción de máquinas de estados algorítmicas con VHDL


Código de la guía (No.): DDW103-P02
Taller(es) o Laboratorio(s) aplicable(s): Laboratorio de Microelectrónica y Nanotecnología
Tiempo de trabajo práctico estimado: 2 horas TP – 2 horas TI
Asignatura(s) aplicable(s): DDW103 - Diseño Digital
Programa(s) Académico(s) / Ingeniería Electrónica
Facultad(es): Facultad de Ingenierías

COMPETENCIAS CONTENIDO TEMÁTICO INDICADOR DE LOGRO


El estudiante hace uso de
técnicas básicas y avanzadas de
diseño para implementar sistemas
lógicos digitales complejos

El estudiante diseña y simula un Diseño y simulación de una


sistema lógico digital empleando Máquinas de estados algorítmicas máquina de estados algorítmica
herramientas de diseño empleando VHDL
Descripción de circuitos y
El estudiante comprende el sistemas lógicos digitales Implementación de una máquina
funcionamiento de una FPGA y empleando VHDL de estados algorítmica sobre
sabe programarla FPGA
El estudiante configura sistemas
de desarrollo basados en FPGA
empleando herramientas de
diseño

2. FUNDAMENTO TEÓRICO

2.1. Descripción de máquinas de estados algorítmicas con VHDL


La descripción en VHDL de un circuito multiplicador secuencial basado en el algoritmo de sumas y
corrimientos se muestra en el siguiente código fuente:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity multiplier_add_shift is
    Port ( Start : in STD_LOGIC;
           Reset : in STD_LOGIC;
           Multiplicand : in STD_LOGIC_VECTOR (7 downto 0);
           Multiplier : in STD_LOGIC_VECTOR (7 downto 0);
           CLK : in STD_LOGIC;
           Product : out STD_LOGIC_VECTOR (15 downto 0) := "0000000000000000";
           Y: out STD_LOGIC_VECTOR (1 downto 0) := "00";
           Ready : out STD_LOGIC := '0');
end multiplier_add_shift;
Código FGL 029
GUÍA DE TRABAJO PRÁCTICO - EXPERIMENTAL
Versión 01
Talleres y Laboratorios de Docencia ITM
Fecha 2014-08-20

architecture Behavioral of multiplier_add_shift is
type states is (S_idle, S_add, S_shift);
signal state: states;
signal A: unsigned( 8 downto 0 );
signal B: unsigned( 7 downto 0 );
signal Q: unsigned( 7 downto 0 );
signal P: integer range 0 to 8 := 8;
begin
process(Start, Reset, Multiplicand, Multiplier, CLK)
begin
    if (Reset = '1') then
        state <= S_idle;
    else
        if ( rising_edge(CLK) ) then
            case state is
               when S_idle =>
                    Ready <= '1';
                    if (Start = '0') then
                        state <= S_idle;
                    else
                        A <= "000000000";
                        B <= unsigned(Multiplicand);
                        Q <= unsigned(Multiplier);
                        P <= 8;
                        state <= S_add;
                    end if;
               when S_add =>
                    Ready <= '0';
                    P <= P ­ 1;
                    if ( Q(0) = '0') then
                    else
                        A <= A + B;
                    end if;
                    state <= S_shift;
               when S_shift =>
                    Ready <= '0';
                    Q <= Q srl 1;
                    Q(7) <= A(0);
                    A <= A srl 1;
                    if (P = 0) then
                       state <= S_idle;
                    else
                       state <= S_add;
                    end if;
            end case;
         end if;
     end if;
end process;
Código FGL 029
GUÍA DE TRABAJO PRÁCTICO - EXPERIMENTAL
Versión 01
Talleres y Laboratorios de Docencia ITM
Fecha 2014-08-20

with state select Y <=  "00" when S_idle,
                        "01" when S_add,
                        "10" when S_shift;
                        
product <= std_logic_vector(A(7 downto 0) & Q);                 

end Behavioral;

2.2. Simulación de máquinas de estados algorítmicas con VHDL

El testbench para la máquina de estados algorítmica descrita en la sección 2.1 se muestra se muestra en el
siguiente código:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity test_multiplier_add_shift is
­­  Port ( );
end test_multiplier_add_shift;

architecture Behavioral of test_multiplier_add_shift is

component multiplier_add_shift is
    Port ( Start : in STD_LOGIC;
       Reset : in STD_LOGIC;
       Multiplicand : in STD_LOGIC_VECTOR (7 downto 0);
       Multiplier : in STD_LOGIC_VECTOR (7 downto 0);
       CLK : in STD_LOGIC;
       Product : out STD_LOGIC_VECTOR (15 downto 0) := "0000000000000000";
       Y: out STD_LOGIC_VECTOR (1 downto 0) := "00";
       Ready : out STD_LOGIC := '0');
end component multiplier_add_shift;

signal Start : STD_LOGIC;
signal Reset : STD_LOGIC;
signal Multiplicand : STD_LOGIC_VECTOR (7 downto 0);
signal Multiplier : STD_LOGIC_VECTOR (7 downto 0);
signal CLK : STD_LOGIC := '0';
signal Product : STD_LOGIC_VECTOR (15 downto 0) := "0000000000000000";
signal Y: STD_LOGIC_VECTOR (1 downto 0);
signal Ready : STD_LOGIC := '0';

begin

u_mult: multiplier_add_shift port map
         ( Start => Start,
           Reset => Reset,
           Multiplicand => Multiplicand,
           Multiplier => Multiplier,
           CLK => CLK,
           Product => Product,
           Y => Y,
           Ready => Ready);
Código FGL 029
GUÍA DE TRABAJO PRÁCTICO - EXPERIMENTAL
Versión 01
Talleres y Laboratorios de Docencia ITM
Fecha 2014-08-20

p_clk: process
begin
   wait for 50 ns;
   CLK <= not(CLK);
end process;
p_stm: process
begin
   Start <= '0';
   Reset <= '0';
   Multiplicand <= "00001001";   
   Multiplier   <= "00000110";
   wait for 200 ns;
   Start <= '1';
   wait for 200 ns;
   Start <= '0';
   wait for 2000 ns;
   wait;
end process;
end Behavioral;

La simulación de la máquina de estados algorítmica empleando el testbench se muestra en la Figura 1.

Figura 1: Simulación de la máquina de estados algorítmica empleando el archivo de prueba.

3. OBJETIVO(S)

• Diseñar una máquina de estados algorítmica empleando cartas ASM


• Describir una máquina de estados algorítmica empleando VHDL
• Verificar el funcionamiento de una máquina de estados algorítmica descrita en VHDL mediante la
simulación empleando un archivo de prueba o testbench
• Verificar el funcionamiento de una máquina de estados algorítmica descrita en VHDL en un sistema
de desarrollo basado en FPGA

4. RECURSOS REQUERIDOS

• Estación de trabajo - Laboratorio de Microelectrónica y Nanotecnología


• Entorno de desarrollo Vivado Design Suite
• Sistema de desarrollo basado en FPGA (Nexys3, Nexys4 o ZedBoard)

5. PROCEDIMIENTO O METODOLOGÍA PARA EL DESARROLLO

Diseño del circuito lógico: a partir de un problema de diseño de una máquina de estados algorítmica se
debe realizar la representación formal empleando una carta ASM.
Código FGL 029
GUÍA DE TRABAJO PRÁCTICO - EXPERIMENTAL
Versión 01
Talleres y Laboratorios de Docencia ITM
Fecha 2014-08-20

Descripción en VHDL: realizar una descipción comportamental del circuito en VHDL a nivel algorítmico.

Simulación del circuito lógico: realizar un archivo de prueba en VHDL para verificar el funcionamiento del
circuito empleando la herramienta de simulación. Este archivo de prueba debe contener las condiciones
necesarias y suficientes que permitan determinar si la descripción en VHDL del circuito es correcta.

Programación de la FPGA: realizar el procedimiento de asignación de pines, síntesis, implementación y


programación del sistema de desarrollo para el circuito lógico secuencial descrito.

6. PARÁMETROS PARA ELABORACIÓN DEL INFORME

El informe debe contener

• Diseño del circuito lógico


• Presentación y análisis de resultados
• Conclusiones

7. BIBLIOGRAFÍA

 Mano, M. M., & Sánchez, G. D. (2003). Diseño digital. Pearson Educación.


 Floyd, T. L., Caño, M. J. G., de Turiso, E. B. L., & Herrero, L. P. (2006). Fundamentos de sistemas digitales.
Prentice Hall.
 Wakerly, J. F. (2006). Diseño digital: principios y prácticas. Prentice Hall.
 Tocci, R. J., & Widmer, N. S. (2003). Sistemas digitales: principios y aplicaciones. Pearson Educación.
 Programación en VHDL [En línea]. https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_VHDL
 VHDL Guides [En línea]. http://www.ics.uci.edu/~jmoorkan/vhdlref/

Elaborado por: Luis Fernando Castaño Londoño


Revisado por:
Versión: 1.0
Fecha: Agosto de 2016

Potrebbero piacerti anche