Digamos que tenemos una función, tan simple como f(x) = x
. Supongamos que tenemos un reloj que marca cada 20 nanosegundos y decimos que cambiamos x
como deseemos.
Diga que hay una marca de reloj por venir, en t = 20ns
exactamente (lo que sea que signifique) Digamos que x
había sido 0 desde el t = 0ns
desde entonces, y de alguna manera cambiamos el x
en 1 nuevamente exactamente t = 20ns
.
Ahora describe este escenario en Verilog. La pregunta es, ¿qué sería f
en t = 21ns
?
Aquí están los códigos Verilog que había escrito, junto con la captura de pantalla de la ventana de simulación de Xilinx ISim.
El circuit.v
module circuit(f, x, clk, rst);
output f;
input x, clk, rst;
wire d, q;
d_flip_flop flipper (q, d, clk, rst);
assign f = q;
assign d = x;
endmodule
El d_flip_flop.v
module d_flip_flop(q, d, clk, rst);
output reg q;
input d, clk, rst;
always @(posedge clk, posedge rst)
begin
if (rst)
q <= 1'b0;
else
q <= d;
end
endmodule
Y los pruebo con este tester.v
module tester;
reg x, clk, rst;
wire f;
circuit uut (f, x, clk, rst);
initial clk <= 0;
always #10 clk <= ~clk;
initial
begin
x <= 0;
rst <= 0;
rst <= #2 1;
rst <= #4 0;
#10 x <= 1;
end
endmodule
Y aquí está la forma de onda que obtengo:
¿Es este un comportamiento definido de Verilog para realizarlo? En caso afirmativo, ¿cómo decide qué es lo primero que debe aparecer en tales circunstancias?
Los asistentes me dijeron el curso que lo que realmente debería estar viendo es realmente lo opuesto, por supuesto, y debo estar haciendo algo mal si veo lo contrario. Me gustaría saber qué estoy haciendo mal, necesito ayuda, y no me brindan esta ayuda en particular. ¿Alguien aquí podría ayudar?