VHDL - мова опису апаратних засобів комп'ютера

VHDL є мовою для опису цифрових електронних систем [6,7]. Вона зявилась в результаті виконання програми Уряду США по створенню надшвидкісних

VHDL - мова опису апаратних засобів компютера

Курсовой проект

Компьютеры, программирование

Другие курсовые по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией
ідповідно числа від 10 до 15.

 

2.3.1.4 Символи

Символьні літерали представляються як символ ASCII в одиночних лапках.

 

2.3.1.5 Рядки

Рядкові літерали - це набір символів ASCII в подвійних лапках. Щоби представити знак подвійних лапок в рядковому літералі, потрібно повторити його двічі. Рядок також може розглядатись як масив символів.

 

2.3.1.6 Бітові рядки

Описують послідовність бітів:

 

<бітовий_рядок>::=<основа><значення>

<основа>::=В|О|Х відповідно для двійкових, вісімкових та шістнадцяткових значень.

<значення>::=<число>

 

2.3.2 Типи даних та обєкти

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

Складені типи включають масиви та записи. VHDL також має тип покажчика (access) та файловий тип (files).

Визначення типу проводиться директивою TYPE:

 

TYPE<ідентифікатор> IS <опис_типу>;

 

2.3.2.1 Цілочисельні типи

Це типи, для яких задається діапазон значень:

 

TYPE <ідентифікатор> IS RANGE <значення_від> TO|DOWNTO <значення_до>;

 

Максимальний діапазон від -2147483647 до +2147483647 визначений як тип integer.

 

2.3.2.2 Типи фізичних величин

Це числові типи, які описують якусь фізичну величину, таку як маса, довжина, час, напруга тощо. Опис такого типу дуже схожий на опис цілочисельного типу, в якому задаються базові одиниці, що утворюються множенням коефіцієнту на базові одиниці.

 

TYPE <ідентифікатор> IS RANGE <значення_від> TO|DOWNTO <значення_до>

UNITS

<базова_одиниця_виміру>;

{<похідна_одиниця>;}

END UNITS;

Важливим наперед визначеним типом в VHDL є час. Він використовується при описі затримок часу, що є необхідним для процесу симуляцій.

 

2.3.2.3 Тип з рухомою крапкою

Цей тип є дискретним наближенням до множини чисел з рухомою крапкою у вказаному інтервалі. Точність наближення не вказується в стандарті VHDL, але вона має бути хоча б 1E-6. VHDL має наперед визначений тип real в діапазоні від -1Е-38 до +1Е38.

Опис типу з рухомою крапкою такий самий як і опис цілочисельного типу.

 

2.3.2.4 Перелічувальні типи

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

 

TYPE <ідентифікатор_перелічувального_типу> IS ({<ідентифікатор>|<символ>,});

 

VHDL має кілька наперед визначених перелічувальних типів:

TYPE severity_level IS (note, warning, error, failure);

TYPE boolean IS (false, true);

TYPE bit is (0,1);

TYPE character IS (... koi-7...);

 

Символи 0 та 1 є одночасно членами типів bit та character. VHDL сам визначає тип 0 та 1 в залежності від контексту, де вони використовуються.

2.3.2.5 Масиви

Масив у мові VHDL - це набір індексованих елементів одного типу. Масиви можуть бути одновимірні (з одним індексом) та багатовимірні (з багатьма індексами). Масиви також можуть бути обмеженими та необмеженими.

Декларування типу масив:

 

TYPE <ідентифікатор_масиву> IS ARRAY <межі_для_індексів> | RANGE <> OF <тип>;

 

Індекси для посилання на елементи масиву вказуються в круглих дужках.

 

2.3.2.6 Записи

Запис є набором іменованих елементів однакового або різних типів:

 

TYPE <ідентифікатор_запису> IS RECORD <елемент>{,<елемент>} END RECORD;

 

При посиланні на поля імя запису та імя поля відокремлюються крапкою.

 

2.3.2.7 Підтипи

Підтипи використовуються для декларування ідентифікатора як підмножини деякого базового типу:

 

SUBTYPE <новий_тип> IS <базовий_тип><межі>;

 

VHDL має два наперед визначених підтипи:

SUBTYPE natural IS integer RANGE 0 TO <max>;

SUBTYPE positive IS integer RANGE 1 TO <max>;

 

2.3.2.8 Обєкти

Обєкт - це спеціальний тип в VHDL. Є три класи обєктів: константи, змінні та сигнали.

Константа - це обєкт, що ініціалізується вказаним значенням в момент створення. Далі це значення не змінюється.

 

