如何生成许多邮箱,例如生成endgenerate 以及如何将数据放入其中。Systemverilog生成邮箱
我试着做
generate
for (genvar i=0; i<10; i++) begin
mailbox test = new();
end
endgenerate
并创建10个邮箱 后来我不知道如何把数据给他们一个 我会想象像
test[4].put(input);
但不工作
任何想法??
如何生成许多邮箱,例如生成endgenerate 以及如何将数据放入其中。Systemverilog生成邮箱
我试着做
generate
for (genvar i=0; i<10; i++) begin
mailbox test = new();
end
endgenerate
并创建10个邮箱 后来我不知道如何把数据给他们一个 我会想象像
test[4].put(input);
但不工作
任何想法??
无论何时您使用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;
我还建议您根据您将投入的消息类型来参数化您的邮箱。
感谢您的回答! –
得益于建议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
您指定的邮箱'test'。也许你应该使用你给它的名字:'test [4] .put(input);' – toolic
是啊对不起,我想写测试[4] .put(input); 但它不工作 –
也许你需要在生成块之外声明邮箱数组:'邮箱测试[10];' – toolic