明德扬有完整的时序约束课程与理论,接下来我们会一章一章以图文结合的形式与大家分享时序约束的知识。要掌握FPGA时序约束,了解D触发器以及FPGA运行原理是必备的前提。今天第一章,我们就从D触发器开始讲起。

一、D触发器的基本概念

1、D触发器结构

首先是D触发器的结构,其硬件电路图如下所示,可以看到D触发器包含复位、时钟、输入和输出;信号由D端输入,clk给到上升沿的指示,Q端输出信号。

D触发器的功能很简单。

当R等于0时,q固定输出0;

当R等于1时,遇到CLK的上升沿时,将D的值赋给Q,D是什么Q就是什么;非CLK的上升沿,Q保持不变。

2、D触发器代码

D触发器的代码也很简单,如下图所示,从代码的描述来看,依旧是

当rst_n等于0时,q固定输出0;

当rst_n等于1时,遇到clk的上升沿时,将d的值赋给q,d是什么q就是什么;非clk的上升沿,q保持不变。

3、D触发器波形

D触发器工作波形如下所示,时钟处于上升沿的时,如果输入信号D为1,输出信号Q也为1;如果输入信号D为0,那么输出信号Q也为0。

4、建立时间和保持时间

   前面波形图可以看到,D触发器在上升沿处进行信号采集,为了保证采集到的数据准确性,信号D在上升沿前后会保持状态一段时间。在上升沿前的这段时间为setup_time,叫做建立时间;上升沿后的这段时间为hold_time部分,叫做保持时间。

关于建立时间和保持时间有几个关键点需要注意。

首先D触发器的数据输入端必须在建立时间前到达,并且要保持到持续时间以后,这样才可以保证FPGA可以采集到正确的数据。

其次建立时间和保持时间是D触发器的固有属性,是不可改变的。注意,这里说的不可改变,是指不能从代码层次去改变。例如我们买了一个FPGA开发板,其FPGA芯片的D触发器建立时间和保持时间就是固定的,没办法从VERILOG去修改,除非换一个芯片。

二、电路的延时

1、电路延时原理

我们知道从物理层面看电平通过每个阶段都是需要一段时间的,这就是电路的延时,我们通过FPGA中最经典的结构来学习一下电路的延时。使用了两个D触发器,中间由组合逻辑进行相连,即通过一个组合逻辑电路将两个D触发器相连。电路图如下图所示:

从图中可以看出,一个有效信号经过D触发器1之后,接着经过一段组合逻辑(可以是加法器、选择器、乘法器这些电路,也可以仅仅是连线)然后到达另一个D触发器2,D触发器2对信号进行判断后继续进行输出。下面逐个分析这个基本结构里面包含的时间参数。

首先Tclk1是时钟到D触发器1的时间。Tclk2为时钟到达D触发器2的时间,在真实的物理情况下,因为有线路的延时,两个时钟采到的上升沿其实是不同的,有一点微小的差别;但是FPGA里面,我们经常把这个时间忽略掉,因为我们FPGA时钟时专门优化过的,它们之间的差别会比较小,因此在这里我们先忽略不计。Tclk1和Tclk2是时钟延时。

还有一段时间为D触发器的传输延时,即上升沿之后,采集到的数据从进入到出来这段时间延时。如下图所示,输出信号Q在上升沿后一段时间由0变1,这段为D触发器的传输延时。

接着D触发器1之后信号需要通过组合逻辑赋到D触发器2之前的位置,这段时间是组合逻辑的延时,即信号通过组合逻辑这段时间的延时为组合逻辑延时Tdata。

最后还有前面讲到的建立时间和保持时间,信号在D触发器2会有建立时间和保持时间,这就是D触发器本身的延时。

2、时序表示电路的延时

这里我们可以用时序来表示这组结构中的信号变化。如下所示,比如我们有两个时钟上升沿,在最开始,所有位置的信号都为0。

假设一个由0变1的信号需要通过前面的组合逻辑,首先D触发器1前面一段由0变1,即图中点a到点b变为1,这段时间在时序中如下图中点a与点b的位置。

1)D触发器传输延时

