Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №3
на тему:
„Перемножувач на константу, конвеєрний варіант роботи ”
Підготував: ст. гр. СКС-12
Цигилик Л. О.
Прийняла: Ногаль М. В.
Львів 2007
Мета роботи: розробити конвеєрний варіант роботи перемножувача на константу за допомогою регістрів.
Програмна реалізація:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multyp is
Port ( A : in std_logic_vector(15 downto 0);
CLK : in std_logic;
B : out std_logic_vector(31 downto 0));
end multyp;
architecture Behavioral of multyp is
-- constant 5f92
-- 0101 1111 1001 0010
signal reg11, reg12, reg13, reg14, reg15, reg16, reg17, reg18, reg19 : std_logic_vector (31 downto 0);
signal reg21, reg22, reg23, reg24, reg25 : std_logic_vector (31 downto 0);
signal reg31, reg32, reg33 : std_logic_vector (31 downto 0);
signal reg41, reg42 : std_logic_vector (31 downto 0);
signal reg21a, reg22a, reg23a, reg24a, reg25a : std_logic_vector (31 downto 0);
signal reg31a, reg32a, reg33a : std_logic_vector (31 downto 0);
signal reg41a, reg42a : std_logic_vector (31 downto 0);
signal reg5 : std_logic_vector (31 downto 0);
component registr is
port(
ind : in std_logic_vector(31 downto 0);
read : in std_logic;
CLK : in std_logic;
outd : out std_logic_vector(31 downto 0));
end component registr;
begin
buf21 : registr
port map (
ind =>reg21,
read => '1',
CLK => CLK,
outd=>reg21a
);
buf22 : registr
port map (
ind =>reg22,
read => '1',
CLK => CLK,
outd=> reg22a
);
buf23 : registr
port map (
ind =>reg23,
read => '1',
CLK => CLK ,
outd=>reg23a
);
buf24 : registr
port map (
ind =>reg24,
read => '1',
CLK => CLK,
outd=>reg24a
);
buf25 : registr
port map (
ind =>reg25,
read => '1',
CLK => CLK,
outd=>reg25a
);
buf31 : registr
port map (
ind =>reg31,
read => '1',
CLK => CLK ,
outd=> reg31a
);
buf32 : registr
port map (
ind =>reg32,
read => '1',
CLK => CLK ,
outd=>reg32a
);
buf33 : registr
port map (
ind =>reg33,
read => '1',
CLK => CLK,
outd=> reg33a
);
buf41 : registr
port map (
ind =>reg41,
read => '1',
CLK => CLK,
outd=> reg41a
);
buf42 : registr
port map (
ind =>reg42,
read => '1',
CLK => CLK,
outd=> reg42a
);
buf5 : registr
port map (
ind =>reg5,
read => '1',
CLK => CLK,
outd=> B
);
start : process (A)
begin
reg11 <= "000000000000000" & A & '0';
reg12 <= "000000000000" & A & "0000";
reg13 <= "000000000" & A & "0000000";
reg14 <= "00000000" & A & "00000000";
reg15 <= "0000000" & A & "000000000";
reg16 <= "000000" & A & "0000000000";
reg17 <= "00000" & A & "00000000000";
reg18 <= "0000" & A & "000000000000";
reg19 <= "00" & A & "00000000000000";
end process start;
step2 : process (reg19)
begin
reg21 <= reg11 + reg12;
reg22 <= reg13 + reg14;
reg23 <= reg15 + reg16;
reg24 <= reg17 + reg18;
reg25 <= reg19;
end process step2;
step3 : process (reg25a)
begin
reg31 <= reg21a + reg22a;
reg32 <= reg23a + reg24a;
reg33 <= reg25a;
end process step3;
step4 : process (reg33a)
begin
reg41 <= reg31a + reg32a;
reg42 <= reg33a;
end process step4;
finish : process (reg41a)
begin
reg5 <= reg41a + reg42a;
end process finish;
end Behavioral;
Програмна реалізація регістру:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity registr is
port ( ind : in std_logic_vector(31 downto 0);
read : in std_logic;
CLK : in std_logic;
outd : out std_logic_vector(31 downto 0));
end registr;
architecture Behavioral of registr is
begin
process (CLK)
begin
if CLK'event and CLK='1' then
if (read = '1') then
outd <= ind;
end if;
end if;
end process;
end Behavioral;
Діаграма симуляції:
Структурна схема перемножувача на константу з конвеєрним варіантом реалізації:
Висновок: в даній лабораторній роботі я розробив конвеєрний варіант реалізації перемножувала на константу.