Học liệu

Thiết kế bộ nhân 4x4 sử dụng phương pháp cộng và dịch

  • 17/07/2020
  • Học liệu

library IEEE;
use IEEE.numeric_bit.all;
entity mult4X4 is
port
(Clk, St: in bit;
Mplier, Mcand:
in unsigned(3 downto 0);
Done:
out bit);
end mult4X4;
architecture behave1 of mult4X4 is
signal
State: integer range 0 to 9;
signal ACC: unsigned(8 downto 0); -- accumulator
alias M: bit is ACC(0); -- M is bit 0 of ACC
begin
process
(Clk)
begin

if Clk'event and Clk = '1' then -- executes on rising edge of clock
case State is
when
0 =>
if St = '1' then
-- initial State
ACC(8 downto 4) <= "00000"; -- begin cycle
ACC(3 downto 0) <= Mplier; -- load the multiplier

State <= 1;
end if;

when 1 | 3 | 5 | 7 =>
if M = '1' then
-- "addshift" State
-- add multiplicand
ACC(8 downto 4) <= '0' & ACC(7 downto 4) + Mcand;
State <= State + 1;
else
ACC <= '0' & ACC(8 downto 1); -- shift accumulator right
State <= State + 2;
end if;
when 2 | 4 | 6 | 8 =>
-- "shift" State
-- right shift
ACC <= '0' & ACC(8 downto 1);
State <= State + 1;
when 9 =>
-- end of cycle

State <= 0;
end case;
end if;
end process;
Done <= '1'
when State = 9 else '0';
end behave1;

Các tin khác