この特定の構文は、インデックス付き部分選択と呼ばれます。これは、マルチビットレジスタ内の可変オフセットから固定数のビットを選択する必要がある場合に非常に便利です。ここで
は、構文の例です:
reg [31:0] dword;
reg [7:0] byte0;
reg [7:0] byte1;
reg [7:0] byte2;
reg [7:0] byte3;
assign byte0 = dword[0 +: 8]; // Same as dword[7:0]
assign byte1 = dword[8 +: 8]; // Same as dword[15:8]
assign byte2 = dword[16 +: 8]; // Same as dword[23:16]
assign byte3 = dword[24 +: 8]; // Same as dword[31:24]
この構文を持つ最大の利点は、あなたがインデックスに変数を使用することができるということです。 Verilogで通常の部品選択には定数が必要です。だから、dword[i+7:i]
のようなもので上記を試みることはできません。
可変選択を使用して特定のバイトを選択する場合は、インデックス付きの部分選択を使用できます。変数を使用して
例:あなたはバスのスライスにアクセスする必要がある場合、この作業の目的は
reg [31:0] dword;
reg [7:0] byte;
reg [1:0] i;
// This is illegal due to the variable i, even though the width is always 8 bits
assign byte = dword[(i*8)+7 : i*8]; // ** Not allowed!
// Use the indexed part select
assign byte = dword[i*8 +: 8];
2番目の例で 'i'を' select'に置き換えたいと思います。 – nguthrie