declaración de caso sin siempre

1

¿Puedo tener una declaración de caso sin un siempre bloque como una línea si la condición no necesita una función siempre?

assign WORD_OUT = (SELECT_BIT_IN) ? WORD_IN1 : WORD_IN2;    

pero si intento esto,

assign WORD_OUT = case (SELECT_BIT_IN)
    4'd0 : WORD_IN0;
    4'd1 : WORD_IN1;

o esto

case (SELECT_BIT_IN)
    1'd0 : assign WORD_OUT = WORD_IN0;
    1'd1 : assign WORD_OUT = WORD_IN1;

Me da un error.

Estoy tratando de evitar el uso de registros.

    
pregunta Ashutosh Jain

1 respuesta

4

No puedes. Una declaración de caso siempre debe estar en un bloque always o initial .

Tienes dos opciones si no quieres usar condicionales ternarios. El primero es usar un bloque siempre que no tenga sensibilidad al borde como se muestra a continuación. Esto no no deduce registros (eso no es lo que declara la señal de reg type), infiere un multiplexor con asignación constante, ya que no hay reloj, por lo que no hay registro, * simplemente significa cualquier cambio de entrada.

reg WORD_OUT;

always @ * begin
    case (SELECT_BIT_IN)
    ...
    WORD_OUT = WORD_IN0;
    ...
    endcase
end

Alternativamente, infiera específicamente una ROM o multiplexor dependiendo de cuáles sean sus señales de entrada (posiblemente ejemplifique un módulo de uno). Si las entradas son constantes (como parámetros), entonces su caso simplemente infiere una ROM. Si las entradas son redes, entonces su código infiere un multiplexor.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas