Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Metod_labs_v5

.pdf
Скачиваний:
17
Добавлен:
12.02.2016
Размер:
4.03 Mб
Скачать

architecture Behavioral of GVV_mod_multiplier is constant WIDTH: integer:=8;

signal gvv_ua, gvv_bv0, gvv_bv1, gvv_bv2, gvv_bv3, gvv_bv4, gvv_bv5, gvv_bv6, gvv_bv7 : unsigned (WIDTH - 1 downto 0);

signal gvv_p0, gvv_p1, gvv_p2, gvv_p3, gvv_p4, gvv_p5, gvv_p6, gvv_p7: unsigned (WIDTH downto 0);

signal gvv_product: unsigned (2*WIDTH - 1 downto 0); begin

gvv_ua <= unsigned (GVV_A); gvv_bv0 <= (others => GVV_B(0)); gvv_bv1 <= (others => GVV_B(1)); gvv_bv2 <= (others => GVV_B(2)); gvv_bv3 <= (others => GVV_B(3)); gvv_bv4 <= (others => GVV_B(4)); gvv_bv5 <= (others => GVV_B(5)); gvv_bv6 <= (others => GVV_B(6)); gvv_bv7 <= (others => GVV_B(7));

gvv_p0 <= "0" & (gvv_bv0 and gvv_ua);

gvv_p1 <= ("0" & gvv_p0(WIDTH DOWNTO 1)) + ("0" & (gvv_bv1 and gvv_ua));

gvv_p2 <= ("0" & gvv_p1(WIDTH DOWNTO 1)) + ("0" & (gvv_bv2 and gvv_ua));

gvv_p3 <= ("0" & gvv_p2(WIDTH DOWNTO 1)) + ("0" & (gvv_bv3 and gvv_ua));

gvv_p4 <= ("0" & gvv_p3(WIDTH DOWNTO 1)) + ("0" & (gvv_bv4 and gvv_ua));

gvv_p5 <= ("0" & gvv_p4(WIDTH DOWNTO 1)) + ("0" & (gvv_bv5 and gvv_ua));

gvv_p6 <= ("0" & gvv_p5(WIDTH DOWNTO 1)) + ("0" & (gvv_bv6 and gvv_ua));

gvv_p7 <= ("0" & gvv_p6(WIDTH DOWNTO 1)) + ("0" & (gvv_bv7 and gvv_ua));

gvv_product <= gvv_p7 & gvv_p6(0) & gvv_p5(0)& gvv_p4(0)& gvv_p3(0)& gvv_p2(0)& gvv_p1(0)& gvv_p0(0);

GVV_mPROD <= std_logic_vector (gvv_product); end Behavioral;

Вибрані фрагменти із звіту про результати виконання процесу синтезу оптимізованого перемножувача наведені нижче.

=======================================================

* HDL Synthesis *

========================================================

Performing bidirectional port resolution...

Synthesizing Unit <GVV_mod_multiplier>. Related source file is

"D:/Users/Lab2/GVV_mod_multiplier.vhd".

Found 9-bit adder for signal <gvv_p1>. Found 9-bit adder for signal <gvv_p2>. Found 9-bit adder for signal <gvv_p3>. Found 9-bit adder for signal <gvv_p4>.

Found 9-bit adder for

signal <gvv_p5>.

Found 9-bit adder for

signal <gvv_p6>.

Found 9-bit adder for

signal <gvv_p7>.

Summary:

 

inferred 7 Adder/Subtractor(s).

Unit <GVV_mod_multiplier>

synthesized.

==========================================================

HDL Synthesis Report

 

 

Macro Statistics

 

 

# Adders/Subtractors

 

: 7

9-bit adder

 

: 7

==================================================

 

*

Final Report

*

==============================================================

Final Results

 

RTL Top Level Output File Name

: GVV_mod_multiplier.ngr

Top Level Output File Name

: GVV_mod_multiplier

Output Format

: NGC

Optimization Goal

: Speed

Keep Hierarchy

: NO

Design Statistics

 

# IOs

 

: 32

Cell Usage :

 

# BELS

 

: 177

#

GND

: 1

#

LUT2

: 2

#

LUT3

: 48

#

LUT4

: 7

#

MULT_AND

: 7

#

MUXCY

: 56

#

XORCY

: 56

# IO Buffers

: 32

#

IBUF

: 16

#

OBUF

: 16

=============================================================

Device utilization summary:

---------------------------

 

 

 

 

Selected Device : 4vlx15sf363-12

 

 

 

 

Number of Slices:

29

out of

6144

0%

Number of 4 input LUTs:

57

out of

12288

0%

Number of IOs:

32

 

 

 

Number of bonded IOBs:

32

out of

240

13%

Тепер розглянемо потужний засіб для створення складних елементів принципової схеми ПЛІС за допомогою вбудованого в САПР Xilinx ISE - Генератор системних IP-ядер (CORE Generator). Це дуже необхідний і зручний інструмент для розробника. Він містить у собі спеціальні бібліотеки символів, оптимізовані під конкретне сімейство ПЛІС. Можна користуватися і

