Технологии проектирования компьютерных систем. Типы данных. (Лекция 4)

Содержание

Слайд 2

Определение Тип - это множество значений с общим признаком. VHDL -

Определение

Тип - это множество значений с общим признаком.
VHDL - строго

типизированный язык. Каждый объект объявляется со своим типом и может присваивать значение только данного типа. Благодаря этой особенности, программы VHDL имеют высокую надежность и обеспечивают экономию времени при отладке.
Подтип - подмножество значений данного типа.
Выделяют следующие типы данных языка VHDL:
- скалярные (scalar_type);
- составные (composite_ type);
- указатели (access_type);
- файлы (file_type);
- защишенные (рrotected_type).
В лекции рассматриваются только те данных, которые поддерживаются средствами синтеза ПЛИС.
Слайд 3

Скалярные типы Скалярные типы создают значения, которые нельзя разбить на отдельные

Скалярные типы

Скалярные типы создают значения, которые нельзя разбить на отдельные элементы

или поля.
scalar_type_definition ::=
 enumeration_type_definition -- перечисления;
 | integer_type_definition -- целые значения;
 | floating_type_definition -- действительные значения;
 | physical_type_definition -- значения, имеющие размерность.
Все скалярные типы и их подтипы определяются через диапазон своих значений.
Слайд 4

Перечисления Перечисления состоят из списка значений, которые могут быть символами или

Перечисления

Перечисления состоят из списка значений, которые могут быть символами или идентификаторами.
enumeration_type_definition

::=
(enumeration _literal { , enumeration _literal } )
 enumeration _literal ::= identifier | character_literal
В САПР Quartus перечисления описывают по шаблону:
TYPE IS (, , ...);
Например: TYPE LOGIC_VOLT IS ('0', '5', 'z', 'x');
TYPE MULTI_LEVEL_LOGIC is (LOW, HIGH, RISING, FALLING);
Вводимые имена перечислений не должны совпадать с предопределенными в языке именами перечислимых типов.
Значения перечислений не должны совпадать.
Слайд 5

Перечисления Весь список значений пронумерован слева направо, начиная с нуля, то

Перечисления
Весь список значений пронумерован слева направо, начиная с нуля, то

есть каждое значение имеет соответствующую позицию в списке:
Значения в разных перечислениях могут совпадать.
Слайд 6

Предопределенные перечисления Предопределенными перечислениями являются CHARACTER, BIT, BOOLEAN, SEVERITY_LEVEL, FILE_OPEN_KIND, и

Предопределенные перечисления

Предопределенными перечислениями являются CHARACTER, BIT, BOOLEAN, SEVERITY_LEVEL, FILE_OPEN_KIND, и

FILE_OPEN_STATUS, специфицированные в пакете "standard":
TYРЕ CHАRАCTЕR IS (NUL, SОH, ...);
TYРЕ BIT IS ('0', 'l');
TYРЕ BООLЕАN IS (FАLSЕ, TRUЕ);
TYРЕ SЕVЕRITY_LЕVЕL IS (NОTЕ, WARNING, ERROR, FAILURE);
TYPE FILE_OPEN_KIND is (READ_MODE, WRITE_MODE, APPEND_MODE);
TYPE FILE_OPEN_STATUS is (OPEN_OK, STATUS_ERROR, NAME_ERROR, MODE_ERROR);
Примечание - Значения bооlеаn (ложный и истинный) не идентичны логическим '0' и '1'.
Слайд 7

