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

6 Перечислимые типы

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

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

([<идентификатор> | <символьный литерал>]

{, [<идентификатор> | <символьный литерал>]}*)

На перечислимые типы накладываются следующие ограничения:

  • множество значений перечисления не может быть пустым;

  • все элементы одного перечисления должны быть различны.

При этом допускается, чтобы различные перечислимые типы включали одинаковые элементы. Примером могут служить типы для представления символов (character) и битов (bit), содержащие идентичные символьные литералы '0' и '1'. Такое использование одного и того же символьного литерала либо идентификатора в разных перечислениях называется перегрузкой (overload).

В VHDL по умолчанию предоставляется шесть перечислимых типов. Три из них это типы, предназначенные для управления работой VHDL моделей:

  • тип, определяющий возможные уровни серьезности ошибок (severity_level), используемый в механизме утверждений;

type severity_level is (note, warning, error, failure);

  • тип, определяющий допустимые способы открытия файлов (file_open_kind) и тип, определяющий результаты открытия файла (file_open_status).

Три других перечислимых типа предназначены для представления объектов модели:

  • тип, содержащий символьные литералы, соответствующие набору ISO 8859-1 и идентификаторы для тех диапазонов, которые явно не определены в данном наборе символов (character);

  • тип, предназначенный для представления логических значений (boolean);

type boolean is (false, true);

  • тип, который предназначен для моделирования цифровых сигналов на высоком уровне абстракции (bit).

type bit is ('0', '1');

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

Это тип std_ulogic, определенный следующим образом:

type std_ulogic is ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-');

Данный тип позволяет значительно более точно моделировать цифровые сигналы, чем битовый тип. Однако, при описании высокоуровневых модулей использование данного типа (или его подтипов) может быть избыточным. Особенности этого типа и работа с ним будут рассмотрены позже.

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

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

  • конъюнкция (A and B);

  • штрих Шеффера (A nand B);

  • дизъюнкция (A or B);

  • стрелка Пирса (A nor B);

  • неэквивалентность (A xor B);

  • эквивалентность (A xnor B).

Как и в случае с арифметическими операциями оба операнда для любой логической операции должны принадлежать одному и тому же типу.

Операции конъюнкция, штрих Шеффера, дизъюнкция и стрелка Пирса вычисляются согласно схеме, которую иногда называют коротким вычислением (short-circuit). То есть, вычисление продолжается до тех пор, пока результат достоверно не известен. Например, в выражении (b /= 0) and (a/b > 1) второй операнд будет вычисляться только в случае, если первый операнд истинен.

Как было отмечено ранее, к любым объектам скалярных типов можно применить ряд операций сравнения. Это операции равенства (equality, A = B) и неравенства (inequality, A /= B), которые могут быть применены к любым объектам одного типа. А, кроме того, это операции, которые применимы только к объектам, принадлежащим упорядоченным типам:

  • меньше (less-than, A < B);

  • меньше либо равно (less-than-or-equal, A <= B);

  • больше (greater-than, A > B);

  • больше либо равно (greater-than-or-equal, A >= B).

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