CONSTANT <ідентифікатор>:<тип>[:=<значення>];

 

Константи без присвоєного їм значення використовуються при декларуванні пакетів. Це значення буде присвоюватись у відповідному тілі пакета.

Змінна - це обєкт, значення якого може змінюватись після його створення.

 

VARIABLE <ідентифікатор>:<тип>[:=<значення>];

 

Якщо присвоюване значення відсутнє при декларації змінної, то змінна набуває значення за замовчуванням.

 

2.3.3 Вирази та оператори

Вирази в VHDL, як і в більшості мов програмування, включають імена обєктів, літералів, оператори, виклики функцій та операції з дужками.

VHDL має наступні оператори (в порядку зменшення приоритету):

 

**ABSNOT

*/MODREM

+(sign)-(sign)

+-&

=/=<<=>>=

ANDORNANDNORXOR

 

Логічні оператори AND, OR, NAND, NOR, XOR і NOT працюють над значеннями типу bit або boolean, а також одновимірний масив з елементів вказаних типів. Для операндів-масивів операція виконується над відповідними елементами масивів.

Розмірність вхідних та вихідного масивів однакова. AND, OR, NAND використовують свій другий операнд, якщо перший операнд не визначає результату. Так AND і NAND використовує другий операнд, якщо перший дорівнює true (1), а OR та NOR використовує другий операнд, якщо перший дорівнює false (0).

Операції порівняння =, /=, <, <=, > та >= повинні мати два оператори однакового типу. Тип результату порівняння завжди boolean. Оператори еквівалентності (= та /=) можуть мати операнди будь-якого типу. Два складених типи вважаються однаковими, якщо однаковими є усі відповідні елементи. Решта операторів порівняння вимагають, щоб їх операнди були скалярного типу або одновимірного масиву.

Знакові оператори (+ та -), а також оператори додавання (+) та віднімання (-) опрацьовують числові операнди.

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

Оператори множення (*) та ділення (/) працюють над цілими числами, числами з рухомою крапкою та з типами фізичних величин. Операції ділення без остачі (MOD) та остача від ділення (REM) працюють лише з цілими.

Операція абсолютного значення (ABS) працює лише з числовими типами.

Піднесення до степеню (**) може мати цілочисельний або тип з рухомою крапкою першого операнду та цілочисельній тип другого операнду. Відємний другий операнд дозволяється лише за умови, коли перший операнд є число з рухомою крапкою.

 

2.3.4 Конструкції

Мова VHDL містить спеціальні конструкції, які дозволяють змінювати стан обєктів та контролювати потік виконання моделі.

 

2.3.4.1 Присвоєння значень змінним

Змінна набуває нового значення за допомогою конструкції присвоєння:

 

<імя_обєкту> | <агрегат> := <вираз>;

 

Обєкт та вираз повинні бути однакового типу.

Алгоритм виконання такого присвоєння наступний: спочатку обраховуються значення елементів агрегату та значення виразу, а далі відбувається присвоєння значення виразу агрегату.

 

2.3.4.2. Умовна конструкція if

Дозволяє виконання інструкцій в залежності від виконання умов.

 

IF <умова> THEN

<послідовність_конструкцій>

{ ELSE IF <умова> THEN <послідовність_конструкцій> }

[ ELSE <послідовність_конструкцій>]

END IF;

Умовою є вираз, що дає результат типу boolean.

 

2.3.4.3 Умовна конструкція case

Дозволяє виконати послідовність конструкцій в одній з гілок.

 

CASE <вираз> IS

{ WHEN <вибір> { |<вибір> } | OTHERS =>

<послідовність_конструкцій>

}

END CASE;

 

<Вираз> та <вибір> мають бути виразами дискретного типу або одновимірними масивами символів.

Всі значення <вибір> мають буті різними. OTHERS повинна включатись як остання альтернатива. Якщо результат виразу - масив, то <вибір> має бути рядком або бітовим рядком.

 

2.3.4.4 Конструкція циклу loop

VHDL має базову конструкцію LOOP, яка може бути у формі WHILE чи у формі FOR. Це дві, так звані, ітераційні схеми.

 

[<мітка>:]

[<схема_while>|<схема_for>] LOOP

[<послідовність_конструкцій>];

[NEXT [<мітка>] [WHEN <умова>];

[EXIT [<мітка>] [WHEN <умова>];

END LOOP [<мітка>];

 

Якщо ітераційна схема пропущена, то отримаємо нескінчний цикл.

Ітераційна схема WHILE тестує умову, що обчислюється перед кожною ітерацією.

Ітераційна схема FOR вводит

Похожие работы

< 1 2 3 >