VHDL:为什么没有为枚举定义长度?

时间:2015-06-24 16:48:33

标签: enums vhdl

我有以下枚举声明:

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'highT_STATUS'pos获取该号码,如下所示:

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

这是有效的,因为'high给出了最后一个枚举成员,而'pos将此成员转换为它在枚举列表中的位置。因为位置从0开始,所以必须加1以获得正确的计数/长度。

2 个答案:

答案 0 :(得分:2)

@Paebbels

之前的任何修订都没有人要求这样做。顺便说一句,工作组需要额外的有经验的用户,比如你自己参与。这将有助于确保我们为下一次修订完成相关工作。

此请求在此处捕获: http://www.eda.org/twiki/bin/view.cgi/P1076/EnumAttributes

我们的twiki从这里开始: 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主席

答案 1 :(得分:2)

更重要的是,枚举类型是标量类型而不是数组类型。

'LENGTH在IEEE Std 1076-2008 16.2.3数组的预定义属性中指定。

从5.2.2枚举类型,5.2.2.1概述,第5段:

  

每个枚举文字都会产生不同的枚举值。枚举值之间的预定义顺序关系遵循相应位置编号的顺序。第一个列出的枚举文字的值的位置编号为零;每个额外枚举文字的位置编号比列表中其前一个版本的位置编号多一个。

我们看到每个枚举文字都代表一个基于它的声明顺序的位置编号,第一个值的位置编号为零(您的'解决方法的基础')。

所有这一切都是因为VHDL是一种正式的符号。长度不描述一系列值,它描述了数组中元素的数量。