FPGA時(shí)序約束時(shí)鐘約束#************************************************************** # Create Clock #************************************************************** create_clock -period 8 -name "ENET0_RX_CLK" [get_ports ENET0_RX_CLK] create_clock -period 8 -name "ENET1_RX_CLK" [get_ports ENET1_RX_CLK] create_clock -period 8 -name "ENET2_RX_CLK" [get_ports ENET2_RX_CLK]
get_ports,get_nets,get_pins區(qū)別
PLL時(shí)鐘約束# Uncommenting one of the following derive_pll_clocks lines # will instruct the TimeQuest Timing Analyzer to automatically # create derived clocks for all PLL outputs for all PLLs in a # Quartus design. # 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 – 自動(dòng)創(chuàng)建基時(shí)鐘和 PLL 輸出時(shí)鐘 例
方法 2 – 手動(dòng)創(chuàng)建基時(shí)鐘和自動(dòng)創(chuàng)建 PLL 輸出時(shí)鐘 例
方法 3 – 手動(dòng)創(chuàng)建基時(shí)鐘和 PLL 輸出時(shí)鐘 例
時(shí)鐘約束出錯(cuò)
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. 沒(méi)有對(duì)時(shí)鐘進(jìn)行約束設(shè)置 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.
Timequest timing analyzer使用方法
步驟1:執(zhí)行初始編譯在應(yīng)用時(shí)序約束設(shè)計(jì)之前,通過(guò)表1創(chuàng)建一個(gè)初始數(shù)據(jù)庫(kù)。初始數(shù)據(jù)庫(kù)從設(shè)計(jì)的post-map結(jié)過(guò)中生成。
表 1-1. 執(zhí)行初始編譯 (1)
表 1-1注釋:
圖 1 Analysis & Synthesis 步驟2:運(yùn)行TimeQuest Timing Analyzer通過(guò)表 2-1中的程序,運(yùn)行TimeQuest Timing Analyzer來(lái)創(chuàng)建和驗(yàn)證所有時(shí)序約束和例外。此命令將打開TimeQuest shell。 表 2-1. 運(yùn)行TimeQuest Timing Analyzer
1 當(dāng)您直接從Quartus II軟件中運(yùn)行TimeQuest Timing Analyzer時(shí),當(dāng)前工程將會(huì)自動(dòng)打開。如果使用GUI,那么當(dāng)出現(xiàn)下面的消息時(shí),請(qǐng)選擇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?"
圖 2TimeQuest Timing Analyzer 步驟3:創(chuàng)建一個(gè)Post-map時(shí)序網(wǎng)表在指定時(shí)序要求之前,請(qǐng)創(chuàng)建一個(gè)時(shí)序網(wǎng)表。您可以從post-map或post-fit數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)時(shí)序網(wǎng)表。在這一步驟中,通過(guò)表 3-1中的程序,從"步驟1:執(zhí)行初始編譯"中創(chuàng)建的post-map數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)時(shí)序網(wǎng)表。 表 3-1. 創(chuàng)建一個(gè)Post-Map時(shí)序網(wǎng)表
1 您不能在Tasks面板中使用Create Timing Netlist命令來(lái)創(chuàng)建一個(gè)post-map時(shí)序網(wǎng)表。默認(rèn)情況下,Create Timing Netlist需要一個(gè)post-fit數(shù)據(jù)庫(kù)。
圖 3Create Timing Netlist
圖 4Input netlist
圖 5waiting
圖 6創(chuàng)建完畢 步驟4:指定時(shí)序要求在設(shè)計(jì)中定義時(shí)鐘。每個(gè)時(shí)鐘的屬性列表請(qǐng)參考表 4-1。 表 4-1.設(shè)計(jì)中的時(shí)鐘
在設(shè)計(jì)中創(chuàng)建時(shí)鐘并通過(guò)表 4-2中的程序分配正確的時(shí)鐘端口。要了解關(guān)于TimeQuest Timing Analyzer所支持的約束的詳細(xì)信息,請(qǐng)參考Quartus II 手冊(cè) 第3卷中的TimeQuest Timing Analyzer章節(jié)。 表 4-2. 創(chuàng)建時(shí)鐘并分配時(shí)鐘端口
1 默認(rèn)情況下,如果未使用-waveform選項(xiàng),那么create_clock命令假設(shè)50/50的占空比。 f 要了解關(guān)于創(chuàng)建不同占空比時(shí)鐘的詳細(xì)信息,請(qǐng)參考Quartus II手冊(cè) 第3卷中的TimeQuest Timing Analyzer章節(jié)。 完成表 4-2中顯示的程序后,時(shí)鐘定義完成。
圖 7Create clock
圖 8設(shè)置參數(shù)
圖 9指定時(shí)鐘
圖 10 Create clock設(shè)置完畢
圖 11Drive PLL clocks 步驟5:更新時(shí)序網(wǎng)表(timing Netlist)在您創(chuàng)建時(shí)序約束或例外后,通過(guò)表 5-1中的程序,對(duì)時(shí)序網(wǎng)表進(jìn)行更新,將所有時(shí)序要求應(yīng)用到時(shí)序網(wǎng)表(新的clk和clkx2時(shí)鐘約束)。 1 只要應(yīng)用了新的時(shí)序約束,就必須對(duì)時(shí)序網(wǎng)表進(jìn)行更新。 表 5-1. 更新時(shí)序網(wǎng)表(Timing Netlist)
圖 12Update Timing Netlist 步驟6:保存Synopsys Design Constraints(SDC)文件在為設(shè)計(jì)指定時(shí)鐘約束并更新時(shí)序網(wǎng)表后,您可以通過(guò)表 6-1中的程序來(lái)選擇創(chuàng)建SDC文件。通過(guò)TimeQuest Timing Analyzer GUI或者在控制臺(tái)(console)中指定的約束不會(huì)自動(dòng)保存。 1 如果您在設(shè)計(jì)流程中無(wú)意覆蓋任何約束,那么請(qǐng)使用這個(gè)初始SDC文件來(lái)恢復(fù)所有約束。初始SDC文件可作為包含設(shè)計(jì)的原始約束和例外的"golden" SDC文件。 表 6-1. 保存SDC文件
新的.sdc文件包含"步驟4:指定時(shí)序要求"中定義的時(shí)鐘約束。Write SDC File命令可以覆蓋任何現(xiàn)有的SDC文件。當(dāng)這種情況出現(xiàn)時(shí),新的SDC文件沒(méi)有保持順序或注釋。因此,Altera建議單獨(dú)保存利用文本編輯器可以手動(dòng)編輯的一個(gè)golden SDC文件。這使您能夠根據(jù)自身的規(guī)范輸入注釋并組織文件。 步驟7:對(duì)初始時(shí)時(shí)序網(wǎng)表生成時(shí)序報(bào)告通過(guò)表 7-1中的程序定義的時(shí)鐘,在指定時(shí)序約束和更新時(shí)序網(wǎng)表后,生成時(shí)序報(bào)告,這驗(yàn)證了時(shí)鐘被正確地定義并應(yīng)用到正確的節(jié)點(diǎn)。TimeQuest Timing Analyzer提供易于使用的報(bào)告生成命令,使您能夠驗(yàn)證設(shè)計(jì)中的所有的時(shí)序要求。 表 7-1. 保存SDC命令
圖 13生成SDC約束報(bào)告(SDC Assignments Report) SDC Assignments報(bào)告了在指定設(shè)計(jì)中包含的所有時(shí)序約束和例外。生成兩個(gè)報(bào)告:一個(gè)用于時(shí)鐘和一個(gè)用于時(shí)鐘組。 可以用表 7-2中的程序生成一個(gè)報(bào)告,來(lái)總結(jié)設(shè)計(jì)中所有的時(shí)鐘。 表 7-2. 生成報(bào)告時(shí)鐘報(bào)告(Report Clocks Report)
圖 14時(shí)鐘報(bào)告
通過(guò)表 7-3中的程序,使用Report Clock Transfers命令生成一個(gè)報(bào)告來(lái)驗(yàn)證所有的時(shí)鐘到時(shí)鐘傳輸都是有效的。這種報(bào)告包含設(shè)計(jì)中所有的時(shí)鐘到時(shí)鐘傳輸。 表 7-3. 生成報(bào)告時(shí)鐘傳輸(Report Clock Transfers)
圖 15時(shí)鐘傳輸報(bào)告(Clock Transfers Report)
本環(huán)節(jié)只是告訴這個(gè)部分偽路徑可以作為例外不進(jìn)行分析。實(shí)際的時(shí)序要在做設(shè)計(jì)時(shí)保證其正確。So,不再詳細(xì)描述,以后可能會(huì)補(bǔ)充。
Clock Transfers報(bào)告表明在clk(源時(shí)鐘)和clkx2(目的時(shí)鐘)之間存在跨時(shí)鐘域路徑。共有16條路徑,其中clk為源節(jié)點(diǎn)提供時(shí)鐘,clkx2為目的節(jié)點(diǎn)提供時(shí)鐘。 在fir_filter設(shè)計(jì)中,不必分析clk至clkx2的時(shí)鐘傳輸,因?yàn)樗鼈兪呛雎月窂?。通過(guò)表 7-4中的程序聲明clk至clkx2的路徑為偽路徑。當(dāng)完成該程序后,TimeQuest Timing Analyzer表明Clock Transfers報(bào)告是過(guò)時(shí)的。 表 7-4. 聲明偽路徑
1 另外,也可以使用set_clock_groups命令來(lái)聲明兩個(gè)時(shí)鐘域之間的路徑為偽路徑。例如,set_clock_groups -asynchronous -group [get_clocks clk] -group [get_clocks clkx2]。該命令表明clk到clkx2以及clkx2到clk的所有路徑為偽路徑。此方法是優(yōu)選的。 由于您添加了一個(gè)新的時(shí)序約束,通過(guò)表 2-14中的程序更新時(shí)序網(wǎng)表(timing netlist)。 表 2-14. 更新Timing Netlist
在GUI中輸入set_false_path后,所有生成的報(bào)告面板上都標(biāo)有"Out of Date",這表明報(bào)告面板不包含反映TimeQuest Timing Analyzer中當(dāng)前狀態(tài)的約束或者例外的結(jié)果。要更新報(bào)告面板,必須重新生成所有的報(bào)告。 在命令行,重新輸入命令。在GUI中,右擊報(bào)告面板列表中任何過(guò)時(shí)(out-of-date) 的報(bào)告,并選擇Regenerate或Regenerate all。 更新時(shí)序網(wǎng)表后,通過(guò)表 2-15中的程序驗(yàn)證時(shí)鐘到時(shí)鐘傳輸已經(jīng)被聲明為偽路徑。 表 2-15. 驗(yàn)證使用Report SDC命令
圖 2-4顯示了新的SDC Assignments報(bào)告。
圖 2-4中顯示的報(bào)告表明時(shí)鐘約束和偽路徑是正確的。 使用Report Clocks和Report Clock Transfers命令來(lái)驗(yàn)證這兩個(gè)時(shí)鐘已經(jīng)從分析中移除了。圖 2-5顯示了Clock Transfers報(bào)告。 步驟8:保存約束到SDC文件在指定設(shè)計(jì)中所有的時(shí)鐘約束和偽路徑后,通過(guò)表 8-1中的程序?qū)r(shí)序約束和例外保存到SDC文件。 表 8-1. 保存約束到SDC文件
1 這一過(guò)程覆蓋之前所創(chuàng)建的filtref.sdc文件。如果通過(guò)Write SDC File命令覆蓋SDC,那么在新的SDC文件中移除了定制的格式和注釋。 .sdc 文件包含時(shí)鐘約束和偽路徑例外。 步驟9:執(zhí)行Timing-Driven編譯保存約束到SDC文件后,在設(shè)計(jì)上運(yùn)行一個(gè)全編譯以優(yōu)化布線,從而符合約束。不過(guò),在開始全編譯之前,通過(guò)表 9-1中的程序?qū)DC添加到工程中。 表 9-1. 添加SDC文件到工程中
將SDC添加到工程后,通過(guò)表 9-2中的程序,在設(shè)計(jì)上運(yùn)行一個(gè)全編譯。 表 9-2. 運(yùn)行一個(gè)全編譯
完成編譯后,TimeQuest Timing Analyzer在Compilation Report中生成時(shí)鐘建立和時(shí)鐘保持的檢查總結(jié)報(bào)告。 步驟10:在TimeQuest Timing Analyzer中驗(yàn)證時(shí)序要獲得指定路徑中詳細(xì)的時(shí)序分析數(shù)據(jù),請(qǐng)查看TimeQuest Timing Analyzer中的時(shí)序分析結(jié)果。
1 完全執(zhí)行布線布局功能(place-and-route)后,運(yùn)行"步驟2:運(yùn)行TimeQuest Timing Analyzer"中所介紹的TimeQuest Timing Analyzer。生成一個(gè)post-fit時(shí)序網(wǎng)表,通過(guò)表 10-1中的程序,讀取SDC文件并更新時(shí)序網(wǎng)表來(lái)生成關(guān)于最新編譯的報(bào)告。
表 10-1. 生成關(guān)于Latest Compilation的報(bào)告
1 當(dāng)雙擊其中一個(gè)報(bào)告命令時(shí),Create Timing Netlist、Read SDC和Update Timing Netlist命令依次在Tasks面板中執(zhí)行,自動(dòng)生成時(shí)序網(wǎng)表。 時(shí)鐘建立檢查確保每個(gè)寄存器至寄存器的傳輸不違反SDC指定的時(shí)序約束。通過(guò)表 10-2中的程序,生成一個(gè)時(shí)鐘建立總結(jié),對(duì)設(shè)計(jì)中的所有時(shí)鐘進(jìn)行檢查,來(lái)驗(yàn)證沒(méi)有出現(xiàn)違規(guī)。 表 10-2. 生成時(shí)鐘設(shè)置總結(jié)檢查(Clock Setup Summary Check)
Summary (Setup)報(bào)告 1 clkx2時(shí)鐘沒(méi)有出現(xiàn)在Summary (Setup)報(bào)告中,這是因?yàn)?span style="font-family: Courier New;">clk和clkx2之間所有的時(shí)鐘路徑已經(jīng)聲明是偽路徑。此外,fir_filter設(shè)計(jì)不包含任何寄存器到寄存器的路徑,其中目的寄存器路徑由clkx2來(lái)驅(qū)動(dòng)。 Summary (Setup)報(bào)告中的Slack列表明clk能滿足約束,并有11.588 ns的余量。End Point TNS列是指定時(shí)鐘域中所有的總負(fù)裕量(TNS)的總和。使用這個(gè)值來(lái)測(cè)量指定時(shí)鐘域中失敗路徑的總數(shù)。
生成Summary (Setup)報(bào)告后,通過(guò)表 2-21中的程序,在設(shè)計(jì)中生成一個(gè)時(shí)鐘保持檢查總結(jié)。 表 10-3. 生成Summary (Hold) Report
圖 16Summary (Hold)報(bào)告 Summary (Hold)報(bào)告表明clk時(shí)鐘節(jié)點(diǎn)符合時(shí)序約束,并有0.661 ns的余量。在執(zhí)行全編譯之前,通過(guò)表 10-4中的程序指定所有的時(shí)序約束和例外。這樣可以確保 Fitter優(yōu)化設(shè)計(jì)中的關(guān)鍵路徑。 您可以使用Report Unconstrained Paths命令來(lái)驗(yàn)證已經(jīng)約束fir_filter設(shè)計(jì)中的所有路徑。 表 10-4. 指定時(shí)序約束和例外
圖 17Unconstrained Paths總結(jié)報(bào)告 Unconstrained Paths總結(jié)報(bào)告表明有大量的未約束路徑,并詳細(xì)介紹了這些路徑的類型。 要充分約束此設(shè)計(jì),利用由TimeQuest Timing Analyzer所提供的整套SDC約束。要充分約束fir_filter設(shè)計(jì),約束所有的輸入和輸出端口。使用Set Input Delay和Set Output Delay對(duì)話框,或set_input_delay和set_output_delay約束來(lái)指定輸入和輸出延遲值。 由于附加約束應(yīng)用于設(shè)計(jì),通過(guò)文本編輯器(例如:inout_delay.sdc)創(chuàng)建僅包含輸入和輸出約束的額外SDC。添加表 10-5所示的輸入和輸出延遲分配到"步驟8:保存約束到SDC文件"創(chuàng)建的新SDC中。 表 10-5. 輸入和輸出延遲分配
在讀取包含輸入和輸出延遲約束的SDC后,所有設(shè)計(jì)中的端口應(yīng)該都加上了約束。 1 記住讀取新的約束后更新時(shí)序網(wǎng)表。要了解更多信息,請(qǐng)參考"步驟5:更新時(shí)序網(wǎng)表(Timing Netlist)"。要驗(yàn)證所有設(shè)計(jì)中的端口都已經(jīng)加上了約束,重新生成Unconstrained Paths Summary 報(bào)告。
圖 18重新生成Unconstrained Paths Summary報(bào)告 結(jié)論 通過(guò)表 10-6中的程序,對(duì)設(shè)計(jì)的時(shí)鐘或節(jié)點(diǎn)生成特定的時(shí)序檢查報(bào)告。表 10-6中的程序生成一個(gè)報(bào)告,其中clk驅(qū)動(dòng)目的寄存器,并且目的寄存器為 acc:inst3|result,報(bào)告10條最差路徑。 表 10-6. 生成Report Timing報(bào)告
圖 2-10顯示了Report Timing報(bào)告。
使用Tasks面板中的Report Top Failing Paths命令來(lái)生成一個(gè)報(bào)告,該報(bào)告詳細(xì)介紹了設(shè)計(jì)中的最差的失敗路徑。
根據(jù)Quartus_II_TimeQuest說(shuō)明書_CH.pdf修改而成,因原教程使用的工程quartus中l(wèi)isence不支持器件。
結(jié)論 您創(chuàng)建新的約束或例外,基于新的約束或例外重新運(yùn)行Quartus II Fitter來(lái)優(yōu)化設(shè)計(jì)。設(shè)計(jì)上的多個(gè)迭代對(duì)于完成所需的結(jié)果是必要的。 |
|
來(lái)自: yng326309158 > 《Verilog》