TIMEQUEST学习之黑金动力(二)

之一就是第一章,这是第二章。在开始之前,要对第一章内容说说我理解到的:

(1)时序分析是节点对节点的分析。(2)这个latch edge是锁存上一个lunch edge输出的(满足建立关系的)值。(3)建立关系和建立时间余量。(4)保持关系和保持时间余量。特别是使用屁股计数就是实际TQ的分析方法。

TimeQuest 模型是用来解决两个点寄存器(节点)之间的建立关系和保持关系问题。但是在一个最简单的 HDL 设计,不可能仅是由两个寄存器就组成,里边可能会有“很多
很多很多”对寄存器。结果 TimeQuest 就会用自己的时序分析模型,逐个检查“很多很多很多”对寄存器之间的“建立关系和保持关系是否合格化”。

在 FPGA 综合的过程中,逻辑资源之间会开始“布线”,把相关的单位连线起来。设计有多大,那么连线的数量就越多,最终这庞大的连线就成为网表。

图 2.2.1 是布线过程的概念图 ... 布线过程就是按软模型,在 FPGA 巨大的资源库里建立硬模型,逻辑资源之间的链接称为连线,所有连线的总和称为网表。

用简单的话来说,当某个实验下载到开发板的时候,它有属于自己的“物理网表(硬模型)”。为了测试这个“物理网表”到底合不合格,所以我们需要用 TimeQuest 这个工具
“仿真”这个“物理网表”,而 TimeQuest 不会直接仿真“物理网表”,而是仿真不同质量的网表,又或者仿真不同质量的硬模型。

TimeQuest 是一个针对各种延迟因数作出约束的静态时序分析工具”。

有一个问题笔者一直无法释怀,当 Modelsim 仿真 HDL 模块之际,如果考虑延迟信息,时序就会出现物理延迟,换之在 Modelsim 界面上出现的波形,事实上也是静态时序的一种,不过 Modelsim 只能看个大概而已,而不能做出实际的分析。所以笔者一直认为,Modelsim 既然要仿真就仿真理想时序而不是物理时序。所以说,物理时序分析的工作我们就交给 TimeQuest 去干。

笔者曾一度认为,TimeQuest 的延迟取值是按实际的物理延迟,不过事实恰恰相反,TimeQuest 对延迟取值是夸张的表现,这话何解呢?
假设有一条路径的物理延迟是 10ns,如果是 worst-case 网表 TimeQuest 就会报 18ns,如果是 best-case 网表 TimeQuest 就会报 12ns。很明显, 18ns 还有 12ns 的报值比起实际的10ns 多出 8ns 还有 2ns,其中这 8ns 和 2ns 的差别就是保险余量。

(注:这里的clk1和clk2不是对齐的,也即是有相移,此时理想的保持关系-180度(-5ns),理想建立时序5ns。)

TimeQuest 有一个评估值,称为 Fmax。Fmax 是用来评估节点的最高频率。每当网表质量越低,节点的延迟取值就会越高, Fmax 也随之会越低。如果 Fmax 越低 fpga 就不能发挥实际的速度和性能,因此我们可以这样说:网表质量越低,保险余量越大,Fmax评估越低,性能限制也越高。

根据理论而言,外部的时钟源比起内部的时钟源更容易产生时间抖动,而时间抖动会给外部时钟路径产生不同延迟,也因此产生多可能性的时序图,如图 3.3.6 所示。笔者在研究时钟抖动的时候吃过不少苦头,而 TimeQuest 也用了一大半的约束命令针对外部时钟路径。

第一层时间要求,第二层时间要求:

第一层时间要求,HDL 不仅可以照顾到 Tdata 的 10ns 时间要求,也可以设计到它。因此 Tdata 可以断定为第一层时间要求。

第二层时间要求,HDL 只可以照顾到 Tdata 的 3ns 时间要求,可是却涉及不了,因此 Tdata 可以断定为第二层时间。

我们知道 TimeQuest 是一个笨蛋,在默认的情况下 TimeQuest 模型都是以单时钟作为基准去分析节点是否合格。有时我们会遇见如图 3.4.5 的情形,这时候我们就要使用相关的约束命令告诉 TimeQuest “某对节点是用 N 个时钟工作”。如此一来, TimeQuest 就会知道某对节点是使用 N 个时间工作。

HDL 涉及不了的时间要求交给 TimeQuest 去做,不过在此之前 HDL 必须尽量做好“理想时序”的部分,最后“物理时序”的部分则交给 TimeQuest 去分析和涉及。

在第一章笔者曾说过,TimeQuest 模型的基本结构是由一对节点组成,不过节点是没有个性的东西,如果节点放在 fpga 内部,它就会成为寄存器,又称 TimeQuest 内部模型。换之如果节点放在 fpga 外部,它就成为 fpga 和外部器件(ic),又称 TimeQuest 外部模型。

不过外部模型不一定是山寨成功,如图 3.5.2 所示,如果主机 fpga 给从机 ic 驱动时钟信号和数据。结果而言 TimeQuest 模型一定会山寨失败,这种情形有 spi, iic, ps/2 时序等。此外,没有时钟信号,而有控制信号或者控制命令之间的数据传输也会让 TimeQuest 模型上寨失败,这种情形有静态 ram,传统 lcd 驱动等。还有一种情形就是单纯的数据传输,也会无法山寨成功 TimeQuest 模型,这种情形有 uart 和 vga 时序等。读者可能会问:“如果外部模型山寨失败的话,那么外部延迟因数又如何约束呢?”这是一个多疑的问题,TimeQuest 只是一匹只懂在模型里打滚的笨蛋而已,如果模型无法成立 TimeQuest 就会无用武之地。此时,我们也只能做好内部模型的分析即可 ... 外边就交个人品和运气。

同学们知道内部模型与外部模型的具体区别吗?内部模型与外部模型的区别就在于知道与不知道,自动与手动。所谓知道与不知道是指,有关内部模型的各种延迟信息
TimeQuest 可以通过综合器取得。换之,外部模型的延迟信息必须人为劳动,透过相关的约束命令告诉 TimeQuest 才行,这就是所谓的自动和手动。

笔者认为约束命令的功用,就是再现分析环境而已,而不是干扰硬模型的实际内容。sdc 文件有如 vt 文件,约束命令好比验证语言 ... 不过 Modelsim 仿真对象是软模型,而TimeQuest 的分析对象是硬模型。Modelsim 只用产生理想时序,看看模块的行为是否达到预期的效果。换之 TimeQuest 只用分析物理时序,看看综合结果是否造就时序违规,或者硬模型能不能在特定的环境下很好运行。

内部延迟因数几乎可以被 TimeQuest 认知,所以也没有什么好谈的;换之,外部延迟因数 TimeQuest 却完全不认识。TimeQuest 模型也有内部与外部之分,内部模型充满内部延迟因数而外部模型充满外部延迟因数。就是因为内部延迟因数 TimeQuest 它什么都知道的关系,所以 TimeQuest 会自动认识,也用不着认为告诉它相关的延迟信息。反之外部延迟因数就是因为 TimeQuest 它什么都不知道,结果我们必须手动透过相关的约束命令,再告诉它相关的外部延迟信息。

最后我们也小谈一下 TimeQuest 模型的山寨行为,实际上不是要 TimeQuest 模型去模仿什么 ... 而是分析 TimeQuest 模型到底能不能在外部成立,典型的外部模型就是 fpga 与sdram。

(注:小字部分,是应用作者的即黑金动力--FPGA的那些事儿)

时间: 2024-10-07 22:07:49

TIMEQUEST学习之黑金动力(二)的相关文章

timequest学习之黑金动力(一)

黑金动力的资料还是非常有价值的.通过建模篇,对于给定的时序关系,我总能实现.但是,这总是很初级的能力.也只是为后面的建模服务.所以,现阶段我的能力还是非常有限.我相信我一定会成为牛人,能够独挡一面.借用同学的一句话:仰望星空,脚踏实地.现在来学习FPGA的时序约束. 时序约束,是要对时序有要求为前提才有时序约束.以前的建模都是想像时序是否满足,也有实际约束过但是这里的时序约束是为了熟悉TQ,而做的约束.也就是没有具体的时序要求.直到最近遇到了,模块的最高运行频率.比如在64位加法器,4级流水线实

TIMEQUEST学习之黑金动力(三)

不知不觉,学到的第四章.但是对于TQ的内部模型和外部模型的完整分析还是没有很好的理解.接着学习......... 我们也了解静态时序分析的第一步骤,亦即时钟方面的约束.此外,也稍微对 Report Timing 逐步深入了解,何为一举列出多有相关的时序报告等. 在此我们需要用到 set_multicycle_path 约束命令. 严格来说 set_multicycle_path 的约束行为是告诉 TimeQuest 更动某对节点的启动沿和锁存沿 ... 想必读者听不明白是吧?说傻瓜点就是,告诉

TIMEQUEST学习之黑金动力(四)

现在知道时序约束主要是FPGA to ic,或者ic to FPGA. 上图可以表示FPGA to IC, IC to FPGA. fpga2ic:fpga2ext 是 fpga 致 ic 信号的走线延迟:clk2fpga 是时钟信号致 fpga 的走线延迟:clk2ext 是时钟信号致 fpga 的走线延迟:Tsu/Th 外部器件的寄存器特性:( Tsu 信号建立时间: Th 信号保持时间)ic2fpga:ext2fpga 是 ic 致 fpga 信号的走线延迟:clk2fpga 是时钟信号致

一个女大学生的代码学习之路(二)

首先说一下,写这种文章是由于我在四月四日晚上,在手动搭建自己的第一个ssh项目的时候,遇到了一个配置的问题,怎么解决也弄不好,当时是四号晚上九点,我看了一眼表,我就想两个小时之内,我要是能搞定就算行了,但是其实,我搞到三点才OK(凌晨),那时候已经是五号了,转天是一家子去扫墓的时候,结果我居然以这种一个理由没有去,理由是我太累了么?我只是就是搭了一个架子,就是由于我的包太混乱了,导致不兼容,所以tomcat总也不启动,你可能认为好笑,这么简单一个问题怎么就费这多多时间呢,但是作为一个刚接触三框架

kafka学习之路(二)——提高

kafka学习之路(二)--提高 消息发送流程 因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理.为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区.多个生产者和消费者能够同时生产和获取消息.     过程: 1.Producer根据指定的partition方法(round-robin.hash等),将消息发布到指定topic的partition里面 2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否

学习oracle数据库引航二——后台进程

from 谭怀远--数据库领航 后台进程 一.system monitor(SMON) (非正常关闭后的)实例恢复 二.process monitor(PMON) 回滚事务 释放锁及其它资源 重启死掉的调度器.(在共享服务器中用).分配用户连到哪个服务器上. 在监听器中注册服务信息 三.DBWn和LGWR DBWRn下写入磁盘文件 四.check point(CKPT) 喊DBWn写脏数据 完后会更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即C

Android的学习之路(二)项目中原生文件的使用场景和文件介绍

1.src文件:java源代码存放目录 2.gen 文件:自动生成所有由android开发工具自动生成的文件,目录中最重要的就是R.java文件,这个文件由android开 发工具自动产生的.android开发工具会自动根据你存放res目录的资源,同步更新修稿R.java文件,正因为 R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java.R.java文件在应用中起到了字典的作 用,它包含了各种资源的ID,通过R.java,应用可以很方便的找到对应资源, 2.1R.java 

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

Qt学习总结-ui篇(二)

qccs定义圆角 border-radius:10px; 如果想给特定位置定义圆角,如: 左上角:border-left-top-radius:10px; 右下角色:border-right-bottom-rasius:10px; 半透明效果 只需要在css中使用rgba(100,100,100,40)这种形式来表示颜色即可. 为可执行文件添加图标 1.新建文件:finename.rc 文件名无所谓,只要后缀为rc就可以. 2.编辑新建的文件,输入以下内容: IDI_ICON1 ICON DIS