VHDL: Почему длина не определена для перечислений?

У меня есть следующее объявление enum:

type T_STATUS is (   -- position / index
  STATUS_INIT,           -- pos = 0
  STATUS_RECONFIGURING,  -- pos = 1
  STATUS_RELOADING,      -- pos = 2
  STATUS_READY,          -- pos = 3
  STATUS_ERROR           -- pos = 4
);

Почему нельзя использовать T_STATUS'length чтобы подсчитать T_STATUS Члены?

Пример кода:

constant Count : POSITIVE := T_STATUS'length;

Временное решение:
Это можно получить с помощью T_STATUS'high а также T_STATUS'pos следующее:

constant Count : POSITIVE := T_STATUS'pos(T_STATUS'high) + 1;

Это работает, потому что 'high дает последний член enum и 'pos преобразует этого члена в его позицию в списке enum. Поскольку позиции начинаются с 0, нужно добавить 1, чтобы получить правильное количество / длину.

2 ответа

Решение

@Paebbels

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

Этот запрос фиксируется здесь: http://www.eda.org/twiki/bin/view.cgi/P1076/EnumAttributes

Наш твик начинается здесь: http://www.eda.org/twiki/bin/view.cgi/P1076/

Текущие предложения находятся здесь: http://www.eda.org/twiki/bin/view.cgi/P1076/CollectedRequirements

Информация о собрании находится здесь: http://www.eda.org/twiki/bin/view.cgi/P1076/MeetingMinutes

IEEE 1076 - это индивидуальная рабочая группа, которая поощряет участие сообщества VHDL. Для участия в программе нет особых требований к членству. Помогите сформировать следующую ревизию, присоединяйтесь к нам.

Джим Льюис 1076 WG Стул

Немного более конкретно, перечислимый тип - это скалярный тип, а не тип массива.

'LENGTH указано в IEEE Std 1076-2008 16.2.3 Предопределенные атрибуты массивов.

И из 5.2.2 Типы перечисления, 5.2.2.1 Общие, пункт 5:

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

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

Все это происходит потому, что VHDL является формальным обозначением. Длина не описывает диапазон значений, она описывает количество элементов в массиве.

Другие вопросы по тегам