1   2   3   4   5   6
Ім'я файлу: 162886792.pdf
Розширення: pdf
Розмір: 1505кб.
Дата: 27.12.2022
скачати
Пов'язані файли:
курсова робота по схемотехніці-1.doc

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"
С.Ю. ЛЕОНОВ, Т.В. ГЛАДКИХ, О.І. БАЛЕНКО
VHDL-ТЕХНОЛОГІЇ ПРОЕКТУВАННЯ
ЕЛЕКТРОННИХ ПРИСТРОЇВ
Навчальний посібник
Київ
Видавництво "КАФЕДРА"
2014

УДК 004.896
ББК 30.2-5-05
Л47
Рецензенти:
Г.І. Загарій, д-р техн. наук, проф., ХАРГАЖД;
І.О. Фурман, д-р техн. наук, проф., ХДТУСГ ім. П. Василенка.
Гриф надано Міністерством освіти і науки України, лист № ?/??-
???? від ??.??.?? р.
Леонов С.Ю.
Л47 VHDL-технології проектування електронних пристроїв : навч. посіб. / С.Ю. Леонов, Т.В. Гладких, О.І. Баленко. – К. : Вид-во "КАФЕДРА", 2014. – 423 с.
ISBN
Навчальний посібник містить теоретичний і практичний матеріал, пов'язаний із забезпеченням систем автоматизованого проектування на базі високорівневої мови проектування VHDL. Описано методи моделювання апаратури, що проектується, на різних етапах автоматизованого проектування.
Для студентів технічних спеціальностей вищих навчальних закладів, користувачів САПР у різних галузях техніки.
Іл. 418. Бібліогр. 9 назв.
УДК 004.896
ББК 30.2-5-05
ISBN
ã С.Ю. Леонов, Т.В. Гладких,
О.І. Баленко, 2014.

3
ВСТУП
Мова VHDL (Very High Speed Integrated Circuits) є міжнародним стандартом у галузі автоматизації проектування цифрових систем, це вхідна мова багатьох сучасних систем автоматизованого проектування
(САПР). VHDL призначена насамперед для специфікації опису систем, що проектуються, та їх моделювання на різних етапах проектування, зокрема, алгоритмічному, логічному, функціональному та регістровому.
VHDL – це єдина мова проектування високого рівня.
Мова VHDL була розроблена на початку 80-х років у США з
ініціативи Міністерства оборони цієї країни, коли необхідно було отримати стандартний метод опису електронних цифрових схем. У 1987 р. VHDL був прийнятий як стандарт ANSI/IEEE Std 1076 1987. Цей стандарт часто називають VHDL 87. Потім мова була вдосконалена, новий стандарт ANSI/IEEE Std 1076 1993 з'явився у 1993 р.
У 1999 р. затверджений стандарт Std 1076.1 1999 (або більш поширена назва VHDL AMS ), який включає розширення, що дають можливість опису аналогових і змішаних ( цифро-аналогових) схем.
VHDL дозволяє описувати поведінку, тобто алгоритми функціонування цифрових схем, а також проводити ієрархічний функціонально-структурний опис систем, має засоби для опису паралельних асинхронних процесів, регулярних структур і в той же час має всі ознаки мови програмування високого рівня, дозволяє створювати власні типи даних, має широкий набір арифметичних і логічних операцій
і т.ін.
При проектуванні цифрових схем на мові VHDL можливе використання п'яти різних типів описів: оголошення об'єкта проекту, архітектурне тіло, оголошення конфігурації, оголошення пакета і тіло пакета. Кожен з описів є самостійною конструкцією мови VHDL, яка може бути незалежно проаналізована компілятором і тому отримала назву "модуль проекту" (desing unit).

4
Мова VHDL розвивається, їй присвячуються міжнародні конференції, видаються наукові журнали, в яких вивчаються проблеми використання VHDL. Вона стала мовою розробки міжнародних проектів, в тому числі здійснюваних за допомогою всесвітньої комп'ютерної мережі internet. Знайомство з цією мовою необхідне для ефективної роботи зі створення найрізноманітнішої електронної апаратури на сучасній елементарній базі великих електронних схем.
Автори вдячні шановним рецензентам рукопису навчального посібника докторам технічних наук, професорам Г.І. Загарію,
І.О. Фурману за важливі рекомендації щодо поліпшення якості видання.

