En verilog, ¿qué efecto tiene el operador no (!) en condiciones de alta impedancia y no importa?

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_latchedestá en alta impedancia. cam_match_foundy cam_match_found_d1ambos 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!

Respuestas (1)

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.

¡Ah gracias! Me lo imaginé. No estaba forzando una señal de que debería haber estado en la entrada. Todavía no estaba seguro del comportamiento.
Además, las señales de 1 bit tienen sentido para lo lógico frente a lo bit y, por ejemplo, ¿cuál sería el comportamiento 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?
Creo que 8'hXF se reducirá a truefines 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).