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)?