5
РОЗДІЛ 1
ЗАГАЛЬНІ ВІДОМОСТІ ПРО ACTIVE-HDL
Розробка сучасних інтегральних мікросхем – складна інженерно- технічна проблема, вирішення якої неможливе без широкого застосування систем автоматизованого проектування. Створення подібних систем, як відомо, потребує засобів формального опису структур і функцій об'єктів проектування. Мова VHDL (Very high speed integrated circuits Hardware Description Language) була розроблена у 1980 році як результат реалізації в США проекту зі створення надшвидкісних
інтегральних схем. У 1987 році Інститутом Інженерів з Електрики та
Електроніки (IEEE) ця мова була визнана як стандарт у США. Зараз
VHDLє найбільш поширеною у світі мовою такого призначення. Вона застосовується у багатьох системах автоматизованого проектування, кількість користувачів яких стрімко зростає. Пояснюється це тим, що раніше проектуванням інтегральних мікросхем займалася лише обмежена кількість фахівців електронної промисловості, тоді як розробники електронних пристроїв мали можливість застосовувати в своїх проектах лише стандартні мікросхеми з наперед визначеними функціями. Зараз з появою на ринку мікросхем з програмованою користувачем архітектурою у розробників електронних схем з‘явилась можливість під кожний конкретний проект самостійно створювати потрібні їм мікросхеми. Це суттєво підвищує якість, знижує вартість і змінює характер самого процесу проектування. Наприклад, задачі, що розв‘язувалися раніше на рівні розробки структури та вибору елементної бази проектованого пристрою, зараз можуть бути вирішені на рівні формального опису його структури чи поведінки, комп‘ютерного моделювання та програмування мікросхем.
1.1. Сигнали в VHDL
Сигнали допускають аналіз часових залежностей усередині VHDL системи. Крім того, на відміну від змінних у класичних мовах програмування типу Паскаль або C, VHDL сигнали містять інформацію

6 як про минулі, так і істинні їх значення. Ця інформація називається
історією сигналу.
Оскільки формальна специфікація сигналів потрібна для того, щоб дозволити розглядати два основних типи сигналів, які можуть використовуватися для визначення будь-якого сигналу. Два типи сигналу, які допускаються специфікацією VHDL, названі bit (бітом) (для одиничних сигналів) і bit_vector (біт_вектор) (для шин). В обох випадках кожна сигнальна лінія може бути або "0"або "1". У разі bit_vector також необхідно визначати ширину.
Сигнали можуть бути класифіковані як внутрішні або як зовнішні.
Зовнішні сигнали – сигнали, які з'єднують систему із зовнішнім простором. Іншими словами, вони формують інтерфейс системи.
Внутрішні сигнали, які невидимі із зовнішньої частини, є частиною внутрішньої архітектури, що забезпечує зв'язок між внутрішніми лініями.
Електронні проекти грунтуються на компонентах і сигнальних лініях, що з'єднують ці компоненти. Сигнальні лінії можуть бути виконані як:
– однопровідні лінії, які мають одиничне двійкове значення в будь- який момент (представлені в VHDL типом bit);
– багатопровідні лінії зв'язку, які називаються шини або вектори.
Вони передають інформацію, що є комбінацією деяких двійкових значень
(тип bit_vector, який підтримується вектором із заданою шириною).
Сигнали можуть також бути класифіковані як:
– зовнішні сигнали, які формують інтерфейс системи;
– внутрішні сигнали, які є частиною внутрішньої архітектури системи і забезпечують зв'язок між внутрішніми лініями.
Кожен сигнал у специфікації проекту VHDL має бути оголошений.
Сигнали можуть бути явно оголошені в декларативній частині:
· пакета. Це сигнали які видимі у всіх частинах проекту, що використовують пакет;
· архітектури (внутрішній сигнал). Це сигнали, видимі тільки всередині архітектури;
· блока. Це сигнали, видимі безпосередньо всередині блока.
Наведемо приклад опису схеми D-тригера, показаної на рис. 1.6.

7
Приклад опису сутності
Сутність схеми, показаної на рис. 1.6, може бути описана так:
ENTITY d_flipflop IS
PORT ( D, C : IN bit;
Q, NQ: OUT bit );
END ENTITY d_flipflop;
Цей опис свідчить, що схема на ім‘я d_flipflop має чотири зовнішні виводи (порти), з них два входи (IN): D та C; і два виходи (OUT): Q та
NQ. Усі порти належать до типу bit, тобто сигнал на їх виводах може набувати значень "0" і "1".
Приклад опису архітектури через опис поведінки
Як відомо, цей тригер працює так, що при С = 1 сигнал на виході Q повторює значення сигналу на вході D, а при С = 0 тригер зберігає попередній стан і сигнал на виході Q не змінюється. Сигнал на виході NQ
є інверсією сигналу на виході Q.
Цю поведінку тригера можна описати так:
ARCHITECTURE behaviour OF d_flipflop IS
BEGIN
PROCESS (C,D)
BEGIN
IF C = '1' THEN
Q <= D AFTER 5 ns;
NQ <= not D AFTER 5 ns;
END IF;
END PROCESS;
END ARCHITECTURE behaviour;
Оператор PROCESS (C, D)вказує на те, що робота схеми описується процесом, де зміна сигналів на виходах можлива лише внаслідок зміни вхідних сигналів C або D. Оператор IF визначає, що при C = '1', сигнал Q
набуває значення D, а NQ – інверсії D. Ключове слово AFTERвказує на те, що зміни значень на виходах Q, NQ відбуваються не миттєво, а з затримкою на 5 наносекунд.

