Частичное присвоение сигналу типа записи при установке начального значения - PullRequest
0 голосов
/ 30 марта 2019

Возможно ли частичное присвоение типу записи при инициализации?
Что-то вроде:

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

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

В случае нормального назначения сигнала я мог бы сделать:

bar.b <= '1';

Это, однако, невозможно при инициализации сигнала или константы.Мне кажется, что все элементы записи должны быть назначены при установке начального значения или вообще не назначаться.
Возможно, существует обходной путь с использованием функций, но есть ли более простой / лучший / родной способ?

1 Ответ

0 голосов
/ 31 марта 2019

Поскольку для параметров функции могут быть заданы значения по умолчанию, одним из возможных путей решения проблемы «частичной инициализации» может быть использование функции 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');

При вызове функции только этих параметровкоторые должны иметь значения не по умолчанию, остальные параметры останутся без изменений.

РЕДАКТИРОВАТЬ: фиксированное присвоение переменной.

...