Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Лабораторна робота №1
з дисципліни: «Основи проектування цифрових засобів на ПЛІС»
на тему: «САПР Xilinx WebPack. Проектування найпростіших вузлів»
Львів – 2015
Мета роботи: засвоєння навичок роботи у середовищі Xilinx WebPack, навчитись створювати проекти в САПР Xilinx WebPack.
Хід виконання роботи
Я вибрав наступну функцію - f = (a & b & /c) v (d xor e)
Створив новий проект, вибрав потрібні елементи та розмістив їх в робочій області схемного редактора. Зробив між ними зв’язки.
/
Рис. 1. Логічна схема для реалізації заданої ФАЛ
У вікні Processes запустив на виконання процес Synthesize. У процесі синтезу з файлів HDL-описів проектованого пристрою сформувався файл списку з'єднань. Відкрив звіт про результати синтезу (View Text Report).
/
Рис. 2. Звіт синтезування
Створюємо схеми.
/
Рис. 3. Умовний графічний образ
/
Рис. 4. Функціональна схема
/
Рис. 5. Технологічна схема
Створюємо test bench файл і вносимо в нього певні зміни (рис.5).
/
Рис. 5. Створення VHDL Test Bench
VHDL code from Test Bench:
krt_tb.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY KRT_sch_1_KRT_sch_1_sch_tb IS
END KRT_sch_1_KRT_sch_1_sch_tb;
ARCHITECTURE behavioral OF KRT_sch_1_KRT_sch_1_sch_tb IS
COMPONENT KRT_sch_1
PORT( krt_a : IN STD_LOGIC;
krt_b : IN STD_LOGIC;
krt_c : IN STD_LOGIC;
krt_d : IN STD_LOGIC;
krt_e : IN STD_LOGIC;
krt_res : OUT STD_LOGIC);
END COMPONENT;
SIGNAL krt_a : STD_LOGIC:='0';
SIGNAL krt_b : STD_LOGIC:='0';
SIGNAL krt_c : STD_LOGIC:='0';
SIGNAL krt_d : STD_LOGIC:='0';
SIGNAL krt_e : STD_LOGIC:='0';
SIGNAL krt_res : STD_LOGIC;
BEGIN
UUT: KRT_sch_1 PORT MAP(
krt_a => krt_a,
krt_b => krt_b,
krt_c => krt_c,
krt_d => krt_d,
krt_e => krt_e,
krt_res => krt_res
);
krt_a<=not krt_a after 10 ns;
krt_b<=not krt_b after 20 ns;
krt_c<=not krt_c after 40 ns;
krt_d<=not krt_d after 80 ns;
krt_e<=not krt_e after 160 ns;
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
WAIT; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
Зміни в коді виділені червоним.
Після цього перевіряємо синтаксис і запускаємо симуляцію, в результаті чого отримуємо часову діаграму (рис.6).
/
Рис. 6. Часова діаграма
Виконуємо процеси Implement Design та Generate Programming File (Рис. 7).
/
Рис. 7. Implement Design та Generate Programming File
Реалізуємо ФАЛ за допомогою VHDL опису проекту (рис. 8).
/
Рис. 8. Створення нового модуля проекту реалізації ФАЛ
/
/
Рис. 9. Визначення входів/виходів VHDL моделі проекту
/
Рис. 10. Вікно навігації проектів
Виконуємо процес синтезування і витягуємо звіт (рис.11).
/
Рис. 11. Звіт етапу синтезу
/
Рис. 12. Функціональна схема
/
Рис. 13. Технологічна схема
LUT – це проста мала пам’ять, яка генерує функції базису Буля.
VHDL code from Module:
krt_v_1.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity krt_v_1 is
Port ( krt_a : in STD_LOGIC;
krt_b : in STD_LOGIC;
krt_c : in STD_LOGIC;
krt_d : in STD_LOGIC;
krt_e : in STD_LOGIC;
krt_res : out STD_LOGIC);
end krt_v_1;
architecture Behavioral of krt_v_1 is
begin
krt_res<=(krt_a and krt_b and not krt_c) or (krt_d xor krt_e);
end Behavioral;
Повторюємо вищезгадані процедури і створюємо Test Bench файл, асоційований з krt_v_1, після чого виконуємо часове симулювання та імплементування і генерування програмних файлів.
/
Рис. 14. Асоціювання з krt_v_1
VHDL code from Test Bench:
krt_tb_1.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY krt_tb_1 IS
END krt_tb_1;
ARCHITECTURE behavior OF krt_tb_1 IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT krt_v_1
PORT(
krt_a : IN std_logic;
krt_b : IN std_logic;
krt_c : IN std_logic;
krt_d : IN std_logic;
krt_e : IN std_logic;
krt_res : OUT std_logic
);
END COMPONENT;
--Inputs
signal krt_a : std_logic := '0';
signal krt_b : std_logic := '0';
signal krt_c : std_logic := '0';
signal krt_d : std_logic := '0';
signal krt_e : std_logic := '0';
signal clk : std_logic := '0';
--Outputs
signal krt_res : std_logic;
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
constant clk_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: krt_v_1 PORT MAP (
krt_a => krt_a,
krt_b => krt_b,
krt_c => krt_c,
krt_d => krt_d,
krt_e => krt_e,
krt_res => krt_res
);
krt_a<=not krt_a after 10 ns;
krt_b<=not krt_b after 20 ns;
krt_c<=not krt_c after 40 ns;
krt_d<=not krt_d after 80 ns;
krt_e<=not krt_e after 160 ns;
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
wait for clk_period*10;
-- insert stimulus here
wait;
end process;
END;
/
Рис. 14. Часова діаграма з модулем krt_v_1
Проаналізувавши отримані стимуляційні часові діаграми можна дійти висновку, що поведінка імплементації проекту є відповідною заданій функції.
Висновок:
Виконавши дану лабораторну роботу, я засвоїв навички роботи у середовищі Xilinx WebPack, навчився створювати проекти в САПР Xilinx WebPack. Перший варіант розрахований на вибір елементів вами, тобто які елементи мають бути в схемі і як вони повинні бути створені, а в іншому варіанті описується тільки логіка роботи ПЛІС, середовище самостійно реалізовує цю логіку. Частота в першому варіанті – 1/5,677 = 176 MHz, в другому – 1/5,280 = 189 MHz.