黑金动力的资料还是非常有价值的。通过建模篇,对于给定的时序关系,我总能实现。但是,这总是很初级的能力。也只是为后面的建模服务。所以,现阶段我的能力还是非常有限。我相信我一定会成为牛人,能够独挡一面。借用同学的一句话:仰望星空,脚踏实地。现在来学习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. 如何将Django部署到Apache服务器上

    操作环境: Ubuntu 16.04 Apache 2.4 Django 1.9 Python 2.7 mod_wsgi  前言:本教程纯自己查阅资料后整理,望对大家有帮助! 1. 安装 mod_ws ...

  2. requirejs打包项目

    例子: https://github.com/AinneShen/requirejsExample 用requirejs为js和css添加版本,项目共用同一个config

  3. Updated: EBS 12.1 + Transportable Tablespaces with Incremental Backup Option

    Database migration across platforms of different "endian" (byte ordering) formats using th ...

  4. Elasticsearch: 权威指南(官方教程)

    <Elasticsearch 权威指南>中文版 序言 前言 基础入门 深入搜索 处理人类语言 聚合 地理位置 数据建模 管理.监控和部署

  5. react-redux: modal

    1.actionTpye export const INCREMENT = 'INCREMENT'; export const DECREMENT = 'DECREMENT'; export cons ...

  6. 【SQL查询】查询结果翻译成其他值_decode

    decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...

  7. 兼容 数组 api map代码

    if(!("map" in Array.prototype)) Array.prototype.map=function(fun){ for(var i=0,arr=[]; i&l ...

  8. asp.net viewstate 数据过大 导致错误

    当在ViewState中放入dataSet的数据量比较大的时候,当再点页面上的控件时,不会返回到后台,并且会出现如下错误: 或者是上面的12030改成500的错误. --解决方法:Viewstate绑 ...

  9. 神经网络中的Softmax激活函数

    Softmax回归模型是logistic回归模型在多分类问题上的推广,适用于多分类问题中,且类别之间互斥的场合. Softmax将多个神经元的输出,映射到(0,1)区间内,可以看成是当前输出是属于各个 ...

  10. [STM32]HardFault 定位办法

    网上关于HardFault的定位办法好多,试到了其中一种可行的 http://www.cnblogs.com/Ilmen/p/3356147.html 特此纪录.