Systemverilog生成邮箱

时间:2017-07-17 12:16:39

标签: fpga system-verilog modelsim

如何生成多个邮箱,例如使用generate endgenerate 以及我如何为他们提供数据。

我试过

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

它创建了10个邮箱 但后来我不知道如何将数据放到其中一个 我会想象像

这样的东西
test[4].put(input);

但它不起作用

任何想法??

2 个答案:

答案 0 :(得分:2)

每当你生成一个for循环时,你需要命名该块,它是块名称,它被扩展为编号的块。生成

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

然后,您可以参考block_a[0].testblock_a[1].test,。等。

但是您可能不希望使用generate块,因为您不允许使用变量来索引块,因为块不是常规数组。

您可以简单地声明一个常规邮箱。

mailbox #(int) test[10];

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

我还建议您根据要投入的邮件类型对邮箱进行参数化。

答案 1 :(得分:0)

感谢工具师给我的建议,这里是每个有需要的人的解决方案:

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