设置初始值时,部分分配给记录类型的信号

时间:2019-03-30 20:34:09

标签: vhdl fpga asic

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

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

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

在正常分配信号的情况下,我可以这样做:

bar.b <= '1';

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

1 个答案:

答案 0 :(得分:0)

由于可能具有函数参数的默认值,因此实现“部分初始化”的一种可能的解决方法是使用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');

仅在调用该函数时应提供非默认值的参数,其他参数将保持不变。

编辑:固定变量分配。