Лекція 3 типи даних
1.1. Числові типи
1.1.1. Integer
Natural pozitive
1.1.2. real
1.2. Перечислювальні типи
1.2.1. Char
1.2.2. Boolian
1.2.3. Bit
1.2.4. Std_logic
1.2.5. Std_ulogic
1.3. Фізичні типи
1.3.1. Time
1.3.2. Delay_leght
2.1. Записи
2.2. Масиви
2.2.1. Обмеженої довжини
2.2.2. Необмеженої довжини
String bit vector signed unsigned std_logic vector std_ulogic vector
Скалярні типи використовуються для опису: чисел, символів, значень сигналів і інших фзичних об'єктів
У vhdl підтримуються два основні типи представлення чисел: цілочисельний і з плаваючою крапкою.
Тип integer використовуэться для представлення цілих чисел в діапазоні від -2 147 483 647 до 2 147 483 647.
Приклад опису
Type t1 is range 1 to 200
Type t2 is range 40 downto 5
Коли змінна описується таким типом, то по замовчуанні її початкове значення визначається рівним лівій границі інтервалу. Над числами цього типу можуть виконуватися наступні операції
+ додавання - віднімання * множення / ділення mod ділення по модулю rem остача від діленн abs модуль
** піднесення до степеня
Тип real використовується для визначення дійсних чисел в діапазоні від -1.0е+38 до 1.0е+38.
Перечислювальні типи можуть задаватись діапазоном або списком:
Range simple_expression (to|downto) simple_expression type name is (valuel, value2, ... Value_n)
Символьний тип є перечислювальним типом, що задається списком значень. У vhdl підтримується повний набір восьмибітних символів iso. Приклад
Type character is (
Nul, soh, stx, etx, eot, enq, akt, bel,
Bs,, ht, lf, vt, ff, cr, so, si);
Булевий тип - це перечислювальний тип, який має наступне визначення: type boolen is (false, true);
Цей тип використовується для представлення результатів умов виразів. В ці вирази можуть входити оператори порівняння =, /=, <,<=, >, >= і логічні оператори and, or, nand, xor, xnor, not.
Бітовий тип - це перечислювальний тип, що задається множиною значень
Type bit is ('0', '1');
Як правило, бітовий тип використовується для для моделювання на апаратному рівні, а булевий тип - для моделювання на абстрактному рівні.
Стандартний лоічний тип std_ulogic - це перечислювальний тип, який використовуються для представлення можливих значень електричного сигналу у відповідності до стандарту ieee 1164. Його визначення має наступний вигляд.
Type std_ulogic is ('u' -- uninitialised 'x' -- forcing
'0' |
-- forcing zero |
'1' |
-- forcing one |
'W' |
-- week unknown |
'L' |
-- week zero |
'H' |
-- week one |
|
-- don't care |
Величини цього типу можуть бути операндами логічних операторів. Для того щоб включити тип std_ulogic в модель, необхідно перед нею розмістити наступні стрічки: library ieee;
Use ieee.std_logic_1164.all;
Це повязано з тим, що цей тип не є вбудованим в vhdl, а розміщений в окремому пакеті, що знаходиться в окремій бібліотеці ieee.
Фізичні типи даних використовується для визначення фізичних величин таких як довжина, маса, час і т. Д.організація фізичних типів в vhdl дозволяє встановити відповідність між різними одиницями виміру.
Приклад
Type length is range 0 to 1e9 units
Um; -- micron; mm=1000 um; m=1000 mm; mil=254 um; inch=1000 mil; end units length
У vhdl підтримується вбудований фізичний тип time для опису часу, який має наступний вигляд:
Type time is range implementation defined units
Fs;
Ps=1000 fs; ns=1000 ps; us=1000 ns; ms=1000 us; sec=1000 ms; min=60 sec; hr=60 min;
End units;
Тип time є вбудованим і описувати його в програмах не потрібно.
Перше значення в типі (ліва межа інтервалу) останнє значення в типі (права межа інтервалу) найменше значення в типі найбільше значення в типі
True, якщо діапазон заданий від меншого значення до більшого, або цей тип заданий перерахунком значень, в іншому випадку - false повертає літерне представленння значення x
Повертає значення вказаного типу на базі строкового представлення s
Перелік атрибутів фізичних типів
Атрибут опис
T ' po s ( x ) номер позиції x в t
T ' val (n) значення t в позиції x
T ' succ (x) значення t в позиції x+1
T ' pred (x ) значення t в позиції x-1
T ' leftof (x) значення t в позиції на 1 лівіше x
T ' rightof (x) значення t в позиції на 1 правіше x
Складні типи. Масиви
Масив це набір елементів однакового типу. Позиція кожного елемента задається скалярним значенням - індексом. Визначення типу одномірноо масиву має наступний вигляд:
Type name is array (diskrete_sybtype_indicatoin range simple_expression to|downto simple_expression) of element_sybtype_indication;
Приклад
Type word is array (0 to 30) of bit;
Type state is array (initial, idle, active, error);
Type state is array (initial, idle, active, error);
Type state_count is array (state range idle to error) of natural;
Subtype coeff is integer range 0 to 63;
Type coeff_array is array (сщуаа) of real;
Звернення до елементу масива здійснюється за його інде5ксом, який вказується в круглих дужках.
Оголошення багатомірногго масиву, приклад:
T'left T'rite T'low T'high T'ascending T'image(x) t'value(s) |
Перелік атрибутів скалярних типів. |
Опис |
Атрибут |
Type matrix is array (1 to 3, 1 to 3) of integer;
Індекси багатомірних масивів відділяються комами. Звернення до елементів багатомірних масивів здійснюється шляхом вказання в круглих дужках всіх індексів елемента, відділених комами:
Variable matrix1: matrix matrix1(1,3):=15;
Визначеня початкових значень елементів масиву
Пряме визначення приклад
Type points is array (1 to 3) of real;
Тоді об'єкту цього типу можна присвоїти значення списком: (2.3, 3.2, 5.0) для двохмірного масиву: type points is array (1 to 3, 1 to 4) of real; тоді об' єкту цього типу можна присвоїти значення наступним списком: ((2.3, 3.2, 5.0, 7.4), (2.1, 6.2, 4.8, 8.1), (6.3, 2.5, 7.4, 3.0))
Асоціювання
Асоціювання значень індексу зі значенням елемента. Приклад синтаксису: ({index_velue => element_value}, ...) Де index_velue - може бути:
- Простим виразом;
- Інтервалом ((в цьому випадку всі елементи, індекси яких попадають в цей інтервал приймають одне значенням);
- Список значень індексів:
- Others (в цьому випадку всі елементи, індекси яких не ввійшли в визначений перелік, будуть приймати вказане після "others=>" значення, при цьому others повинно бути останнім в списку.
Приклад
Type symbol is ('a', 't', 'd', 'h', cr) type state is range 0 to 2; type matrix is array (state,symbol) of state constant n_state:matrix:=(0=>('a'=>1, 'd'=>2, others=>0),
1=>('a'|'h'=>2, others=>0), 2=>('a' to 'h'=>1, others=>2)); в результаті оримаєм матрицю у виглюді:
1 0 2 0 0 2 0 0 2 0 11112