SlideShare a Scribd company logo
Куланов В.А.
[v.kulanov@csn.khai.edu]
Типы данных в языке
описания аппаратуры
VHDL
«Технологии проектирования
компьютерных систем»
Что такое «тип данных»?
 Тип данных (тип) — множество значений и
операций на этих значениях (IEEE Std 1320.2-1998).
Тип данных характеризует одновременно:
 множество допустимых значений, которые
могут принимать данные, принадлежащие к
этому типу;
 набор операций, которые можно осуществлять
над данными, принадлежащими к этому типу.
Типы данных в языке VHDL
Язык VHDL основан на строгой типизации данных
+ =
+ =
Типы данных в языке VHDL
Язык VHDL основан на строгой типизации данных
VARIABLE counter: INTEGER := 0;
VARIABLE step: INTEGER := 0;
VARIABLE offset: NATURAL := 0;
SIGNAL z_flag : BIT;
counter := counter + 1;
counter := counter + step;
counter := offset;
counter <= 5;
z_flag <= 1;
z_flag <= ‘0’;
counter := step + offset;
Типы данных в языке VHDL
Язык VHDL основан на строгой типизации данных
TYPE state1 IS (IDLE, ERROR, GO);
TYPE state2 IS (IDLE, ERROR, GO);
VARIABLE sys1_state, sys2_state: state1;
VARIABLE module_state: state2;
sys1_state := ERROR;
sys2_state := GO;
sys2_state := ERROR;
module_state := IDLE;
sys1_state := module_state;
Типы данных в языке VHDL
Предопределенные типы данных
 Определены в стандартах IEEE 1076
 Не требуется подключения сторонних пакетов/библиотек
• Находятся в пакете STANDARD и TEXTIO (библиотека STD),
который подключается неявно
Типы данных вводимые пользователем
 Определены в пользовательских и других сторонних
пакетах/библиотеках
 При использовании необходимо явно указывать
подключаемые пакеты/библиотеки
 Обязательно должны быть известны на этапе декларации
объектов языка (переменных, сигналов, констант и т.д.)
IEEE.numeric_std.vhd
IEEE.std_logic_1164.vhd
Таксономиятиповданных
Численные типы данных
INTEGER
целочисленный тип данных
{-231+1, +231-1} (-2 147 483 647 до 2 147 483 647)
REAL
действительный тип данных
{-238, +238}
CONSTANT PI : REAL := 3.14159;
CONSTANT HALF_PI : REAL := Pi/2.0;
CONSTANT N, N5 : INTEGER := 5;
VARIABLE count : INTEGER := 0;
VARIABLE flag : INTEGER := 1.5;
Численные типы данных
 Арифметические операции
«+» – сложение или повторение;
«-» – вычитание или инверсия;
«*» - умножение;
«/» - деление;
mod – число по модулю (5 mod 3 = 2);
rem – остаток от деления;
abs – модуль (абсолютное значении числа);
** - возведение в степень.
 Операции арифметического отношения
=, /=, <, <=, >=, >, которые дают результат типа BOOLEAN
CONSTANT DATA_WIDTH: NATURAL := 8;
VARIABLE address_width: NATURAL := 2**DATA_WIDTH;
Физические типы данных
TYPE TIME IS RANGE -2147483647 TO 2147483647
UNITS
fs; -- femtosecond
ps = 1000 fs; -- picosecond
ns = 1000 ps; -- nanosecond
us = 1000 ns; -- microsecond
ms = 1000 us; -- millisecond
sec = 1000 ms; -- second
min = 60 sec; -- minute
hr = 60 min; -- hour
END UNITS;
представляется целым числом, единица которого имеет вес
единицы измерения некоторой физической величины
перечислимый тип данных
могут задаваться пользователями
предопределенный тип TIME
Перечислимые типы данных
BIT
перечислимый тип данных
{' 1', ' 0 '}
 Логические операции
not – инверсия;
or – операция ИЛИ;
nor – операция ИЛИ-НЕ;
and – операция И;
nand – операция И-НЕ;
xor – неравнозначность; (VHDL`87 не определены)
xnor – равнозначность; (VHDL`87 не определены)
Операции определены по правилам положительной
логики (a AND b дает значение '1', только если оба члена
выражения равны '1' и т.д.)
TYPE bit IS ('0', '1');
SIGNAL x,y,z: BIT;
x <= '0';
y <= '1';
z <= x and y;
Перечислимые типы данных
BOOLEAN
перечислимый тип данных
{TRUE, FALSE}
 Логические операции
