如我所知,D觸發器在時鐘的每個正沿 處對其輸入值進行採樣。爲什麼我的D觸發器不等待時鐘的正邊緣?
因此,它會產生1個週期的延遲。對?
但是,爲什麼我的D觸發器不會產生1個週期的延遲?
module flipflop(
input clk,
input rstn,
input [7:0] i_data,
output reg [7:0] o_data
);
always @(posedge clk) begin
if (~rstn) begin
o_data <= 0;
end
else begin
o_data <= i_data;
end
end
endmodule
module test;
reg clk;
reg [7:0] i_data;
reg rstn;
wire [7:0] o_data;
initial begin
clk = 0;
rstn = 1;
i_data = 0;
#20;
rstn = 0;
#30;
rstn = 1;
#20;
i_data = 8'hFA;
#20;
i_data = 8'hF0;
#20
i_data = 8'hF1;
#20
#10 $finish;
end
always #10 clk = !clk;
flipflop flipflop(
.clk (clk),
.rstn(rstn),
.i_data(i_data),
.o_data(o_data)
);
initial begin
$dumpfile("flipflop.vcd");
$dumpvars();
end
endmodule
我的d觸發器的功能,如在這裏組合電路。
這是闡明問題的好方法。 – Marty 2012-07-26 21:39:15