vhdl - 将多维 systemverilog 端口连接到 vhdl 模块

标签 vhdl verilog system-verilog

我正在尝试在 vhdl 顶层模块中实例化一个 systemverilog 模块。 systemverilog模块使用二维压缩数组“channel_addr_i”(A packed array of 3 addresses each consists of 3 bits)

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 模块中的端口类型之外,有人可以建议另一种替代方法吗?

最佳答案

感谢 Martin 的评论。您的问题可以通过以下方式解决:

type two_dim_array is array (natural range <>, natural range <>) of std_logic;

我声明并分配成功。抱歉我的愚蠢回答:(


旧答案

在这种情况下,我认为 System-verilog 与 VHDL 不兼容,因为旧的 VHDL 并不真正支持多维数组。但是,你应该试试这个(我还没有试过,因为我们的实验室使用非常旧的 modelsim):

将您的设置更改为 VHDL 2008 然后您可以声明类型

type two_dim_array is array (natural range <>) of std_logic_vector;

然后再试一次。

但是,最好的情况是将您的 system-verilog 扩展为具有扩展数组的包装器。

P/S: 上次尝试system-verilog项目,多维数组在综合工具中自动扩展为一维数组。但是,仿真工具可能不允许这样做。祝你好运!

关于vhdl - 将多维 systemverilog 端口连接到 vhdl 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20608978/

相关文章:

algorithm - 用固定常数执行整数硬件除法的最快方法是什么?

system-verilog - 将 systemverilog 包导入为另一个名称

compiler-errors - VHDL- "Net pwr is constantly driven"

"header"文件的 VHDL 标准布局和语法

verilog - 如何使用 Verilog 宏模拟 $display?

verilog - EDAplayground 中不显示时钟波形

verilog - 启用的模拟行为

system-verilog - 如何创建具有随机大小的不同随机值的动态数组?

vhdl - 如何使用 GHDL 运行具有特定架构的 VHDL 测试平台?

warnings - VHDL综合警告FF/Latch的常量值为0