马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
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,都是经过了寄存器,而输出的时序差别这么大呢???
研究了好长时间,老是想不通为什么 |