(完整word)TimeQuest用户手册.doc

上传人:工**** 文档编号:555039504 上传时间:2024-01-15 格式:DOC 页数:43 大小:1.25MB
返回 下载 相关 举报
(完整word)TimeQuest用户手册.doc_第1页
第1页 / 共43页
(完整word)TimeQuest用户手册.doc_第2页
第2页 / 共43页
(完整word)TimeQuest用户手册.doc_第3页
第3页 / 共43页
(完整word)TimeQuest用户手册.doc_第4页
第4页 / 共43页
(完整word)TimeQuest用户手册.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《(完整word)TimeQuest用户手册.doc》由会员分享,可在线阅读,更多相关《(完整word)TimeQuest用户手册.doc(43页珍藏版)》请在金锄头文库上搜索。

1、(完整word)TimeQuest用户手册JAQLEUNGTimeQuest用户手册原文:TimeQuest User Guide(By: Ryan Scoville)秋哥小刀2017/5/11本译文包括原文的大部分内容,由于翻译水平有限,建议在阅读本译文后能够研读原文.目录第一章 译文说明1第二章 入门21.片内时序22。I/O 时序93。时序分析结果17第三章 时序分析基础191。Setup、Hold、Recoverry和Removal概念基础192。默认时序关系233.多周期304。最大和最小延时305.Recovery和Removal30第四章 SDC约束30第五章 TimeQuest

2、界面31第六章 时序模型31第七章 Quartus II与时序约束31第八章 SDC与分析脚本的TCL语法31第九章 常用结构与电路31第十章 实例31第十一章 杂谈31第一章 译文说明在翻译过程中,很多专业术语使用直译的方式往往不易理解,但选择的中文词汇又怕引起歧异,所以在这里罗列了这些词汇的准确英文拼写。在阅读过程中,若是出现难以理解的语句,请首先对照相关词汇的英文词组以读者的思维重新理解,或是直接阅读英文原文的相关章节。第二章 入门本章的编写目的是为了让用户可以更快速地上手操作时序约束.以下内容将涉及到多个主题,以帮助用户快速理解和应用时序约束技术,关于这些主题的详细内容将在后续章节中讲

3、解。建议所有用户通读本章并确认已完全理解本章内容.本章的最后一节为时序分析结果,理解时序分析结果是进行时序约束不可或缺的一部分。如果不能读懂时序分析报告,将不具备对片上时序和I/O时序约束的能力。所以,推荐在本章学习过程中能够始终结合时序分析结果进行阅读。1. 片内时序编译项目成功并启动TimeQuest,然后就可以输入时序约束命令了。如果项目中尚未添加SDC文件,可通过菜单File-New来新建一个.sdc文件。SDC文件推荐使用项目名称进行存储,且通常存储在项目文件夹中。几乎每个.sdc文件都是以下面4条命令开始:1) create_clock2) derive_pll_clocks3)

4、derive_clock_uncertainty4) set_clock_groups其中,前3条命令可以让用户在几分钟内分析完设计中的大部分时序问题.当我们学习这些命令的过程中,一定要搭配阅读迭代方法。迭代方法章节会讲述如何快速修改一个.sdc文件、如何重新运行分析、如何进行迭代分析。关于这4条命令的详细信息,可以在TimeQuest中输入-long_help进行查看:create_clock long_helpderive_pll_clocks long_helpderive_clock_uncertainty long_helpset_clock_groups long_help1) c

5、reate_clock新建一个。sdc文件后,首先要做的就是使用create_clock命令对输入FPGA的时钟进行约束.该命令的基本语法为:create_clock name sys_clk period 8.0 get_ports fpga_clk注:n 上述命令创建了一个名为sys_clk的时钟,这个时钟具有8ns的时钟周期,且这个时钟被应用到了设计端口fpga_clk上。n TCL和SDC语法是大小写敏感的,所以要保证fpga_clk与设计中时序端口的名称大小写一致。n 如果未作说明,sys_clk时钟默认在0ns时具有上升沿,4ns时具有下降沿,即默认为50%占空比。如果用户需要一个

6、不同的占空比或者需要一个移相,请使用waveform选项。但是实际设计中很少会有这种必要.n 用户通常会创建一个与所应用端口名称一致的时钟,这是完全合法的。上述例句可改写为:create_clock name fpga_clk period 8。0 get_ports fpga_clk现在将有两个独立的个体被叫做fpga_clk:一个是用户设计的端口,一个是源自该端口的时钟。n 在TCL语法中,方括号会执行其内部的语句(关于语法,会在TCL语法章节有更多的讨论)。所以get_ports fpga_clk会在设计的所有端口中查找匹配fpga_clk的端口并返回。更多的设计者习惯像下面这样以更简洁

7、的方式编写上述语句:create_clock name sys_clk period 8.0 fpga_clkn 用这条命令为每一个已知的输入时钟端口创建时钟约束.(如果用户不确信是否已为所有输入时钟创建了约束,只需先约束暂时已知的,剩下的可以在Report Uncontrained Paths中查看到。)提示:用户可以直接在SDC文件中直接输入约束命令,也可以使用可视化图形界面来添加约束。启动TimeQuest后,用TimeQuest或Quartus II打开.sdc文件,从菜单EditInsert Constraint添加约束:千万不要像下图这样从TimeQuest窗口的Constrain

8、ts下拉菜单来添加约束:虽然两种操作很像,但是后者是直接将约束应用到时序数据库,而不是添加到.sdc文件.高级设计人员可能有时需要使用后者,但对初学者来说,请务必使用前者:通过操作。sdc文件来控制时序约束。2) derive_pll_clocks添加下面的命令到你的。sdc文件:derive_pll_clocks注:n PLL的所有输出都需要使用create_generated_clock进行约束。n 用户创建PLL的过程中要配置其输出,所以PLL创建完毕后TimeQuest有足够的信息来自动约束其输出时钟。而这就是derive_pll_clocks所要做的。n 这条命令还会执行其他一些操作

9、,如:约束收发器时钟,在LVDS SERDES(并行转换器)和用户逻辑之间添加倍数周期。n 如果想知道derive_pll_clocks到底做了些什么,可以在TimeQuest的消息窗口中Derive PLL Clocks下查看:n 初学者一般不喜欢使用derive_pll_clocks,更倾向于create_generated_clock(看起来更底层些,可以让理解更扎实)。从技术上这没有问题,因为二者的最终效果是一致的。但是如果用户在设计过程中修改了PLL,他们必须要记得修改。sdc文件中相应的约束条件.因此存在太多忘记修改。sdc文件,又花费大量时间去调试的例子,所以还是使用derive

10、_pll_clocks比较靠谱.直接把PLL的约束丢给TimeQuest吧。3) derive_clock_uncertainty添加下面的命令到你的。sdc文件:derive_clock_uncertainty注:n 在65nm以下工艺水平的设计中,需要在。sdc文件中使用该命令。n 在早期工艺水平的设计中,这条语句没有任何影响,也不会做任何事。n 这条命令会计算FPGA内部时钟之间的不确定因素,像PLL抖动、时钟树抖动等。n 如果用户的。sdc文件中不包含该命令,会出现警告提示。到此,前3条命令就介绍结束了。对于一个设计文件,如果包含2路输入时钟,它的.sdc文件将如下所示:4) set_

11、clock_groups通过上面的操作,设计中大部分或者全部的时钟都得到了约束。在TimeQuest中,除非用户特别说明,默认所有的时钟都是相关的。例如,在一个8ns时钟和10ns时钟之间有若干条路径,即使这两个时钟是完全异步的,但是对TimeQuest来说,这些路径存在2ns的建立时间关系,而且TimeQuest会以此尝试对这些路径进行约束。相比其他工具那样假设所有时钟都是不相关的,TimeQuest选择了一种更保守的分析方式:存在的就是要分析的.所以,需要用户主动告诉TimeQuest哪些时钟是不相关的,这样TimeQuest就不会去分析不相关时钟之间的路径。set_clock_group

12、s命令的语法如下:set_clock_groups asynchronous group group group注:n 每个-group选项是一组相关时钟的列表n 对group选项的数目没有限制。如果是通过菜单Edit-Insert输入约束,最多只支持2个分组,这是操作界面的输入限制,可通过.sdc文本编辑来扩展分组数目。n 这条命令看起来像是在给时钟分组。其实TimeQuest假定所有时钟都是相关的,默认将它们分在了一个更大的分组中。所以,这条命令其实是在切断不相关时钟间的关联。n 任何未被分组的时钟会保持与所有时钟相关。所以如果你忘记将一个时钟分组,那么它会被保守分析:TimeQuest尝

13、试约束该时钟与其他时钟之间的异步路径.n 一个时钟不能同时存在多个分组中。n 用户可以使用多条set_clock_groups语句。n 这条命令通常会分行编写,以提高其可读性.通常“空格意味着一行结束,继续下一行.稍后会展示该语法结构。(注意:后不能跟任何其他符号,包括空格)n 对于包括复杂时钟的设计,编写这条约束命令可能会是一个迭代的过程。比如,一个包含两个DDR3核心和高速收发器的设计至少含有30多个时钟.这种情况下,首先仅对创建的时钟进行分组,未被分组的时钟仍然与所有时钟相关。如果通过约束,不相关的时钟之间仍然有失败的路径,那么就继续向命令中添加新的时钟。仍然有很大一部分时钟不会出现在s

14、et_clock_groups命令中,因为它们已经在IP核的。sdc文件中切断关联了,或者它们只和相关的时钟之间有路径连接。n 我通常不会将用于I/O时序分析的虚拟时钟添加到此约束中。因为它们不会和片上时钟之间有路径连接,所以无须考虑它们。n set_clock_groups后面的选项可以是asynchronous或exclusive。asynchronous表示时钟是都会触发,但是不能同步传递数据。exclusive表示时钟不会同时触发,因此相互独立。一个很贴切的例子就是时钟复用器,其输出会连接到两个时钟。因为同一时刻只会有一个时钟可以触发,所以它们是相互独立的.不过,TimeQuest不会

15、关心这两种标志,它会做同样的分析。这个选项其实是用作ASIC的时序分析中。n 切断时钟之间关联的另一种方法是使用set_false_path。比如切断sys_clk和dsp_clk之间的关联:set_false_path from get_clocks sys_clk to get_clocks dsp_clk set_false_path from get_clocks dsp_clk to sys_clk当时钟数目有限时,set_false_path用起来很方便.但是当时钟数目大量增加时,其可读性就大打折扣。在一个拥有3个多路输出PLL的简单的设计中,set_clock_groups命令可以在10行内清楚地显示哪些时钟是相关的。而set_false_path命令可能要超过50行,而且很难看出哪些时钟之间的关联是被切断的.编写set_clock_groups约束的快捷提示1) 因为derive_pll_clocks会根据设计自动创建很多时钟,而设计人员可能并不是很清楚这些时钟的确切名称.一种快速添加set_clock_groups约束的方式就是先完成

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号