2013-12-16 61 views
3

我想實例化一個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模塊中的端口類型,任何人都可以提出另一種選擇嗎?

回答

2

感謝馬丁的評論。你的問題可以通過使用來解決:

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

我宣佈,成功地分配。對不起我的愚蠢的答案:(


OLD ANSWER

我不認爲系統Verilog的是在這種情況下VHDL兼容,因爲老VHDL沒有真正支持多維數組,但是,你應該試試這個一個(我還沒有嘗試過,因爲我們的實驗室中使用很老的ModelSim):

更改設置到2008 VHDL,那麼你可以聲明式

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

然後再試一次。

但是,最好的情況是擴展你的系統 - verilog擴展數組包裝。

P/S:上一次我嘗試使用system-verilog項目時,多維數組在自動合成工具中被自動擴展爲1維數組。但是,仿真工具可能不允許。祝你好運!

+2

[VHDL確實支持二維數組](http://parallelpoints.com/reading-image-files-with-vhdl-part-1-again/):'類型twod是數組(自然範圍<>,自然範圍<>)std_logic;' –

+0

@MartinThompson:非常感謝,我真的忘了它:( – Khanh

+0

沒問題,對於尖銳的評論道歉,它本意是「簡單而翔實」,但出來了一點「突然」! –