2017-07-17 77 views
-2

如何生成许多邮箱,例如生成endgenerate 以及如何将数据放入其中。Systemverilog生成邮箱

我试着做

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

并创建10个邮箱 后来我不知道如何把数据给他们一个 我会想象像

test[4].put(input); 

但不工作

任何想法??

+0

您指定的邮箱'test'。也许你应该使用你给它的名字:'test [4] .put(input);' – toolic

+0

是啊对不起,我想写测试[4] .put(input); 但它不工作 –

+0

也许你需要在生成块之外声明邮箱数组:'邮箱测试[10];' – toolic

回答

2

无论何时您使用generate-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; 

我还建议您根据您将投入的消息类型来参数化您的邮箱。

+0

感谢您的回答! –

0

得益于建议toolic给我,这里是需要大家解决方案:

// 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