Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №1
на тему:
„Перемножувач на константу”
Підготував: ст. гр. СКС-12
Грицай Р. М.
Прийняла: Ногаль М. В.
Львів 2007
Мета роботи: оволодіти швидким алгоритмом множення на константу, та реалізувати програму в пакеті A-VHDL.
Завдання: перемножити два 16-ти розрядних числа, одне з яких константа і рівне, згідно варіанту – 6F10 .
Алгоритм множення: множення відбувається за допомогою логічного зсуву вхідного операнда. Число 6f1016 рівне − 0110 1111 0001 0000 2 , підрахуємо кількість одиничок, їх 7 , отже наш вхідний операнд повинен бути зсунутий 7 раз, і результат після кожного зсуву повинен додаватися. Зсув відбувається в 32 – х розрядній сітці. Наш операнд розміщується в 16 мол. розрядах, і кожен зсув виконується на стільки розрядів, на якій позиції стоїть «1» в константі, починаючи з молодших розрядів. Далі виконуємо суму проміжних 32 – х розрядних результатів (їх є 7), результат суми і буде наше перемножене число.
Програмна реалізація:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity object1 is
port(
A: in std_logic_vector(15 downto 0);
B: out std_logic_vector(31 downto 0)
);
end object1;
-- 0110111100010000
architecture object1 of object1 is
signal a1,a2,a3,a4,a5,a6,a7: std_logic_vector(31 downto 0);
begin
a1<="000000000000" & A & "0000";
a2<="00000000" & A & "00000000";
a3<="0000000" & A & "000000000";
a4<="000000" & A & "0000000000";
a5<="00000" & A & "00000000000";
a6<="000" & A & "0000000000000";
a7<="00" & A & "00000000000000";
B<=a1+a2+a3+a4+a5+a6+a7;
end object1;
Діаграма симуляції:
Висновок: з даної лабораторної роботи я оволодів методом множення числа на константу.