Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. IDENTIFICACIÓN DE LA GUÍA
2. FUNDAMENTO TEÓRICO
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;
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;
3. OBJETIVO(S)
4. RECURSOS REQUERIDOS
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.
7. BIBLIOGRAFÍA