Types VHDL:如何分配;整数范围0到99“;在C+中使用了一个新的类型名,如typedef+;

Types VHDL:如何分配;整数范围0到99“;在C+中使用了一个新的类型名,如typedef+;,types,vhdl,alias,typedef,subtype,Types,Vhdl,Alias,Typedef,Subtype,这就是我在VHDL中尝试做的: type score is integer range 0 to 99; type speed is integer range 0 to 99; 但我认为我从根本上误解了VHDL中“类型”的工作原理,因为该工具正在生成错误。它在“整数”附近显示:语法错误。我认为VHDL中的Type与C++中的Type FED类似,但似乎不是。将“score”和“speeds”声明为类型的正确方法是什么?这两个类型在内部都只是0到99之间的整数?Type创建一个与现有类型完全没

这就是我在VHDL中尝试做的:

type score is integer range 0 to 99;
type speed is integer range 0 to 99;

但我认为我从根本上误解了VHDL中“类型”的工作原理,因为该工具正在生成错误。它在“整数”附近显示
:语法错误
。我认为VHDL中的Type与C++中的Type FED类似,但似乎不是。将“score”和“speeds”声明为类型的正确方法是什么?这两个类型在内部都只是0到99之间的整数?

Type创建一个与现有类型完全没有关系的新类型。 别名只是分配给已存在的对象(如信号或变量)的不同名称。 子类型从现有类型创建类型,如整数范围的一部分或具有特定位数的标准逻辑向量

因此,要解决这个问题,需要使用子类型,而不是类型或别名

因此,正确的VHDL将如下所示:

subtype score is integer range 0 to 99;
subtype speed is integer range 0 to 99;

从两个声明中删除整数。参见IEEE标准1076-2008 6.2类型声明。还有警告“你确定要这么做吗?”(而不是整数子类型?删除整数会创建一个与整数不兼容的新类型。
子类型分数是0到99之间的整数;
会创建一个与整数不兼容的整数。是的,我使用了子类型,它很有效!现在,我更好地理解了类型、子类型和别名之间的区别。因此,我现在知道有两种方法可以做到这一点,但使用类型将创建不能被处理为整数的东西…只能使用类型转换来交换代码>整数< /代码>。单独的类型对意外和错误的描述更安全,子类型更方便。两者都保护超出范围值。C++类型DEFS现在这样做了吗?5。类型,5.1“子类型是一个带约束的类型。”从语义上讲,这就是您尝试执行的操作。一个只有范围的新类型是整数类型(5.2.3),而不是整数类型,它具有所有相同的算术运算符,并且与universal_integer兼容。它与integer类型不同,需要显式类型转换-9.3.6”任何抽象数字类型都与任何其他抽象数字类型密切相关。”