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

2

Estoy escribiendo un cierto 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 se encuentran en estados de "no importa".

Me parece que la declaración debería ignorar esas señales.

El único problema que noté fue que las señales eran de bit a bit y no lógicamente (no escribí el código). ¿Tendrá esto un efecto en el resultado? (Me lo imagino)

¡Gracias!

    
pregunta Caustic

1 respuesta

3

Tu 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 a if(wr_req & !cam_busy & X & X & X)

El valor de (something & X) puede ser 0 o X, y en ambos casos la instrucción if se evaluará como falsa ( if(X) es lo mismo que if(0) ).

  

El único problema que noté fue que las señales eran de bit a bit y no lógicamente (no escribí el código). ¿Tendrá esto un efecto en el resultado? (Me lo imagino)

Si esas son todas señales de 1 bit, entonces AND lógico (& &) es el mismo resultado que AND (&) bit a bit.

    
respondido por el Tim

Lea otras preguntas en las etiquetas