FPGA是典型的数字系统,所有的动作都是在时钟节拍下运行的。如果说基本得D触发器,上升沿触发,带有一个同步复位端,那么输出端Q就在时钟上升沿到来时输出此时的输入端D的信号。那么如果说,在上升沿到来时,输入端D的信号刚好也在变化,信号翻转了,那么此时的输出Q会是时钟上升沿来之前的D的信号还是时钟上升沿来之后D的信号呢。
下面是为了验证假设所做的时序仿真。
源码:
module d(clk,rst,din,q);
input clk;
input rst;
input din;
output q;
reg q;
always@(posedge clk)
begin
if(!rst)
q<=1'b0;
else
q<=din;
end
endmodule
Testbench:
module d_tb;
reg clk;
reg rst;
reg din;
wire q;
initial
begin
clk=1'b0;
forever #20 clk=~clk;
end
initial
begin
rst=1'b1;
#10 rst=1'b0;
#20 rst=1'b1;
end
initial
begin
din=1'b0;
forever #20 din=~din;
end
d u1(.clk(clk),.rst(rst),.din(din),.q(q));
endmodule
下图为仿真波形:
从仿真波形中可以看出,如果在上升沿到来时,D端数据发生变化,则Q端将输出上升沿后的数据。
因为在FPGA中,信号或者说内部数据的变化都是在时钟边沿到来时发生的,所以对于本文中所说问题进行仿真是很有必要的。
用户1649855 2015-10-30 11:03
用户377235 2015-10-30 10:54
用户1842468 2015-10-30 10:46
用户377235 2015-10-30 10:45
用户1648711 2015-7-26 15:44