黑金动力的资料还是非常有价值的。通过建模篇,对于给定的时序关系,我总能实现。但是,这总是很初级的能力。也只是为后面的建模服务。所以,现阶段我的能力还是非常有限。我相信我一定会成为牛人,能够独挡一面。借用同学的一句话:仰望星空,脚踏实地。现在来学习FPGA的时序约束。

时序约束,是要对时序有要求为前提才有时序约束。以前的建模都是想像时序是否满足,也有实际约束过但是这里的时序约束是为了熟悉TQ,而做的约束。也就是没有具体的时序要求。直到最近遇到了,模块的最高运行频率。比如在64位加法器,4级流水线实现提高运算速度。其中的最高运行频率,我一直不知道它是怎么得到的。直到昨天,一个偶然的机会,估计是使用TQ分析得出是一种好的方法(应该还有其他的时序分析工具)。即现在是有时序要求的,比如需要64位的全加器最高运行频率到100MHz。那怎么分析建模是否满足最高频率呢?这就能通过TQ得到。这也是我要使用TQ约束的原因。

第一张图:理想时序的建立关系

理想的保持关系图:

硬件物理建立余量:

建立关系值(Setup Relationship)是评估(计算)建立余量(setup lack)的一个过程。

上图可以建立余量:数据锁存时间(DataRequireTime) -数据到达时间(DataArriveTime)  = (10 + 2 -1.4) - (Tclk1+Tco+Tdata)=10.6 -4 = 6.6ns。

建立余量正值和reg1 与 reg2 之间的建立关系合不合格到底有什么关系? 只要建立余量大于 0,那么两个寄存器之间的建立关系就没有问题。

锁存沿时间基本上就是“理想的建立关系值”,理想的建立关系值见前面。理想建立关系值和锁存沿时间在评估数据锁存时间是等价的关系。

硬件物理保持余量:

“保持时间”在寄存器的概念中是表示:寄存器在读取某个数据以后,需用一段最小时间来“确保数据锁存”的稳定。

然而“保持余量”的定义是指:在两个节点(寄存器)之间,在分析保持关系的过程中“到底有多少剩时间可以提供给寄存器用来确保已存数据的稳定”。

数据保持时间 Data Hold Time =  启动沿  + Tclk1 + Tco + Tdata + 数据周期时间。(寄存器1数据输出保持不变的时间)

数据锁存(读取| 获取)时间  Data Required Time =  锁存沿  + Tclk2 + Th。

保持余量  =  数据保持时间  -   数据锁存(获取| 读取)时间。

保持余量=(数据保持时间)(10+3.2+0.8)  -  (数据锁存(获取| 读取)时间)(10+2+1.4)=0.6

在这里我要多说一句:在触发沿建模时,我总是担心一个脉冲的高电平能否在条件判断中检测到。原来是我对时序分析不够理解。现在我的答案是要进行时序分析。如果满足建立和保持关系即可以在条件判断中检测到。

无论是理想的建立关系值或者理想的保持关系值”它们的作用出了供参考以外,还有简化 TimeQuest模型。

因为“保持余量”的求出过程实在太猥琐了,在此为了简化求出保持余量的过程,保持余量和建立余量共享同一个公式,那么这个“理想保持关系值”是必须的。

数据抵达时间 Data Arrival Time =  启动沿  + Tclk1 + Tco + Tdata  (注意:此时不是数据保持时间  Data Hold Time,所以也没有加入数据周期时间)

数据锁存(获取| 读取)时间 Data Required Time = 锁存沿 + Tclk2 + Th= 理想保持关系值 + Tclk2 + Th
(注意:这个评估锁存沿受延迟因素影响的公式和求得建立余量时数据锁存时间的公式非常类似)

数据抵达时间 Data Arrival Time = 启动沿 + Tclk1 + Tco + Tdata = 0 + 3.2 + 0.2 + 0.6= 4ns
数据锁存(获取| 读取)时间 Data Required Time = 锁存沿 + Tclk2 + Th= 理想保持关系值 + Tclk2 + Th= 0ns + 2ns + 1.4ns= 3.4ns

保持余量 = 数据抵达时间 - 数据锁存(获取| 读取)时间= 4ns - 3.4ns= 0.6ns

我的理解:很明显这是正确的。因为reg2的latch edge 是reg1的lunch edge,即它们的时间点是重合的(当然这是在理想的时序)。在物理硬件的时序,虽然有时延但是它们的理想保持关系是不变的。或者说:不管clk1和clk2如何延时变化,但是它们的周期都是10ns。如下图

图 1.6.9 是用屁股求得保持余量的方法,换句话说就是“用下一个启动沿的红色部分减掉当前锁存沿绿色的部分”,其中就要用到“理想保持关系值”。

求得建立余量的公式是 :
保持余量 = 数据锁存时间 - 数据抵达时间   Setup Slack = Data Required Time - Data Arrival Time
数据抵达时间 Data Arrival Time = 启动沿 + Tclk1 + Tco + Tdata
数据获取时间 Data Required Time = 锁存沿 + Tclk2 - Tsu= 理想建立关系值 + Tclk2 - Tsu

求得保持余量的公式是:(用屁股的话)
保持余量 = 数据抵达时间 - 数据获取时间  Hold Slack = Data Arrival Time - Data Required Time
数据抵达时间 Data Arrival Time = 启动沿 + Tclk1 + Tco + Tdata
数据获取时间 Data Required Time = 锁存沿 + Tclk2 + Th= 理想保持关系值 + Tclk2 + Th

此外,笔者也大概的讲解 TimeQuest 模型中用到的公式和物理时序中出现的东东。如果按照一般方法去学习 TimeQuest 的话,很容易撞墙而已,又或者会被训练成为纯公式的使用者。TimeQuest 模型是一个很有趣的东西,如果用纯公式的方法去使用的话,就无法体验到 TimeQuest 的有趣之处以外,也不能享受学习的乐趣。

下面是我的约束:

这是我的一个时钟模块。只是约束了系统时钟。以上的时序图是min_o_r[0]到min_o_r[0]的保持余量。根据波形图可以看到(1)在保持余量时latch edge 和lunch edge是满足理想的保持关系(hold relationship)。

(2)数据保持时间= clock delay + data delay = 2.679 + 1.069 = 3.748(和右边的Data Arrival Time 一致)

(3)数据锁存时间= clock delay + uTh= 2.679 + 0.266 = 2.955。

(4)数据保存余量=Data Arrival Time - Data Required Time = 3.748 - 2.955 = 0.803。

这是传说中的使用屁股算保持余量。

建立余量:

这是sec_o_r[3]到led_r1[4]建立时间分析图。根据此图可以得出:

(1)数据锁存沿latch edge在数据启动沿lunch edge的一个时钟周期,即理想的保持关系。

(2)数据到达时间= lunch edge + Clock Delay + Data Delay = 2.681 + 7.186 = 9.867

(3)数据锁存时间= latch edge(setup relationship) + Clock Delay - uTsu = 20 + 2.670 - (-0.036) =22.706(这里uTsu是负号表示的)

(4)数据建立余量= Data Require time - Data Arrival Time = 22.706 - 9.867 = 12.839

至此,第一章结束了。!!!!

timequest学习之黑金动力(一)的更多相关文章

  1. TIMEQUEST学习之黑金动力(二)

    之一就是第一章,这是第二章.在开始之前,要对第一章内容说说我理解到的: (1)时序分析是节点对节点的分析.(2)这个latch edge是锁存上一个lunch edge输出的(满足建立关系的)值.(3 ...

  2. TIMEQUEST学习之黑金动力(三)

    不知不觉,学到的第四章.但是对于TQ的内部模型和外部模型的完整分析还是没有很好的理解.接着学习......... 我们也了解静态时序分析的第一步骤,亦即时钟方面的约束.此外,也稍微对 Report T ...

  3. TIMEQUEST学习之黑金动力(四)

    现在知道时序约束主要是FPGA to ic,或者ic to FPGA. 上图可以表示FPGA to IC, IC to FPGA. fpga2ic:fpga2ext 是 fpga 致 ic 信号的走线 ...

  4. TimeQuest学习

    1.物理时钟特性:clock skew(时钟差),jitter(拉动),clock latency(时钟潜伏),这些物理时钟特性又称为uncertainl--非定性,或非理想性. clock skew ...

  5. TimeQuest学习总结

    1. 基本时钟约束:creat_clock 2. 生成时钟约束:creat_generated_clock 3. I/O输入输出约束:(1)纯组合逻辑:set_max_delay & set_ ...

  6. usb server新产品(旧老板设备)-给自己一个学习硬件的动力

  7. 【黑金原创教程】【TimeQuest】【第一章】TimeQuest 静态时序分析模型的概念

      声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/ ...

  8. 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. 【黑金原创教程】【TimeQuest】【第三章】TimeQuest 扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

随机推荐

  1. WPF中的平移缩放和矩阵变换(TranslateTransform、ScaleTransform、MatrixTransform)

    在WPF中的平移缩放都是通过RenderTransform这个类来实现这些效果的,在这个类中,除了平移和缩放还有旋转.扭曲变换.矩阵变换.这些都差不多的,都是坐标的变换. 这里我就先简单弄个平移和缩放 ...

  2. 禁用Browser Link

    Browser Link是VS 2013开始引入的一个强大功能,让前端代码(比如AngularJS的代码)在VS中的修改更加轻而易举. 前端代码是运行在浏览器中,而Visual Studio通常只会和 ...

  3. sass基础篇

    scss的语法非常简单: $color: red; div{ color: $color; } 这就是一个简单的scss代码. 但是,使用 Sass 进行开发,那么是不是直接通过“<link&g ...

  4. 方便处理hosts的批处理脚本:hosts助手.bat

    hosts助手.bat @echo off pushd "%~dp0" set sp0=------------------ set sp1=hosts助手 set hostsfi ...

  5. C# 构造函数调用顺序

    了解C#的一个类的加载过程,对于语言机制的理解和写出高效的语言很有帮助,这里简单介绍一下类的实例的构造函数调用过程.C#类的实例的构造过程是,先为实例的数据字段分配内存,并对所有字段按字节置零(0或者 ...

  6. 51nod 1639 递推

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639 1639 绑鞋带 基准时间限制:1 秒 空间限制:131072 K ...

  7. python 超时异常处理

    异常处理具体见:[循序渐进学Python]9.异常处理 环境平台:Python2.7.9 + Win8.1 本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存.由于没有设置网址打 ...

  8. iOS自动化探索(二)WDA API的使用

    前面我们已经安装好了WebdriverAgent, 现在可以用Facebook官方提供的API来进行一些操作 WDA API官方页面: https://github.com/facebook/WebD ...

  9. TI IPNC Web网页之GoDB开发环境

    介绍 下面介绍DM8127/DM385 IPNC RDK中网页制作相关的东东. 具体来说,各位获得这个RDK包时有以下文件: IPNC_RDK_DM812x_DM385_Version3.5.0.ta ...

  10. js中去除两端逗号

    1.js replace(a,b)之替换字符串中所有指定字符的方法 var str = 'abcadeacf'; var str1 = str.replace('a', 'o'); alert(str ...