用SystemVerilog中的2D数组实例化VHDL实体



似乎很少有关于如何在VHDL和SystemVerilog之间传递2D数组的文档。我在VHDL中有以下类型的端口:

package my_package is
type my_array_t is array (natural range <>) of std_logic_vector(N-1 downto 0);
end my_package
entity my_entity is
port(
my_input  : in  my_array_t(M-1 downto 0);
my_output : out my_array_t(M-1 downto 0);
);
end entity;

和以下SystemVerilog信号:

wire [N-1:0] my_input_s[M-1:0];
wire [N-1:0] my_output_s[M-1:0];

我相信这两种类型是完全等价的。然而,我不能在彼此之间切换而不出错。从SystemVerilog实例化VHDL模块:

my_entity my_entity_inst(
.my_input(my_input_s),
.my_output(my_output_s)
);

我得到的错误是类型为'my_array_t'的正式端口'my_input'与实际类型'logic'">不匹配,类似于输出信号。我在SystemVerilog中尝试了不同的数组类型组合(完全打包,完全拆包),但都不起作用。请注意,在我的情况下,我没有改变VHDL声明的自由,我必须找到一种方法,使其仅从SystemVerilog工作。因此,这个问题帮不了我。

我如何以最直接的方式从SystemVerilog实例化我的VHDL模块?

要在Verilog或SV中成功实例化VHDL,请坚持VHDL中的基本类型(内置到原始VHDL中的类型,而不是自定义包),如std_logic和std_logic vector。

对于这种情况,你不能修改VHDL文件与自定义端口类型,我建议编写一个VHDL包装器(mydesign_wrapper.vhd),实例化使用自定义类型的实体,并将端口转换为std_logic和std_logic_vector类型,用于包装器设计的顶部/实体。在Verilog或SystemVerilog文件中实例化新的包装器文件。std_logic_vector数组将使用包装器表示为几个std_logic_vector端口。

在Verilog/SV中没有VHDL的标准,因此支持是有限的,并且在工具,供应商和版本之间有所不同。

最新更新