該特定語法稱爲索引部分選擇。當您需要從多位寄存器中的變量偏移量中選擇固定數量的位時,它非常有用。
下面是語法的例子:
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];
我想你想在第二個例子中用'select'替換'i'。 – nguthrie