3 votos

¿Qué significa "+:" en Verilog?

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

Actualización:

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

Tengo una duda, ¿es esto sintetizable?

14voto

Desde https://stackoverflow.com/a/18068296/1544337 :

La descripción y los ejemplos se encuentran en Norma IEEE 1800-2012 § 11.5.1 "Direccionamiento vectorial de selección de bits y selección de partes". La primera aparición de IEEE es IEEE 1364-2001 (Verilog) § 4.2.1 "Vector bit-select and part-select addressing". 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 el índice inicial. El número de la derecha es el ancho y debe ser una constante positiva. el + y - indica que se seleccionen los bits de un valor de índice mayor o menor que el índice inicial.

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

A menudo es útil buscar los nombres completos de los operadores. Encontré esto buscando 'verilog más colon operador".

Ver también https://stackoverflow.com/a/17779414/1544337 que está vinculado a la pregunta citada.

1voto

Peter Green Puntos 1888

Actualización:

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

Tengo una duda, ¿es esto sintetizable?

Al menos en la versión de quartus que yo uso si i es una señal entonces no se sintetiza. Esto lo descubrí por las malas. Se queja de que la indexación no es constante a pesar de que el ancho es constante y el hecho de que es bastante feliz de realizar una selección de un solo bit con un índice variable.

Esto me resulta muy molesto, ya que si la herramienta lo permitiera, sería una herramienta útil para extraer subpalabras de palabras más grandes.

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X