Лекція 3 типи даних

1.                          Скалярні (прості) типи

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.                           Складні типи

2.1.                                                   Записи

2.2.                                                  Масиви

2.2.1.                                                                           Обмеженої довжини

2.2.2.                                                                          Необмеженої довжини

String bit vector signed unsigned std_logic vector std_ulogic vector

3.                           Вказівні типи

4.                           Файлові типи

Скалярні типи використовуються для опису: чисел, символів, значень сигналів і інших фзичних об'єктів

У 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

1 2 3 4 5  Наверх ↑