стандартною бібліотекою елементів і на їх основі будувати більш складні вузли розроблюваної схеми.

Викликаємо Помічник створення нового елемента (New Source Wizard) -> IP (CORE Generator & Architecture Wizard) і задаємо ім'я файлу:

Рис. 1.4 Вікно Помічник створення нового елемента

Вибираємо необхідне для проекту IP-ядро з цілого переліку готових IP-ядер і виконуємо налаштування згідно інструкцій Помічника:

Рис. 1.5 Вибір IP-ядра перемножувача

Далі розробнику надається можливість вибрати всі необхідні параметри, які повинен згенерувати Генератор системних IP-ядер.

Рис. 1.6 Вікно конфігурування перемножувала в Генераторі системних IP-ядер

Далі необхідно викликати функцію Project - New Source і в діалоговому вікні створення нових модулів проекту вибрати форму подання файлу верхнього рівня проекту (Schematic) як це показано на наступному рисунку.

Рис. 1.7 Діалогове вікно створення нових модулів проекту

Створюємо умовні графічні позначення створених нами описів перемножувачів (символи елементів доступні з бібліотеки примітивів):

Рис. 1.8 Вікно процесів Навігатора проекту

Для верхнього рівня проекту обрати тип модуля у вигляді принципової схеми (розширення файлу модуля. - *. sch). З допомогою вкладки AddSymbol, яка містить список графічних компонентів, розбитих на групи, як зображено на наступному рисунку. Вибрати графічні символи створених нами компонентів та розмістити їх на схемі.

Рис. 1.9 Вибір елементів в схемному редакторі

На принциповій схемі розмістити маркери вводу/виводу та з’єднати провідниками відповідні елементи.

Рис. 1.10 Графічні символи створених нами компонентів та їх сполучення у вікні схемного редактора

Далі виконати перевірку схеми, синтез, імплементування. Проаналізувати RTL та технологічні схеми. Виконати функціональне моделювання схеми. Для цього створити тестовий файл, в якому простимулювати вхідні сигнали.

Результатом роботи є часові діаграми моделювання розроблених перемножувачів.

Рис. 1.11 Часові діаграми моделювання розроблених перемножувачів

За результатами виконаних робіт робимо висновок.

Частина 2 Розробка спеціалізованого перемножувала на константу

Алгоритм множення числа на константу.

Оскільки мова йде про множення числа Х на константу Н, то розряди числа Н наперед відомі. Згідно алгоритму множення, число X зсунуте на к розрядів вправо доповнюється к нулями справа та (m-k) нулями зліва, де m – ширина розрядної сітки співмножників (в нашому випадку – 8). Як бачимо, розрядність результату є в два рази більша за розрядність вхідних даних, плюс один біт на можливість переповнення.

Приклад.

Н = 10011000(2)

Z = (0* X.L0)+(0* X.L1)+(0* X.L2)+(1* X.L3)+(1* X.L4)+(0* X.L5)+( 0*X.L6)+(1* X.L7) = X.L3 + X.L4 + X.L7.

Формат вхідних чисел.

Вхідні числа є N-розрядними числами в діапазоні 0 Х 1, та мають наступний формат:

ХN-1, XN-2, … , X1, X0

Базова структура перемножувача.

Приклад.

Н = 0.1010001001100111 ,

16 р.

тоді згідно алгоритму множення числа на константу:

Z = X*H = X.L15 + X.L13 + X.L9 + X.L6 + X.L5 + X.L2 + X.L1 + X.L0.

Тоді структура перемножувача буде мати вигляд (рис. 2.1):

32

X.L15

 

32

+

32

 

 

 

 

 

 

 

X.L13

 

 

 

 

 

32

 

+

 

 

 

X.L9

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

+

32

 

 

 

32

 

 

 

 

 

 

 

 

X 16

X.L6

 

 

32

Z

 

32

 

 

 

 

+

Старші 16

 

X.L5

 

 

розрядів

 

 

+

32

 

 

 

32

32

 

 

 

 

 

 

 

X.L2

 

 

 

 

 

32

 

+

 

 

 

X.L1

 

 

 

 

 

32

 

 

 

 

 

 

 

 

32

+

 

 

 

 

 

 

 

 

 

X.L0

 

 

 

 

Рис. 2.1 Структура перемножувала на константу

Оптимізована структура перемножувача.

При побудові комп’ютерних засобів, орієнтованих на виконання конкретного алгоритму (в нашому випадку множення на константу), існує декілька способів оптимізації їх структур, яка передбачає зменшення кількості апаратури та часу виконання функцій. Оскільки мова йде про потоки даних, то можна використати конвеєрний принцип обробки, який передбачає суміщення в часі виконання операторів алгоритму над різними даними. Заданий алгоритм виконується над вхідними даними при їх одноразовому проходження через конвеєризований пристрій. Налаштування конвеєра на частоту поступлення вхідних даних забезпечує їх неперервну обробку в реальному масштабі часу (РМЧ). Якщо ця частота співпадає з оптимальною частотою конвеєра, при якій забезпечується найвища ефективність використання обладнання, то реалізація конвеєрного пристрою є кращим технічним рішенням із можливих варіантів. Відображення конвеєрного принципу при реалізації функції множення дивіться на рисунку 3.

