[转]TimeQuest之delay_fall clock_fall傻傻分不清楚
这篇我想分享一个之前在用TimeQuest约束双边沿模块的input delay时犯得一个错误,有人看了可能会觉得傻傻的,什么眼神,falling delay和 falling clk怎么会分不清呢,字面意思好区分,可要深究在约束里的具体含义,还得花点功夫,下面以ddio接收模块为例说明它们的含义以及碰到的一些问题。
ddio接收模块为双边沿工作模式,如图一所示,ddio_in接入DFFH和DFFL,时钟下降沿DFFL锁存DL,但不立刻输出,直到时钟上升沿高电平使能latch时输出,同时DFFH在上升沿锁存输出DH,和DL拼接成输出数据,这样就实现了对双边沿输入数据的采样输出。
图一
其时序特性是,上升沿发送的数据下降沿采样,下降沿发送的上升沿采样,工作波形如图二所示,需要施加约束才能正确的双边沿采样。
图二
首先用create_clock创建输入时钟频率为100MHz的ddio_clk_s,然后用set input delay关联输入数据ddio_in和输入时钟ddio_clk_s,设置延迟为2ns,查看IO Timing,发现TimeQuest分析了两条路径如图三所示,一条是上升沿到下降沿,这是我们想要的,另一条是上升沿到上升沿,这不是我们需要的,而且还没有下降沿到上升沿的路径,看来这种简单的约束方式明显存在问题。
图三
set input delay默认是基于时钟上升沿设置,TimeQuest不清楚用户的真实使用情况:上升沿发出的ddio_in数据到底是被DFFH采样还是被DFFL采样呢,所以默认源端上升沿发出的数据会同时被这两个D触发器采样,这就出现了上述rise to fall和rise to rise两条路径,第二条无关路径设置为伪路径后可以被去除。
下降沿到上升沿的路径如何设置呢? 打开set input delay看看能否找到一些新的线索。
图四
如图四,首先映入我眼帘就是醒目的rise和fall的选项,既然set input delay默认是基于rise上升沿的,那勾选fall,应该就是基于下降沿了吧,这是我当时的第一反应。可是分析结果里还是没有下降沿到上升沿的路径,又注意到这个fall选项是被划在input delay options里,按理fall应该是用来修辞input delay的,但是怎么个修辞法,当时并没有细究,出于对曾今过了英语六级的那份自信,我仍然认为,fall表示数据是基于时钟下降沿输入的。当时也查了些前辈的博客,其中特权同学很早之前的一篇 深入剖析I/O 里也有对fall和rise的翻译如图五:
图五
特权同学认为fall是时钟的下降沿延时,但是fall是用来修辞input delay的而不是clock,所以我并不认可这种翻译,此时我注意到表格里还有一个参数是-clock_fall,这个好像和我想找的意思相符,为了验证参数的具体含义,又继续搜索找到了altera关于set input delay的中参数的官方解释如下:
-clock_fall Specifies that input delay is relative to the falling edge of the clock
-fall Specifies the falling input delay at the port
此时我才大悟,-clock_fall才是我一直寻找的,它才是基于时钟下降沿的意思。勾选using falling clock edge后,下降沿到上升沿的路径终于千呼万唤始出来,不过同前述,也会多一条下降沿到下降沿到的路径,用伪路径可以轻松去之。
双边沿约束的问题解决了,可是官方对fall的解释 the falling input delay 是神马意思呢?都是四级的词汇,凑在一起,就不是很明了了,数据下降延迟?听起来总感觉怪别扭的,跑去和同事一起讨论这个问题。一组输入数据变化时,哪有上升和下降之说?(数据从0010变为1001,你说是上升还是下降呢?),上升下降应该是针对某一根数据线的变化而言的(数据从0010变为1001,你可以说第0位上升了,第1位下降了),但是TimeQuest真的想知道你每根数据线的上升下降延迟吗?no no no,回想下set input delay的本质是告诉Timequest最大输入延迟让其约束建立时间,和最小延迟约束保持时间,TimeQuest只想知道输入的最大最小延迟就可以了。源端发送数据的每一位的上升延迟和下降延迟可能会不一样,也有一个大小之分,比如第0位上升延迟为0.4ns,下降延迟为0.8ns,第1位的上升延迟为0.5ns,下降延迟为0.9ns,TimeQuest会用其中相对较大的0.9ns去分析建立时间,相对小的0.4ns去分析保持时间,而不会去关心数据具体某位是如何变化的。既然TimeQuest只关心延迟的大小,那只要在set input delay里设置max min delay不就可以了吗,何必设置rise和fall呢?
测试后发现,如果不设置rise和fall,会导致约束不精准。举个例子:源端发出数据的输入上升延迟Tdelay_rise为0.5ns,下降延迟为Tdelay_fall为0.8ns,路径最大延迟为2ns,最小延迟为1ns,只设置set input delay的 max delay为2.8ns,min delay 为1.5ns,其中ddio_in[1]的路径延迟报告如图六所示。
图六
注意红色线标记,data path为2.129ns。
如果加上rise 和fall选项,设置 max fall 为2.8ns,max rise 为2.5ns,min fall 为1.8ns,min rise 为1.5ns,ddio_in[1]的延迟报告如图七所示。
图七
看红色线标记处,data path为1.998ns,比前者少了0.131ns,这两种约束的最大和最小延迟相同,但结果却不同,原因在于FPGA的内部逻辑针对输入数据的上升Trise和下降Tfall的延迟也是不一样的,假设Trise > Tfall,第一种约束方式的最大路径延迟是Trise + 2.8+ Tother,第二种方式指定了fall和rise后,TimeQuset知道了指定的最大输入延迟发生在数据下降时刻,所以分析的整体最大路径延迟会变为Tfall + 2.8 + Tother,这种约束方式更符合实际的应用,也更加精确。虽然两种约束方式的结果相差甚微,不会对普通应用造成影响,但对一些高速苛刻的应用,可就不能小视了。
set output delay一样也有rise 和 fall的选项,和set input delay作用类似,这里就不再复述了。
[转]TimeQuest之delay_fall clock_fall傻傻分不清楚的更多相关文章
- JS魔法堂:属性、特性,傻傻分不清楚
一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...
- MVP MVC MVVM 傻傻分不清
最近MVC (Model-View-Controller) 和MVVM (Model-View-ViewModel) 在微软圈成为显学,ASP.NET MVC 和WPF 的Prism (MVVM Fr ...
- Java:接口和抽象类,傻傻分不清楚?
01. 来看网络上对接口的一番解释: 接口(英文:Interface),在 Java 编程语言中是一个抽象类型,是抽象方法的集合.一个类通过继承接口的方式,从而来继承接口的抽象方法. 兄弟们,你们怎么 ...
- [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!
十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...
- OCA,OCP,OCM傻傻分不清?
可能大家知道OCA.OCP.OCM的关系是一个比一个难考,一个比一个含金量高,但是你知道具体的考试科目.考试方式.就业形势区别吗?不知道的话这篇通俗易懂的文章会让你一目了然. 区别一:含金量 ■OCA ...
- 学点经济学:M0、M1、M2、M3,傻傻分不清?(转载)
来源:http://t.10jqka.com.cn/pid_97006727.shtml 学点经济学:M0.M1.M2.M3,傻傻分不清? 25,508人浏览 2018-08-03 11:06 常听人 ...
- 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】
文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 敏捷是什么?DevOps是什么?两者有什 ...
- 傻傻分不清之 Cookie、Session、Token、JWT
傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...
- Shell中傻傻分不清楚的TOP3
Shell中傻傻分不清楚的TOP3 发布文章 近来小姐姐又犯憨憨错误,问组内小伙伴export命令不会持久化环境变量吗?反正我是问出口了..然后小伙伴就甩给了我一个<The Linux Comm ...
随机推荐
- hdu 5730 Shell Necklace——多项式求逆+拆系数FFT
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5730 可以用分治FFT.但自己只写了多项式求逆. 和COGS2259几乎很像.设A(x),指数是长度,系数 ...
- selenium - 控制浏览器窗口的大小和浏览器最大化
1.控制浏览器大小 有些前端的页面需要查看在不同像素下的兼容情况,比如把像素设置为 480*800,然后截图看看页面显示有没有问题 WebDriver 提供了 set_windows_size() 方 ...
- jvm是怎样调用方法的
jvm内部有五种调用方法的指令 invokeinterface 用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用.(Invoke interface method) ...
- 中间件——Oracle Fusion Middleware
Oracle Fusion Middleware定义: 什么是Oracle Fusion Middleware Oracle Fusion Middleware is a comprehensive ...
- 【转】Jmeter Http请求界面解释
一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称. 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息. 服务器名称或IP :HTT ...
- python中的enumerate函数用于遍历序列中的元素以及它们的下标
enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a1 b2 c ...
- composer 发布自己的开源软件
首先创建一个github项目. 在项目中,创建一个composer.json文件. { "name": "jiqing9006/valid", "de ...
- python开发模块基础:collections模块¶miko模块
一,collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdic ...
- 分数CSD编码
有符号数系统:有三重值(1, 0, -1) SD编码:12 = 16 - 4 = 10000_0000 - 100 = 1_0000_0(-1)00; = 16 - 9 + 5 = 1_0000_00 ...
- Wireshark捕获非加密的数据包
启动监听模式 root@sch01ar:~# airmon-ng start wlan0 启动Wireshark工具 root@sch01ar:~# wireshark 选择接口,这里选择wlan0m ...