0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

时序电路之DFF理解

OpenFPGA 来源:知芯情报局 2023-05-10 09:02 次阅读

对于DFF,之前理解的,DFF在时钟的上升沿进行对D端的数据采集,再下一个时钟的上升沿来临,Q端输出D端采集的数据。能这么理解,是离开书本时间太长了,又观察到了ModelSim仿真波形的影响,这么理解只是在描述仿真波形的表征现象,并非根本的原理。比如,在Modelsim仿真中,若通过DFF将数据组进行延时,用时钟将寄存器进行多个时钟周期的同步,并带有异步复位,对应Verilog描述如下:

reg [7:0] data_d0, data_d1, data_d2;
always @ ( posedge clk or negedge rst_n ) begin
    if ( !rst_n ) begin
        data_d0 <= 8'b0;
        data_d1 <= 8'b0;
    end else begin
        data_d0 <= data_in;
        data_d1 <= data_d0;
    end
end
对应仿真波形如下:

19ae7caa-eece-11ed-90ce-dac502259ad0.png          

此时,时钟上升沿和数据的变化沿都是对齐的,就产生了不正确的理解:通过Modelsim的wave窗口查看仿真波形的时候,如果将光标打到时钟的上升沿时候(比如心在光标在Event 1时刻),对应的数据data_in应该是从8‘h00->8‘h0’1,可是光标处data_in的数值显示为8’h01。

这样,我就理解成了在Even1时刻,时钟的上升沿对data_in(值为8’h01)进行捕获(接入到寄存器data_d0的D端),在下一个时钟的上升沿到来的时刻(Event2时刻),寄存器data_d0的Q端数据发生改变(值为8’h01)。上述理解完全是根据波形描述出来的,是不全面的,是非本源的,是错误的。

正确的理解

正确的理解应该从DFF本身出发,通过DFF的电路原理图分析DFF的电路工作原理,了解时钟上升沿之前和之内部逻辑的如何变化,如何影响了从D端到Q端的数据输出。

D锁存器

在网上找到的很多电路图讲的都是D锁存器,D锁存器的电路为消除逻辑门控SR锁存器不确定状态,在电路的S和R输入端连接一个非门(Inverter),从而保证了S和R同时为0的条件,参考下图由与非门构成的D锁存器电路图:

19cd371c-eece-11ed-90ce-dac502259ad0.png

如果D信号在E=1期间发生变化,电路提供的信号路径将使Q端信号跟随D端变化。

在E由1跳变为0以后,锁存器将锁存跳变前瞬间D端的逻辑值,可以暂存1位二进制数据。又因为有Inverter的存在,SR锁存器不会存在S&R==1的状态,所以就有了D锁存器的捕获数据,E为0的时候会一直维持数据状态。此D锁存器的功能表为:

19e395a2-eece-11ed-90ce-dac502259ad0.png

D触发器

触发和触发器——时钟脉冲边沿作用下的状态刷新称为触发,具有这种特性的存储单元电路称为触发器。D触发器的电路图如下(图中的SR为了标注有两级SR锁存器,方便逻辑推理):

19f761cc-eece-11ed-90ce-dac502259ad0.png

以上升沿触发为例,进一步分析D触发器在上升沿捕获数据,并维持锁存的过程。

D端为0,CLK为0时,此时第一级的D锁存器输出为0,第二级SR锁存器处于保持状态,详情参考下图:

1a1130e8-eece-11ed-90ce-dac502259ad0.png

若继续保持D端为0,CLK变为1时,第一级D锁存器处于保持状态,第二级的SR锁存器将上一次的D值传递到Q端输出,详情参考下图:

1a3c7ff0-eece-11ed-90ce-dac502259ad0.png

若在D端数值发生改变为1,且CLK仍然为1,第一级的D锁存器仍处于保持状态,不会由于D端的变化而改变,更不会影响最后Q端的输出。