Крім вводу конвеєрного принципу обчислень існує ще один спосіб зменшення часу виконання функцій та кількості апаратури – це зменшення кількості базових операцій. Здавалося б – як можна зменшити кількість базових операцій, які складаються тільки з додавань, для наперед визначеної математичної формули? Проте, специфіка пристрою в тому, що множення вхідних даних відбувається на константи, які відомі заздалегідь.

Оскільки кількість операцій додавання, що використовуються для даного пристрою дорівнює кількості одиниць у двійковому представленні констант (див.рис. 1.1), то для мінімізації цих операцій нам потрібно зменшити кількість таких одиниць в константах.

Суть методу мінімізації одиниць полягає в представленні двійкового значення числа згідно наступної формули:

А*В = А*(В-1) + А.

Приклад 1.

Н1 = 15(10) = 01111(2)

Число 15 можна записати як 16-1 : Н1 = 01111(2) = 10001 Тут 1 - операція “-1”. Таким чином ми скоротили кількість одиниць в

константі з 4 до 2. Отже, функцію Z1 = X1*H1 можна записати так:

Z1 = - X1.L0 + X1.L4 = X1.L4 - X1.L0,

де X1.L0 – вхідне число Х1, зсунуте на 0 розрядів вліво, X1.L4 - вхідне число Х1, зсунуте на 4 розрядів вліво.

Таким чином замість 4 операцій додавання, нам потрібно лише одну операцію віднімання.

Приклад 2.

Н2 = 27(10) = 011011(2)

Число 27 можна записати як 32-5: Н2 = 011011(2) = 100101 Таким чином ми скоротили кількість одиниць в константі з 4 до 3. Отже,

функцію Z2 = X2*H2 можна записати так:

Z2 = -X2.L0 - X2.L2 + X2.L5 = X2.L5 - X2.L2 - X2.L0.

Отже, замість 4 операцій додавання, нам потрібно виконати дві операції віднімання.

З прикладів 1 та 2 видно, що існує два можливих випадків мінімізації:

1.Коли в двійковому представленні константи зустрічається послідовність підряд існуючих одиниць (не менше трьох);

2.Коли в двійковому представленні константи зустрічається послідовність 11011.

Приклад 3.

Нехай треба помножити вхідне число Х3 на константу Н3:

Х3 = 0,75(10) = 0,1100000000000000(2),

Н3 = 0,0378284555(10) = 0,0000100110101111(2).

Мінімізація константи Н3:

Н3 = 0,0000100110101111(2) = 0,000100110110001 = 0,00001010101.

Перша можливість Друга можливість

Z3 = X3.L5 – X3.L10 + X3.L7 – X3.L12 – X3.L16.

Схему для реалізації функції Z3, побудовану за конвеєрним принципом, показано на рисунку 2.2.

X3.L5 X3.L10 X3.L7 X3.L12 X3.L16

-

-

Reg 1

+

Reg 2

-

Reg 3

Z3

Рис. 2.2. Схема реалізації функції Z3.

Розглянемо кілька способів реалізації перемножувала на константу:

VHDL код 8-ми бітного помножувача на константу 7910 = 10011112 без оптимізації та планування обчислень:

entity GVV_C_MULT is

Port ( GVV_A : in STD_LOGIC_VECTOR (7 downto 0); GVV_C_M : out STD_LOGIC_VECTOR (14 downto 0));

end GVV_C_MULT;

architecture Behavioral of GVV_C_MULT is

constant k : std_logic_vector(7 downto 0):=x"4F" ; begin

GVV_C_M <= conv_std_logic_vector(conv_integer(GVV_A) * conv_integer(k),15);--conv_std_logic_vector

end Behavioral;

Нижче наведені фрагменти зі звіту про результати виконання процесу синтезу:

=============================================================

* HDL Synthesis *

=============================================================

Synthesizing Unit <GVV_C_MULT>. Related source file is

"c:/users/public/gros/gvv_lab2/gvv_c_mult.vhd".

Found 8x7-bit multiplier for signal <GVV_C_M> created at line 43.

Summary:

inferred 1 Multiplier(s). Unit <GVV_C_MULT> synthesized.

=============================================================

HDL Synthesis Report

Macro Statistics

 

 

# Multipliers

:

1

8x7-bit multiplier

:

1

=============================================================

=============================================================

* Design Summary *

=============================================================

Top Level Output File Name

: GVV_C_MULT.ngc

Primitive and Black Box Usage:

 

------------------------------

 

# BELS

 

: 73

#

GND

: 1

#

LUT2

: 7

#

LUT3

: 3

#

LUT4

: 5

#

LUT5

: 4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]