簡體   English   中英

Systemverilog 生成郵箱

[英]Systemverilog Generate mailboxes

我如何生成多個郵箱,例如使用 generate endgenerate 以及如何為它們將數據放入一個郵箱。

我試着做

generate 
for (genvar i=0; i<10; i++) begin
     mailbox test = new();
end
endgenerate

它創建了 10 個郵箱,但后來我不知道如何將數據放入其中一個我會想象像

test[4].put(input);

但它不起作用

有任何想法嗎??

每當您生成 for 循環時,您都需要為塊命名,並且它是擴展為編號塊的塊名稱。 產生

for (genvar I=0; I<10; i++) begin : block_A
     mailbox test;
end : block_a
endgenerate

然后你可以參考block_a[0].testblock_a[1].test ,.etc。

但是您可能不想為此使用generate塊,因為您將不允許使用變量來索引塊,因為該塊不是常規數組。

您可以簡單地聲明一個定期攜帶的郵箱。

mailbox #(int) test[10];

initial begin
     foreach(mailbox[ii]) mailbox[ii] = new;

我還建議您根據要放入其中的消息類型來參數化您的郵箱。

這是每個有需要的人的解決方案:

// first make an array of mailboxes
mailbox slave_mailbox [TB_SLAVES];
int out;
initial begin 
    for (int i = 0; i < TB_SLAVES; i++) begin
        // then create the object for every mailbox
        slave_mailbox[i] = new();
    end
    // testing if it works
    slave_mailbox[0].try_put(1);
    slave_mailbox[0].try_get(out);
    $display("got %0d",out);
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM