timequest学习之黑金动力(一)
黑金动力的资料还是非常有价值的。通过建模篇,对于给定的时序关系,我总能实现。但是,这总是很初级的能力。也只是为后面的建模服务。所以,现阶段我的能力还是非常有限。我相信我一定会成为牛人,能够独挡一面。借用同学的一句话:仰望星空,脚踏实地。现在来学习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学习之黑金动力(一)的更多相关文章
- TIMEQUEST学习之黑金动力(二)
之一就是第一章,这是第二章.在开始之前,要对第一章内容说说我理解到的: (1)时序分析是节点对节点的分析.(2)这个latch edge是锁存上一个lunch edge输出的(满足建立关系的)值.(3 ...
- TIMEQUEST学习之黑金动力(三)
不知不觉,学到的第四章.但是对于TQ的内部模型和外部模型的完整分析还是没有很好的理解.接着学习......... 我们也了解静态时序分析的第一步骤,亦即时钟方面的约束.此外,也稍微对 Report T ...
- TIMEQUEST学习之黑金动力(四)
现在知道时序约束主要是FPGA to ic,或者ic to FPGA. 上图可以表示FPGA to IC, IC to FPGA. fpga2ic:fpga2ext 是 fpga 致 ic 信号的走线 ...
- TimeQuest学习
1.物理时钟特性:clock skew(时钟差),jitter(拉动),clock latency(时钟潜伏),这些物理时钟特性又称为uncertainl--非定性,或非理想性. clock skew ...
- TimeQuest学习总结
1. 基本时钟约束:creat_clock 2. 生成时钟约束:creat_generated_clock 3. I/O输入输出约束:(1)纯组合逻辑:set_max_delay & set_ ...
- usb server新产品(旧老板设备)-给自己一个学习硬件的动力
- 【黑金原创教程】【TimeQuest】【第一章】TimeQuest 静态时序分析模型的概念
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/ ...
- 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- 【黑金原创教程】【TimeQuest】【第三章】TimeQuest 扫盲文
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
随机推荐
- 第三方库PIL简单使用
PIL为第三方库,需要简单安装,最容易的安装方法 pip install PIL 详细内容见http://effbot.org/imagingbook/ 下面展示一个简单用例:(字母验证码简单实现) ...
- VS2015自带v120的Platform Toolset
在VS2015安装组件时,勾选 “Windows 8.1 和 Windows Phone 8.0/8.1”下面的“工具和 Windows SDK”,将会安装Visual Studio 2013 (v1 ...
- 让Android模拟器飞一会
https://software.intel.com/zh-cn/android/articles/speeding-up-the-android-emulator-on-intel-architec ...
- PostgreSQL内存配置记录
PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...
- 打包发布自己的nodejs包
下午的时候写了一篇关于一个不成熟的模板引擎的博客,觉得还是不太够,然后就封装了起来,做成了一款开发包.最后为了尝试一下如何发布自己的包,就又完善了一下.做此文以记之. 初衷 说来也不是什么高大上的东西 ...
- toString 和 valueOf 总结
两者的共同点与不同点: 共同点:二者都能用来数据转换,并且在输出对象时会自动调用. 不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString,没有操作 ...
- linux rm删除含有特殊符号目录或者文件
想要删除time$1.class,用rm time$1.class是不行的,可以用 rm time"$"1.class 删掉 假设Linux系统中有一个文件名叫“-polo”. ...
- linux下 /boot 分区空间不足及其衍生问题
linux的/boot引导分区有时会提示空间不足的问题,虽不影响系统的正常运行,但是人类天生对于未知的恐惧感总是影响心情的.而且在按安装其他软件的过程在中可能会出现以下问题: gzip: stdout ...
- Linux paste 命令
Linux paste命令用于合并文件的列. paste指令会把每个文件以列对列的方式,一列列地加以合并. 语法 paste [-s][-d <间隔字符>][--help][--versi ...
- storm-kafka源码走读之KafkaSpout
from: http://blog.csdn.net/wzhg0508/article/details/40903919 (五)storm-kafka源码走读之KafkaSpout 原创 2014年1 ...