Quartus中添加時序約束

 

一、sdc文件也是要添加到Quartus 軟件中,這樣在執行Read SDC File命令時才能讀到相應的文件。html

二、在TimeQuest打開的條件下,從新編譯工程以後要Update Timing Netlist,這樣TimeQuest分析器會獲得最新的node

 網表文件進行時鐘分析。shell

轉載地址http://www.cnblogs.com/pejoicen/p/4194380.html數據庫

PLL時鐘約束

# 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
輸出時鐘參數。
確保指定的全部輸入時鐘頻率與當前配置的 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.

 

Timequest timing analyzer使用方法

 

步驟1:執行初始編譯

在應用時序約束設計以前,經過表1建立一個初始數據庫。初始數據庫從設計的post-map結過中生成。

 

表 1-1. 執行初始編譯 (1)

Quartus II軟件GUI

命令行

在Processing菜單上,指向Start,點擊Start Analysis & Synthesis。

輸入: quartus_map filtrefr

                  表 1-1註釋:

  1. quartus_map用於建立一個post-map數據庫。
  2. Analysis & Synthesis階段生成post-map數據庫。
  3. 您也能夠爲初始數據庫建立一個post-fit網表。不過,建立一個post-map網表耗時較少,而且用於本教程的例子已經足夠了

    

  

步驟2:運行TimeQuest Timing Analyzer

經過表 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?"

 

步驟3:建立一個Post-map時序網表

在指定時序要求以前,請建立一個時序網表。您能夠從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:指定時序要求

在設計中定義時鐘。每一個時鐘的屬性列表請參考表 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:更新時序網表(timing Netlist)

在您建立時序約束或例外後,經過表 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:保存Synopsys Design Constraints(SDC)文件

在爲設計指定時鐘約束並更新時序網表後,您能夠經過表 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:對初始時時序網表生成時序報告

經過表 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:保存約束到SDC文件

在指定設計中全部的時鐘約束和僞路徑後,經過表 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 文件包含時鐘約束僞路徑例外

步驟9:執行Timing-Driven編譯

保存約束到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中生成時鐘創建和時鐘保持的檢查總結報告。

步驟10:在TimeQuest Timing Analyzer中驗證時序

要得到指定路徑中詳細的時序分析數據,請查看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來優化設計。設計上的多個迭代對於完成所需的結果是必要的。

相關文章
相關標籤/搜索