МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТАКафедра БІТ
Звіт
до лабораторної роботи № 5
з дисципліни: «Комп’ютерні методи високорівневого проектування
пристроїв захисту»
на тему: «Створення VHDL-моделі комп’ютерного пристрою засобами автоматичного генерування»
Варіант № 10
Львів - 2016
Мета роботи: вивчення реалізації процедур і функцій на мові VHDL, набуття практичних навичок використання засобів файлового введення-виведення в програмах на мові VHDL, вивчення принципів побудови систем тестування програмних моделей комп’ютерних пристроїв та набуття практичних навичок їх створення на мові VHDL.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Технологія та засоби автоматичного генерування програмних моделей комп’ютерних пристроїв
З метою спрощення та прискорення процесу створення програмних моделей процесорів необхідно підвищувати рівень автоматизації засобів проектування, з допомогою яких ці програмні моделі створюються. Сьогодні це завдання вирішується шляхом створення генераторів програмних моделей комп’ютерних пристроїв (ПМКП). Генератором називають програмний засіб, що містить одну або більше конфігуровну програмну модель комп’ютерного пристрою та засоби її автоматичного конфігурування, що на основі введених користувачем конфігураційних параметрів генерує відповідну програмну модель. Програмна модель зазвичай представляється мовою опису апаратних засобів. Принцип роботи генератора показано на рис. 1.
Рис. 1. Принцип роботи генератора ПМКП
Результатами роботи генератора є ПМКП мовами опису апаратних засобів, системи тестування, командні скрипти для виконання їх компіляції, симуляції та логічного синтезу, документація користувача та ін. Кількість генерованих ПМКП визначається кількістю конфігураційних параметрів.
Генеровані моделі є технологічно незалежними і можуть згодом бути синтезовані засобами синтезу різних виробників. Саме таким способом реалізовано системи генерування ПМКП IP Core Generator фірми Aldec та Core Generator System фірми Xilinx.
Засоби автоматичного генерування програмних моделей комп’ютерних пристроїв
IP Core Generator фірми Aldec
Система генерування IP Core Generator, що входить в середовище проектування Active-HDL, раніше була незалежним продуктом із назвою LPM Generator. Можна генерувати програмні моделі мовами VHDL та Verilog та основі їх конфігуровних моделей.
Система володіє достатньо широким діапазоном вибору конфігураційних параметрів та має текстову документацію із описами кожної генерованої моделі.
Для запуску генератора потрібно у середовищі Active-HDL вибрати опцію Tools > IP Core Generator. Початкове меню програми містить опис модулів, в якому пояснюється поведінка, специфікація та діапазон зміни розмірів портів для кожного типу генерованих елементів. Деревоподібне меню навігації, розміщене у лівій частині вікна, надає доступ до елементів, програмні моделі яких можна згенерувати, і поділене на вісім тематичних груп:
базові елементи: мультиплексори, демультиплексори, тригери, генератори констант та ін.;
модулі виконання арифметичних функцій: арифметико-логічні пристрої, суматори/віднімачі, компаратори, акумулятори, перемножувачі, подільники;
елементи послідовної логіки: лічильники, регістри зсуву, тригери-защіпки та ін.;
пам’ять: асоціативна, з довільним доступом (оперативна, постійна), з послідовним доступом (FIFO, LIFO);
фільтри: послідовні і паралельні арифметичні FIR-фільтри, сортувальні фільтри;
перетворювачі кодів;
елементи систем тестування: осцилятори, генератори аналогових сигналів, підпрограми роботи із текстовими файлами;
мікроконтролери;
контролери інтерфейсів;
програмні моделі спеціалізованих процесорів: прямого та інверсного дискретного косинусного перетворення, шифрування за алгоритмом DES, автентифікації за алгоритмом SHA-1, декодер Вітербі, контролери інтерфейсів USB та USB2.
Деякі із вищенаведених програмних елементів доступні лише на замовлення.
Для програмної моделі вказуються назви моделі генерованого пристрою та його архітектури, назви вхідних та вихідних портів та їх наявність, полярність портів та інші конфігураційні параметри.
Основні конфігураційні параметри:
Data Width – ширина шини;
SET type – синхронний чи асинхронний вхідний сигнал SET;
CLR type – синхронний чи асинхронний вхідний сигнал CLR;
Split buses – вказує чи потрібно об’єднувати шини;
Type – дає змогу змінити тип вибраного модуля;
Code Style – вибір стилю опису мультиплексорів та демультиплексорів та їх структуру (case statement чи one input bus); вибір структури пам’яті із довільним доступом (RAM) (що ґрунтується на мультиплексорах чи на 3-станових буферах);
Terminals – кількість вхідних шин;
Direction – напрям лічби лічильника (зростання, спадання); напрям виконання зсуву у регістрах зсуву (праворуч, ліворуч);
Mode – дає змогу вибрати тип виконуваної арифметичним елементом функції (суматор, віднімач, суматор-віднімач, арифметичний пристрій, логічний пристрій, арифметико-логічний пристрій);
Representation – визначає формати вхідних та вихідних даних (знаковий, беззнаковий);
Word Size – визначає розмір слова даних;
Memory Size – визначає кількість комірок пам’яті;
Depth – визначає кількість комірок (глибину) пам’яті типу FIFO / LIFO.
Генерування коду відбувається у три етапи. На першому етапі генератор перевіряє введені користувачем параметри для виявлення можливих помилок в їхніх іменах та значеннях. Якщо помилок не виявлено, генератор починає виконувати другий етап, власне, генерування коду програмної моделі зазначеною мовою опису апаратних засобів. На третьому етапі генератор створює необхідні файли і каталоги для збереження згенерованої програмної моделі.
ЗАВДАННЯ
10
8-розрядний пристрій ділення беззнакових чисел з фіксованою комою
8-розрядний акумулятор, який працює в режимі додавання.
ВИКОНАННЯ
VHDL-модель заданого варіантом цифрового елемента №1 засобами IP Core Generator середовища проектування Aldec Active HDL 9.1.
Рис. 2. Введення конфігураційних параметрів та імен
Рис.3. Налаштування опцій генерації програмної моделі
Рис.4. Підтвердження генерації
Рис.5. Згенеровані програмою файли та схема помножувача
Лістинг 1. Згенерована програмна модель пристрою ділення
--------------------------------------------------------------------------------
--
-- Design unit generated by Aldec IP Core Generator, version 9.1.
-- Copyright (c) 1997 - 2011 by Aldec, Inc. All rights reserved.
--
--------------------------------------------------------------------------------
--
-- Created on Monday 2016-05-23, 11:53:05
--
--------------------------------------------------------------------------------
-- Details:
-- Type: Unsigned fixed-point divider
-- Argument input A width: 8
-- Argument input B width: 8
-- Result output Q width: 8
-- Division by zero flag output DIVz active high
--------------------------------------------------------------------------------
--{{ Section below this comment is automatically maintained
-- and may be overwritten
--{entity {fpdiv} architecture {fpdiv_arch}}
library IEEE;
use IEEE.std_logic_1164.all;
entity fpdiv is
port (
DIVz: out std_logic;
A: in std_logic_vector(7 downto 0);
B: in std_logic_vector(7 downto 0);
Q: out std_logic_vector(7 downto 0)
);
end fpdiv;
--}} End of automatically maintained section
library IEEE;
USe IEEE.std_logic_unsigned.all;
architecture fpdiv_arch of fpdiv is
signal REMAINDERS0 : std_logic_vector(15 downto 0);
signal REMAINDERS1 : std_logic_vector(15 downto 0);
signal REMAINDERS2 : std_logic_vector(15 downto 0);
signal REMAINDERS3 : std_logic_vector(15 downto 0);
signal REMAINDERS4 : std_logic_vector(15 downto 0);
signal REMAINDERS5 : std_logic_vector(15 downto 0);
signal REMAINDERS6 : std_logic_vector(15 downto 0);
signal REMAINDERS7 : std_logic_vector(15 downto 0);
signal REMAINDERS8 : std_logic_vector(15 downto 0);
signal DIVISORS0 : std_logic_vector(15 downto 0);
signal DIVISORS1 : std_logic_vector(15 downto 0);
signal DIVISORS2 : std_logic_vector(15 downto 0);
signal DIVISORS3 : std_logic_vector(15 downto 0);
signal DIVISORS4 : std_logic_vector(15 downto 0);
signal DIVISORS5 : std_logic_vector(15 downto 0);
signal DIVISORS6 : std_logic_vector(15 downto 0);
signal DIVISORS7 : std_logic_vector(15 downto 0);
signal DIVISORS8 : std_logic_vector(15 downto 0);
signal Q_TEMP : std_logic_vector(7 downto 0);
signal Z0 : std_logic_vector(7 downto 0);
signal Z1 : std_logic_vector(7 downto 0);
signal ZERO : std_logic;
begin
Z0 <= (others => '0');
Z1 <= (others => '0');
DIVISORS0 <= Z0 & B;
REMAINDERS8 <= Z1 & A;
DIVISORS1 <= DIVISORS0(14 downto 0) & '0';
DIVISORS2 <= DIVISORS1(14 downto 0) & '0';
DIVISORS3 <= DIVISORS2(14 downto 0) & '0';
DIVISORS4 <= DIVISORS3(14 downto 0) & '0';
DIVISORS5 <= DIVISORS4(14 downto 0) & '0';
DIVISORS6 <= DIVISORS5(14 downto 0) & '0';
DIVISORS7 <= DIVISORS6(14 downto 0) & '0';
DIVISORS8 <= DIVISORS7(14 downto 0) & '0';
Q_TEMP(0) <= '1' when (REMAINDERS1 >= DIVISORS0) else '0';
Q_TEMP(1) <= '1' when (REMAINDERS2 >= DIVISORS1) else '0';
Q_TEMP(2) <= '1' when (REMAINDERS3 >= DIVISORS2) else '0';
Q_TEMP(3) <= '1' when (REMAINDERS4 >= DIVISORS3) else '0';
Q_TEMP(4) <= '1' when (REMAINDERS5 >= DIVISORS4) else '0';
Q_TEMP(5) <= '1' when (REMAINDERS6 >= DIVISORS5) else '0';
Q_TEMP(6) <= '1' when (REMAINDERS7 >= DIVISORS6) else '0';
Q_TEMP(7) <= '1' when (REMAINDERS8 >= DIVISORS7) else '0';
REMAINDERS7 <= REMAINDERS8 - DIVISORS7 when Q_TEMP(7) = '1' else REMAINDERS8;
REMAINDERS6 <= REMAINDERS7 - DIVISORS6 when Q_TEMP(6) = '1' else REMAINDERS7;
REMAINDERS5 <= REMAINDERS6 - DIVISORS5 when Q_TEMP(5) = '1' else REMAINDERS6;
REMAINDERS4 <= REMAINDERS5 - DIVISORS4 when Q_TEMP(4) = '1' else REMAINDERS5;
REMAINDERS3 <= REMAINDERS4 - DIVISORS3 when Q_TEMP(3) = '1' else REMAINDERS4;
REMAINDERS2 <= REMAINDERS3 - DIVISORS2 when Q_TEMP(2) = '1' else REMAINDERS3;
REMAINDERS1 <= REMAINDERS2 - DIVISORS1 when Q_TEMP(1) = '1' else REMAINDERS2;
REMAINDERS0 <= REMAINDERS1 - DIVISORS0 when Q_TEMP(0) = '1' else REMAINDERS1;
ZERO <= '1' when B = Z1 else '0';
DIVz <= '1' when ZERO = '1' else '0';
Q <= (others => '0') when ZERO = '1' else Q_TEMP;
end fpdiv_arch;
Рис.6. Часова діаграма роботи системи тестування
VHDL-модель заданого варіантом цифрового елемента №2 засобами IP Core Generator середовища проектування Aldec Active HDL 9.1.
Рис7. Введення конфігураційних параметрів та імен
Рис.8. Згенеровані програмою файли та схема помножувача
Лістинг 2. Згенерована програмна модель 8-розрядного акумулятора
--------------------------------------------------------------------------------
--
-- Design unit generated by Aldec IP Core Generator, version 9.1.
-- Copyright (c) 1997 - 2011 by Aldec, Inc. All rights reserved.
--
--------------------------------------------------------------------------------
--
-- Created on Tuesday 2016-05-24, 18:49:52
--
--------------------------------------------------------------------------------
-- Details:
--Type: Cascadable Accumulator with Adder
--Data width: 8
--Clock input CLK active high
--Synchronous Clear input CLR active : high
--------------------------------------------------------------------------------
--{{ Section below this comment is automatically maintained
-- and may be overwritten
--{entity {acc_lab5} architecture {acc_arch}}
library IEEE;
use IEEE.std_logic_1164.all;
entity acc_lab5 is
port (
CLK : in std_logic;
CLR : in std_logic;
D : in std_logic_vector(7 downto 0);
Q : out std_logic_vector(7 downto 0)
);
end entity;
--}} End of automatically maintained section
library IEEE;
use IEEE.std_logic_unsigned.all;
architecture acc_arch of acc_lab5 is
signal REG_Q : std_logic_vector(7 downto 0);
signal TEMP_Q : std_logic_vector(7 downto 0);
begin
process (REG_Q, D)
begin
TEMP_Q <= REG_Q + D;
end process;
process(CLK)
begin
if rising_edge(CLK) then
if CLR = '1' then
REG_Q <= (others => '0');
else
REG_Q <= TEMP_Q;
end if;
end if;
nd process;
Q <= REG_Q;
end architecture;
Рис.9. Часова діаграма роботи системи тестування
Об’єднані згенеровані цифрові компоненти в один проект
Лістинг 3. Згенерована програмна модель об’єднаних цифрових компонент
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY top IS
PORT (
DIVz: out std_logic;
A: in std_logic_vector(7 downto 0);
B: in std_logic_vector(7 downto 0);
Q: out std_logic_vector(7 downto 0);
CLK : in std_logic;
CLR : in std_logic
);
END top;
ARCHITECTURE behave_arch OF top IS
COMPONENT fpdiv
PORT (
DIVz: out std_logic;
A: in std_logic_vector(7 downto 0);
B: in std_logic_vector(7 downto 0);
Q: out std_logic_vector(7 downto 0)
);
END COMPONENT;
COMPONENT acc_lab5
port (
CLK : in std_logic;
CLR : in std_logic;
D : in std_logic_vector(7 downto 0);
q : out std_logic_vector(7 downto 0)
);
END COMPONENT;
SIGNAL q_sig: std_logic_vector(7 downto 0);
BEGIN
U1 : fpdiv
PORT MAP (
DIVz => DIVz,
A => A,
B => B,
Q => q_sig
);
U2 : acc_lab5
PORT MAP (
D => q_sig,
CLK => CLK,
q => Q,
CLR => CLR
);
END behave_arch;
Рис.10. Часова діаграма роботи системи тестування
ВИСНОВКИ
В даній лабораторній роботі я ознайомилися з принципами створення структурних описів мовою VHDL та розробила функціональну модель системи тестування програмних моделей комп’ютерних пристроїв, а саме пристрою шифрування.