Como esse operador é chamado de "+:" no verilog

14

Estou passando pelo caso de teste Verilog e encontrei uma declaração

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

O que o operador "+:" é conhecido como. Tentei encontrar isso no google, mas não obtive nenhuma resposta relevante.

shailendra
fonte

Respostas:

22

Essa sintaxe é chamada de seleção de peça indexada . O primeiro termo é o deslocamento do bit e o segundo termo é a largura. Permite especificar uma variável para o deslocamento, mas a largura deve ser constante.

Exemplo do 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
dwikle
fonte
2

Por fim, obtive a página de origem para isso, isso é chamado como parte do vetor indexado Select ("+:") .

Para explicar um pouco mais

PQR_AR[44*8 +: 64];

Com a seleção de parte de vetor indexada, adicionada no Verilog 2000, você pode selecionar uma parte do barramento em vez de selecionar o barramento inteiro.

44 * 8 parte é o ponto inicial da variável de seleção de parte e 64 é a largura da seleção de parte e é constante. Isso significa que, se inicialmente inicializamos

input [415:0] PQR;

estamos selecionando uma parte específica do PQR usando

PQR_AR[44*8 +: 64];

isso é PQR_AR [352+: 64] ou significa que estamos participando de 352 a 415 de 0 a 415.

shailendra
fonte
Da resposta dwikle derivada do LRM, quando inicializamos um barramento como: input [415: 0] PQR; Então, PQR_AR [44 * 8 +: 64] deve ser PQR_AR [352: 288] e não PQR_AR [415: 352]. Por favor, corrija-me se estou indo na direção errada.
ABX
@ABX Concordo com a direção, exceto que PQR_AR [352: 289] deve ser um barramento de 64 bits de largura
peterbc