Verilog 中调用的“+:”运算符是什么?

电器工程 验证日志
2022-01-22 23:08:47

我正在通过一个 Verilog 测试用例,我发现了这个语句:

assign XYZ = PQR_AR[44*8 +: 64];

什么是“+:”运算符?我试图在谷歌上找到这个,但我没有得到任何相关的答案。

2个回答

该语法称为索引部分选择第一项是位偏移,第二项是宽度。它允许您为偏移量指定一个变量,但宽度必须是恒定的。

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 中进行部分。