Realización de demux en hardware

0

Siguiendo el post anterior Salida de la puerta XOR con entrada de alta impedancia

Me interesa más cómo la lógica de cuatro valores de SystemVerilog se implementa eventualmente en el hardware.

¿Podría alguien corregir / confirmar mis próximas observaciones ?

Considera

assign LED = (select) ? value1 : value2;
  • Observación 1:

      select ? value1 : value2
    

    en lógica de cuatro valores no es equivalente a

      (select & value1) | (!select & value2)
    

    Cuando

    select = u; value1 = 1; value2 = 1; 
    

    durante la simulación y en el hardware el valor del LED será uno, mientras que

    (u & 1) | (!u & 1) = u | !u = u | u = u;
    

    ( nota, en SystemVerilog el valor indefinido u se representa como x )

    ¿Cuál es la semántica de (a? b: c) expresión? ¿Qué pasa con la semántica de caso y si declaraciones ?

  • Observación 2:

    El valor X después de la síntesis se inicializa a 0 por defecto. Por ejemplo:

    select = x; value1 = 0; value2 = 1;
    

    enciende el LED, mientras que

    select = x; value1 = 1; value2 = 0;
    

    mantiene el LED apagado.

    Si el hardware x es 0 por defecto, ¿por qué se requiere un valor extra durante la simulación? ¿No sería suficiente tener 0, 1 yz?

  • Observación 3:

    El comportamiento del hardware cuando

    select = z 
    

    es super-raro En este caso, el LED está encendido si y solo si

    value1 = 1; value2 = 1;
    

    ¿Qué está pasando en este caso (c.f. observación 2)?

pregunta mercury0114

1 respuesta

0

El valor X solo existe en la simulación o como una entrada para la síntesis, no existe en el hardware.

En un sistema algebraico puro, a cada valor desconocido se le asignará un nombre de variable único, como \ $ x \ $, \ $ y \ $ y \ $ z \ $ o \ $ X_ {1} \ $, \ $ X_ {2} \ $, y \ $ X_ {3} \ $. Una evaluación simbólica o formal sería \ $ x |! X \ equiv 1 \ $. Sin embargo, la simulación Verilog utiliza un único valor \ $ x \ $ que representa todas incógnitas. Entonces el valor \ $ (x) |! Valor (x) = valor (x) \ $. De hecho, cualquier operación binaria devolverá un valor de x .

El operador condicional de Verilog \ $ select? value_ {1}: value_ {2} \ $ es menos pesimista en la simulación. Cuando \ $ select \ equiv x \ $, evalúa \ $ value_ {1} \ equiv value_ {2} \ $ y devuelve cualquiera de los dos valores cuando son iguales.

Las declaraciones de bifurcación en Verilog como si son demasiado optimistas en la simulación. Una expresión que se evalúa como un valor X se considera falsa y toma la rama falsa.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas