时序电路——DFF再理解

之前对DFF的理解有些模糊,直到有次在实践中遇到了一些问题,含糊其词的也不能解决问题,于是乎就把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 ) beginif ( !rst_n ) begindata_d0 <= 8'b0;data_d1 <= 8'b0;end else begindata_d0 <= data_in;data_d1 <= data_d0;end
end

对应仿真波形如下:

此时,时钟上升沿和数据的变化沿都是对齐的,就产生了不正确的理解;

通过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锁存器电路图:

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

在E由1跳变为0以后,锁存器将锁存跳变前瞬间D端的逻辑值,可以暂存1位二进制数据。

此D锁存器的功能表为:

E D Q Q非 功能
0 x 不变 不变 保持
1 0 0 1 置0
1 1 1 0 置1

又因为有Inverter的存在,SR锁存器不会存在S&R==1的状态,所以就有了D锁存器的捕获数据,E为0的时候会一直维持数据状态。

D触发器

触发和触发器——时钟脉冲边沿作用下的状态刷新称为触发,具有这种特性的存储单元电路称为触发器

D触发器的电路图如下(图中的SR为了标注有两级SR锁存器,方便逻辑推理):

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

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

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

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

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

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

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

  • 时钟上升沿之前前后的数据要做够稳定,否则在时钟跳变时刻,可能无法将其传递到Q端进行输出;
  • 时钟上升沿捕获数据之后,到Q端输出也需要一定的时间,稳定之后才能用于下一级工作;

这就牵扯出来时序的理解,挖个坑,下次再分析。

这时候的理解

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

Modelsim仿真

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

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

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端的输出。

参考资料

D Flip Flop

The D-type Flip Flop

通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)

D型触发器仿真结果分析

D锁存器和D寄存器状态转换图

2021-05-10~2021-05-15.

为了弄明白这个事情,这篇文章前前后后花了不少时间,请不要吝啬,点赞收藏转发。如果有异,可留言讨论。

时序电路——DFF再理解相关推荐

  1. 【FPGA——基础篇】如何理解时序电路

    一.概述 时序逻辑示意图,如下图所示.数据从一个寄存器出来,经过组合逻辑到达下一个寄存器. 在学习数字电路的过程中,我们都知道时序逻辑,但是大家对时序逻辑真的了解吗? (1)纯组合逻辑电路的缺点在哪? ...

  2. 关于fpga的语言逻辑异步电路同步时序电路终于读懂了

    原文链接: http://m.elecfans.com/article/575270.html 从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢 ...

  3. 用jk触发器构成二分频电路_深入了解数字电路之时序电路

    什么是时序电路? 组合电路是根据当前输入信号的组合来决定输出电平的电路,换言之,就是现在的输出不会被过去的输入所左右,也可以说成是,过去的输入状态对现在的输出状态没有影响的电路.时序电路和组合电路不同 ...

  4. 我对模拟电路课程的理解

    在电子类专业中,模拟电路是一门非常重要,并且不少人觉得很难的一门课.这里我来说一说我对模拟电路这门课的理解,希望能对大家有所帮助. 工程思想 如果说到考试成绩,我的考试成绩一般,并非什么高分:但如果说 ...

  5. 什么是MOS管驱动电路,如何理解MOS管驱动电路原理?

    今天泰德兰电子 小编和大家分享主题:什么是MOS管驱动电路,如何理解MOS管驱动电路原理? 作为电子工程师,我们都知道在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻 ...

  6. 山东大学计算机组成与设计实验七 节拍脉冲发生器时序电路

    山东大学计算机组成与设计实验七 节拍脉冲发生器时序电路实验, 山东大学计算机组成与设计实验, 山东大学计算机组成与设计实验报告, 计算机组成原理实验报告, 山东大学计算机组成原理实验报告 文章目录 实 ...

  7. 四、四相节拍脉冲发生器、带启停电路的时序电路(含电路图)

    实验时间:11.10 目录 1.四相节拍脉冲发生器 2.带启停电路的时序电路 2.带启停电路的时序电路 Quartus II的使用,封装,总线的使用可以参考笔者之前的博客.   创建D触发器 FILE ...

  8. 漫画描述数字电路之时序电路

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 来源 | 巧学模电数电单片机 1什么是时序电路? 组合电路是根据当前输入信号的组合来决定输出电平的电路,换言之,就是现在的输出不 ...

  9. VLSI数字集成电路设计——时序电路

    文章目录 0. 时序电路的时间参数 1. 静态锁存器和寄存器 1. 双稳态原理 -- 使用两个反向器 2. 多路开关型锁存器 - 传输门多路开关 3. 主从结构的寄存器 (1). 传输门设计 -- 稳 ...

最新文章

  1. ddos攻击python_Python基于http的ddos攻击代码
  2. 网易云信联合浙江大学信电学院成立创新与实践基地,探索音视频前沿技术
  3. Pytorch-张量相加的四种方法 / .item()用法
  4. android 十八 蓝牙及Wi-Fi
  5. cmake打包ICONV库
  6. python线性规划教程_python 利用cvxopt线性规划
  7. python无角正方形的绘制_Python无角正方形,用while True怎么写?我写的这个只能画一行,哪个地方出问题了啊?...
  8. 差距只是客观存在的事实,与服不服无关。
  9. springboot如何使用多线程,线程池管理
  10. php 5.5 preg replace,解决ecshop在php5.5以上环境preg_replace报错方法
  11. 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
  12. java管理系统类似的_开发类似安居客OA系统管理平台
  13. 把Alexa工具条改装成木马
  14. linux 小度 驱动_arm-linux移植MT7601Uusb无线网卡(小度wifi,360随身WIFI 2代)
  15. appid+openid(微信小程序)
  16. js/vue两张图片合成一张画布
  17. 什么电子邮箱最安全,什么邮箱更具私密性?
  18. Hej Stylus for Mac(手写笔画图工具)
  19. 我也说说《变形金刚》2
  20. 京东商城系统架构设计原则

热门文章

  1. 回忆过往,坚守初心 —— 从头记过往的搞机时光
  2. PAT乙级 | 1041 考试座位号 (15分)
  3. zadig安装部署接入k8s集群、ldap、jenkins、gitlab、项目配置管理、yaml模板管理
  4. Python分类文件(大疆精灵4多光谱版PM4影象分类)
  5. 2.5 TCP网络协议
  6. 物联网安全知识点总结--第四章 物联网感知层安全
  7. Three.js(十四)—— 模型文件加载
  8. Python安装库+国内源
  9. dropbox文件_获取通过电子邮件或网页发送到Dropbox的文件
  10. 第一部分 思科九年 一(4)