接着是D触发器的传输延时,在时钟上升沿处,信号1从D触发器1后输出,即下图中信号从c点输出,这段时间的延时在时序中为时钟上升沿处到信号输出的延时,即下面时序图中Tco部分。

2)组合逻辑延时间

之后信号会通过组合逻辑,这段时间为组合逻辑的延时Tdata。如下图所示,此信号由点c通过组合逻辑接着传输到点d,在时序图中为Tdata部分。

3)建立时间

当然不要忘记我们前面讲的D触发器传输信号会有一段的建立时间,因此在时序中信号1会提前到达d点,即信号到达d点时,到达下一个时钟上升沿还有一段时间,如下面时序图中Tus部分所示。

当然像上图中这样信号到达d点的时间与建立时间相等的情况是比较理想的状态,现实工程中大多数情况下信号1都会提前到达d点,等待建立时间的到来,即时间预量。实际的时序图如下所示,可以看到信号达到d点的时间与D触发器建立时间并不重合,中间会有一段时间预量,这才是实际工程中可以见到的情况。

以上就是由0变1的信号通过两个D触发器和一段组合逻辑的流程。在理想状态下整个过程的延时与时间周期是相等的,但是实际情况下会有一定的变化,这时需要我们具体问题具体分析。

三、D触发器在FPGA中的使用

1、FPGA的电路结构

了解了两个D触发器的组合使用,下面学习FPGA的基本电路结构。

FPGA的基本电路结构如上图所示。我们可以把电路分成两个部分:D触发器和组合逻辑。每两个D触发器之间,都会有或多或少的组合逻辑。组合逻辑可以是乘法器、加法器、RAM,甚至就是一条简单的连线。前一个D触发器的输出端,经过组合逻辑运算后,给了下一个D触发器的输入端,等待时钟上升沿的时候,再传递给D触发器的输出端。

上图中,所有的D触发器都统一受时钟CLK的控制,都是在CLK的上升沿把输入的值传递给输出端。

FPGA中有4个组合逻辑A、B、C、D ,逻辑与逻辑之间,共使用了5个D触发器传输数据。其中组合逻辑A持续20纳秒,组合逻辑B持续40纳秒,组合逻辑C持续50纳秒,组合逻辑D持续35纳秒。时钟周期为100纳秒,即上升沿100纳秒产生一次;每个触发器的建立时间为5纳秒,保持时间为25纳秒。

2、现实案例

为了便于理解,我们用一个生活中的例子类比一下D触发器与组合逻辑的关系。如下图所示,现在有一个生产线生产一款产品,一共需要4个步骤,分别由员工ABCD来完成,其中A做完一个工序需要2小时,B需要1小时,C需要3小时,D是0.5小时。工厂统一规定每隔5个小时交接一次;为了避免交接混乱,要求交接点前5分钟交接,交接点后10分钟才能继续工作。

此生产线就像是前面我们讲到的FPGA电路结构,四个员工就相当于FPGA中四个组合逻辑,大家在同一个环境下工作,被同一个时钟所支配,相互间又有着传输关系。

要求每5个小时交接一次相当于100纳秒产生一次时钟上升沿;每一位员工交接给下一位员工的这个过程就相当于D触发器将输入的值赋给输出。

所有员工在交接点前5分钟都停下手中工作,进入准备交接状态,5分钟相当于D触发器的建立时间5纳秒;交接点后10分钟,大家依旧保持交接状态,10分钟相当于D触发器的保持时间25纳秒。

公司的规定必须提前5分钟,等待10分钟进行交接,就和D触发器的硬件特性相同,交接时间是不能因为个人改变的;不论工作什么时候完成,在交接点前5分钟一定要准备交接,交接点后保持交接状态10分钟才可以继续工作,这样才可以保证整个生产线可以流畅进行。

我们用了一个简单的案例比较清晰的理解了D触发器,通俗来说就是需要传输的数据等待在D触发器前,D触发器每个时钟都会在门口进行检测,检测到了有效数据后,在此时钟上升沿进行数据输出。

以上就是明德扬时序约束课程中D触发器部分的相关知识,想要获取时序约束相关资料的同学可以(加W:MDYfpga003 )陈老师

