¿Cómo truncar los bits menos significativos en una asignación de Verilog?

1

Tengo un registro de alrededor de 120 bits, donde los datos se cambian primero en lsb, en algún momento quiero asignarlos a registros más pequeños, pero en lugar de truncar los bits más significativos, me gustaría truncar los bits menos significativos. En esencia, quiero mantener los n bits más significativos de un registro.

La forma actual en que lo estoy haciendo es para cada registro asignado desde el índice MSB del registro grande para un ancho de ancho de registro como:

rSmall1 <= rBig[BIG_REG_MSB_INDEX -: RSMALL1_WIDTH];
rSmall2 <= rBig[BIG_REG_MSB_INDEX -: RSMALL2_WIDTH];
[...]
rSmalln <= rBig[BIG_REG_MSB_INDEX -: RSMALLn_WIDTH];

Mientras funciona, se desordena bastante rápido, así que, ¿hay una forma más sencilla de realizar esta misma operación para cualquier ancho de rSmalln?

    
pregunta NeonMan

1 respuesta

2

No hay una manera más fácil de hacer esto en Verilog. Un cambio lógico a la derecha requiere parámetros de ancho similares.

Esto sería más fácil usando el operador de transmisión de SystemVerilog que deja las tareas justificadas.

bit [BIG_REG_MSB_INDEX:0] filler;

{{>>{rSmall1,Filler}} <= rBig;
{{>>{rSmall2,Filler}} <= rBig;
    
respondido por el dave_59

Lea otras preguntas en las etiquetas