1a5d8056-eece-11ed-90ce-dac502259ad0.png

D端继续保持为1,CLK转换为0,此时第一级D锁存器的输出为D端的数据,Q端输出仍为保持状态。

1a7591aa-eece-11ed-90ce-dac502259ad0.png

D端数据继续保持为1,CLK转换为高,第一级D锁存器的结果就会输出到Q端,Q端的值也就随着CLK的上升沿,捕获到了1,并进行输出到Q端;

从逻辑图中,也可以看出DFF的数据捕获和输出都需要满足一定的时间约束。比如:

时钟上升沿之前前后的数据要做够稳定,否则在时钟跳变时刻,可能无法将其传递到Q端进行输出;

时钟上升沿捕获数据之后,到Q端输出也需要一定的时间,稳定之后才能用于下一级工作;

DFF捕获时钟上升沿的D端数据,并在Q端输出,一直维持到下一时钟上升沿到来之前。在此期间,D端的数据变化不会直接影响到Q端的输出。

ModelSim仿真

将tb文件中的data_in输入做5个单位的传输延时,仿真结果见下图:

1a95ccf4-eece-11ed-90ce-dac502259ad0.png         

可以看出,在时钟的上升沿前后数据是不发生变化的,对于寄存器做延时的时序理解为:

Event 1时刻:

在Event 1时刻,时钟上升沿之前data_in(值为8’h00),data_d0的D端为data_in(值为8’h00);

在Event 1时刻,时钟上升沿之后data_in(值为8’h00),data_d0的Q端为data_in(值为8’h00);所以在Event 1时刻,data_d0的Q端保持为8’h00不变;

Event 2时刻:

在Event 2时刻,时钟上升沿之后data_in(值为8’h01),data_d0的D端为data_in(值为8’h01);

在Event 2时刻,时钟上升沿之后data_in(值为8’h01),data_d0的D端为data_in(值为8’h01);所以在Event 2时刻,data_d0的Q端从8’h00变为8’h01;

Event 3时刻:

在Event 3时刻,时钟上升沿之后data_in(值为8’h02),data_d0的D端为data_in(值为8’h02);

在Event 3时刻,时钟上升沿之后data_in(值为8’h02),data_d0的D端为data_in(值为8’h02);所以在Even 3时刻,data_d0的Q端从8’h01变为8’h02;

可以看出在Event 1到Event 2一个时钟周期内,data_d0的数值保持为8’h00;Event 1到Event 2一个时钟周期内,data_d0的数值保持为8’h01;在时序上就表明了使用data_d0寄存器,通过clk对data_in进行了1个时钟周期的延时。在Modelsim仿真中,若数据的变化沿与时钟的上升沿对齐,cursor在时钟上升沿时刻,对应的数据需要往后加入延时,才能与实际电路情况相符合。

总结

DFF捕获时钟上升沿的D端数据,并在Q端输出,一直维持到下一时钟上升沿到来之前。在此期间,D端的数据变化不会直接影响到Q端的输出。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119981
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109973
  • 时序电路
    +关注

    关注

    1

    文章

    114

    浏览量

    21679
  • MODELSIM仿真
    +关注

    关注

    0

    文章

    15

    浏览量

    7277
  • dff
    dff
    +关注

    关注

    0

    文章

    26

    浏览量

    3397

