Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №1
на тему:
„Перемножувач на константу”
Підготував: ст. гр. СКС-1
Львів 2007
Мета роботи: оволодіти швидким алгоритмом множення на константу, та реалізувати програму в пакеті A-VHDL.
Завдання: перемножити два 16-ти розрядних числа, одне з яких константа і рівне, згідно варіанту – 5F92 .
Алгоритм множення: множення відбувається за допомогою логічного зсуву вхідного операнда. Число 5F9216 рівне − 0101 1111 1001 0010 2 , підрахуємо кількість одиничок, їх 9 , отже наш вхідний операнд повинен бути зсунутий 9 раз, і результат після кожного зсуву повинен додаватися. Зсув відбувається в 32 – х розрядній сітці. Наш операнд розміщується в 16 мол. розрядах, і кожен зсув виконується на стільки розрядів, на якій позиції стоїть «1» в константі, починаючи з молодших розрядів. Далі виконуємо суму проміжних 32 – х розрядних результатів (їх є 9), результат суми і буде наше перемножене число.
Програмна реалізація:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;
entity mult is
port(
A : in std_logic_vector(15 downto 0);
B : out std_logic_vector(31 downto 0)
);
end mult;
-- constant 5f92
architecture mult of mult is
signal a1, a2, a3, a4, a5, a6, a7, a8, a9: std_logic_vector(31 downto 0);
begin
a1 <= "000000000000000" & A & '0';
a2 <= "000000000000" & A & "0000";
a3 <= "000000000" & A & "0000000";
a4 <= "00000000" & A & "00000000";
a5 <= "0000000" & A & "000000000";
a6 <= "000000" & A & "0000000000";
a7 <= "00000" & A & "00000000000";
a8 <= "0000" & A & "000000000000";
a9 <= "00" & A & "00000000000000";
B <= a1+a2+a3+a4+a5+a6+a7+a8+a9;
end mult;
Діаграма симуляції:
Висновок: з даної лабораторної роботи я оволодів методом множення числа на константу.