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].test
, block_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
如何生成多个邮箱,例如使用 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].test
, block_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