VHDL: массив записей с переменным размером поля - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь реализовать универсальный регистратор данных c std_logic_vector для тестового стенда. Этот компонент будет генерировать выходной сигнал для каждого зарегистрированного сигнала.

Каждый сигнал должен иметь тип t_probe

type t_probe is record:
  min_delay : time;
  max_delay : time;
  num_exp_words : integer;
  trig_lvl : std_logic;
  data: std_logic_vector;
  done : std_logic;
end record;

Хотел бы иметь тип записи массива зондов:

type t_probe_array is array(0 to c_n_probes - 1) of t_probe;

Теперь у меня проблема с объявлением типа сигнала st_probe, для которого поле «data» ограничено:

signal coarse_probe : t_probe  

Очевидно, что при запуске симуляции взломает sh. Кто-нибудь может указать, как определить и инициализировать такой массив?

спасибо!

1 Ответ

0 голосов
/ 04 апреля 2020

Предполагается, что это требуется только для симуляции?

Тогда вы могли бы работать с переменными и типами доступа (возможно, обходной путь @Tricky упоминал выше?).

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity tst014 is
end entity tst014;

architecture sim of tst014 is
    type pstring is access string;
    type rec is record
        ps      : pstring;
    end record;
    type rec_array is array(natural range <>) of rec;
begin
    p : process
        variable recs     : rec_array(1 to 3);
    begin
        recs(1) := (ps => new string'("Hello"));
        recs(2) := (ps => new string'("World!"));

        report "recs(1).ps.all = " & recs(1).ps.all severity note;
        report "recs(2).ps.all = " & recs(2).ps.all severity note;
    end process p;
end architecture sim;
...