SystemVerilog数据类型映射到VHDL

SystemVerilog数据类型映射到VHDL,vhdl,system-verilog,Vhdl,System Verilog,我的问题是,我在VHDL实体中有一个int_数组generic,我想从SV tb中设置它。哪种是正确的SV数据类型?我尝试了几种可能性,但没有一种是正确的。 提前谢谢。不可能准确地说。因为VHDL和SystemVerilog之间的接口没有以任何方式指定,所以由模拟器供应商以他们认为合适的任何方式实现它。您必须询问EDA供应商您想要的是否可能,如果可能,需要使用哪种数据类型 由于您没有提供任何代码,我只能推测您必须在将数组类型用作泛型之前定义它(否则它不会编译): 这可能就是您的DUT的外观: e

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

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

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

这可能就是您的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文件中,您可以定义
my_array\t
类型的
localparam
,并将其用于实例化:

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
仍然抱怨泛型无效。不过,这个答案应该可以帮助您开始(例如,在文档中搜索什么)。也可以试着用这个案例来指导图形支持。

提及您使用的模拟器。我使用的是Modelsim 10。1c@Alessandro我已经用QuestaSim的一些提示更新了我的答案,但不幸的是,我无法让它100%工作。不过,这会对你有所帮助。
module top;
  localparam my_types_pkg::my_array_t my_array = '{ 1, 2, 3 };

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