Ta szczególna składnia nazywana jest częścią indeksowaną wybierz. Jest to bardzo przydatne, gdy trzeba wybrać stałą liczbę bitów ze zmiennego przesunięcia w rejestrze wielobitowym.
Oto przykład składni:
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]
Największą zaletą tej składni jest to, że można użyć zmiennej dla indeksu. Normalna część wybiera w Verilog wymagają stałych. Tak więc próba powyższego z czymś takim jak dword[i+7:i]
jest niedozwolona.
Jeśli chcesz wybrać konkretny bajt za pomocą zmiennej select, możesz użyć indeksowanej części select.
Przykład wykorzystania zmiennej:
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];
Myślę, że chcesz zamienić 'i' na' select' w twoim drugim przykładzie. – nguthrie