8
Приклад опису архітектури на вентильному рівні
Схему на рис. 1.6 можна розділити на дві складові, що виділені пунктирними лініями:
· схему управління на ім‘я contr_unit з входами та CC і виходами SC i RC,
· асинхронний RS-тригер на ім‘я rs_ff з інверсними входами SFF,
RFF і виходами QFF, NQFF.
Тут дещо змінено імена портів складових елементів, щоб відрізняти
їх від імен портів схеми в цілому. Сутності складових частин та їх архітектури на вентильному рівні описані нижче.
У кожен конкретний момент користувач працює з однією робочою бібліотекою й довільною кількістю бібліотек ресурсів.
ENTITY contr_unit IS
PORT ( CC, DC: IN bit;
SC, RC: OUT bit);
END contr_unit ;
ARCHITECTURE dataflow OF contr_unit IS
BEGIN
SC <= DC nand CC AFTER 2 ns;
RC <= (DC nand CC) nand CC AFTER 2 ns;
END dataflow;
ENTITY rs_ff IS
PORT ( RFF, SFF: IN bit;
QFF, NQFF: BUFFER bit );
END rs_ff;
ARCHITECTURE dataflow OF rs_ff IS
BEGIN
QFF <= SFF nand NQFF AFTER 2 ns;
NQFF <= RFF nand QFF AFTER 3 ns;
END dataflow;

9
Вирази та оператори
Вирази в VHDL включають імена об’єктів, літералів, знаки операцій, виклики функцій тощо. Нижче наведені знаки операцій VHDL в порядку зменшення їх пріоритету:
**
ABS
NOT
*
/
MOD REM
+ (унарний)
– (унарний)
+

&
SLL
SRL
SLA
SRA
ROL
ROR
=
/=
<
<=
>
>=
AND
OR
XOR NAND NOR NXOR NOT
Операції ABS (абсолютне значення), ** (піднесення до степеня), *, /,
+, виконуються з числовими типами даних. Другий операнд операції піднесення до степеня повинен мати цілочисловий тип, причому, якщо він від‘ємний, то перший операнд повинен бути числом з рухомою точкою. Операції ділення без остачі (REM) та остача від ділення (MOD) працюють лише з цілими числами.
Логічні операції AND, OR, XOR, NAND, NOR, NXOR і NOT виконуються над значеннями типу bit або boolean, а також над одновимірними масивами, що складаються з елементів вказаних типів.
Операнди-масиви повинні мати однакову розмірність. Операція виконується над одноіменними елементами масивів і результатом її є масив того ж типу і розмірності.
Зліва від знака операції зсуву SLL, SRL, SLA, SRA, ROL, ROR
вказується масив типу bit або boolean, справа – ціле число, що визначає на скільки елементів виконуватиметься зсув елементів у масиві. Якщо це число від‘ємне, то зсув відбуватиметься у протилежному напрямку, тобто зсув на три елементи вліво – це те ж саме, що на три елементи вправо.
SLL, SRL – це операції логічного зсуву вліво (Left) і вправо (Right) відповідно. Під час логічного зсуву крайні елементи заповнюються значеннями 0 чи false.

10
1.13. Пакети
Пакет – це набір типів, констант, сигналів, файлів, псевдонімів, підпрограм тощо, що можуть бути об’єднані користувачем за будь-якими логічними ознаками. Пакет складається з двох частин:
· інтерфейсної, що містить лише декларації складових пакета;
· тіла пакета з описами складових, задекларованих в інтерфейсній частині.
Тіло пакета може бути прихованим від його користувачів, які матимуть доступ лише до його інтерфейсної частини. Інтерфейсна частина пакета описується так:
PACKAGE <ім‘я пакета> IS
{<декларації>};
END < ім‘я пакета>;
Декларації, що тут розміщуються, можуть бути неповними.
Наприклад, декларуючи константу, можна не вказувати її значення (такі константи називають затриманими), наприклад:
CONSTANT vector_ loc: address;
декларування підпрограм тут завершується перед словом IS і ніколи не містить тіла підпрограми, наприклад:
FUNCTION f1 (value: real) RETURN integer;
Тіло пакета записується так:
PACKAGE BODY <ім‘я пакета> IS
{<декларації тіла пакета>};
{<декларації і тіла підпрограм>};
{<декларації затриманих констант тощо>};
END < ім‘я пакета>;
У наведеному нижче прикладі проілюстровано спосіб опису тіла підпрограми та надання значення затриманій константі.
PACKAGE BODY my_data IS
. . .
FUNCTION f1(value: real) RETURN integer IS

