2017-07-17 12 views
-2

多くのメールボックスを生成するにはどうすればいいですか?たとえば、メールを生成するには を生成し、データを1つにする方法があります。Systemverilogメールボックスを生成する

私は

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

をやってみました、それは10個のメールボックス を作成しますが、その後、私は

test[4].put(input); 

のようなものを想像どのようにそれらの1 にデータを置くことを知りませんでしたが、それdoes not work

どのようなアイデア??

+0

あなたがメールボックス 'test'と名付けました。 'test [4] .put(input);' – toolic

+0

ええ、申し訳ありません、私はtest [4]を書きたいと思っています。 しかし、それは動作しません –

+0

あなたの生成ブロックの外にメールボックスの配列を宣言する必要があるかもしれません: 'メールボックスのテスト[10];' – toolic

答えて

2

generate-forループの場合は、ブロックに名前を付ける必要があります。ブロック名は番号付きブロックに展開されます。そして、あなたがblock_a[0].testblock_a[1].test、.etcを参照することができます

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

を生成します。

ブロックは通常の配列ではないため、ブロックにインデックスを付けるために変数を使用することはできませんので、generateブロックを使用しない方がいいでしょう。

メールボックスの通常のキャリーを宣言するだけです。

mailbox #(int) test[10]; 

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

メールボックスに入れるメッセージの種類によって、メールボックスをパラメータ化することをお勧めします。アドバイスtoolicへ

+0

ありがとう! –

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 
関連する問題