2015-11-19 58 views
0

我有一個較低級別的模塊,實現一個接口數組。在更高的層次上,我想分解該接口數組並將其分配給各個端口(代碼僅僅是一個示例......不需要特殊的功能)。Systemverilog突破接口陣列

// -------- INTERFACE -------- 
interface my_if; 
    logic d; 
endinterface 

// -------- INTERMEDIATE MODULE -------- 
module intermediate(
    my_if i1, 
    my_if i2 
    ); 

    sub mySub(
     .a ('{i1,i2}), 
     .w1 (1'b1) 
    ); 
endmodule 

// -------- SUB MODULE -------- 
module sub(
    my_if   a[2], 
    input wire w1 
    ); 

    assign a[0].d = w1; 
    assign a[1].d = ~w1; 
endmodule 

上面的代碼給我一個錯誤:

The interface port 'a' of module 'sub' whose type is interface 'my_if' is illegally connected. 

兩個問題:

  1. 我怎麼能實現以上?
  2. 如何將接口分配給另一個相同類型的接口?即在上面的代碼中,我嘗試將數組接口分配並混淆到中間接口(別名i1 = ii [0])。 。 。但我無法弄清楚如何做到這一點。

回答

1

這在SystemVerilog中是不允許的。接口存在一個真正的問題,那就是你無法從一組其他接口組成一個接口。

唯一的解決方法是使用assign語句將單個接口端口中的信號連接到接口信號陣列中的信號。

你會更好的不使用接口,也許使用結構代替。

+0

我不確定我在追隨。 。 。我不想從其他接口集合中構建一個接口。我只是試圖從一組接口分配一個單獨的接口到一個模塊端口。我做了一些類似的事情,從一個接口數組的接口到一個接口的多個實例(只是給它們分配一個[0],一個[1]等)。我遇到的問題是將數組中的一個完整接口分配給模塊的單個接口端口。 – user4061565

+0

您正在撰寫。您正嘗試將較高模塊級別的各個接口實例組合在一起,以形成較低級別接口數組的單個實例。您嘗試使用的語法是串聯 - 這是一個組合運算符。沒有像接口那樣的東西。 –

+0

哇。 。 。謝謝 。 。 。這似乎是一個相當大的疏忽,降低了接口的用處。實際上似乎有兩個主要項目缺乏:(1)將接口組合成數組的方式(可以分解一組接口,但不能反過來); (2)將接口分配給相同類型的另一個接口,並可能是相反的端口,以將它們連接在一起(軼事將是延長線)。 – user4061565