Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
Звіт з лабораторної роботи №3
з дисципліни «Основи проектування цифрових засобів на ПЛІС»
на тему:
«Розробка спеціалізованого перемножувача»
Тема: Розробка спеціалізованого перемножувача.
Мета роботи: Проектування та перевірка спеціалізованого перемножувача на константу.
Постановка задачі:
Розробити спеціалізований перемножувач на константу.
Покроковий опис кожного етапу оптимізації
За варіантом, наша константа рівна:
/
Обраховуєм та переводимо у двійкову систему числення(32 біти, з яких першим є «0»):
/ /
Переведемо дробову частину в десяткову систему числення:
0 110 0011 0011 0010 0100 1110 1001 10112= 166424130710
Оптимізуємо наш вираз:
0 110 0011 0011 0010 0100 1110 1001 10112
Крок1: 110112 заміняємо на 1001012 (27 на 32-5):
0 110 0011 0011 0010 0100 1110 1010 01012
Крок2: 111012 заміняємо на 1000112 (29 на 32-3):
0 110 0011 0011 0010 0101 0001 1010 01012
Отже, в оптимізованому варіанті буде на 2 одиниці менше
Підкресленні одинички ми будемо віднімати.
У неоптимізованого варіанту у VHDL коді число буде таким:
kiv_prod <= (kiv_p0 + kiv_p1 + kiv_p3 + kiv_p4 + kiv_p7 + kiv_p9 + kiv_p10 + kiv_p11 + kiv_p14 + kiv_p17 + kiv_p20 + kiv_p21 + kiv_p24 +kiv_p25 + kiv_p29 + kiv_p30);
У оптимізованого варіанту у VHDL коді число буде таким:kiv_prod <= (kiv_p5 +kiv_p12 + kiv_p14 + kiv_p17 + kiv_p20 + kiv_p21+ kiv_p24 +kiv_p25 + kiv_p29 + kiv_p30) - kiv_p0 -kiv_p2- kiv_p7 - kiv_p8;
Перевірку зробимо під час побудови діаграм, зрівнявши 1 і 2 спосіб(оптимізований та неоптимізований) з 3 способом ( IP – ядро) в якому константа вже задана.
Vhdl код реалізації оптимального множення на константу
Розглянемо тільки оптимальний варіант множення
/Результат синтезу схеми
HDL Synthesis Report
Macro Statistics
# Adders/Subtractors : 28
40-bit adder : 24
40-bit subtractor : 4
=========================================================================
* Final Report *
=========================================================================
Final Results
RTL Top Level Output File Name : kiv_sw.ngr
Top Level Output File Name : kiv_sw
Output Format : NGC
Optimization Goal : Speed
Keep Hierarchy : No
Design Statistics
# IOs : 127
Cell Usage :
# BELS : 890
# GND : 1
# INV : 107
# LUT1 : 18
# LUT2 : 64
# LUT3 : 69
# LUT4 : 96
# MULT_AND : 27
# MUXCY : 245
# MUXF5 : 2
# VCC : 1
# XORCY : 260
# IO Buffers : 127
# IBUF : 8
# OBUF : 119
=========================================================================
Device utilization summary:
Number of Slices: 244 out of 6144 3%
Number of 4 input LUTs: 354 out of 12288 2%
Number of IOs: 127
Number of bonded IOBs: 127 out of 240 52%
---------------------------
Partition Resource Summary:
Delay: 22.234ns (Levels of Logic = 53)
Total 22.234ns (11.634ns logic, 10.600ns route)
(52.3% logic, 47.7% route)
Total REAL time to Xst completion: 33.00 secs
Total CPU time to Xst completion: 33.57 secs
Результат синтезу схеми перемножувача розробленого на основі ip-core
Створюємо IP- ядро та вибираємо розподілену пам’ять
/
Формуємо звіт:
Timing Details:
----------------------------------------
Total 2.172ns (0.892ns logic, 1.280ns route)
(41.1% logic, 58.9% route)
Total REAL time to Xst completion: 14.00 secs
Total CPU time to Xst completion: 13.54 secs
-->
Total memory usage is 427100 kilobytes
Number of errors : 0 ( 0 filtered)
Number of warnings : 0 ( 0 filtered)
Number of infos : 0 ( 0 filtered)
Vhdl код тестового стенду
Код аналогічний коду з л.р. №2
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY kiv_sw_kiv_sw_sch_tb IS
END kiv_sw_kiv_sw_sch_tb;
ARCHITECTURE behavioral OF kiv_sw_kiv_sw_sch_tb IS
COMPONENT kiv_sw
PORT( KIV_A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
KIV_CM : OUT STD_LOGIC_VECTOR (39 DOWNTO 0);
KIV_mCM : OUT STD_LOGIC_VECTOR (39 DOWNTO 0);
KIV_IP_CM : OUT STD_LOGIC_VECTOR (38 DOWNTO 0));
END COMPONENT;
SIGNAL KIV_A : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL KIV_CM : STD_LOGIC_VECTOR (39 DOWNTO 0);
SIGNAL KIV_mCM : STD_LOGIC_VECTOR (39 DOWNTO 0);
SIGNAL KIV_IP_CM : STD_LOGIC_VECTOR (38 DOWNTO 0);
constant clk_c : time :=10 ns;
BEGIN
UUT: kiv_sw PORT MAP(
KIV_A => KIV_A,
KIV_CM => KIV_CM,
KIV_mCM => KIV_mCM,
KIV_IP_CM => KIV_IP_CM
);
tb : PROCESS
BEGIN
KIV_A <="00000001";
wait for clk_c;
KIV_A <="00001111";
wait for clk_c;
KIV_A <="11111111";
wait for clk_c;
END PROCESS;
END;
Часові діаграми для 3-ох варіантів.
/
Висновок:
Після аналізу звітів можна визначити, що перемножувач з оптимізованою константою є ефективнішим, ніж перемножувач з неоптимізованою константою.
У неоптимізованого варіанту затримка становить 22.071 ns, що еквівалентно 1*1000/T = 1*1000/22.071 = 45,3 MHZ, а у оптимізованого – 20.218 ns , що еквівалентно 1*1000/T = 1*1000/20.218 = 49,46 MHZ.
Також присутня різниця в кількості логічних елементів(суматорів, віднімачів). В оптимізованому варіанті їх 9, а в неоптимізованому – 15.
Як і в 2 лабораторній, найшвидшим виявився метод з використання IP-ядра – вбудованого інстурменту середовища XILINX. Затримка становила всього 2.172 ns що еквівалентно 1*1000/T = 1*1000/2.172 = 461 MHZ проте елементів в нього найбільше.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!