D触发器为什么能对数据延迟一个时钟周期

描述

D触发器在FPGA里用得很多,但我经常无法理解D触发器为什么能对数据延迟一个时钟周期(打一拍)。下面从信号处理的角度来谈一下我的理解。如发现理解有误,烦请留言指正。

D触发器形如:

D触发器

`timescale 1ns/1ps
module d_flip_flop(
    input clk,
    input rst_n,
    input d,
    output reg q
  );
 
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
        begin
            q <= 1'b0;
        end else begin
            q <= d;
        end
    end
endmodule
时序图如下:

D触发器

解读如下:

        D触发器在时钟CLK上升沿采样,数据D在建立保持时间Tsu和Th内需要稳定不变,否则出现亚稳态!我们在这个时间“窗口”内采样到的数据即为D触发器采样到的数据,经过Tco(其中Tco < Th)的时间后,D触发器就会输出上述采样到的数据D,并且该数据会保持一个时钟周期T不变。

       为什么会有延迟一个时钟周期(打一拍)的效果呢?原因是,如果两个D触发器分别对D和D’这两个数据采样,则这两个触发器输出的结果将会一致的,即均为上图的Q!对比D’和Q会发现:Q比D’延迟了一个时钟,所以才会说对信号D延迟了一个时钟周期。

      D触发器是无法识别数据D在时钟上升沿后肆意变化的那部分(因为D触发器在非触发沿时是保持输出不变,而不会再采样数据的),所以才导致在D触发器看来D和D’是一模一样的信号!!      

      最后,有如下结论:
            1.数据D在建立保持时间窗口内必须保持稳定,D触发器采样到的就是该稳定数据。
            2.D触发器采样后,经过Tco时间后即可输出到Q
            3.保持时间过后,如果数据变化了,D触发器无法感知
            4.Tco < Th,且 Th很小,均由
fpga器件型号决定                                                                                                      

根据前3条,我们可以在仿真时认为,D触发器一直对CLK上升沿左边的信号进行采样,并保持一个时钟周期T的时间,因为一直采样的是前一刻(上一个T)数据D的值,并且保持T,所以长远来看,D触发器对数据D延迟了一个时间周期!

 

原文标题:如何理解D触发器延迟一拍

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

  审核编辑:汤梓红
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分