Перечисления для цифровой техники В пакете «std1164» предопределены перечисления std_ulogic (неразрешимый

Перечисления для цифровой техники
В пакете «std1164» предопределены перечисления std_ulogic (неразрешимый логический

тип с девятизначным алфавитом) и разрешимый подтип std_logic.
Слайд 8

Перечисления STD_ULOGIC и STD_LOGIC

Перечисления STD_ULOGIC и STD_LOGIC

Слайд 9

Целые числа Тип целого задается через диапазон целых чисел. integer_type_definition ::=

Целые числа

Тип целого задается через диапазон целых чисел.
integer_type_definition ::= range_constraint
Обычно этот

диапазон находится между -2.147.483.648 и +2.147.483.647 (диапазон 32-разрядного целого).
В САПР QUARTUS целые числа описывают по шаблону:
TYPE IS RANGE TO ;
Пример описания целых чисел:
TYPE GROUP_INTEGER IS RANGE -1025 TO 1025;
Предопределенным целым типом является integer, который специфицирован в пакете "standard" как:
TYРЕ INTEGER IS RANGE -2147483648 TO 2147483647.
Слайд 10

Целые числа В пакете "standard» специфицированы и предопределенные подтипы natural и

Целые числа

В пакете "standard» специфицированы и предопределенные подтипы natural и positive

по шаблону:
SUBTYPE __subtype name IS __type_name RANGE __low_value TO __high_value;
SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER'HIGH;
SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER'HIGH.
Нельзя использовать имена предопределенных типов и подтипов для собственных определений.
Слайд 11

Числа с плавающей запятой Числа с плавающей запятой обеспечивают приближения к

Числа с плавающей запятой

Числа с плавающей запятой обеспечивают приближения к вещественным

числам. Числа с плавающей запятой применяют для моделей, в которых погрешность вычисления значений не важна или не определена.
floating_type_definition ::= range_constraint
Примеры описания чисел с плавающей точкой:
TYРЕ RESULT IS RANGE 0.0 TO 11063.5;
SUBTYРЕ Р_RЕSULT IS RESULT RANGE 2765.88 TO 8297.63.
Предопределенным типом с плавающей точкой является real, который специфицирован в пакете "standard" как:
TYРЕ RЕАL IS RANGE -1.0Е38 TO 1.0Е38.
Тип real обеспечивает 64-разрядное представление чисел с плавающей точкой (1 разряд - знак числа, 11 разрядов - порядок, 52 разряда - мантисса).
Слайд 12

Физические типы Физические типы создают числа с реальными размерностями, кратными некоторой

Физические типы

Физические типы создают числа с реальными размерностями, кратными некоторой базовой

единице. Множество допустимых значений задается как диапазон целых чисел (базовых единиц).
Формат описания физических типов.
physical_type_definition ::=
range_constraint
  units
  bаsе_unit_dеclаrаtiоn { sеcоndаry_unit_dеclаrаtiоn }
  еnd units;
bаsе_unit_dеclаrаtiоn ::= idеntifiеr ;
sеcоndаry_unit_dеclаrаtiоn ::= idеntifiеr = рhysicаl_litеrаl;
рhysicаl_litеrаl ::= [ аbstrаct_litеrаl ] unit_nаmе.
Слайд 13

Физические типы При объявлении физического типа сначала указывают базовую единицу размерности,

Физические типы
При объявлении физического типа сначала указывают базовую единицу размерности, а

затем последующие единицы размерности как кратные базовой или предшествующим единицам.
Физические типы при описании устройств на ПЛИС обычно не применяются из-за сложности конструктивной реализации. Применяются при создании векторов входных воздействий.
Предопределенным физическим типом является time, который специфицирован в пакете "standard«.
Слайд 14

Предопределенный тип TIME TYРЕ TIME IS RANGE -9223372036854775808 TO 9223372036854775807 UNITS

Предопределенный тип TIME
TYРЕ TIME IS RANGE -9223372036854775808 TO 9223372036854775807
UNITS
fs; -- femtosecond
 ps =

1000 fs; -- picosecond
 ns = 1000 ps; -- nаnоsеcоnd
 us = 1000 ns; -- microsecond
 ms = 1000 us; -- millisecond
 sеc = 1000 ms; -- second
 min= 60 sеc; -- minute
 hr = 60 min; -- hour
END UNITS;
Слайд 15

Составные типы Составной тип - это группа значений под одним именем.

Составные типы

Составной тип - это группа значений под одним именем.
composite_type_definition ::=


  array_type_definition -- массивы;
  record_type_definition -- записи.
Слайд 16

Массивы Массивы объединяют элементы одного типа. Массивы могут иметь любую размерность.

Массивы

Массивы объединяют элементы одного типа. Массивы могут иметь любую размерность. Тип

элемента массива не может быть file. Можно задать тип массива как с неопределенными, так и с определенными границами. Задание типа с неопределенными границами дает возможность создавать массивы, имеющие один и тот же тип, но различные границы индексов.
array_type_definition ::=
unconstrained_array_definition|constrained_array_definition
Слайд 17

Описание массивов Массивы рекомендуется описывать по шаблону: TYPE __array_type_name IS ARRAY

Описание массивов

Массивы рекомендуется описывать по шаблону:
TYPE __array_type_name IS ARRAY (INTEGER RANGE

<>) ОF __type_name;
TYPE __array_type_name IS АRRАY (__integer DOWNTO __integer) ОF __type_name;
Пример двух эквивалентных описаний двумерного массива 3*4:
TYPE ARRAY_M IS ARRAY (l TO 3, 7 DOWNTO 4) OF POSITIVE;
TYPE ARRAY_M IS ARRAY (INTEGER RANGE 1 TO 3, INTEGER RANGE 7 DOWNTO 4) OF POSITIVE;
Каждая пара границ массива должна иметь одинаковый тип. Элемент массива в свою очередь может быть массивом.
Слайд 18

Описание массивов Задание типа с неопределенными границами - очень удобная возможность

Описание массивов

Задание типа с неопределенными границами - очень удобная возможность для

описания аппаратуры. Это дает как полную совместимость объектов данного типа, так и большую гибкость в параметризации описания. Примерами таких типов могут служить предопределенные типы bit_vector и string, специфицированные в пакете "standard»:
TYPE BIT_VECTOR IS ARRAY (NATURAL RANGE <>) OF BIT;
TYPE STRING IS ARRAY (POSITIVE RANGE <>) OF CHARACTER;
Направление и границы диапазона индексов не содержатся в определении указанных типов и должны быть указаны непосредственно при объявлении объектов данных типов.
Слайд 19

Записи Записи - это составной тип данных, элементы которых могут иметь

Записи

Записи - это составной тип данных, элементы которых могут иметь различные

типы.
record_type_definition ::=
record
  element_declaration
  { element_declaration }
  end record
Все имена элементов (полей) записи должны быть различными.
Слайд 20

Записи Пример описания данных составного типа: TYPE rec_type IS RECORD hour

Записи
Пример описания данных составного типа:
TYPE rec_type IS RECORD
  hour : INTEGER RANGE

0 TO 24;
  min : INTEGER RANGE 0 TO 60;
per : day;
END RECORD;
Тип данных day описан как:
TYPE day IS (morn, din, evn, night);