目录

  • 前言
  • Latch与Flip-Flop
  • 问题引入
  • DFF电路结构
  • 问题拓展
  • 仿真歧义


前言

本文通过引入Latch和Flip-Flop深入分析为何DFF需要setup time和hold time

Latch与Flip-Flop

Latch属于组合逻辑电路,其时序图如下,最大的特点在于EN->Q以及D->Q均有延时


IVF_FLAT原理图 dff原理图_IVF_FLAT原理图


而Filp-Flop的延时来源于CK->Q



IVF_FLAT原理图 dff原理图_上升沿_02


问题引入

为何Flip-Flop(DFF)没有D->Q的延时?
答: 在CLK上升沿的一瞬间,D端的信号必须保持稳定,在上升沿之前的一段稳定时间为建立时间setup time,在上升沿之后的稳定时间为维持时间hold time。



IVF_FLAT原理图 dff原理图_上升沿_03

这也就意味着下图的采样是不合理的,无法知道Q端输出信号

IVF_FLAT原理图 dff原理图_FPGA_04


DFF电路结构

那么,为何DFF需要setup time和hold time?

这需要从DFF的电路结构理解,DFF的一种电路图如下所示,其中Φ为CLK信号

IVF_FLAT原理图 dff原理图_数字电路_05

  • 当CLK为0时,左侧的传输门打开,D端信号通过传输门进入到反相器的输入端,也即X信号,而右侧的传输门会关闭,信号被锁存在中部电路
  • 当CLK为1时,左侧的传输门关闭,右侧的传输门打开,信号输出到Q端

那么,信号则必须从D端传入到X点之后传输门才能关闭,也即对应了setup time。并且CLK置1时,关断左侧传输门本身需要时间,这时D端信号不能变化,否则在传输门完全关断之前,D端信号依旧可以传输到DFF内部,也即对应了hold time
更详细的时间计算可参照这篇博客:为什么会有建立时间setup和保持时间hold要求

问题拓展

在cell library中DFF的setup time可以设置为0吗

答案是可以的,如下图所示,在CLK的前端加一个buffer,用于延时,相当于将clk的波形置前了,此时CK的上升沿可以与D端的上升沿对齐,甚至setup time可以为负数

IVF_FLAT原理图 dff原理图_数字电路_06


那么,在cell library中DFF的hold time可以设置为0吗

答案也是可以的,如下图所示,在D端的前面加上一个buffer,用于延时,相当于将D端口的波形置前了

IVF_FLAT原理图 dff原理图_上升沿_07

那么,一个DFF cell的setup time和hold time可以同时为0吗?

显然是不可以的,因为setup time和hold time叠加本来就是一段时间,也就是setup time+hold time必须为正数,为一个时间窗口,且等于最基本的DFF的建立时间与维持时间之和

仿真歧义

再次拿出这张图,在Verilog仿真阶段该DFF可能有正常的输出,也有很多人质疑该时序图能够正常的输出,是因为仿真与实际电路是有区别的,仿真避开了电路的结构,可以直接输出CLK前一段时间的D端输入数据



IVF_FLAT原理图 dff原理图_FPGA_04


码字不易,欢迎点赞+关注+收藏