module ff(
clk,
rst,
in,
out
);
input clk;
input rst;
input in;
output out;
reg out;
reg in_pre;
always @(posedge clk)
begin
if (rst)
begin
in_pre <= 1'b0;
out <= 1'b0;
end
else
begin
in_pre <= in;
out <= in_pre;
end
end
endmodule
图一 ff综合后为两级D寄存器
module ff_tb1;
reg clk;
reg rst;
reg in;
wire out;
initial
begin
clk = 0;
rst = 1;
#12 rst = 0;
end
always #5 clk = ~clk;
always @(posedge clk)
begin
if(rst)
in = 0;
else
in = $random;
end
ff ff_inst(.clk(clk),.rst(rst),.in(in),.out(out));
endmodule
图二 ff_tb1仿真波形
查看波形发现信号in和in_pre好像是由两个网线连接的信号,而in_pre和out才像是经过了寄存器。一般寄存器的采样在时钟前delta时间,而赋值在时钟后delta时间。
为什么in和in_pre,都是经过了寄存器,而输出的时序差别这么大呢???
研究了好长时间,老是想不通为什么
|