¿Qué significa "+:" en Verilog?

3

Cuando estaba mirando el código de Verilog de alguien, encontré "+:" en Verilog. Parece una función aritmética pero no estoy seguro. Nunca he visto antes. ¿Alguien sabe este uso?

Actualización:

csum= csum + one_cnt[i* ('DPC_shift +1) +: ('DPC_shift +1)];

Tengo una consulta, ¿esto es sintetizable?

    
pregunta Carter

2 respuestas

11

De enlace :

  

La descripción y los ejemplos se pueden encontrar en IEEE Std 1800-2012 § 11.5. 1 "Direccionamiento de bits de selección de vectores y selección de partes". La primera aparición de IEEE es IEEE 1364-2001 (Verilog) § 4.2.1 "Direccionamiento de bits y selección de bits de vector". Aquí hay un ejemplo directo del 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
  
     

Si sel es 0, entonces dword[8*(0) +: 8] == dword[7:0]
  Si sel es 7, entonces dword[8*(7) +: 8] == dword[63:56]

     

El valor a la izquierda siempre es el índice inicial. El número a la derecha es el ancho y debe ser una constante positiva. + y - indican que se seleccionen los bits de un valor de índice más alto o más bajo y luego el índice de inicio.

     

Suponiendo que address está en formato little endian ([msb: lsb]), entonces if(address[2*pointer+:2]) es el equivalente de if({address[2*pointer+1],address[2*pointer]})

A menudo es útil buscar nombres completos de operadores. Encontré esta búsqueda del operador 'verilog más dos puntos '.

También vea enlace , que está vinculado a la pregunta citada.

    
respondido por el Keelan
1
  

Actualización:

     

csum = csum + one_cnt [i * ('DPC_shift +1) +: (' DPC_shift +1)];

     

Tengo una consulta, ¿esto es sintetizable?

Al menos en la versión de quartus que uso si i es una señal, no se sintetizará. Descubrí esto por el camino difícil. Se queja de que la indexación no es constante a pesar del hecho de que el ancho es constante y del hecho de estar contento de realizar una selección de un solo bit con un índice variable.

Me parece muy molesto, ya que si la herramienta lo apoyara, sería una herramienta útil para extraer palabras secundarias de palabras más grandes.

No he probado con otras herramientas o con i como contador de bucles.

    
respondido por el Peter Green

Lea otras preguntas en las etiquetas