【问题标题】:Systemverilog Generate mailboxesSystemverilog 生成邮箱
【发布时间】:2017-07-17 12:16:38
【问题描述】:

如何生成多个邮箱,例如使用 generate endgenerate 以及我如何为他们将数据放入其中。

我试过了

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

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

test[4].put(input);

但它不起作用

有什么想法吗??

【问题讨论】:

    标签: fpga system-verilog modelsim


    【解决方案1】:

    每当您使用 generate-for 循环时,您都需要为块命名,并且块名称会扩展为编号的块。生成

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

    那你可以参考block_a[0].test,block_a[1].test,.etc.

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

    您可以简单地声明邮箱的常规进位。

    mailbox #(int) test[10];
    
    initial begin
         foreach(mailbox[ii]) mailbox[ii] = new;
    

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

    【讨论】:

      【解决方案2】:

      这里是每个有需要的人的解决方案:

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

      【讨论】:

        猜你喜欢
        • 2015-05-29
        • 2021-08-04
        • 1970-01-01
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        相关资源
        最近更新 更多