我正在通过一个 Verilog 测试用例,我发现了这个语句:
assign XYZ = PQR_AR[44*8 +: 64];
什么是“+:”运算符?我试图在谷歌上找到这个,但我没有得到任何相关的答案。
我正在通过一个 Verilog 测试用例,我发现了这个语句:
assign XYZ = PQR_AR[44*8 +: 64];
什么是“+:”运算符?我试图在谷歌上找到这个,但我没有得到任何相关的答案。
该语法称为索引部分选择。第一项是位偏移,第二项是宽度。它允许您为偏移量指定一个变量,但宽度必须是恒定的。
SystemVerilog 2012 LRM 的示例:
logic [31: 0] a_vect;
logic [0 :31] b_vect;
logic [63: 0] dword;
integer sel;
a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]
dword[8*sel +: 8] // variable part-select with fixed width
最后我得到了这个的源页面,这被称为Indexed Vector part Select ("+:")。
再解释一下
PQR_AR[44*8 +: 64];
使用 Verilog 2000 中添加的索引矢量部分选择,您可以选择总线的一部分而不是选择整个总线。
44*8部分是部分选择变量的起点,64是部分选择的宽度并且是常数。这意味着如果最初我们已经初始化
input [415:0] PQR;
我们选择使用 PQR 的特定部分
PQR_AR[44*8 +: 64];
即 PQR_AR[352+:64] 或者这意味着我们正在从 0 到 415 中的 352 到 415 中进行部分。