我想实例化一个vhdl顶层模块内的systemverilog模块。 SystemVerilog的模块使用一个2维压缩数组“channel_addr_i”(3个地址的封装阵列的每个包括3个比特)将多维systemverilog端口连接到vhdl模块
SystemVerilog的模块声明:
`define N_PORTS 3
`define N_CHANNELS 4
module pwr_ctrl(
input logic clk, rst_n,
input logic [`N_PORTS-1 : 0] [2 : 0] channel_addr_i,
input logic [`N_CHANNELS-1 : 0] transaction_complete_i,
output logic [`N_CHANNELS-1 : 0] sleep
);
我必须实例上述模块作为顶层vhdl模块中的一个组件,并将来自3个不同输入端口(每个地址由3个位组成的总共9位)的地址传递给systemverilog组件。
VHDL实例:
signal ch_addr : std_logic_vector(8 downto 0);
component pwr_ctrl is
port(
clk : in std_logic;
rst_n : in std_logic;
channel_addr_i : in std_logic_vector(8 downto 0); --CONSIDERING 3 INPUT PORTS
transaction_complete_i : in std_logic_vector(3 downto 0); -- CONSIDERING 4 CHANNELS
sleep : out std_logic_vector(3 downto 0)
);
ch_addr <= axi_addr(31 downto 29) & axi1_addr_n(31 downto 29) & addr_ahb(31 downto 29);
power_ctrl : pwr_ctrl
port map(
clk => aclk,
rst_n => aresetn,
channel_addr_i => ch_addr,
transaction_complete_i => transaction_complete_i,
sleep => sleep
);
end component;
但是用modelsim给出了这样的错误: **错误:(VSIM-8428)不能一个VHDL阵列信号连接到的Verilog多维阵列端口 'channel_addr_i'。
除了改变systemverilog模块中的端口类型,任何人都可以提出另一种选择吗?
[VHDL确实支持二维数组](http://parallelpoints.com/reading-image-files-with-vhdl-part-1-again/):'类型twod是数组(自然范围<>,自然范围<>)std_logic;' –
@MartinThompson:非常感谢,我真的忘了它:( – Khanh
没问题,对于尖锐的评论道歉,它本意是“简单而翔实”,但出来了一点“突然”! –