2014-12-02 145 views
1

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

+0

提及你使用的模拟器。 – 2014-12-02 21:49:33

回答

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; 

因为我们不得不有定义一个新的类型,奎斯塔要求我们的类型定义导入到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仍然抱怨通用无效。这个答案应该可以帮助你开始,但是(例如,在文档中搜索什么)。也可以尝试将这种情况提供给Mentor Graphics支持。

+0

我在Modelsim 10.1c – Alessandro 2014-12-03 07:52:01

+0

@Alessandro我已经用QuestaSim的一些提示更新了我的答案,但不幸的是我无法让它工作100%。不过,这应该对你有所帮助。 – 2014-12-03 10:09:01