首页 > 解决方案 > 设置初始值时对记录类型信号的部分分配

问题描述

是否可以在初始化时对记录类型进行部分分配?
就像是:

type t_foo is record
    a : integer;
    b : std_logic;
end record;

signal bar : t_foo := (b => '0');

如果是正常的信号分配,我可以这样做:

bar.b <= '1';

然而,在初始化信号或常数时这是不可能的。在我看来,在设置初始值时必须分配所有记录成员,或者根本不分配。
使用函数可能有一种解决方法,但有没有更简单/更好/原生的方法?

标签: vhdlfpgaasic

解决方案


由于函数参数可能具有默认值,因此实现“部分初始化”的一种可能解决方法是使用 init 函数:

type t_foo is record
    a : integer;
    b : std_logic;
end record;

function init_t_foo(a : integer := 83423; b : std_logic := 'Z') return t_foo is
    variable ifoo : t_foo;
begin
    ifoo.a := a;
    ifoo.b := b;
    return ifoo;
end function init_t_foo;

constant bar : t_foo := init_t_foo(b => '1');

调用函数时,只提供那些应该具有非默认值的参数,其他参数将保持不变。

编辑:固定变量赋值。


推荐阅读