2 回答

TA貢獻2080條經(jīng)驗 獲得超4個贊
該特定語法稱為索引部分選擇。當(dāng)您需要從多位寄存器中的可變偏移量中選擇固定數(shù)量的位時,此功能非常有用。
這是語法示例:
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]
這種語法的最大優(yōu)點是可以為索引使用變量。在Verilog中選擇正常部分需要常量。因此,dword[i+7:i]不允許嘗試類似的方法。
因此,如果要使用變量選擇來選擇特定字節(jié),則可以使用索引部分選擇。
使用變量的示例:
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];

TA貢獻1890條經(jīng)驗 獲得超9個贊
該運算符的用途是當(dāng)您需要訪問總線的一部分時,MSB位置和LSB位置都是變量,但是切片的寬度是一個常量值,如以下示例所示:
bit[7:0] bus_in = 8'hAA;
int lsb = 3;
int msb = lsb+3; // Setting msb=6, for out bus of 4 bits
bit[3:0] bus_out_bad = bus_in[msb:lsb]; // ILLEGAL - both boundaries are variables
bit[3:0] bus_out_ok = bus_in[lsb+:3]; // Good - only one variable
添加回答
舉報