Verilog中将此运算符称为“ +:”的含义


14

我正在通过verilog测试用例,发现有一条语句

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

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

Answers:


22

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

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

2

最后,我得到了它的源页面,这称为索引矢量部分选择(“ +:”)

多说明一点

PQR_AR[44*8 +: 64];

通过在Verilog 2000中添加的索引矢量部分选择,您可以选择总线的一部分,而不是整个总线。

44 * 8 part是零件选择变量的起点,而64是零件选择的宽度并且是常数。这意味着如果最初我们已经初始化

input [415:0] PQR;

我们正在使用选择PQR的特定部分

PQR_AR[44*8 +: 64];

即PQR_AR [352+:64]或它意味着我们正在从352到415的一部分(从0到415)。


从LRM得出的dwikle答案中,当我们初始化总线时,如下所示:input [415:0] PQR; 然后,PQR_AR [44 * 8 +:64]应该是PQR_AR [352:288],而不是PQR_AR [415:352]。如果我走错了方向,请指正我。
ABX 2015年

@ABX我同意这个方向,只不过它应该是PQR_AR [352:289]是64位宽的总线
peterbc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.