¿Qué se supone que sucede en Verilog si se asigna una señal de un ancho a otra señal de un ancho diferente?

2

Como en estos dos casos:

wire [3:0] A, B;
wire [4:0] C, D;

assign A = C;  // larger width to smaller width
assign D = B;  // smaller width to larger width

¿Cómo deberían ser A y D en términos de C y B respectivamente?

    
pregunta user2600959

1 respuesta

7

Las reglas de Verilog son:

  • si copia un valor más estrecho en un objetivo más amplio, es cero extendido (cero MSB agregados a la izquierda), o signo extendido en el objetivo. Si es cero o el signo extendido está determinado por la firmeza de la expresión del lado derecho.
  • si copia un valor más amplio en un objetivo más estrecho, se trunca (MSB eliminados a la izquierda).

Eso significa, en tu caso:

assign A = C[3:0];
assign D = { 1'b0, B };

Tenga en cuenta que la mayoría de las herramientas de síntesis emitirán una advertencia en estos casos. Y deberían hacerlo porque no está claro si estás haciendo las cosas correctamente.

    
respondido por el dim

Lea otras preguntas en las etiquetas