程序:
module time_delay_reg(in,
clk ,reset ,out
);
input[11:0] in;
input clk,reset;
output[11:0] out;
reg[11:0] out;
always@(posedge clk)
if(reset)
out<=12'b0;
else
out<=in;
endmodule
用这个程序仿真出现的结果竟然不对,输入的12位数据是随机产生的,仿真结果的截图放在附件了。
本人新手,求高人解答。
此帖出自
小平头技术问答
我用最简单的方式回答一下吧。
下面是2个DFF的串联,假设A的初值是1,B的初值是0
假设DFF都是上升沿触发的,
由于1.DFF是沿触发 2.DFF是需要一定的响应时间 3.FPGA中clock tree可以保证在其中的所有DFF的时钟上升沿同时到达。
所以得出结论:当第一个时钟上升沿来临时,此时A从1=》0,B从0=》1
当第二个时钟升沿来临时,此时A保持0,B从1=》0.
目前你可以简单理解为:在第一个时钟上升沿来临时,A还没有来得及改变,所以B看到的是1,而且是一个“稳定”的1.
这里要注意,A是FPGA内部的信号,它是与时钟同步,而且一定是延迟与时钟上升沿的(原因如上)
你的问题在于,将A从FPGA内部拿到了FPGA外部,无法保证A是在时钟上升沿后变化的。
一周热门 更多>