TIMEQUEST学习之黑金动力(二)

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

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

 

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

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

TIMEQUEST学习之黑金动力(二)_第1张图片

图 2.2.1 是布线过程的概念图 ... 布线过程就是按软模型,在 FPGA 巨大的资源库里建立硬模型,逻辑资源之间的链接称为连线,所有连线的总和称为网表。TIMEQUEST学习之黑金动力(二)_第2张图片

 

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

TIMEQUEST学习之黑金动力(二)_第3张图片

 

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 的差别就是保险余量。

 

TIMEQUEST学习之黑金动力(二)_第4张图片

(注:这里的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 外部模型。

 

TIMEQUEST学习之黑金动力(二)_第5张图片

不过外部模型不一定是山寨成功,如图 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的那些事儿)

 

转载于:https://www.cnblogs.com/cornhill/p/4020904.html

你可能感兴趣的:(TIMEQUEST学习之黑金动力(二))