Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Звіт
з лабораторної роботи №4
з дисципліни:« Основи проектування цифрових засобів на ПЛІС»
на тему: «Розробка конвеєрного процесора»
Львів-2017
Тема: Розробка конвеєрного процесора.
Мета роботи: розробити конвеєрний процесор.
Постановка задачі:
Для перетворення прототипу комбінаційної схеми в потокову структуру та отримання VHDL коду цієї процедури, зручно використовувати такі кроки:
Створити блок-схему комбінаційної схеми та організувати її компоненти в вигляді каскадної послідовності.
Визначити основні компоненти блок-схеми та оцінити тривалості їх виконання.
Поділити послідовність компонентів на етапи, щоб тривалість етапів була приблизно рівною.
Визначити дані й сигнали необхідні на кожному етапі опрацювання та вибрати ті, які надходять з інших етапів опрацювання.
Розмістити регістри для зберігання даних й сигналів, які находять з інших етапів опрацювання.
Завдання
5. a2 + b ∙ c - d2
Для реалізації конвеєрного обчислення потрібно поділити функцію на такі кроки:
1.
a2
b ∙ c
d2
2.
a2 + b ∙ c
3.
a2 + b ∙ c - d2
Для реалізації ітераційного обчислення потрібно поділити функцію на такі кроки:
*
+,-
1.
a2
2.
b ∙ c
3.
a2 + b ∙ c
4.
d2
5.
a2 + b ∙ c - d2
Cхема конвеєрного обчислення виразу
/
Рис. 1. Схема конвеєрного обчислення
VHDL-код реалізації системи
Оскільки схема була розроблена за допомогою вбудованих елементів Xilinx та створеного елемента IPCore, то VHDL-код був згенерований автоматично.
Cхема неконвеєрного обчислення виразу
/
Рис. 2. Схема неконвеєрного обчислення
VHDL-код реалізації системи
Оскільки схема була розроблена за допомогою вбудованих елементів Xilinx та створеного елемента IPCore, то VHDL-код був згенерований автоматично.
Порівняння результатів синтезу обох варіантів
Результат синтезу схеми конвеєрного обчислення виразу:
=========================================================================
* Design Summary *
=========================================================================
Top Level Output File Name : l_sh.ngc
Primitive and Black Box Usage:
------------------------------
# BELS : 860
# GND : 4
# INV : 1
# LUT1 : 15
# LUT2 : 112
# LUT3 : 30
# LUT4 : 86
# MULT_AND : 108
# MUXCY : 240
# XORCY : 264
# FlipFlops/Latches : 160
# FD : 48
# FDCE : 112
# Clock Buffers : 1
# BUFGP : 1
# IO Buffers : 52
# IBUF : 36
# OBUF : 16
Device utilization summary:
---------------------------
Selected Device : 6vlx75tff484-3
Slice Logic Utilization:
Number of Slice Registers: 160 out of 93120 0%
Number of Slice LUTs: 244 out of 46560 0%
Number used as Logic: 244 out of 46560 0%
Slice Logic Distribution:
Number of LUT Flip Flop pairs used: 404
Number with an unused Flip Flop: 244 out of 404 60%
Number with an unused LUT: 160 out of 404 39%
Number of fully used LUT-FF pairs: 0 out of 404 0%
Number of unique control sets: 9
IO Utilization:
Number of IOs: 53
Number of bonded IOBs: 53 out of 240 22%
Specific Feature Utilization:
Number of BUFG/BUFGCTRLs: 1 out of 32 3%
---------------------------
Partition Resource Summary:
---------------------------
No Partitions were found in this design.
---------------------------
=========================================================================
Timing Report
NOTE: THESE TIMING NUMBERS ARE ONLY A SYNTHESIS ESTIMATE.
FOR ACCURATE TIMING INFORMATION PLEASE REFER TO THE TRACE REPORT
GENERATED AFTER PLACE-and-ROUTE.
Clock Information:
------------------
-----------------------------------+------------------------+-------+
Clock Signal | Clock buffer(FF name) | Load |
-----------------------------------+------------------------+-------+
clk | BUFGP | 160 |
-----------------------------------+------------------------+-------+
Asynchronous Control Signals Information:
----------------------------------------
No asynchronous control signals found in this design
Timing Summary:
---------------
Speed Grade: -3
Minimum period: 3.066ns (Maximum Frequency: 326.211MHz)
Minimum input arrival time before clock: 0.721ns
Maximum output required time after clock: 2.576ns
Maximum combinational path delay: 2.358ns
Timing Details:
---------------
All values displayed in nanoseconds (ns)
=========================================================================
Timing constraint: Default period analysis for Clock 'clk'
Clock period: 3.066ns (frequency: 326.211MHz)
Total number of paths / destination ports: 197364 / 128
-------------------------------------------------------------------------
Delay: 3.066ns (Levels of Logic = 22)
Source: XLXI_4/Q_0 (FF)
Destination: sec_inst (FF)
Source Clock: clk rising
Destination Clock: clk rising
Data Path: XLXI_4/Q_0 to sec_inst
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
FDCE:C->Q 16 0.280 0.550 Q_0 (Q_0)
end scope: 'XLXI_4:Q<0>'
begin scope: 'XLXI_13:a<0>'
begin scope: 'XLXI_13/blk00000001:A<0>'
SEC:in->out 1 0.053 0.000 sec_inst (sec_net)
SEC:in->out 1 0.219 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 0 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.180 0.357 sec_inst (sec_net)
SEC:in->out 1 0.053 0.000 sec_inst (sec_net)
SEC:in->out 1 0.219 0.000 sec_inst (sec_net)
SEC:in->out 0 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.180 0.357 sec_inst (sec_net)
SEC:in->out 1 0.053 0.000 sec_inst (sec_net)
SEC:in->out 1 0.219 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.015 0.000 sec_inst (sec_net)
SEC:in->out 0 0.015 0.000 sec_inst (sec_net)
SEC:in->out 1 0.180 0.000 sec_inst (sec_net)
SEC:in -0.012 sec_inst
----------------------------------------
Total 3.066ns (1.801ns logic, 1.265ns route)
(58.8% logic, 41.2% route)
=========================================================================
Timing constraint: Default OFFSET IN BEFORE for Clock 'clk'
Total number of paths / destination ports: 256 / 256
-------------------------------------------------------------------------
Offset: 0.721ns (Levels of Logic = 2)
Source: clr (PAD)
Destination: XLXI_4/Q_0 (FF)
Destination Clock: clk rising
Data Path: clr to XLXI_4/Q_0
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
IBUF:I->O 112 0.003 0.398 clr_IBUF (clr_IBUF)
begin scope: 'XLXI_4:CLR'
FDCE:CLR 0.320 Q_0
----------------------------------------
Total 0.721ns (0.323ns logic, 0.398ns route)
(44.8% logic, 55.2% route)
Результат синтезу схеми неконвеєрного обчислення виразу:
=========================================================================
Timing Report
NOTE: THESE TIMING NUMBERS ARE ONLY A SYNTHESIS ESTIMATE.
FOR ACCURATE TIMING INFORMATION PLEASE REFER TO THE TRACE REPORT
GENERATED AFTER PLACE-and-ROUTE.
Clock Information:
------------------
-----------------------------------+------------------------+-------+
Clock Signal | Clock buffer(FF name) | Load |
-----------------------------------+------------------------+-------+
N9(N9LogicTrst1:O) | BUFG(*)(XLXI_11/DQ_0) | 160 |
N14(N14LogicTrst1:O) | BUFG(*)(XLXI_10/DQ_0) | 160 |
CLK | BUFGP | 100 |
-----------------------------------+------------------------+-------+
(*) These 2 clock signal(s) are generated by combinatorial logic,
and XST is not able to identify which are the primary clock signals.
Please use the CLOCK_SIGNAL constraint to specify the clock signal(s) generated by combinatorial logic.
Asynchronous Control Signals Information:
----------------------------------------
No asynchronous control signals found in this design
Timing Summary:
---------------
Speed Grade: -3
Minimum period: 5.605ns (Maximum Frequency: 178.415MHz)
Minimum input arrival time before clock: 0.538ns
Maximum output required time after clock: 1.246ns
Maximum combinational path delay: No path found
Timing Details:
---------------
All values displayed in nanoseconds (ns)
=========================================================================
Timing constraint: Default period analysis for Clock 'N9'
Clock period: 2.479ns (frequency: 403.454MHz)
Total number of paths / destination ports: 128 / 32
-------------------------------------------------------------------------
Delay: 1.239ns (Levels of Logic = 3)
Source: XLXI_11/RAM_MEM<15>_0 (LATCH)
Destination: XLXI_11/DQ_0 (LATCH)
Source Clock: N9 rising
Destination Clock: N9 falling
Data Path: XLXI_11/RAM_MEM<15>_0 to XLXI_11/DQ_0
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
LDE_1:G->Q 1 0.277 0.592 XLXI_11/RAM_MEM<15>_0 (XLXI_11/RAM_MEM<15>_0)
LUT5:I0->O 1 0.053 0.000 XLXI_11/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_4 (XLXI_11/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_4)
MUXF7:I1->O 1 0.187 0.000 XLXI_11/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_3_f7 (XLXI_11/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_3_f7)
MUXF8:I1->O 1 0.130 0.000 XLXI_11/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_2_f8 (XLXI_11/A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>)
LD:D -0.043 XLXI_11/DQ_0
----------------------------------------
Total 1.239ns (0.647ns logic, 0.592ns route)
(52.2% logic, 47.8% route)
=========================================================================
Timing constraint: Default period analysis for Clock 'N14'
Clock period: 2.257ns (frequency: 443.145MHz)
Total number of paths / destination ports: 128 / 32
-------------------------------------------------------------------------
Delay: 1.128ns (Levels of Logic = 3)
Source: XLXI_10/RAM_MEM<1>_0 (LATCH)
Destination: XLXI_10/DQ_0 (LATCH)
Source Clock: N14 rising
Destination Clock: N14 falling
Data Path: XLXI_10/RAM_MEM<1>_0 to XLXI_10/DQ_0
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
LDE_1:G->Q 1 0.277 0.481 XLXI_10/RAM_MEM<1>_0 (XLXI_10/RAM_MEM<1>_0)
LUT5:I1->O 1 0.053 0.000 XLXI_10/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_6 (XLXI_10/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_6)
MUXF7:I0->O 1 0.186 0.000 XLXI_10/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_4_f7 (XLXI_10/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_4_f7)
MUXF8:I0->O 1 0.131 0.000 XLXI_10/Mmux_A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>_2_f8 (XLXI_10/A[3]_RAM_MEM[15][31]_wide_mux_0_OUT<0>)
LD:D -0.043 XLXI_10/DQ_0
----------------------------------------
Total 1.128ns (0.647ns logic, 0.481ns route)
(57.3% logic, 42.7% route)
VHDL-код тестовго стенду
Тестовий стенд для схеми конвеєрного обчислення виразу:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY l_sh_l_sh_sch_tb IS
END l_sh_l_sh_sch_tb;
ARCHITECTURE behavioral OF l_sh_l_sh_sch_tb IS
COMPONENT l_sh
PORT( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
ce : IN STD_LOGIC ;
clk : IN STD_LOGIC ;
clr : IN STD_LOGIC ;
b : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
c : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
d : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
ONE : IN STD_LOGIC;
ZERO : IN STD_LOGIC;
x : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));
END COMPONENT;
SIGNAL a : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL ce : STD_LOGIC := '1';
SIGNAL clk : STD_LOGIC := '1';
SIGNAL clr : STD_LOGIC := '0';
SIGNAL b : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL c : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL ONE : STD_LOGIC := '1';
SIGNAL ZERO : STD_LOGIC := '0';
SIGNAL x : STD_LOGIC_VECTOR (15 DOWNTO 0);
constant clk_c : time :=10 ns;
SIGNAL buf : integer :=0;
BEGIN
UUT: l_sh PORT MAP(
a => a,
ce => ce,
clk => clk,
clr => clr,
b => b,
c => c,
d => d,
ONE => ONE,
ZERO => ZERO,
x => x
);
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
a <= "00000010";
b <= "00000010";
c <= "00000010";
d <= "00000010";
for i in 0 to 10 loop
clk <= '0';
wait for clk_c;
buf <= buf + 1;
clk <= '1';
wait for clk_c;
a <= std_logic_vector(unsigned(a) + (1));
b <= std_logic_vector(unsigned(b) + (1));
c <= std_logic_vector(unsigned(c) + (1));
d <= std_logic_vector(unsigned(d) + (1));
end loop;
END PROCESS;
END;
Тестовий стенд для схеми неконвеєрного обчислення виразу:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY sh2_sh2_sch_tb IS
END sh2_sh2_sch_tb;
ARCHITECTURE behavioral OF sh2_sh2_sch_tb IS
COMPONENT sh2
PORT( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
b : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
c : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
d : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
counter : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
Control : OUT STD_LOGIC_VECTOR (23 DOWNTO 0);
CLK : IN STD_LOGIC;
ZERO_bit : IN STD_LOGIC;
CE : IN STD_LOGIC;
res : OUT STD_LOGIC_VECTOR (31 DOWNTO 0));
END COMPONENT;
SIGNAL a : STD_LOGIC_VECTOR (7 DOWNTO 0):=x"02";
SIGNAL b : STD_LOGIC_VECTOR (7 DOWNTO 0):=x"02";
SIGNAL c : STD_LOGIC_VECTOR (7 DOWNTO 0):=x"02";
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0):=x"02";
SIGNAL counter : STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL Control : STD_LOGIC_VECTOR (23 DOWNTO 0);
SIGNAL CLK : STD_LOGIC;
SIGNAL ZERO_bit : STD_LOGIC:='0';
SIGNAL CE : STD_LOGIC:='1';
SIGNAL res : STD_LOGIC_VECTOR (31 DOWNTO 0);
constant clk_c : time := 5 ns;
BEGIN
UUT: sh2 PORT MAP(
a => a,
b => b,
c => c,
d => d,
counter => counter,
Control => Control,
CLK => CLK,
ZERO_bit => ZERO_bit,
CE => CE,
res => res
);
CLC_process :process
begin
CLK <= '1';
wait for clk_c/2;
CLK <= '0';
wait for clk_c/2;
end process;
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
WAIT; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
Діаграма для схеми конвеєрного обчислення виразу:
/
Рис. 3. Діаграма для схеми конвеєрного обчислення виразу
Діаграма для схеми неконвеєрного обчислення виразу:
Приклад виконання ітерацій.
*
+,-
1.
a2
2.
b ∙ c
3.
a2 + b ∙ c
4.
d2
5.
a2 + b ∙ c - d2
/
Рис. 4. Діаграма для схеми конвеєрного обчислення виразу
/
Рис. 5. Діаграма для схеми неконвеєрного обчислення виразу
/
Рис. 6. Таблиця прошиття
Перевірка:
a2 + b ∙ c - d2= 22 + 2 ∙ 2 - 22 = 4;
Висновок: на цій лабораторній роботі я спроектував роботу спеціалізованого конвеєрного процесора (конвеєрним та неконвеєрним способом) під задану функцію, шляхом її розбиття на дрібніші кроки.
Як виявилось, ітераційний метод реалізувати складніше за конвеєрний. До того ж він потребує більше апаратних, затрат ніж конвеєрний метод.