【发布时间】:2019-03-30 20:34:08
【问题描述】:
是否可以在初始化时对记录类型进行部分分配?
比如:
type t_foo is record
a : integer;
b : std_logic;
end record;
signal bar : t_foo := (b => '0');
如果是正常的信号分配,我可以这样做:
bar.b <= '1';
但是在初始化信号或常量时这是不可能的。在我看来,设置初始值时必须分配所有记录成员,或者根本不分配。
使用函数可能有一种解决方法,但有没有更简单/更好/原生的方法?
【问题讨论】:
-
IEEE Std 1076-2008 6.4.2.3 信号声明第 5 段(部分)“默认表达式定义与信号关联的 默认值,或者,对于复合信号,及其每个标量子元素。”对于复合类型(包括记录),每个子元素都被表示。 5. 类型,5.1 总则第 10 段“在本标准中使用术语 子元素 代替术语 元素 来表示一个元素,或者另一个元素的一个元素,或者子元素。如果排除其他子元素,则使用术语元素。"
-
8.3 选定名称第 1 段“选定名称用于表示一个命名实体,其声明出现在另一个命名实体的声明中或设计库中。”您对
bar.b的分配仅限于元素b。这里的重点是bar不是bar.b的对象。bar的声明是一个单对象声明(6.4.2 对象声明,6.4.2.1 总则第 3 段)。 -
感谢 @user1155120 提供 LRM 的观点。但是,我可以想象在 LRM 的范围之外还有其他方法可以实现问题的目的。