原文标题:时序电路之DFF再理解

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数字电路时序电路

    在《数字电路如雷贯耳的“逻辑电路”》、《数字电路数字集成电路IC》之后,本文是数字
    发表于 08-01 10:58 1.9w次阅读
    数字<b class='flag-5'>电路</b>之<b class='flag-5'>时序电路</b>

    时序电路的分析与设计方法

    逻辑电路分为组合逻辑电路时序逻辑电路。第四章已经学习了组合逻辑电路的分析与设计的方法,这一章我们来学习
    发表于 08-23 10:28

    什么是时序电路

    什么是时序电路时序电路核心部件触发器的工作原理
    发表于 03-04 06:32

    PLD练习2(时序电路)

    PLD练习2(时序电路)
    发表于 05-26 00:14 20次下载

    同步时序电路

    同步时序电路 4.2.1 同步时序电路的结构和代数法描述
    发表于 01-12 13:31 5171次阅读
    同步<b class='flag-5'>时序电路</b>

    什么是时序电路

    什么是时序电路 任意时刻的稳定输出,不仅与该时刻的输入有关,而且还
    发表于 01-12 13:23 8436次阅读
    什么是<b class='flag-5'>时序电路</b>

    组合电路时序电路的讲解

    组合电路时序电路是计算机原理的基础课,组合电路描述的是单一的函数功能,函数输出只与当前的函数输入相关;时序电路则引入了时间维度,时序电路
    的头像 发表于 09-25 09:50 2.5w次阅读

    时序电路触发器

    时间的重要性不言而喻,加上时间这个维度就如同X-Y的平面加上了一个Z轴,如同打开了一个新的世界。所以今天我们就要来聊聊时序电路。 在时序电路中,电路任何时刻的稳定状态输出不仅取决于当前的输入,还与前
    的头像 发表于 01-06 17:07 5023次阅读

    DFF电路工作原理与ModelSim仿真

    最近在做设计的时候,发现之前对DFF理解有些模糊,直到有次在实践中遇到了一些问题,含糊其词的也不能解决问题,于是乎就把DFF理解透彻透彻,毕竟这可是
    的头像 发表于 07-12 10:22 5419次阅读

    时序电路基本介绍

    组合逻辑和时序逻辑电路是数字系统设计的奠基石,其中组合电路包括多路复用器、解复用器、编码器、解码器等,而时序电路包括锁存器、触发器、计数器、寄存器等。 在本文中,小编简单介绍关于
    的头像 发表于 09-12 16:44 9110次阅读
    <b class='flag-5'>时序电路</b>基本介绍

    什么是时序电路

    那么,如何才能将过去的输入状态反映到现在的输出上呢?「时序电路」到底需要些什么呢?人类总是根据过去的经验,决定现在的行动,这时我们需要的就是—记忆。同样,「时序电路」也需要这样的功能。这种能够实现人类记忆功能的元器件就是触发器。
    的头像 发表于 03-24 10:48 1178次阅读
    什么是<b class='flag-5'>时序电路</b>?

    什么是同步时序电路和异步时序电路,同步和异步电路的区别?

    同步和异步时序电路都是使用反馈来产生下一代输出的时序电路。根据这种反馈的类型,可以区分这两种电路时序电路的输出取决于当前和过去的输入。时序电路
    的头像 发表于 03-25 17:29 2.5w次阅读
    什么是同步<b class='flag-5'>时序电路</b>和异步<b class='flag-5'>时序电路</b>,同步和异步<b class='flag-5'>电路</b>的区别?

    时序电路包括两种类型 时序电路必然存在状态循环对不对

    时序电路是由触发器等时序元件组成的数字电路,用于处理时序信号,实现时序逻辑功能。根据时序元件的类
    的头像 发表于 02-06 11:22 1241次阅读

    时序电路的分类 时序电路的基本单元电路有哪些

    时序电路是一种能够按照特定的顺序进行操作的电路。它以时钟信号为基准,根据输入信号的状态和过去的状态来确定输出信号的状态。时序电路广泛应用于计算机、通信系统、数字信号处理等领域。根据不同的分类标准
    的头像 发表于 02-06 11:25 2327次阅读

    时序电路基本原理是什么 时序电路由什么组成

    时序电路基本原理是指电路中的输出信号与输入信号的时间相关性。简单来说,就是电路的输出信号要依赖于其输入信号的顺序和时间间隔。 时序电路由时钟信号、触发器和组合逻辑
    的头像 发表于 02-06 11:30 1920次阅读