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.
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.
Respostas:
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
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.