一、sdc文件也是要添加到Quartus 软件中,这样在执行Read SDC File命令时才能读到相应的文件。html
二、在TimeQuest打开的条件下,从新编译工程以后要Update Timing Netlist,这样TimeQuest分析器会获得最新的node
网表文件进行时钟分析。shell
转载地址http://www.cnblogs.com/pejoicen/p/4194380.html数据库
# Uncommenting one of the following derive_pll_clocks linesasync
# will instruct the TimeQuest Timing Analyzer to automatically编辑器
# create derived clocks for all PLL outputs for all PLLs in a布局
# Quartus design.post
# If the PLL inputs are constrained elsewhere, uncomment the优化
# next line to automatically constrain all PLL output clocks.命令行
derive_pll_clocks
# If the PLL inputs are not constrained elsewhere, uncomment
# the next line to automatically constrain all PLL input and
# output clocks.
# derive_pll_clocks -create_base_clocks
方法 1 – 自动建立基时钟和 PLL 输出时钟
这一方法使您可以自动地约束 PLL 的输入和输出时钟。ALTPLL megafunction 中指定的
全部 PLL 参数都用于约束 PLL 的输入和输出时钟。自动更新了 ALTPLL megafunction
的修改。当建立 PLL 的输入和输出时钟时,没必要跟踪 PLL 参数的更改或指定正确的值。
为了自动约束全部输入和输出 , 要将 derive_pll_clocks 命令和 -create_base_clocks
选项一块儿使用。基于 PLL 的 MegaWizard TM Plug-In Manager 例化,TimeQuest
analyzer 肯定正确的设置。
例
derive_pll_clocks -create_base_clocks
方法 2 – 手动建立基时钟和自动建立 PLL 输出时钟
经过这种方法 , 能够手动约束 PLL 的输入时钟而且使 TimeQuest analyzer 可以自动
约束 PLL 的输出时钟。除此以外 , 与 ALTPLL megafunction 中指定的输入时钟频率相
反,您能够指定一个不一样的输入时钟频率。经过使用 ALTPLL megafunction 中指定的
参数自动建立 PLL 输出时钟。您能够尝试不一样的输入时钟频率 , 同时保持相同的 PLL
输出时钟参数。
1 确保指定的全部输入时钟频率与当前配置的 PLL 相兼容。
能够将此方法与 derive_pll_clocks 命令一块儿使用而且手动建立 PLL 的输入时钟。
例
create_clock -period 10.000 -name clk [get_ports {clk}]
derive_pll_clocks
方法 3 – 手动建立基时钟和 PLL 输出时钟
经过这种方法 , 能够手动约束 PLL 的输入时钟和输出时钟。指定了全部的 PLL 参数并
且参数值能够不一样于 ALTPLL megafunction 中指定的参数值。除此以外 , 您能够尝试
各类 PLL 输入和输出频率以及参数。
您能够将该方法与 create_clock 和 create_generate_clock 命令的组合一块儿使用。
例
create_clock -period 10.000 -name clk [get_ports {clk}]
create_generated_clock \
-name PLL_C0 \
-source [get_pins {PLL|altpll_component|pll|inclk[0]}] \
[get_pins {PLL|altpll_component|pll|clk[0]}]
create_generated_clock \
-name PLL_C1 \
-multiply_by 2 \
-source [get_pins {PLL|altpll_component|pll|inclk[0]}] \
[get_pins {PLL|altpll_component|pll|clk[1]}]
时钟约束出错
Warning (332174): Ignored filter at SDC1.sdc(1): CPU_clk could not be matched with a port
Warning (332049): Ignored create_clock at SDC1.sdc(1): Argument <targets> is an empty collection
Warning (332060): Node: SYS_clk was determined to be a clock but was found without an associated clock assignment.
没有对时钟进行约束设置
Node: <Node name> was determined to be a clock but was found without an associated clock assignment. (ID: 332060)
CAUSE: This can be caused in two ways: 1) A clock assignment was determined to be invalid, so its source objects no longer have a clock associated with them. 2) When analyzing the netlist, the node was found feeding a clock port with no other clocks feeding it.
ACTION: Use the derive_clocks command to automatically find all clock nodes in the design. Also, for any clocks that were ignored, review the warning or error message associated with the command to prevent the clock from being ignored.
在应用时序约束设计以前,经过表1建立一个初始数据库。初始数据库从设计的post-map结过中生成。
表 1-1. 执行初始编译 (1)
Quartus II软件GUI |
命令行 |
在Processing菜单上,指向Start,点击Start Analysis & Synthesis。 |
输入: quartus_map filtrefr |
表 1-1注释:
经过表 2-1中的程序,运行TimeQuest Timing Analyzer来建立和验证全部时序约束和例外。此命令将打开TimeQuest shell。
表 2-1. 运行TimeQuest Timing Analyzer
Quartus II软件GUI |
命令行 |
在Tools菜单中,单击TimeQuest Timing Analyzer。 |
输入: quartus_sta –sr project_open fir_filter -revision filtrefr |
1 当您直接从Quartus II软件中运行TimeQuest Timing Analyzer时,当前工程将会自动打开。若是使用GUI,那么当出现下面的消息时,请选择No:
"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?"
在指定时序要求以前,请建立一个时序网表。您能够从post-map或post-fit数据库中建立一个时序网表。在这一步骤中,经过表 3-1中的程序,从"步骤1:执行初始编译"中建立的post-map数据库中建立一个时序网表。
表 3-1. 建立一个Post-Map时序网表
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Netlist菜单上,点击Create Timing Netlist。 出现 Create Timing Netlist对话框。 2.在Input netlist中,选择Post-Map。 3.点击OK。 |
输入:create_timing_netlist –post_map |
1 您不能在Tasks面板中使用Create Timing Netlist命令来建立一个post-map时序网表。默认状况下,Create Timing Netlist须要一个post-fit数据库。
在设计中定义时钟。每一个时钟的属性列表请参考表 4-1。
表 4-1.设计中的时钟
时钟端口名称 |
要求 |
Cpsl_Clk25M_i |
50/50占空比的25 MHz |
在设计中建立时钟并经过表 4-2中的程序分配正确的时钟端口。要了解关于TimeQuest Timing Analyzer所支持的约束的详细信息,请参考Quartus II 手册 第3卷中的TimeQuest Timing Analyzer章节。
表 4-2. 建立时钟并分配时钟端口
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Constraints菜单中,点击 Create Clock。出现Create Clock对话框。对25 MHz时钟指定参数。单击RUN。 |
输入: #create the 25 MHz (20 ns) clock create_clock –period 20 [get_ports Cpsl_Clk25M_i] |
2. 在Constraints菜单中,点击Drive PLL clocks。出现Drive PLL clocks对话框,前面指定了PLL基时钟,什么都不选直接单击RUN便可。 |
1 默认状况下,若是未使用-waveform选项,那么create_clock命令假设50/50的占空比。
f 要了解关于建立不一样占空比时钟的详细信息,请参考Quartus II手册 第3卷中的TimeQuest Timing Analyzer章节。
完成表 4-2中显示的程序后,时钟定义完成。
在您建立时序约束或例外后,经过表 5-1中的程序,对时序网表进行更新,将全部时序要求应用到时序网表(新的clk和clkx2时钟约束)。
1 只要应用了新的时序约束,就必须对时序网表进行更新。
表 5-1. 更新时序网表(Timing Netlist)
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Update Timing Netlist命令。 |
输入:update_timing_netlist
|
在为设计指定时钟约束并更新时序网表后,您能够经过表 6-1中的程序来选择建立SDC文件。经过TimeQuest Timing Analyzer GUI或者在控制台(console)中指定的约束不会自动保存。
1 若是您在设计流程中无心覆盖任何约束,那么请使用这个初始SDC文件来恢复全部约束。初始SDC文件可做为包含设计的原始约束和例外的"golden" SDC文件。
表 6-1. 保存SDC文件
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Tasks面板中,双击Write SDC File命令。出现Write SDC File对话框。 2.在File Name栏输入名称。 |
输入:write_sdc -name.sdc r |
新的.sdc文件包含"步骤4:指定时序要求"中定义的时钟约束。Write SDC File命令能够覆盖任何现有的SDC文件。当这种状况出现时,新的SDC文件没有保持顺序或注释。所以,Altera建议单独保存利用文本编辑器能够手动编辑的一个golden SDC文件。这使您可以根据自身的规范输入注释并组织文件。
经过表 7-1中的程序定义的时钟,在指定时序约束和更新时序网表后,生成时序报告,这验证了时钟被正确地定义并应用到正确的节点。TimeQuest Timing Analyzer提供易于使用的报告生成命令,使您可以验证设计中的全部的时序要求。
表 7-1. 保存SDC命令
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report SDC命令。 |
输入:report_sdc |
图 13生成SDC约束报告(SDC Assignments Report)
SDC Assignments报告了在指定设计中包含的全部时序约束和例外。生成两个报告:一个用于时钟和一个用于时钟组。
能够用表 7-2中的程序生成一个报告,来总结设计中全部的时钟。
表 7-2. 生成报告时钟报告(Report Clocks Report)
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report Clocks命令。 |
输入:report_clocks |
图 14时钟报告
经过表 7-3中的程序,使用Report Clock Transfers命令生成一个报告来验证全部的时钟到时钟传输都是有效的。这种报告包含设计中全部的时钟到时钟传输。
表 7-3. 生成报告时钟传输(Report Clock Transfers)
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report Clock Transfers命令。 |
输入:report_clock_transfers |
图 15时钟传输报告(Clock Transfers Report)
本环节只是告诉这个部分伪路径能够做为例外不进行分析。实际的时序要在作设计时保证其正确。So,再也不详细描述,之后可能会补充。
Clock Transfers报告代表在clk(源时钟)和clkx2(目的时钟)之间存在跨时钟域路径。共有16条路径,其中clk为源节点提供时钟,clkx2为目的节点提供时钟。
在fir_filter设计中,没必要分析clk至clkx2的时钟传输,由于它们是忽略路径。经过表 7-4中的程序声明clk至clkx2的路径为伪路径。当完成该程序后,TimeQuest Timing Analyzer代表Clock Transfers报告是过期的。
表 7-4. 声明伪路径
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Clock Transfers报告中,在From Clock列选择clk。 2.右击并选择Set False Paths Between Clock Domains。这个命令代表将全部由clk驱动的源寄存器到由clkx2驱动的目的寄存器之间的路径设为伪路径。 |
输入: set_false_path -from [get_clocks clk] \ -to [get_clocks clkx2] r |
1 另外,也可使用set_clock_groups命令来声明两个时钟域之间的路径为伪路径。例如,set_clock_groups -asynchronous -group [get_clocks clk] -group
[get_clocks clkx2]。该命令代表clk到clkx2以及clkx2到clk的全部路径为伪路径。此方法是优选的。
因为您添加了一个新的时序约束,经过表 2-14中的程序更新时序网表(timing netlist)。
表 2-14. 更新Timing Netlist
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Update Timing Netlist命令。 |
输入:update_timing_netlistr |
在GUI中输入set_false_path后,全部生成的报告面板上都标有"Out of Date",这代表报告面板不包含反映TimeQuest Timing Analyzer中当前状态的约束或者例外的结果。要更新报告面板,必须从新生成全部的报告。
在命令行,从新输入命令。在GUI中,右击报告面板列表中任何过期(out-of-date) 的报告,并选择Regenerate或Regenerate all。
更新时序网表后,经过表 2-15中的程序验证时钟到时钟传输已经被声明为伪路径。
表 2-15. 验证使用Report SDC命令
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report SDC。 |
输入:report_sdcr |
图 2-4显示了新的SDC Assignments报告。
图 2-4中显示的报告代表时钟约束和伪路径是正确的。
使用Report Clocks和Report Clock Transfers命令来验证这两个时钟已经从分析中移除了。图 2-5显示了Clock Transfers报告。
在指定设计中全部的时钟约束和伪路径后,经过表 8-1中的程序将时序约束和例外保存到SDC文件。
表 8-1. 保存约束到SDC文件
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Tasks面板中,双击Write SDC File。出现Write SDC File对话框。 2.在File name栏,输入-name.sdc. |
输入:write_sdc -name.sdc |
1 这一过程覆盖以前所建立的filtref.sdc文件。若是经过Write SDC File命令覆盖SDC,那么在新的SDC文件中移除了定制的格式和注释。
.sdc 文件包含时钟约束和伪路径例外。
保存约束到SDC文件后,在设计上运行一个全编译以优化布线,从而符合约束。不过,在开始全编译以前,经过表 9-1中的程序将SDC添加到工程中。
表 9-1. 添加SDC文件到工程中
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Project菜单中,点击Add/Remove Files In Project。出现Add/Remove Files In Project对话框。 2.经过浏览来选择.sdc。 3.点击OK。 |
输入: set_global_assignment -name SDC_FILE \ -name.sdc |
将SDC添加到工程后,经过表 9-2中的程序,在设计上运行一个全编译。
表 9-2. 运行一个全编译
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Processing菜单中,点击Start Compilation。 |
输入:quartus_sh --flow compile -name |
完成编译后,TimeQuest Timing Analyzer在Compilation Report中生成时钟创建和时钟保持的检查总结报告。
要得到指定路径中详细的时序分析数据,请查看TimeQuest Timing Analyzer中的时序分析结果。
1 彻底执行布线布局功能(place-and-route)后,运行"步骤2:运行TimeQuest Timing Analyzer"中所介绍的TimeQuest Timing Analyzer。生成一个post-fit时序网表,经过表 10-1中的程序,读取SDC文件并更新时序网表来生成关于最新编译的报告。
表 10-1. 生成关于Latest Compilation的报告
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击所需报告的命令。例如:Report All Summaries。 |
输入: create_timing_netlist read_sdc filref.sdc update_timing_netlistreport_clocks create_timing_summary -setup create_timing_summary -hold create_timing_summary -recovery create_timing_summary -removal report_min_pulse_width -nworst 10 |
1 当双击其中一个报告命令时,Create Timing Netlist、Read SDC和Update Timing Netlist命令依次在Tasks面板中执行,自动生成时序网表。
时钟创建检查确保每一个寄存器至寄存器的传输不违反SDC指定的时序约束。经过表 10-2中的程序,生成一个时钟创建总结,对设计中的全部时钟进行检查,来验证没有出现违规。
表 10-2. 生成时钟设置总结检查(Clock Setup Summary Check)
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击 Report Setup Summary。 |
输入:create_timing_summary –setup |
Summary (Setup)报告
1 clkx2时钟没有出如今Summary (Setup)报告中,这是由于clk和clkx2之间全部的时钟路径已经声明是伪路径。此外,fir_filter设计不包含任何寄存器到寄存器的路径,其中目的寄存器路径由clkx2来驱动。
Summary (Setup)报告中的Slack列代表clk能知足约束,并有11.588 ns的余量。End Point TNS列是指定时钟域中全部的总负裕量(TNS)的总和。使用这个值来测量指定时钟域中失败路径的总数。
生成Summary (Setup)报告后,经过表 2-21中的程序,在设计中生成一个时钟保持检查总结。
表 10-3. 生成Summary (Hold) Report
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report Hold Summary。 |
输入:create_timing_summary –hold r |
图 16Summary (Hold)报告
Summary (Hold)报告代表clk时钟节点符合时序约束,并有0.661 ns的余量。在执行全编译以前,经过表 10-4中的程序指定全部的时序约束和例外。这样能够确保 Fitter优化设计中的关键路径。
您可使用Report Unconstrained Paths命令来验证已经约束fir_filter设计中的全部路径。
表 10-4. 指定时序约束和例外
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
在Tasks面板中,双击Report Unconstrained Paths。 |
输入:report_ucp r |
图 17Unconstrained Paths总结报告
Unconstrained Paths总结报告代表有大量的未约束路径,并详细介绍了这些路径的类型。
要充分约束此设计,利用由TimeQuest Timing Analyzer所提供的整套SDC约束。要充分约束fir_filter设计,约束全部的输入和输出端口。使用Set Input Delay和Set Output Delay对话框,或set_input_delay和set_output_delay约束来指定输入和输出延迟值。
因为附加约束应用于设计,经过文本编辑器(例如:inout_delay.sdc)建立仅包含输入和输出约束的额外SDC。添加表 10-5所示的输入和输出延迟分配到"步骤8:保存约束到SDC文件"建立的新SDC中。
表 10-5. 输入和输出延迟分配
The TimeQuest Timing Analyzer GUI |
The TimeQuest Timing Analyzer Console |
1.在Constraints菜单中,点击Set Input Delay。出现Set Input Delay对话框。 2.输入如下内容: Clock name: clk Delay value: 2 Targets: [get_ports {d[0] d[1] d[2] d[3] \ d[4] d[5] d[6] d[7] newt reset}] 3.在Constraints菜单中,点击Set Output Delay。出现Set Output Delay对话框。 4.输入如下内容: Clock name: clk Delay value: 1.5 Targets: [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}] |
要约束输入端口,输入: set_input_delay -clock clk 2 \ [get_ports {d* newt reset}] r 要约束输出端口,输入: set_output_delay -clock clk 1.5 \ [get_ports {yn_out* yvalid follow}] r |
在读取包含输入和输出延迟约束的SDC后,全部设计中的端口应该都加上了约束。
1 记住读取新的约束后更新时序网表。要了解更多信息,请参考"步骤5:更新时序网表(Timing Netlist)"。要验证全部设计中的端口都已经加上了约束,从新生成Unconstrained Paths Summary 报告。
图 18从新生成Unconstrained Paths Summary报告
结论
经过表 10-6中的程序,对设计的时钟或节点生成特定的时序检查报告。表 10-6中的程序生成一个报告,其中clk驱动目的寄存器,而且目的寄存器为acc:inst3|result,报告10条最差路径。
表 10-6. 生成Report Timing报告
TimeQuest Timing Analyzer GUI |
TimeQuest Timing Analyzer Console |
1.在Tasks面板中,双击Report Timing。出现Report Timing 对话框。 2.输入如下内容: To Clock: clk To: acc:inst3|result* Report number of paths: 10 3.剩下其它的栏使用默认的设置。 |
输入: report_timing -to_clock clk -to / acc:inst3|result* -setup -npaths 10 |
图 2-10显示了Report Timing报告。
使用Tasks面板中的Report Top Failing Paths命令来生成一个报告,该报告详细介绍了设计中的最差的失败路径。
根据Quartus_II_TimeQuest说明书_CH.pdf修改而成,因原教程使用的工程quartus中lisence不支持器件。
结论
您建立新的约束或例外,基于新的约束或例外从新运行Quartus II Fitter来优化设计。设计上的多个迭代对于完成所需的结果是必要的。