not – инверсия;
or – операция ИЛИ;
nor – операция ИЛИ-НЕ;
and – операция И;
nand – операция И-НЕ;
xor – неравнозначность; (VHDL`87 не определены)
xnor – равнозначность; (VHDL`87 не определены)
FALSE AND '1';
TYPE boolean IS (FALSE, TRUE);
SIGNAL x,y,z: BOOLEAN;
x <= FALSE;
y <= TRUE;
z <= x and y;
Перечислимые типы данных
CHARACTER
перечислимый тип данных
объединяет все символы, определенные в используемой
операционной системе – буквы, цифры, специальные
символы (VHDL`87 только первые 128 символов ASCII)
В тексте программы символьная константа записывается как
стандартный символ, заключенный в одинарные кавычки ('a', '
' b', ';' и т.д.)
 Поддерживают операцию конкатенации (&)
Символы '0' и '1' имеют двойное назначение – и как символ,
и как логическое значение. В каждом конкретном случае тип
определяется исходя из контекста.
Перечислимые типы данных
SEVERITY_LEVEL
используется только в операторе ASSERT
определяет уровни «критичности» ситуаций, возникающих в
процессе моделирования системы
TYPE SEVERITY_LEVEL IS (
NOTE, -- just report
WARNING, -- warning and continue simulation
ERROR, -- forces simulation to stop
FAILURE -- stop simulation
);
ASSERT i < 5 REPORT
"Unexpected value, i = " & INTEGER'IMAGE(i);
Перечислимые типы данных
FILE_OPEN_STATUS
Определяет наборы возможных значений при работе с файлами
TYPE FILE_OPEN_STATUS IS (
OPEN_OK, -- File open was successful.
STATUS_ERROR, -- File object was already open.
NAME_ERROR, -- External file not found or
-- inaccessible.
MODE_ERROR -- Could not open file with
-- requested access mode.
);
VARIABLE open_status : FILE_OPEN_STATUS;
...
IF open_status /= OPEN_OK THEN
...
END If;
Перечислимые типы данных
FILE_OPEN_KIND
Определяет набор допустимых значений множества режимов
открытия файлов
TYPE FILE_OPEN_KIND IS (
READ_MODE, -- Resulting access mode is read-only.
WRITE_MODE, -- Resulting access mode is write-only.
APPEND_MODE -- Resulting access mode is write-only;
-- information is appended to the end
-- of the existing file.
);
PROCEDURE file_open (
FILE f : file_type;
external_name : IN STRING;
open_kind : IN FILE_OPEN_KIND := READ_MODE
);
Перечислимые типы данных
STD_ULOGIC, STD_LOGIC
Стандартом IEEE 1164 определена замена типа BIT на более
«гибкий» тип STD_LOGIC (в том числе позволяет уменьшить
количество ошибок моделирования)
Тип STD_LOGIC является разрешимым (resolved) подтипом
типа STD_ULOGIC
Не являются предопределенными типами данных, а требуют
явного подключения в проект пакета std_logic_1164
STD_ULOGIC
Unresolved
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
Библиотека Пакет
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Понятия «слабых» (weak)
сигналов соответствуют
источникам логических
уровней с повышенным
сопротивлением по
сравнению с обычными
логическими элементами
Для синтеза логических схем используются только четыре:
• '0' – логический "0"
• '1' – логическая "1"
• 'Z' – «третье» состояние
• '–' – не подключен
Перечислимые типы данных
Time step 0
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Перечислимые типы данных
Time step 0
1 U U U
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Перечислимые типы данных
Time step 1
0 1 U U
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Перечислимые типы данных
Time step 2
1 0 1 U
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Перечислимые типы данных
Time step 3
1 1 0 1
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 3
1 1 0 1
0 1
X
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 3
1 1 0 1
0 1
X
1
0
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 4
1 1 1 X
0 0
X
1
X
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 0
‘1’ Подтягивающий резистор
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 0
0 U H U
‘1’ Подтягивающий резистор
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 1
1 0 H 1
‘1’ Подтягивающий резистор
Перечислимые типы данных
TYPE STD_ULOGIC IS (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Time step 2
0 1 0 1
‘1’
Resolution(H, 0) = 0
Подтягивающий резистор
Перечислимые типы данных
STD_ULOGIC, STD_LOGIC
 Операции арифметического отношения
=, /=, <, <=, >=, >, которые дают результат типа BOOLEAN
 Логические операции
AND, OR, XOR, …
 Операция конкатенации (объединения) - &
q <= in_x WHEN sel = '1' ELSE 'Z';
SIGNAL s1, s2 : STD_LOGIC;
VARIABLE v1, v2 : STD_LOGIC;
...
s1 <= '0'; v1 := '1'; s2 <= 'X';
WAIT FOR 10 ns;
s2 <= s1 AND v1; -- '0'
v2 := s1 OR v1; -- '1'
Скалярные типы данных, вводимые
пользователем
Способы задания скалярных
типов данных
Диапазоном
(численные типы)
Списком значений
(перечислимы типы)
TYPE name IS type_definition;
 Синтаксис в общем виде:
имя типа задание типа
Скалярные типы данных, вводимые
пользователем
 Задание типа списком значений:
TYPE name IS (value1, value2, …, value_n);
TYPE FSM_states IS (START, STOP, IDLE);
TYPE digits IS ('1', '2', '3', '4', '5');
TYPE LED_lights IS (RED, GREEN, BLUE);
 Примеры:
VARIABLE led1, led2 : LED_lights := RED;
…
led1 := BLUE;
led2 := YELLOW;
led2 := led1;
-- недопустимое значение
-- led1 и led2 -> BLUE
Скалярные типы данных, вводимые
пользователем
 Задание типа диапазоном значений:
TYPE name IS RANGE expression (TO|DOWNTO) expression;
TYPE unsigned_short IS RANGE 0 TO 255;
TYPE data IS RANGE -2**(n-1)+1 to 2**(n-1)-1;
TYPE levels IS RANGE -10.0 TO 10.0;
TYPE wrong_range IS RANGE 15 TO 10; -- DOWNTO
…
VARIABLE curr_level : levels := 0;
CONSTANT FIXED_DATA : data := 10.0;
VARIABLE: a, b, c : unsigned_short;
c := a + b; -- ‘0’
a := 200; b := 100;
c := a + b;
 Примеры:
Value 300 for c is out of range 0 to 255.
Подтипы
 Объекты, отнесенные к подтипу, сохраняют совместимость с
данными базового типа, на основе которого был создан
подтип
 В общем случае подтип ограничивает диапазон допустимых
значений базового типа
 Определен такой же набор допустимых операций, как и для
базового типа
 Для подтипа могут быть введены дополнительные,
свойственные только ему, функции преобразования
SUBTYPE name_of_subtype IS name_of_base_subtype RANGE
simple_expression (TO|DOWNTO) simple_exression;
Имя подтипа Имя базового типа
Диапазон значений подтипа
Подтипы
SUBTYPE short IS INTEGER RANGE 0 TO 255;
SUBTYPE word IS STD_LOGIC_VECTOR(31 DOWNTO 0);
TYPE FSM_states IS (START, RUN, STOP, IDLE, ERROR);
SUBTYPE sys_status IS FSM_states RANGE START TO STOP;
SIGNAL reg_value: short := 128;
COSNTANT MASK: word := X"0000FFFF";
VARIABLE pipeline: sys_status;
VARIABLE worker: FSM_states;
...
pipeline := RUN;
-- совместимость между базовым типом и подтипом сохранена
worker := pipeline;
worker := IDLE;
-- ошибка в процессе выполнения, т.к. диапазон значений
pipeline := worker; -- подтипа не включает значение IDLE
-- запрещено, т.к. значение ERROR не входит в
-- диапазон значений подтипа sys_status
pipeline := ERROR;
Подтипы
-- 'HIGH – атрибут скалярного типа, который определяет
-- максимальное значение в типе (см. атрибуты)
SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER'HIGH;
SUBTYPE positive IS INTEGER RANGE 1 TO INTEGER'HIGH;
SUBTYPE delay_length IS TIME RANGE 0 FS TO TIME'HIGH
 В языке VHDL имеются предопределенные подтипы
 Базовый тип и ограничение диапазона могут быть
заданы непосредственно при объявлении объекта:
VARIABLE pipeline: FSM_states RANGE START TO STOP;
SIGNAL reg_value: INTEGER RANGE 0 TO 255;
-- у подтипов тоже могут быть подтипы
VARIABLE symbol IS NATURAL RANGE 0 TO 255;
PORT(clk : IN STD_LOGIC;
cnt_out: OUT INTEGER RANGE 0 TO 9);
VHDL data types, user-defined types, subtypes

More Related Content

What's hot

Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
vitaliykulanov
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statements
vitaliykulanov
 
021
021021
021JIuc
 
020
020020
020JIuc
 
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntaxMERA_school
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene Kalosha
Rostyslav Siryk
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
Iosif Itkin
 
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
IT-Доминанта
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statements
vitaliykulanov
 

What's hot (9)

Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statements
 
021
021021
021
 
020
020020
020
 
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntax
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene Kalosha
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
 
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statements
 

VHDL data types, user-defined types, subtypes

  • 1. Куланов В.А. [v.kulanov@csn.khai.edu] Типы данных в языке описания аппаратуры VHDL «Технологии проектирования компьютерных систем»
  • 2. Что такое «тип данных»?  Тип данных (тип) — множество значений и операций на этих значениях (IEEE Std 1320.2-1998). Тип данных характеризует одновременно:  множество допустимых значений, которые могут принимать данные, принадлежащие к этому типу;  набор операций, которые можно осуществлять над данными, принадлежащими к этому типу.
  • 3. Типы данных в языке VHDL Язык VHDL основан на строгой типизации данных + = + =
  • 4. Типы данных в языке VHDL Язык VHDL основан на строгой типизации данных VARIABLE counter: INTEGER := 0; VARIABLE step: INTEGER := 0; VARIABLE offset: NATURAL := 0; SIGNAL z_flag : BIT; counter := counter + 1; counter := counter + step; counter := offset; counter <= 5; z_flag <= 1; z_flag <= ‘0’; counter := step + offset;
  • 5. Типы данных в языке VHDL Язык VHDL основан на строгой типизации данных TYPE state1 IS (IDLE, ERROR, GO); TYPE state2 IS (IDLE, ERROR, GO); VARIABLE sys1_state, sys2_state: state1; VARIABLE module_state: state2; sys1_state := ERROR; sys2_state := GO; sys2_state := ERROR; module_state := IDLE; sys1_state := module_state;
  • 6. Типы данных в языке VHDL Предопределенные типы данных  Определены в стандартах IEEE 1076  Не требуется подключения сторонних пакетов/библиотек • Находятся в пакете STANDARD и TEXTIO (библиотека STD), который подключается неявно Типы данных вводимые пользователем  Определены в пользовательских и других сторонних пакетах/библиотеках  При использовании необходимо явно указывать подключаемые пакеты/библиотеки  Обязательно должны быть известны на этапе декларации объектов языка (переменных, сигналов, констант и т.д.)
  • 8. Численные типы данных INTEGER целочисленный тип данных {-231+1, +231-1} (-2 147 483 647 до 2 147 483 647) REAL действительный тип данных {-238, +238} CONSTANT PI : REAL := 3.14159; CONSTANT HALF_PI : REAL := Pi/2.0; CONSTANT N, N5 : INTEGER := 5; VARIABLE count : INTEGER := 0; VARIABLE flag : INTEGER := 1.5;
  • 9. Численные типы данных  Арифметические операции «+» – сложение или повторение; «-» – вычитание или инверсия; «*» - умножение; «/» - деление; mod – число по модулю (5 mod 3 = 2); rem – остаток от деления; abs – модуль (абсолютное значении числа); ** - возведение в степень.  Операции арифметического отношения =, /=, <, <=, >=, >, которые дают результат типа BOOLEAN CONSTANT DATA_WIDTH: NATURAL := 8; VARIABLE address_width: NATURAL := 2**DATA_WIDTH;
  • 10. Физические типы данных TYPE TIME IS RANGE -2147483647 TO 2147483647 UNITS fs; -- femtosecond ps = 1000 fs; -- picosecond ns = 1000 ps; -- nanosecond us = 1000 ns; -- microsecond ms = 1000 us; -- millisecond sec = 1000 ms; -- second min = 60 sec; -- minute hr = 60 min; -- hour END UNITS; представляется целым числом, единица которого имеет вес единицы измерения некоторой физической величины перечислимый тип данных могут задаваться пользователями предопределенный тип TIME
  • 11. Перечислимые типы данных BIT перечислимый тип данных {' 1', ' 0 '}  Логические операции not – инверсия; or – операция ИЛИ; nor – операция ИЛИ-НЕ; and – операция И; nand – операция И-НЕ; xor – неравнозначность; (VHDL`87 не определены) xnor – равнозначность; (VHDL`87 не определены) Операции определены по правилам положительной логики (a AND b дает значение '1', только если оба члена выражения равны '1' и т.д.) TYPE bit IS ('0', '1'); SIGNAL x,y,z: BIT; x <= '0'; y <= '1'; z <= x and y;
  • 12. Перечислимые типы данных BOOLEAN перечислимый тип данных {TRUE, FALSE}  Логические операции not – инверсия; or – операция ИЛИ; nor – операция ИЛИ-НЕ; and – операция И; nand – операция И-НЕ; xor – неравнозначность; (VHDL`87 не определены) xnor – равнозначность; (VHDL`87 не определены) FALSE AND '1'; TYPE boolean IS (FALSE, TRUE); SIGNAL x,y,z: BOOLEAN; x <= FALSE; y <= TRUE; z <= x and y;
  • 13. Перечислимые типы данных CHARACTER перечислимый тип данных объединяет все символы, определенные в используемой операционной системе – буквы, цифры, специальные символы (VHDL`87 только первые 128 символов ASCII) В тексте программы символьная константа записывается как стандартный символ, заключенный в одинарные кавычки ('a', ' ' b', ';' и т.д.)  Поддерживают операцию конкатенации (&) Символы '0' и '1' имеют двойное назначение – и как символ, и как логическое значение. В каждом конкретном случае тип определяется исходя из контекста.
  • 14. Перечислимые типы данных SEVERITY_LEVEL используется только в операторе ASSERT определяет уровни «критичности» ситуаций, возникающих в процессе моделирования системы TYPE SEVERITY_LEVEL IS ( NOTE, -- just report WARNING, -- warning and continue simulation ERROR, -- forces simulation to stop FAILURE -- stop simulation ); ASSERT i < 5 REPORT "Unexpected value, i = " & INTEGER'IMAGE(i);
  • 15. Перечислимые типы данных FILE_OPEN_STATUS Определяет наборы возможных значений при работе с файлами TYPE FILE_OPEN_STATUS IS ( OPEN_OK, -- File open was successful. STATUS_ERROR, -- File object was already open. NAME_ERROR, -- External file not found or -- inaccessible. MODE_ERROR -- Could not open file with -- requested access mode. ); VARIABLE open_status : FILE_OPEN_STATUS; ... IF open_status /= OPEN_OK THEN ... END If;
  • 16. Перечислимые типы данных FILE_OPEN_KIND Определяет набор допустимых значений множества режимов открытия файлов TYPE FILE_OPEN_KIND IS ( READ_MODE, -- Resulting access mode is read-only. WRITE_MODE, -- Resulting access mode is write-only. APPEND_MODE -- Resulting access mode is write-only; -- information is appended to the end -- of the existing file. ); PROCEDURE file_open ( FILE f : file_type; external_name : IN STRING; open_kind : IN FILE_OPEN_KIND := READ_MODE );
  • 17. Перечислимые типы данных STD_ULOGIC, STD_LOGIC Стандартом IEEE 1164 определена замена типа BIT на более «гибкий» тип STD_LOGIC (в том числе позволяет уменьшить количество ошибок моделирования) Тип STD_LOGIC является разрешимым (resolved) подтипом типа STD_ULOGIC Не являются предопределенными типами данных, а требуют явного подключения в проект пакета std_logic_1164 STD_ULOGIC Unresolved LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; Библиотека Пакет
  • 18. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Понятия «слабых» (weak) сигналов соответствуют источникам логических уровней с повышенным сопротивлением по сравнению с обычными логическими элементами Для синтеза логических схем используются только четыре: • '0' – логический "0" • '1' – логическая "1" • 'Z' – «третье» состояние • '–' – не подключен
  • 19. Перечислимые типы данных Time step 0 TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );
  • 20. Перечислимые типы данных Time step 0 1 U U U TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );
  • 21. Перечислимые типы данных Time step 1 0 1 U U TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );
  • 22. Перечислимые типы данных Time step 2 1 0 1 U TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );
  • 23. Перечислимые типы данных Time step 3 1 1 0 1 TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );
  • 24. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 3 1 1 0 1 0 1 X
  • 25. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 3 1 1 0 1 0 1 X 1 0
  • 26. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 4 1 1 1 X 0 0 X 1 X
  • 27. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 0 ‘1’ Подтягивающий резистор
  • 28. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 0 0 U H U ‘1’ Подтягивающий резистор
  • 29. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 1 1 0 H 1 ‘1’ Подтягивающий резистор
  • 30. Перечислимые типы данных TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); Time step 2 0 1 0 1 ‘1’ Resolution(H, 0) = 0 Подтягивающий резистор
  • 31. Перечислимые типы данных STD_ULOGIC, STD_LOGIC  Операции арифметического отношения =, /=, <, <=, >=, >, которые дают результат типа BOOLEAN  Логические операции AND, OR, XOR, …  Операция конкатенации (объединения) - & q <= in_x WHEN sel = '1' ELSE 'Z'; SIGNAL s1, s2 : STD_LOGIC; VARIABLE v1, v2 : STD_LOGIC; ... s1 <= '0'; v1 := '1'; s2 <= 'X'; WAIT FOR 10 ns; s2 <= s1 AND v1; -- '0' v2 := s1 OR v1; -- '1'
  • 32. Скалярные типы данных, вводимые пользователем Способы задания скалярных типов данных Диапазоном (численные типы) Списком значений (перечислимы типы) TYPE name IS type_definition;  Синтаксис в общем виде: имя типа задание типа
  • 33. Скалярные типы данных, вводимые пользователем  Задание типа списком значений: TYPE name IS (value1, value2, …, value_n); TYPE FSM_states IS (START, STOP, IDLE); TYPE digits IS ('1', '2', '3', '4', '5'); TYPE LED_lights IS (RED, GREEN, BLUE);  Примеры: VARIABLE led1, led2 : LED_lights := RED; … led1 := BLUE; led2 := YELLOW; led2 := led1; -- недопустимое значение -- led1 и led2 -> BLUE
  • 34. Скалярные типы данных, вводимые пользователем  Задание типа диапазоном значений: TYPE name IS RANGE expression (TO|DOWNTO) expression; TYPE unsigned_short IS RANGE 0 TO 255; TYPE data IS RANGE -2**(n-1)+1 to 2**(n-1)-1; TYPE levels IS RANGE -10.0 TO 10.0; TYPE wrong_range IS RANGE 15 TO 10; -- DOWNTO … VARIABLE curr_level : levels := 0; CONSTANT FIXED_DATA : data := 10.0; VARIABLE: a, b, c : unsigned_short; c := a + b; -- ‘0’ a := 200; b := 100; c := a + b;  Примеры: Value 300 for c is out of range 0 to 255.
  • 35. Подтипы  Объекты, отнесенные к подтипу, сохраняют совместимость с данными базового типа, на основе которого был создан подтип  В общем случае подтип ограничивает диапазон допустимых значений базового типа  Определен такой же набор допустимых операций, как и для базового типа  Для подтипа могут быть введены дополнительные, свойственные только ему, функции преобразования SUBTYPE name_of_subtype IS name_of_base_subtype RANGE simple_expression (TO|DOWNTO) simple_exression; Имя подтипа Имя базового типа Диапазон значений подтипа
  • 36. Подтипы SUBTYPE short IS INTEGER RANGE 0 TO 255; SUBTYPE word IS STD_LOGIC_VECTOR(31 DOWNTO 0); TYPE FSM_states IS (START, RUN, STOP, IDLE, ERROR); SUBTYPE sys_status IS FSM_states RANGE START TO STOP; SIGNAL reg_value: short := 128; COSNTANT MASK: word := X"0000FFFF"; VARIABLE pipeline: sys_status; VARIABLE worker: FSM_states; ... pipeline := RUN; -- совместимость между базовым типом и подтипом сохранена worker := pipeline; worker := IDLE; -- ошибка в процессе выполнения, т.к. диапазон значений pipeline := worker; -- подтипа не включает значение IDLE -- запрещено, т.к. значение ERROR не входит в -- диапазон значений подтипа sys_status pipeline := ERROR;
  • 37. Подтипы -- 'HIGH – атрибут скалярного типа, который определяет -- максимальное значение в типе (см. атрибуты) SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER'HIGH; SUBTYPE positive IS INTEGER RANGE 1 TO INTEGER'HIGH; SUBTYPE delay_length IS TIME RANGE 0 FS TO TIME'HIGH  В языке VHDL имеются предопределенные подтипы  Базовый тип и ограничение диапазона могут быть заданы непосредственно при объявлении объекта: VARIABLE pipeline: FSM_states RANGE START TO STOP; SIGNAL reg_value: INTEGER RANGE 0 TO 255; -- у подтипов тоже могут быть подтипы VARIABLE symbol IS NATURAL RANGE 0 TO 255; PORT(clk : IN STD_LOGIC; cnt_out: OUT INTEGER RANGE 0 TO 9);