当前位置:文档之家› TimeQuest快速入门

TimeQuest快速入门

TimeQuest快速入门简介本教程介绍用TimeQuest Analyzer进行时序约束和静态时序分析的必要步骤。

所用示例文件在\qdesigns\fir_filter文件夹下。

TimeQuest约束步骤下面的步骤描述了用TimeQuest对设计进行时序约束的步骤,每一步操作包含GUI和Command-line的操作方法。

第1步:在QuartusII中打开&建立工程启动QuartusII软件,在\qdesigns\fir_filter文件夹下打开工程compile_fir_filter.qpf。

第2步:设置TimeQuest Analyzer默认状态下,QuartusII使用Classic Timing Analyzer作为默认的时序分析工具。

需要在QuatusII中进行如下设置将TimeQuest Analyzer设为当前工程的时序分析器。

在【Assignment】菜单下单击【Settings】,在【Category】列表中展开【Timing Analysis Processing】,选择【Use TimeQuest Analyzer during compilation】,然后点击【OK】即可。

第3步:进行初始的编译在将时序约束应用到设计之前,需要为TimeQuest创建初始的数据。

初始数据是通过post-map结果产生的。

步骤如下:在【Processing】菜单栏下,选择【Start】/【Start Analysis&Synthesis】。

通过运行【Analysis&Synthesis】产生post-map数据。

还可以用post-fit网表来产生初始数据。

但是创建post-map数据所用时间更少,而且post-map数据对本设计示例工程来说已经够用。

第4步:启动TimeQuest Analyzer为了创建并验证时序约束,需要启动TimeQuest Analyzer。

在【Tools】菜单下,单击【TimeQuest Analyzer】启动TimeQuest Analyzer。

第5步:创建Post-Map时序网表在指定时序要求前,需要首先创建一个时序网表。

可以从post-map或post-fit 数据中创建时序网表(见第3步)。

利用post-map数据创建时序网表的方法为:在【netlist】菜单下,单击【Create Timing Netlist】,在弹出的对话框中,选择【Input netlist type】下的【Post-Map】,单击【OK】。

不能通过【Task】面板下的【Create Timing Netlist】命令来创建post-map网表。

在默认情况下,【Create Timing Netlist】需要post-fit数据。

第6步:指定时序要求在fir_filter设计中,需要定义两个时钟。

表1中列出了两个时钟的属性。

在【Constraints】菜单下,单击【Create Clock】,弹出【Create Clock】对话框。

按表1的要求进行设置。

并在【Targets】单击右侧按键打开【Name Finder】对话框,单击【list】,在列表中选择[clk],单击【OK】即可。

用同样的方法对[clkx2]进行设置。

默认情况下,时钟信号的占空比为50%。

第7步:更新时序网表当创建时序约束后,必需更新时序网表,将所有的时序要求应用于时序网表中。

用如下步骤将clk和clkx2的时钟约束更新到时序网表中。

在【Task】面板中,双击【Updata Timing Netlist】,即可更新时序网表。

第8步:保存Synopsys Design Constraints(SDC)文件在产生时序报告前,需要首先创建SDC文件。

在指定时序约束、更新时序网表后,应该创建一个SDC文件。

所有的时序约束被保持的SDC文件中。

后续如果不小心改写了时序约束,可以通过最初的SDC文件来重新恢复最初的时序设置。

最初的SDC文件可以被当做“Golden”SDC文件,因为它里面包含了设计最原始的时序约束。

创建SDC文件的步骤为:在【Tasks】面板中,双击【Write SDC File】,在弹出的【Write SDC File】对话框中输入文件名“Filterf.sdc”。

现在filterf.sdc文件中包含在第6步中设置的两个时钟的约束。

【Write SDC File】命令可以覆盖原来的SDC文件。

因此,推荐保存一个“Golden”SDC文件,可用通过文本编辑器来编辑此文件。

第9步:产生时序报告当更新时序网表后,可以为定义的两个时钟产生时序报告。

为了产生报告来验证所有的时钟被正确的定义且应用到合适的节点,在【Tasks】面板中双击【Report SDC】命令,弹出如图1所示的报告。

图1 Report SDC产生的报告TimeQuest Analyzer仅产生[Create Clock]报告是因为这是设计中仅有的时序约束。

当产生【Report SDC】报告后,还可以产生一个报告,里面包含了设计中所有时钟的信息,步骤为:在【Tasks】面板中,双击【Report Clocks】命令,弹出如图2所示报告。

图2 Report Clock产生的报告当产生【Report Clocks】报告后,可以用【Report Clock Transfers】命令来产生报告来验证所有的时钟-时钟传输的有效性。

此报告中包含了设计中所有的clock-to-clock的传输。

步骤为:在【Tasks】面板中双击【Report Clock Transfer】命令。

