我的问题是我在VHDL实体中有一个int_array泛型,我想从我的SV tb设置它。哪个是正确的SV数据类型呢?我尝试了几种可能性,但其中没有一种是正确的。 提前谢谢。
答案 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支持。