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 ...
随机推荐
- Linux文件夹权限详解
- 第一个字符代表文件(-).目录(d),链接(l) - 其余字符每3个一组(rwx),读(r).写(w).执行(x) - 第一组rwx:文件所有者的权限是读.写和执行 - 第二组rw-:与文件所有者 ...
- 使用cqlsh远程连接cassandra——设置cassandra.yaml里rpc_address和listen_address为ipv4地址即可
You need to edit cassandra.yaml on the node you are trying to connect to and set the node ip address ...
- Java基础摘要(一)
三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性.简单的说,一 ...
- 剑指offer--37.和为S的两个数字
链接:https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b来源:牛客网@华科渣硕 不要被题目误导了!证明 ...
- 剑指offer--25.二叉树的镜像
时间限制:1秒 空间限制:32768K 热度指数:238655 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 ...
- SpringMVC札集(01)——SpringMVC入门完整详细示例(上)
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- SQL中合并两个表的JOIN语句
SQL里有四种JOIN语句用于根据某条件合并两个表: (INNER) JOIN: 交集 LEFT (OUTER) JOIN: 左表数据全包括,右表对应的如果没有就是NULL RIGHT (OUTER) ...
- fedora to ubunto
Fedora to Ubuntu16.04 一.删除Fedora 由于双系统启动的时候是由linux系统做引导启动,所以在Windows下直接格式化Linux分区将导致无法启动Windows.解决办法 ...
- linux 权限之所有者所属组
linux 如何改变文件属性与权限 我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身 ...
- tensorflow中常用激活函数和损失函数
激活函数 各激活函数曲线对比 常用激活函数: tf.sigmoid() tf.tanh() tf.nn.relu() tf.nn.softplus() tf.nn.softmax() tf.nn.dr ...