1.在quartus中对设计进行时序分析2.1TimeQuest 工具Quartus® II TimeQuest Timing Analyzer是一个功能强大的ASIC型时序分析工具,能够以工业标准方法论来约束,分析和报告用户设计中所有逻辑的时序性能。
这个工具是一个严格的静态工具,使用时不需要搭建硬件环境及进行调试。
本节将介绍如何使用Quartus II TimeQuest Timing Analyzer工具的图形化功能来约束,分析及报告设计中的时序结果。
使用这个工具,我们要指定初始时序信息,包括时钟,时序例外以及信号传输中的到达和要求的时间。
我们通过后缀名为sdc(Synopsys Design Constraints)的文件来指定时序要求,然后The Quartus II Fitter将优化逻辑布局等来满足我们的时序要求。
在时序分析过程中,Quartus II TimeQuest Timing Analyzer分析设计中的每一条时序路径,计算每条路径的延迟,检查是否存在时序违例,并且报告时序结果。
一旦发现时序违例,可以精确定位到违例路径的时序细节,然后用户约束它以纠正违例。
如果时序分析没有报告违例,那么恭喜你,在这个器件中的逻辑行为将与你的设计意图一致。
使用TimeQuest分析设计时序的一般步骤为:图使用TimeQuest分析设计时序的一般步骤第一次编译时我们需要得到没有设置约束的时序结果,有助于我们给设计添加约束。
第二次编译的时序需要把包含指定时序要求的文件(后缀为sdc 的文件)添加到工程文件中执行编译,这样工具就能够按照我们的时序要求来进行映射了。
2.2timequest快速入门示例下面我们按照altera公司所给的timequest快速入门教程示例来讲解该时序分析工具的大致用法。
使用的工具是目前使用最广泛的quartusII9.1版本提供的TimeQuest工具。
首先我们打开quartus工具的例程。
在quartus工具中选择File下的open project,选择qdesigns目录下的fir_filter工程。
打开后我们能够看到如图示的模块结构图。
图qdesigns目录下的FIR例程这个工程实现了一个FIR模块。
其输入端口为clk,clkx2,reset,newt,d[7:0];输出端口为follow,yvalid,yn_out[7:0]。
clkx2这个时钟是乘法器输出数据的寄存器触发时钟,而clk是整个模块其余部分的系统时钟。
对这个设计进行时序分析,首先需要在软件中设置timequest作为默认的时序分析工具。
以下为设置方法:在Assignments 菜单中,点击Settings,Settings 对话框出现后,在Category列表下选择Timing Analysis Settings,开启Use TimeQuest Timing Analyzer during compilation,选择OK。
设置好后,执行Start Analysis & Synthesis,对项目进行编译。
这一步建立了一个post-map的数据库,给给时序分析工具使用。
当然也可以给post-fit数据库,但是对于时序预估,post-map已经足够了,而且运行的时间会更短。
在tools菜单下,选择TimeQuest Timing Analyzer,启动TimeQuest工具。
此时自动打开的是当前的工程。
当出现"No SDC files were found in the Quartus Settings File and filtref.sdc doesn't exist. Would you like to generate an SDC file from the Quartus Settings File?" 对话框时,选择NO。
图timequest界面在Netlist菜单下点击Create Timing Netlist.在出现的对话框的Input netlist, 选择Post-Map. 点击OK。
完成这些步骤之后,我们就可以开始对设计指定时序上的要求了。
在软件界面的constraints菜单下,我们能够看到当前版本软件的所有可以指定的约束。
这里简要解释一下他们的功能。
第一部分是关于时钟的。
Create clock是用来指定系统中存在的时钟的信息,包括时钟的频率,占空比等。
可以指定多个时钟,或者给一个时钟指定多个频率分别进行时序分析。
Create generated clock是指定由输入时钟信号在FPGA内部生成的时钟,通常需要指定生成这个时钟的时钟源及生成关系。
Set clock latency和set clock uncertainty是指定时钟的输入延时以及时钟信号的不确定性,时钟间隙或者时钟转移的。
Set clock group是将设计中互斥的时钟放在不同的group里面,互斥的时钟可能是不同时钟域的,也可能是同一个时钟信号进行分析时指定了2种频率各自分析。
Remove clock是将之前指定的时钟从设计中移除。
第二部分是关于输入输出端口的。
只有约束了输入输出的时序,才是一个完整严谨的约束。
否则有些寄存器的时序无法进行分析。
第三部分是一些时序的例外。
包括False Path(忽略路径),Multicycle path(多周期路径),最大最小路径延时等。
菜单的第四部分支持从QSF 文件格式的标准时序分析器约束转换为TimeQuest 分析器的SDC 文件格式,将约束写入SDC文件,或者从SDC文件中读出时序信息。
图TimeQuest指定时序约束的界面接下来我们对FIR的设计指定时序要求。
首先是时钟。
FIR这个设计存在2个时钟,我们需要对时钟特性进行指定。
例子里面这两个时钟的要求为:Clk频率50 MHz,50/50占空比;clkx2为100 MHz,占空比是60/40。
在如下图所示的creat clk对话框中,可以指定时钟名称,Period是周期,默认单位ns;波形不填默认占空比50%,上升沿在前,否则时钟按照你指定的边沿时刻跳变,;targets 用来将指定的时钟与设计的端口进行匹配,最下面是显示将要添加进入SDC文件的命令行。
按照图中的示例指定clk与clkx2分别为50MHz和100MHz。
图指定设计中的时钟添加了时钟其实就可以在tasks框下的diagnosis里面快速查看时序报告了。
依次双击每一项,左上角report框中会出现相应的报告。
黑色字体的为时序正确的报告项,红色字体表示该项存在问题。
如下图所示,点击红色报告会出现问题的原因。
从图中可以看到,问题是因为有10个没有约束的输入端口,涉及了79条输入端口路径,以及10个没有约束的输出端口,涉及10条输出端口路径。
也就是说,时序工作认为一个完整的约束,每一个端口,每一条路径都需要指定时序要求,否则时序分析无法覆盖所有的触发器。
图快速报告时序结果及显示时序异常在clock transfers报告下,可以看到时钟转移路径。
FIR设计中不需要分析从clk 到clkx2的路径,因为他们是虚假路径。
因此需要设置false path。
在clk到clkx2路径上右击鼠标,选择set false path。
之后工具背景变成淡黄色,出现out of data水印。
整个分析结果需要update一次。
设置了时钟的约束,可以得到分析报告,还可以将指定的时序要求写入SDC 文件中。
双击Task窗口下的Write SDC File,填写自定义的文件名称,就可以将之前设置的约束写入后缀名的.sdc的文件中。
之后在TimeQuest的File目录下选择Open SDC文件,打开刚才自己命名的文件,就能够看到文本形式的时序约束信息,还包括使用的期间,创立工程的日期等。
这个SDC文件将添加到工程中重新执行编译,以约束映射及布局布线。
图SDC文件的内容除了指定时钟信号,完整的时序约束还需要Set input和output delay,这样可以指定外部器件以及板级的时序。
如果设定了这两项,TimeQuest将对整个系统执行静态时序分析。
设置输入输出的时序可以将信息写入新的SDC文件,也可以在之前的文件中继续添加时序信息。
在Constraints菜单下单击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}] 在Constraints菜单下单击Set Input 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}]这里的约束的意思是,将输入信号的到达触发器端口时间相对于时钟clk 的有效边沿的延时设置为2ns。
将输出端口的数据要求时间与给定时钟的延时设置为1.5ns。
这样再生成Unconstrained Paths Summary report,就可以看到未约束的路径数为0。
也就是所有的路径都得到了约束。
2.3查看时序报告添加了完整约束后将约束写入SDC文件。
这种我们就可以查看每一条指定的路径具体的时序结果了,当然也可以看到最差的时序路径是哪一条。
这里的报告非常多,甚至包括很多本书作者一时无法解释的报告项,读者需要自行尝试锻炼。
这里仅介绍customer report 下面的timing项的使用方法时序报告的理解。
选择了customer report 下面的timing,会出现如下对话框:图report customer timing对话框在这个对话框中,用户可以自行指定需要报告的时序路径,包括时钟域的,也可以指定特定node,还可以选择分析的是建立时间,还是保持,恢复以及移除时间;可以选择一次报告的时序路径数目等。
点击report timing之后,工具会将相应数量的时序路径按照时序余量由小到大排列出来。
如果存在时序违例,特定的路径将被标红并且放到列表的最前。
在出现的报告之中,有3个主要的框。
上面的一个框将所有路径结果以表格的形式列出。
下面的2个一模一样的对话框显示的是表格中选中路径的时序结果,2个显示框是为了方便对照着查看该路径的时序。
图特定路径时序结果报告这两个一样的对话框有4个子目录可以看到path summary,statistics,data path,以及waveform。