时序约束系列之D触发器原理和FPGA时序结构相关推荐

  1. FPGA 时序约束系列之周期约束

    目录 1.周期(PERIOD)约束 时钟周期估计 编辑约束 时钟偏斜计算 基本时序报告 数字时钟管理器的周期约束 Clock Phase Period Example Hold Calculation ...

  2. fpga如何约束走线_经验总结:FPGA时序约束的6种方法

    对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地,设计的时序收敛过程就会更可控 ...

  3. FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)

    文章目录 前言 常用时序约束介绍 时序环境约束 分组时序约束 TNM TNM_NET TIMEGRP 常用时序约束 周期约束 输入时钟周期约束 内部时钟周期约束 关联时钟周期约束 差分时钟周期约束 输 ...

  4. FPGA工程师面试——时序约束

    1. 时序约束的概念和基本策略 答:时序约束主要包括周期约束,偏移约束,静态时序路径约束三种.通过附加时序约束可以综合布线工具调整映射和布局布线,是设计达到时序要求. 策略:附加时序约束的一般策略是先 ...

  5. TIMING_02 浅谈时序约束与时序分析

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/ ...

  6. FPGA时序分析和时序约束

    FPGA时序分析和时序约束 1时序分析和时序约束 2例子分析 2.1实现代码 2.2时序分析的基本模型 1时序分析和时序约束 时序分析的目的: 通过分析FPGA设计中各个寄存器之间的数据和时钟传输路径 ...

  7. 4 FPGA时序约束理论篇之时钟周期约束

    时钟周期约束   时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束.   下面我们讲一些Vivado中时钟约束指令. 1. Create_cloc ...

  8. FPGA时序约束与分析(1) --- 时序约束概述

    本系列参考文献 - FPGA时序与约束分析-吴厚航 FPGA从综合到实现需要的过程如下:synth_design -> opt_design -> place-design -> p ...

  9. 【 Vivado 】基本的时序约束、分析的概念

    目录 时序路径: Clock Setup Check: Clock Hold Check: Timing Report in Vivado: 时序路径: 关于时序路径,曾也有几篇博文讲到:[ FPGA ...

  10. (37)一个合理的时序约束方法

    (37)一个合理的时序约束方法 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)一个合理的时序约束方法 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序 ...

最新文章

  1. Maven:Maven 入门
  2. 017_Jedis的String数据类型
  3. DL框架之PyTorch:深度学习框架PyTorch的简介、安装、使用方法之详细攻略
  4. QT学习:读写二进制文件
  5. boost::set_intersection相关的测试程序
  6. oracle下载jdk需要注册怎么办? jdk8下载
  7. 【雨滴桌面】简洁桌面天气皮肤YcWea5.5,直接通过HTML文档获取天气数据,鼠标移入显示近三天天气,鼠标移出隐藏
  8. Python 珍藏函数超详解:随机抽样,分层抽样,系统抽样方法汇总
  9. html css js php是否区分大小写 总结
  10. 手机芯片命名规则详解
  11. Linux(ubuntu)内容整理(常用命令)
  12. 百度 android 市场占有率,2019百度 排行榜_2019安卓应用市场排行榜Top10
  13. QQ9.0需要安装两个插件
  14. 亿道信息丨12.2英寸加固平板丨三防平板丨工业平板丨货物追踪好助手
  15. SQL之having关键字用法
  16. 私募证券基金动态-12月报
  17. 第5篇 | Shiro Padding Oracle无key的艰难实战利用过程
  18. 百度聚合卡顿解决代码
  19. 学习OpenFOAM Tutorial snappyHexMesh
  20. dbgrid添加复选框实现多选功能

热门文章

  1. 单例模式【饿汉模式和懒汉模式异同点】
  2. 超市微信小程序怎么做_小程序怎么做的 超市微信小程序怎么做
  3. Unity3D好用Unity模型场景素材和Unity资源大合集
  4. 一次学会两种方式将 python 打成 exe
  5. 计算机电源24针,ATX电源20针和24针接口定义
  6. 相机模型坐标系关系及转换
  7. 【51单片机实例教程】智能小车(一)让你的小车跑起来
  8. python编程语言可以做游戏吗_用Python编程可以制作掷骰子游戏吗
  9. 教师教学说课圆的认识与周长PPT模板
  10. Android ListView notifyDataSetChanged()不刷新数据