【发布时间】:2019-03-30 20:28:11
【问题描述】:
是否可以为记录类型或通常任何用户定义的类型定义默认值?
类似(伪 VHDL):
type t_foo is record
a : integer := 4;
b : std_logic := '0';
end record;
或
subtype glarp is integer range 0 to 10 := 5;
编辑:将 glarp 从类型更改为子类型定义。
【问题讨论】:
-
没有。类型声明不是对象声明。注意类型 glarp 不能从其他类型声明。您可以为元素类型(或 glarp)声明子类型,其中子类型的 'LEFT 值提供默认初始值。
-
IEEE Std 1076-2008 5. 类型,5.1 一般第 2 段(部分)“类型的特征在于一组值和一组操作。” 6.4 对象,6.4.1 总则第 1 段(部分)“object 是包含(具有)类型值的命名实体。对象是以下之一: — 声明的对象通过对象声明(参见 6.4.2)..."
-
您可以在任何具有所需默认值的对象声明之前定义一个具有默认值的对象(例如类常量),其中具有显式默认初始值的对象可用于提供初始值对于相同类型的其他对象。这也可以用于复合对象类型的子元素,以及子元素类型的对象。注意合成工具并不普遍支持使用提供初始值的非静态对象(变量、信号),而标准支持。
-
见What is the XY problem?。您可以使用minimal reproducible example 来说明您要解决的实际问题,而不是围绕您的实际问题进行射击。回答开放式问题可能需要来自 LRM 的参考文献数量可能超过此处的发布大小限制。
-
感谢您表明 VHDL LRM 没有规定设置用户定义(记录)类型的默认值。将 'LEFT 值作为隐式默认值似乎有点粗略,特别是如果这意味着标量类型将要求默认值与标量类型范围的下限或上限相同。但这就是我们得到的。