弹出如图3所示的报告。

图3 Clock Transfer报告【Report Clock Transfers】报告说明源时钟clk和目的时钟clkx2之间存在数据传输。

有9个实例是clk驱动源节点,clkx2驱动目的节点。

在fir_filter设计中,应该声明所有的clk-to-clkx2的时钟传输,即false paths。

在【Clock Transfers】报告中,在【From Clock】栏中选中[clk]。

右击,然后选择【Set False Paths Between Clock Domains】。

此命令将切断两个时钟域之间的路径。

当执行完以上命令后,TimeQuest会提示Clock Transfer报告过时了。

因为添加了新的时序约束,需要更新时序网表。

在【Tasks】面板中,双击【Update Timing Netlist】即可更新时序网表。

当执行【Set False Path】命令后,所有产生的报告被打上“Out of Date”的标号,说明说有的报告都已经不能包含当前的时序约束。

需要重新产生相应的报告。

当更新完时序网表后,可以用【Report SDC】命令来验证clock-to-clock之间被切断的传输。

在【Tasks】面板中双击【Report SDC】命令后,弹出如图4所示的报告。

图4 Report SDC弹出的报告图4的报告说明时钟约束和false paths被更正。

现在可以重新进行【Report Clock】和【Report Clock Transfers】来验证,两个时钟被移除的分析。

图5为【Report Clock Transfers】命令产生的报告。

图5 Clock Transfer的报告“User Cut”说明用户已经cut the clock domains。

第10步:保存约束到SDC文件当指定所有的时钟约束和false paths后,应该将时序约束保存到SDC文件中。

在【Tasks】面板中,双击【Write SDC File】,在弹出的对话框中输入文件名filtref.sdc即可。

当覆盖以前的sdc文件时,系统会提示是否覆盖。

第11步:执行Timing-Driven编译当保存SDC文件后,进行完全编译来优化布局来满足约束条件。

当进行完全编译之前,需要将SDC文件添加到工程中。

在QuartusII主界面中,单击【Project】菜单下的【Add/Remove Files In Project】,将SDC文件添加进去即可。

然后在【Processing】菜单下,单击【Start Compilation】进行编译。

当编译完毕后,TimeQuest Analyzer会产生一个报告包含时钟的建立和保持时间的检查。

第12步:在TimeQuest Analyzer中验证时序为了得到指定路径的详细时序分析,需要在TimeQuest Analyzer中查看时序分析结果。

执行完全编译后,需要重新启动TimeQuest,具体步骤见“第4步”。

需要产生新的时序网表、读取SDC文件、更新时序网表来为最新的编译产生报告。

为此,执行下面的操作:在【Tasks】面板中,双击【Create Timing Netlist】,【Read SDC File】,【Update Timing Netlist】。

当双击以上命令后,系统会自动建立时序网表。

时钟建立时间的检查确保register-to-register之间的数据传输不会违反在SDC文件中指定的约束。

通过产生时钟建立时间报告来验证时序。

通过双击【Tasks】面板上的【Report Setup Summary】命令来产生报告,如图5所示。

图6 Setup报告Clkx2时钟没有在【Summary Setup】中报告,是因为clk和clkx2之间的路径已经被剪掉。

当产生【Summary Setup】报告后,可以通过【Tasks】面板中的【Report Hold Summary】命令来产生保持时间的报告。

图7 Hold报告Slack栏为正,说明保持时间满足时序要求。

可以通过【Tasks】面板下【Macro】栏下的【Report All Summaries】命令来产生下列的报告:【Setup】,【Hold】,【Recovery】,【Removal】,【Minimum】,【Pulse Width】和【Clocks】。

在进行全面编译之前应该制定所有的约束和例外。

这可以保证Fitter对设计中的关键路径进行优化。

可以用【Tasks】面板中的【Report Unconstrained paths】命令来验证是否对fir_filter设计中所有的路径进行了约束。

图9 未进行约束的路径图9中显示出有些路径没有被约束。

为了对设计进行约束,所有的输出和输入端口必须被约束。

可以用【Set Input Delay】和【Set Output Delay】对话框来约束输入和输出的延时。

额外的约束被添加到设计中,可以创建一个新的SDC文件来保存输入输出约束,如inout.sdc。

添加输入/输出延时的步骤如下:在【Constraints】菜单中点击【Set Input Delay】,弹出【Set Input Delay】对话框,进行如下设置:Clock name: clkDelay value: 2Targets: [get_ports {d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] newt reset}]同理在【Set Output Delay】中进行如下设置:Clock name: clkDelay value: 1.5Targets: [get_ports {yn_out[0] yn_out[1] yn_out[2] yn_out[3] yn_out[4] yn_out[5]yn_out[6] yn_out[7] yvalid follow}]至此,所有的端口都已经被约束。

相关主题