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