Estoy escribiendo algo de verilog y simulándolo usando modelsim. Tengo un bloque que se parece a esto:
if(wr_req & !cam_busy & !lookup_latched & !cam_match_found & !cam_match_found_d1) begin
cam_we <= 1;
cam_wr_addr <= wr_addr;
cam_din <= wr_cmp_data ;
cam_data_mask <= wr_cmp_dmask;
wr_ack <= 1;
lut_wr_data <= wr_data;
end
lookup_latched
está en alta impedancia. cam_match_found
y cam_match_found_d1
ambos están en estados de indiferencia.
Me parece que la declaración debería simplemente ignorar esas señales.
El único problema que noté fue que las señales estaban siendo andadas bit a bit en lugar de andadas lógicamente (no escribí el código). ¿Afectará esto al resultado? (Me imagino que lo hará)
¡Gracias!
Su código no funcionará.
En verilog, una 'z' en la entrada de una puerta se transforma en una 'x' en la salida de la puerta. Una 'x' en la entrada de la puerta también se traduce en una 'x' en la salida de la puerta.
Por lo tanto, su código se reduce aif(wr_req & !cam_busy & X & X & X)
El valor de (something & X)
puede ser 0 o X, y en ambos casos la declaración if se evaluará como falsa ( if(X)
es lo mismo que if(0)
).
El único problema que noté fue que las señales estaban siendo andadas bit a bit en lugar de andadas lógicamente (no escribí el código). ¿Afectará esto al resultado? (Me imagino que lo hará)
Si todas son señales de 1 bit, el AND lógico (&&) es el mismo resultado que el AND (&) a nivel de bits.
Cáustico
Cáustico
8'hXF && 8'hFF
? Supongo que esto se evalúa como verdadero ya que hay bits distintos de cero en el primer operando. ¿Es esto correcto?Tim
true
fines de operación lógica, pero probablemente no sea una buena idea usar valores de varios bits en una operación lógica (probablemente dará advertencias de pelusa o síntesis).