11
BEGIN
. . .
END f1;
. . .
CONSTANT vector_loc: address := 18;
END my_data;
Використання пакетів та видимість імен
Для того щоб скористатися константами, типами, підпрограмами та
іншими складовими пакета, можна перед їх іменами вказувати префікс з
іменем пакета, що відділяється від решти імені крапкою, наприклад:
VARIABLE a1: my_data.address;
c:=5+ my_data.f1(x);
Щоб уникнути вживання префіксів, можна скористатися директивою USE, наприклад:
USE my_data.adress, my_data.f1;
Тоді перераховані в ній імена стануть видимими для цієї програми і надалі зможуть вживатися без префіксів. Якщо ж замість імені об‘єкта вказати зарезервоване слово all:
USE my_data.all;
то це зробить доступними для цієї програми всі об‘єкти такого пакета.
Якщо пакет знаходиться в іншій бібліотеці, то перед префіксом пакета потрібно вказати ще й префікс бібліотеки, наприклад:
Нижче як приклад показано як розв‘язується ця проблема в пакеті
Std_Logic_1164, що став загальновизнаним промисловим стандартом. Він містить визначення типів, підтипів, і функцій, що розширюють VHDL на багатозначну логіку.
TYPE std_ulogic IS ( 'U', 'X','0','1','Z','W','L','H','-' );
TYPE std_ulogic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic;
FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic;
SUBTYPE std_logic IS resolved std_ulogic;
TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic;
CONSTANT resolution_table : stdlogic_table := (
-- ---------------------------------------------------------

12
-- | U X 0 1 Z W L H - | |
-- ---------------------------------------------------------
( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ),
-- | X |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ),
-- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ),
-- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ),
-- | Z |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ),
-- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ),
-- | H |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' )
-- | - |
);
FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic IS
VARIABLE result : std_ulogic := 'Z';
BEGIN
IF (s'LENGTH = 1) THEN RETURN s(s'LOW);
ELSE
FOR i IN s'RANGE LOOP
result := resolution_table(result, s(i));
END LOOP;
END IF;
RETURN result;
END resolved;
Тут спочатку описано перелічувальний тип std_ulogic та тип
std_ulogic_vector. Останній є типом масиву, що складається з наперед невизначеної кількості елементів типу std_ulogic. Позначення елементів означають такі стани виходів:
· 'U' – непроініціалізований (Uninitialized);
· 'X' – посилене невідоме (Forcing Unknown);
· '0' – посилений нуль (Forcing 0);
· '1' – посилена одиниця (Forcing 1);
· 'Z' – високий імпеданс (High Impedance);
· 'W' – слабке невідоме (Weak Unknown);
· 'L' – слабкий нуль (Weak 0);
· 'H' – слабка одиниця (Weak 1);

13
· '-' – байдуже (Don't Care).
Далі наводиться декларація розв’язувальної функції resolved, що визначена для аргументу типу std_ulogic_vector і повертає результат типу
std_ulogic. Підтип std_logic визначено як такий, що утворюється функцією resolved з типу std_ulogic, а тип std_logic_vector – як тип масиву, елементи якого мають тип std_logic.
Константа resolution_table є таблицею, що визначає правила формування значення результуючого сигналу залежно від значень двох драйверів (їм відповідають рядки і колонки таблиці). Розв’язувальна функція resolved написана так, що спочатку проміжному результатові надається значення 'Z'. Потім виконується перевірка кількості драйверів, що описують цей сигнал. Якщо драйвер один, то його значення і повертає функція. У випадку декількох драйверів значення функції формується шляхом багаторазового зчитування із таблиці, колонка і рядок якої відповідають значенням проміжного результату і наступного драйвера.
Пакет Std_Logic_1164 містить також підтипи X01, X01Z, UX01,
UX01Z типу std_ulogic. Назви цих підтипів складені зі значень сигналів, що в них присутні. Наприклад, підтип X01 містить тільки значення
'X','0','1'.

  1   2   3   4   5   6

скачати

© Усі права захищені
написати до нас