Verilog, ¿Se interpreta esta afirmación como espero?

0

Tengo un diseño verilog donde hay esta línea:

assign rb = (r == 0) ? 0 : (r == 01) ? g & t : (r == 10) ? g : g|t;

g,t son valores de 1 bit, r es un valor de dos bits y rb es 1 bit.

No soy un gran experto en verilog, pero me preguntaba si esa línea es equivalente a

assign rb = (r == 2'b00) ? 0 : (r == 2'b01) ? g & t : (r == 2'b10) ? g : g|t;

¿Lo es? Si sí es el segundo mejor que el primero? Vale la pena señalar que el código se compila en el primer caso, y la salida de todo el diseño produce lo que espero.

    
pregunta user8469759

2 respuestas

1

El estándar Verilog define que un número sin una base es siempre un número entero. Teniendo esto en cuenta, su tercera comparación está verificando si r es "diez" y no "dos" como en el segundo ejemplo. Para hacer que los simuladores Verilog interpreten los valores como binarios, siempre deberá incluir su base 'b .

Si su diseño funciona de la misma manera en ambos ejemplos, entonces solo puedo asumir que r nunca se establece en 2'b10. De lo contrario, tendrías diferentes comportamientos.

    
respondido por el Vitor
1

La primera línea está haciendo comparaciones de rb con números decimales 0 , 1 y 10 , que son equivalentes a 'b00 , 'b01 y 'b1010 en binario. En el tercer caso, como el ancho no coincide en los dos lados del operador de comparación, llenado a cero se produce antes de la comparación, por lo que se agregarán dos ceros a r a la izquierda, por lo que la igualdad nunca será verdadera.

No hace falta decir que la segunda línea está haciendo una cosa diferente (pero probablemente la correcta)

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas