SystemVerilog数据类型映射到VHDL

时间:2014-12-02 16:15:06

标签: vhdl system-verilog

我的问题是我在VHDL实体中有一个int_array泛型,我想从我的SV tb设置它。哪个是正确的SV数据类型呢?我尝试了几种可能性,但其中没有一种是正确的。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

不可能完全说出来。由于VHDL和SystemVerilog之间的接口没有以任何方式指定,因此模拟器供应商可以以他们认为合适的方式实现它。您必须询问您的EDA供应商是否可能,如果可能,您需要使用哪种数据类型。

由于你没有提供任何代码,我只需要推测你必须在将它作为泛型使用之前定义你的数组类型(否则它不会编译):

package my_types_pkg is
  type my_array_t is array (0 to 2) of integer range 0 to 255;
end package my_types_pkg;

这可能是你的DUT的样子:

entity dut is
  generic (
    int_array : my_array_t
  );
end dut;


architecture dummy of dut is
begin
end dummy;

因为我们必须在那里定义一个新类型,所以Questa要求我们将类型定义导入SystemVerilog世界。这是它专有的地方。 Mentor Graphics选择这样做的方法是使用-mixedsvvh开关编译VHDL包:

vcom -mixedsvvh dut.vhd

必须在VHDL包内定义类型,否则不会导出。在SystemVerilog文件中,您只需定义localparam类型的my_array_t并将其用于实例化:

module top;
  localparam my_types_pkg::my_array_t my_array = '{ 1, 2, 3 };

  dut #(my_array) dut_inst();
endmodule // top

在上面的代码中,my_types_pkg是VHDL中定义的包,它使用-mixedsvvh开关导出到SV。

现在是悲伤的部分。这对我不起作用。即使类型匹配,vsim仍然抱怨通用无效。这个答案应该可以帮助您入门(例如,在文档中搜索什么)。另外,请尝试将此案例提交给Mentor Graphics支持。