その特定の構文は、インデックス付き部分 selectと呼ばれます。マルチビットレジスタ内の可変オフセットから固定ビット数を選択する必要がある場合に非常に便利です。
構文の例を次に示します。
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];