【问题标题】:VHDL : Array of records with variable field length sizeVHDL:具有可变字段长度大小的记录数组
【发布时间】:2020-03-27 11:52:33
【问题描述】:

我正在尝试为测试平台实现一个通用的 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 信号类型的问题,该类型的“数据”字段受到限制:

signal coarse_probe : t_probe  

启动模拟时显然会崩溃。谁能指出如何定义和初始化这样一个数组?

谢谢!

【问题讨论】:

  • 它不会崩溃。它不会编译。在 VHDL 中,所有对象在声明时都必须受到约束。并且数组的所有元素必须具有相同的子类型。必须是信号吗?如果您可以使用变量,这里有一个解决方法...
  • 不确定我是否理解您的问题。是记录中的数组大小不受限制吗?如果是这样,VHDL 2008 确实支持...
  • @mbrandalero 他希望它在一个数组中,每个元素都有不同的大小。这是不可能的。
  • 您能否将data 设置得适当大,以便在您的系统中用于任何用途?
  • 谢谢scarry_jeff。这可能是最简单的。

标签: vhdl test-bench


【解决方案1】:

假设这只是模拟所必需的?

然后您可以使用变量和访问类型(可能是上面提到的@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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多