El retardo de la intraasignación Verilog no parece funcionar como yo quería. Estoy intentando modelar una puerta OR con un retardo de salida de 2 NS.
Diseño:
module or_gate(input a, b, output logic g);
always@(*) begin
g = #2 a | b;
end
endmodule
Banco de pruebas:
module tb;
reg a, b;
wire g;
or_gate g1(.*);
initial begin
$dumpfile("dump.vcd");
$dumpvars(1, tb);
$display("\t\tTime\tA\tB\tG");
$monitor("%d\t%d\t%d\t%d", $time, a,b,g);
a = 1'b1;
b = 1'b1;
#5;
a = 1'b0;
b = 1'b0;
#1;
a = 1'b1;
b = 1'b1;
#7;
a = 1'b1;
b = 1'b0;
#3;
end
endmodule
Salida
Time A B G
0 1 1 x
2 1 1 1
5 0 0 1
6 1 1 1
7 1 1 0
13 1 0 0
15 1 0 1
Espero que la salida sea 1, 2 NS después de 7 NS, ya que las entradas son 1 y 1 a 7 NS. Sin embargo, de 9 NS a 15 NS la salida es 0. ¿Por qué ocurre esto?
Enlace EDA Playground de esta simulación: https://edaplayground.com/x/tsqY