Considere una expresión como:
assign x = func(A) ^ func(B);
donde la salida del func es de 32 bits de ancho y x es un cable de 16 bits. Quiero asignar solo los 16 bits más bajos del xor resultante.
Sé que el código anterior ya lo hace, pero también genera una advertencia. El enfoque "obvio" no funciona:
assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected
En su ejemplo, está truncando implícitamente los bits.
Hacer explícito el truncamiento a menudo puede eliminar las advertencias en simulación / pelusa / síntesis.
Una forma de hacer esto en línea es usar un operador de conversión, por ejemplo:
Este enfoque puede tener sentido si es obvio por el contexto que todos los bits que se descartan son ceros.
Si algunos de los bits pueden ser distintos de cero, entonces sugeriría seguir usando una red intermedia como @dwikle sugerido en una respuesta anterior , ya que deja más claro que en realidad está tirando bits. Aquí está nuevamente como referencia.
fuente
Creo que esto podría ayudar a mantener la cuenta regresiva de la línea.
Sin embargo, no estoy seguro de si eso es válido con las asignaciones.
fuente