后仿真的结果不对,求解!

2019-03-25 10:25发布

程序: 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位数据是随机产生的,仿真结果的截图放在附件了。 本人新手,求高人解答。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
qd0090
2019-03-27 04:06

我用最简单的方式回答一下吧。
下面是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是在时钟上升沿后变化的。

 

 

[ 本帖最后由 qd0090 于 2011-4-25 21:17 编辑 ]

一周热门 更多>