Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 2 Типы VHDL_данных и их интерпретация при R...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
287.23 Кб
Скачать

Лекция 4

Типы vhdl-данных и их интерпретация

ПРИ RTL-СИНТЕЗЕ

1 Объявление типов

В языке VHDL любой тип должен быть объявлен перед использованием. Объявление содержит имя типа и секцию определения.

<объявление типа> ::=

type <идентификатор> is <определение типа>;

В качестве примера рассмотрим объявление типа, объекты которого это целые числа, лежащие в диапазоне от 0 до 255 включительно:

type byte is range 0 to 255;

Показанный тип относится к классу целочисленных типов, что влияет, во-первых, на способ его определения, во-вторых, на набор операций, применимых к объектам этого типа.

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

В дальнейшем, при анализе конкретных типов будет рассматриваться только секция определения типа.

2 Классификация скалярных типов данных

В языке VHDL любой тип относится к определенному классу. В зависимости от того, к какому классу принадлежит тип, различаются синтаксис его определения и применимые к объектам этого типа операции. Скалярные типы разделяются на четыре класса:

  • целочисленные;

  • вещественные;

  • физические;

  • перечислимые.

Типы этих классов упорядочены, так как они определяются на основе упорядоченного множества значений. Поэтому к объектам этих типов применимы некоторые специфические операции, например, операции сравнения, которые будут рассмотрены отдельно при разборе булевого типа данных.

Целочисленные, вещественные и физические типы образуют группу числовых типов данных (рис. 1). С другой стороны, целочисленные и перечислимые типы образуют группу дискретных типов данных. Вещественные и физические типы не являются дискретными, так как они обеспечивают только аппроксимацию континуума значений на некоторое конечное множество значений (рис. 2). Типы, которые относятся к одной группе, схожи между собой. В дальнейшем будут рассмотрены конструкции языка VHDL, в которых специфицируется не использование конкретного класса, а использование определенной группы. В частности, речь идет о дискретных типах данных.

Рисунок 1 – Классификация скалярных типов данных (числовые типы)

Рисунок 2 – Классификация скалярных типов данных (дискретные типы)

Для каждого из показанных классов мы рассмотрим синтаксис определения типа, все применимые к его объектам операции и предоставляемые по умолчанию типы этого класса.

3 Целочисленные типы

Любой целочисленный тип языка VHDL определяется фиксированным диапазоном целых чисел, принадлежащему некоторому, предопределенному платформой, множеству.

Поэтому определение типа требует задания границ диапазона допустимых значений, то есть крайнего левого и крайнего правого значений, а также указания порядка следования значений в нём:

<определение целочисленного типа> ::=

range <простое выражение> [to | downto] <простое выражение>

Диапазон значений, которые могут принимать объекты типа, можно упорядочить по возрастанию или по убыванию. При упорядочении по возрастанию крайнее левое значение должно быть наименьшим в диапазоне, а крайнее правое – наибольшим. С другой стороны, при упорядочении диапазона значений по убыванию крайнее левое значение должно быть наибольшим, а крайнее правое – наименьшим.

Для задания упорядочения используются соответствующие ключевые слова: to – для упорядочения по возрастанию и downto – для упорядочения по убыванию. Следует отметить, что в случае нарушения правил для задания границ диапазона будет создан, так называемый, пустой диапазон (null range), который не содержит ни одного значения:

type null_range is range 127 to 0;

Границы диапазона могут быть заданы посредством простых выражений. Однако на такие выражения накладывается важное ограничение – они должны вычисляться статически и на основе данных доступных в точке их вычисления.

По умолчанию, язык VHDL предоставляет единственный целочисленный тип – целое. Диапазон значений этого типа зависит от ограничений конкретной платформы, но, согласно стандарту языка VHDL, он не может быть уже, чем от -2 147 483 647 до 2 147 483 647:

type integer is range -2147483647 to 2147483647;

При объявлении целочисленных типов предпочтительно считать границы показанного диапазона максимально допустимыми.

К объектам, которые принадлежат целочисленным типам данных, можно применять ряд арифметических операций. Это унарные операции:

  • тождественность (+A);

  • отрицание (-A);

  • взятие модуля (abs A).

А также бинарные операции:

  • сложение (A + B);

  • вычитание (A - B);

  • умножение (A * B);

  • деление (A / B);

  • деление по модулю (A mod B);

  • взятие остатка от деления (A rem B);

  • возведение в степень (A ** B).

Для всех перечисленных бинарных операций, кроме операции возведения в степень, оба операнда должны иметь один и тот же тип. Для операции возведения в степень второй или правый операнд должен быть целым неотрицательным числом.

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