VHDL系统verilog测试平台中的无约束记录

时间:2016-10-21 13:50:38

标签: vhdl system-verilog modelsim questasim

要测试的设计是用VHDL编写的,并使用这样的无约束记录作为其端口:

type forward_stream is record
    data     : std_ulogic_vector;
    -- further members
    ...
end record;

现在应该从systemverilog测试平台驱动这些端口。有没有办法使用vhdl记录类型的测试平台信号?如果是这样,我如何约束systemverilog中的记录?

或者我是否必须创建一个约束记录的VHDL包并将其作为要在测试平台中使用的类型提供?

由于HDL支持在不同工具之间存在很大差异,因此我特别询问questasim(modelsim' s大哥,同样的供应商,因此有点向下兼容)。

更新

我从Questa SIM用户手册中收集了以下内容:10.4:

  • 记录映射到struct / packed结构(表9-5)
  • 表9-5
  • 中未提及子类型

我试过了:

  1. 使用系统verilog中的子类型连接到无约束类型的端口
  2. 使用系统verilog中的子类型连接到具有约束的无约束类型的端口
  3. 使用系统verilog中的子类型连接到子类型的端口
  4. 在系统verilog中使用无约束类型(不带约束)连接到带约束的无约束类型的端口。
  5. 示例代码:

    VHDL:

    library IEEE;
    use IEEE.std_logic_1164.all;
    
    package module_crosslanguage_pkg is
        type t is record
            s : std_ulogic_vector(2 downto 0);
            c : std_logic_vector;
        end record;
    
        subtype t_s is t(c(1 downto 0));
    end package;
    
    use work.module_crosslanguage_pkg.all;
    
    entity dummy_test is
        port(a : in t);                -- 1.
        port(a : in t(c(1 downto 0))); -- 2.
        port(a : in t_s);              -- 3.
        port(a : in t(c(1 downto 0))); -- 4.
    end entity;
    
    architecture a of dummy_test is
    begin
    end;
    

    系统Verilog

    module modulebay_testbench();
    
    import module_crosslanguage_pkg::*;
    
        t_s testsignal;
        t testsignal2;
    
        dummy_test u(.a(testsignal)); -- 1., 2., 3.
        dummy_test u(.a(testsignal2)); -- 4.
    endmodule;
    

    错误总是Fatal: (vsim-3362) The type of VHDL port 'a' is invalid for Verilog connection (1st connection).

1 个答案:

答案 0 :(得分:1)

是,请参阅“Questa用户手册”中的共享用户定义的类型。它显示了如何导入用一种语言定义的包,并在另一种语言中使用/导入它们。