- Intel FPGA權威設計指南:基于Quartus Prime Pro 19集成開發環境
- 何賓編著
- 6347字
- 2021-10-29 21:34:01
2.8 設計的約束
設計者指定的設計約束、分配和邏輯選項會影響 Quartus Prime 軟件編譯器實現設計的方式。編譯器嘗試以高于滿足設計約束的行為綜合和布局邏輯。此外,設計約束還會影響時序分析器與功耗分析器影響綜合、布局和布線。
設計者可以使用腳本在圖形用戶接口(Graphic User Interface,GUI)中指定設計約束,也可以在保存約束的文件中直接指定約束。Quartus Prime 軟件在下面的文件中保留 GUI 中指定的約束。
1)Intel Quartus Prime設置文件(.qsf)
位置為“<工程目錄>/<版本名字>.qsf”。包含工程當前版本的項目范圍和實例級分配,采用Tcl語法。工程的每個版本都有一個單獨的.qsf文件。
2)Synopsys設計約束文件(.sdc)
位置為“<工程目錄>/<版本名字>.sdc”。時序分析器使用業界標準的 SDC(Synopsys Design Constraints,SDC)格式,并將這些約束保存在.sdc文件中。
使用Tcl,通過組合.qsf文件和.sdc文件的語法,設計者就可以自動執行多個不同設置的迭代、修改約束和重新編譯。
2.8.1 通過GUI指定約束的方法
Quartus Prime軟件提供的工具可以幫助設計者手動實現你的設計。這些工具支持設計可視化、預填充參數和窗口交叉探測,編譯設計探索和調試。
在 Quartus Prime 軟件中創建或更新約束時,“Message”窗口的“System”標簽將顯示等效的Tcl命令。利用這些命令作為未來腳本化設計定義和編譯的參考。
1.全局約束和分配
全局約束和工程設置影響整個 Quartus 工程和設計中所有適用的邏輯。在工程的早期開發階段,設計者經常定義全局約束。例如,運行New Project Wizard時,Quartus Prime軟件在.qsf 文件中保存全局約束,每個工程的修訂版本有一個。用于設置全局約束的 Quartus 工具如表2.10所示。
表2.10 用于設置全局約束的Quartus工具

2.節點、實體和實例級約束
節點、實體和實例級的約束應用于設計層次結構的子集,這些約束優先于影響設計層次結構相同部分的任何全局分配。Quartus設置節點、實體和實例級的約束如表2.11所示。
表2.11 Quartus設置節點、實體和實例級的約束

2.8.2 使用Tcl腳本約束設計的方法
設計者可以使用.sdc 和.qsf 設置文件執行所有的設計分配。通過使用 Tcl 腳本,將這些文件集成到編譯和優化流程中。即使.sdc 和.qsf 文件是用 Tcl 語法編寫的,但它們本身不能執行。
當使用 Quartus Tcl 包時,設計者的腳本就可以打開工程,進行分析和編譯設計,并將編譯結果與已知目標和基準進行比較。此外,這樣的腳本可以通過修改約束和重新編譯設計來自動迭代設計過程。
1.創建工程和應用約束
命令行可執行文件包括用于公共全局工程設置和命令的選項。設計者可以使用 Tcl 腳本應用約束,如引腳位置和時序分配。通過執行菜單命令Project->Generate Tcl File for Project來寫一個Tcl約束文件或者為一個已經存在的工程生成一個文件。
該示例使用Tcl腳本創建項目,并使用<Intel Quartus Prime安裝目錄>/qdesigns/fir_filter目錄中的教程設計文件應用工程約束,如代碼清單2-4所示。
代碼清單2-4 Tcl約束(1)

將腳本保存到一個名字為“setup_proj.tcl”的文件中,并在命令行提示符下面輸入示例中說明的命令,以創建設計、應用約束、編譯設計,以及執行快角(Fast-Corner)和慢角(Slow-Corner)定時分析。時序分析的結果保存在filtref_sta_1.rpt和filtref_sta_2.rpt文件中,如代碼清單2-5所示。
代碼清單2-5 Tcl約束(2)

輸入如代碼清單 2-6 所示的命令,創建設計、應用約束和編譯設計,沒有執行時序分析。
代碼清單2-6 Tcl約束(3)

quartus_sh-flow 編譯命令執行全編譯,它等效于在工具欄中單擊“Start Compilation”按鈕。
2.分配一個引腳
使用下面的Tcl命令,將一個信號分配到一個引腳或器件位置,如代碼清單2-7所示。代碼清單2-7 Tcl約束(4)

有效的位置是所使用 FPGA 芯片的引腳名字。某些器件還支持邊沿位置和 I/O 組位置。其中,邊沿位置可以是 EDGE_BOTTOM、EDGE_LEFT、EDGE_TOP 和 EDGE_RIGHT;I/O組位置包括IOB ANK_1~IOBANK_n,其中n是設備中I/O組的數量。
3.產生Quartus設置文件
Quartus Prime軟件允許設計者從當前版本產生.qsf文件。設計者可以在一個腳本編譯流程中嵌入這些約束,甚至為設計優化創建.qsf文件集。
為了從 Quartus Prime 軟件生成.qsf 文件,在 Quartus Prime 主界面主菜單下,選擇Assignments->Export Assignments。
要以人們可讀的形式組織.qsf文件,執行菜單命令Project->Organize Intel Quartus Prime Settings File,生成組織的.qsf文件,如代碼清單2-8所示。
代碼清單2-8 組織的.qsf文件


這個例子給出了.qsf 文件如何表征設計修訂。set_global_assignment 命令實現所有全局約束和軟件設置,set_location_assignment 將設計中的每個 I/O 節點約束到器件的一個物理引腳。
4..sdc文件
Quartus Prime軟件將時序約束保存在.sdc文件中,該文件使用了Tcl腳本。設計者可以將這些約束嵌入到一個腳本編譯流程中,甚至可以為時序優化創建.sdc 文件集。一個小型設計的時序約束文件如代碼清單2-9所示。
代碼清單2-9 一個小型設計的時序約束


5.Tcl腳本流程
作為對.sdc 文件和.qsf 文件的替代方法,設計者可以在 Tcl 腳本中執行所有設計分配和時序約束。在這種情況下,自動編譯和定制結果報告的腳本也包含在設計約束中。
設計者可以將設計的內容導出到過程的可執行 Tcl(.tcl)文件,然后在嘗試使用其他約束后使用生成的腳本來恢復設置。
執行菜單命令Project->Generate Tcl File for Project,將約束導出為可執行Tcl腳本,如代碼清單2-10所示。
代碼清單2-10 bliking_led_generated.tcl文件



2.8.3 在Assignment Editor中添加約束條件
在Assignment Editor中為clk添加全局約束條件的步驟主要包括:
(1)在Quartus Prime主界面主菜單中,選擇Assignments->Assignment Editor。
(2)彈出“Assignment Editor”界面,如圖2.70所示。在該界面中,雙擊“To”一欄下面的“《new》”,則變成如圖2.71所示的界面。在“To”一欄下面單擊按鈕。

圖2.70 “Assignment Editor”界面(1)
(3)彈出“Node Finder”對話框。在該對話框界面中,單擊“Look in:”右側的按鈕。

圖2.71 “Assignment Editor”界面(2)
(4)彈出“Select Hierarchy Level”對話框,如圖2.72所示。在該對話框中,選中top。
(5)單擊“OK”按鈕,退出“Select Hierarchy Level”對話框。
(6)在“Node Finder”對話框中,在“Named”標題欄右側的文本框中輸入通配符*,然后單擊“Search”按鈕。
(7)如圖 2.73 所示,在“Matching Nodes:”標題欄的下方列出了設計中的所有節點,選中clk選項,單擊按鈕,將clk添加到右側的“Nodes Found:”標題欄的下方。
(8)單擊“OK”按鈕,退出“Node Finder”對話框。
(9)如圖2.74所示,雙擊“Assignment Name”一欄中的“《new》”,出現浮動菜單。在浮動菜單內,選擇Global Signal(Accepts wildcards),表示clk具有全局信號屬性。
(10)如圖 2.75 所示,雙擊“Value”一欄和“clk”一行交叉的空白處,彈出浮動菜單。在浮動菜單內,選擇Global Clock,表示將clk指定為全局時鐘。

圖2.72 “Select Hierarchy Level”對話框

圖2.73 “Node Finder”對話框

圖2.74 選擇Global Signal(Accepts wildcards)

圖2.75 選擇Global Clock
(11)如圖 2.75 所示,雙擊“Enabled”一欄和“clk”一行交叉的空白處,彈出浮動菜單。在浮動菜單內,選擇Yes。
(12)按“Ctrl+S”組合鍵,保存在Assignment Editor內的修改。
2.8.4 在Pin Planner中添加約束條件
在FPGA設計時,I/O 規劃(I/O planning)包括創建與引腳相關的分配,并針對引腳布局指南來驗證它們。這個過程可以確保目標器件內適配的成功。當設計者在工程的初始階段規劃和分配 I/O 引腳時,設計與目標器件和 PCB 特性的兼容性。因此,設計過程可以減少迭代次數,并且可以更快地開發出精確的PCB布局。
設計者甚至可以在定義設計文件之前規劃 I/O 引腳。分配尚未在設計文件中定義的預期節點,包括接口 IP 核信號,并且產生頂層文件。頂層文件例化設計的下一層結構,包括存儲器、高速I/O、設備配置等接口端口信息和調試工具。
通過名字或拖動到單元格,將設計元素、I/O 標準、接口 IP 和其他屬性分配到器件的I/O引腳,然后產生頂層文件用于I/O驗證。
使用I/O分配驗證來完全分析I/O引腳與VCCIO、VREF、電遷移(電流密度)、同步切換輸出(Simultaneous Switching Output,SSO)、驅動強度、I/O標準、PCI_IO鉗位二極管和I/O引腳方向兼容性規則。Quartus Prime軟件提供Pin Planner工具,用于查看、分配和驗證器件I/O引腳的邏輯與屬性。或者,設計者可以在Tcl腳本中或直接在HDL代碼中輸入I/O分配。
在Pin Planner中添加I/O約束條件的步驟主要包括:
(1)在Quartus Prime主界面主菜單下,選擇Assignments->Pin Planner。
(2)彈出“Pin Planner”對話框,如圖2.76所示。下面介紹一些術語。

圖2.76 “Pin Planner”對話框
① 器件封裝(以BGA為例)。
如圖 2.77 所示,陶瓷或塑料散熱器表面安裝有 FPGA 芯片和 I/O 引腳或焊球。在引腳鍵合BGA示例中,銅線將檢查焊盤連接到封裝的焊球。

圖2.77 BGA封裝結構
在 Pin Planner 主界面主菜單下,選擇 View->Show->Package Top 或 View->Show->Package Bottom,查看器件的頂視圖(從上往下看)和底視圖(從下往上看)。
② I/O組(I/O Bank)。
將 I/O 組中的 I/O 引腳分組,以分配 I/O 標準。每個編號的組有它自己的電源引腳,稱為 VCCIO 引腳,用于高 I/O 性能。VCCIO 引腳指定的電壓范圍為 1.5~3.3V。每個組包含帶有不同I/O標準的多個引腳。在一個組中的所有引腳必須使用相同的VCCIO信號。
在Pin Planner主界面主菜單下,選擇View->Show->I/O Banks,查看不同的I/O組,如圖2.78所示。

圖2.78 Cyclone 10 GX器件內不同的I/O組(用不同的顏色和編號標識)
③ I/O引腳(I/O Pin)。
封裝底部或者外圍上的引線或小焊球。每個引腳都有一個字母行和列號,從不使用字母I、O、Q、S、X和Z。當超過時,重復字母,并且以字母A作為前綴。默認,顯示所有I/O引腳。
④ 焊盤(Pad)。
I/O 引腳連接到位于硅片頂部金屬層周邊的焊盤。每個焊盤都用一個從 0 開始的 ID 編號,并在器件周圍以逆時針方向遞增。
在Pin Planner主界面主菜單下,選擇View->Pad View,打開“Pad View”界面,如圖2.79所示。

圖2.79 “Pad View”界面(局部放大)
⑤ VREF引腳組(VREF Pin Group)。
一組引腳,包括電壓參考I/O標準所需的一個專用VREF引腳。VREF組包含的引腳數少于 I/O 組。這樣,可以保持 VREF 引腳的信號完整性。I/O 組中存在一個或多個VREF 組。VREF 組中的引腳存在于 I/O 組中。VREF 組中的引腳共享相同的 VCCIO 和VREF電壓。
(3)在 Pin Planner 主界面底部的窗口中,以列表的形式給出了 Node Name(節點的名字),其中 Direction (方向)由綜合后的網表得到,設計者不能在這里修改其方向,如圖2.80所示。
(4)使用下列方式之一,確定“Node Name”一欄下每個邏輯端口在FPGA器件物理引腳的位置(使用C10-EDP-1硬件開發平臺,參考附錄給出的硬件原理圖)。

圖2.80 邏輯引腳與器件的物理引腳對應
① 雙擊“Node Name”一欄下每行節點所對應“Location”欄下的空白單元格,出現下拉框,設計者可以通過下拉框選擇合適的引腳位置,也可以在單元格中直接輸入引腳的位置。
② 選中“Node Name”一欄下的某一行節點,然后拖曳到圖 2.78 內相應的引腳位置即可。
思考與練習2-8:在圖2.78中查看每個邏輯端口在FPGA上具體物理引腳的位置,以及I/O組的編號。
(5)在“I/O Standard”一欄下為所有節點選擇1.8V標準,這是因為該I/O組采用1.8V供電。
(6)在Pin Planner主界面主菜單下,選擇File->Export…。
(7)彈出“Export”對話框。在該對話框中,將保存類型設置為“Tcl Script File (*.tcl)”,并將文件名命名為“Pin_constraint”,并用寫字板打開該文件,可以看到其約束格式,如代碼清單2-11所示。
代碼清單2-11 Pin_contraint.tcl文件


(8)切換到Quartus Prime主界面中,在“Assignment Editor”界面中可以看到新添加的I/O約束條件,如圖2.81所示。

圖2.81 “Assignment Editor”界面
2.8.5 I/O分配分析
I/O 分配分析根據完整的 I/O 系統和電路板布線規則集來驗證 I/O 分配的合理性。完整的 I/O 分配分析驗證直接饋送到或由 PLL、LVDS 或千兆收發器塊等資源饋送的塊。此外,檢查器驗證VREF引腳使用的正確性、引腳位置和混合I/O標準。
在早期引腳規劃期間運行 I/O 分配分析,在編譯之前驗證開始保留的引腳分配。一旦確定了設計文件,運行 I/O 分配分析以對綜合網表執行更徹底的合法性檢查。每當修改 I/O 分配時運行I/O分配檢查。
適配器分配引腳以適應你的約束。例如,如果將邊沿位置分配給一組LVDS引腳,則適配器會為指定邊沿位置的每個LVDS引腳分配引腳位置,然后執行合法性檢查。要顯示適配器放置的引腳,在Pin Planner主界面主菜單下,選擇View->Show->Show Fitter Placements。要接受這些建議的引腳位置,設計者必須對引腳分配進行逆向注解。
查看 I/O 分配警告報告,以查看和解決所有的分配警告。例如,警告某些設計引腳具有未定義的驅動強度或壓擺率。適配器將未定義的單端輸出和雙向引腳識別未非校準 OCT。要解決警告,為報告的引腳分配電流強度和壓擺率。或者,為引腳分配端接。當引腳有OCT分配時,設計者無法分配驅動強度或壓擺率。
根據表2.12給出的I/O規則檢查示例驗證設計分配。
表2.12 I/O規則檢查示例

信號切換噪聲規則如表2.13所示。
表2.13 信號切換噪聲規則

執行I/O分配分析的步驟主要包括:
(1)在Pin Planner主界面主菜單下,選擇Processing->Start I/O Assignment Analysis,Quartus軟件開始執行I/O分配分析。
(2)完成分析后,通過下面兩種方法之一打開編譯報告。
① 在“Tasks”窗口的“Compilation”標題欄下,單擊“Compilation Report”選項。
② 在“Compilation Dashboard”界面中,單擊“Plan”右側的按鈕。
(3)彈出“Compilation Report-top”界面,如圖2.82所示。

圖2.82 “Compilation Report-top”界面
① I/O Rule(I/O規則)部分包括I/O Rules Details(I/O規則細節)、I/O Rules Matrix (I/O 規則矩陣)、I/O Rules Summary(I/O 規則總結),它們列出了關于測試 I/O 規則的總結、細節和矩陣信息。
圖 2.82 的右側窗口中指示規則是否 Pass(通過)、Fail(失敗)、或 Unchecked(沒有檢查)。嚴重等級表示規則對有效分析的重要性。“Inapplicabe(不適用)”規則不適用于目標器件系列。
② I/O Assignment Warnings(I/O分配警告)列出了每個引腳生成的警告信息。
③ Resource Section(資源部分),具體包括Input Pins、Output Pins、I/O Bank Usage等信息,用于定量顯示各種引腳類型和I/O組的使用。
2.8.6 添加簡單的時序約束條件
本節將介紹.sdc文件及優先級,以及添加簡單的時序約束的方法。
1..sdc文件及優先級
設計者必須將自己創建的.sdc 文件添加到工程中,以便在適配和時序分析時讀取它。適配器和時序分析器按.sdc 文件在.qsf 文件中出現的順序來處理它。如果.qsf 文件中沒有出現.sdc文件,則Quartus Primer軟件會在工程目錄中搜索名字為<current revision>.sdc的.sdc文件。
設計者可以在Quartus Prime軟件主界面主菜單下,選擇Settings->Timing Analyzer,以添加、刪除或更改工程中.sdc文件的處理順序。
如果使用Quartus Prime文本編輯器創建.sdc文件,則在保存文件時默認使能“Add file to the project”(添加文件到工程中)選項。如果使用其他編輯器創建.sdc文件,則必須將該文件添加到該工程中。
.sdc 文件僅包含時序約束命令,用于操作時序網表或控制編譯的 Tcl 命令必須位于單獨的Tcl腳本中。
本節將添加 create_clock 約束,該約束允許設計者定義設計中時鐘的屬性和要求。設計者必須定義時鐘約束以確定設計的性能并限制進入FPGA的外部時鐘。設計者可以在時序分析器圖形用戶接口(Graphic User Interface,GUI)中輸入約束,或者直接在.sdc文件中輸入約束條件。

注
如果在命令行中鍵入 read_sdc 命令而沒有任何參數,則時序分析器會讀取嵌入在HDL文件中的時序,然后遵循.sdc文件的優先級順序。
2.添加簡單時序約束
下面將為該設計添加簡單的時序約束條件,主要步驟包括:
(1)在Quartus Prime主界面主菜單下,選擇File->New…。
(2)彈出“New”對話框。在該對話框中,展開 Other Files。在展開項中,選擇Synopsys Design Constraints File。
(3)單擊“OK”按鈕。
(4)按“Ctrl+S”組合鍵,將該文件保存為Timing_constaint.sdc,并關閉該文件。
(5)使用下面的方式之一啟動時序分析器(Timing Analyzer)。
① 在 Quartus Prime 主界面的“Tasks”窗口的“Analysis”標題欄下,找到并用鼠標左鍵單擊“Timing Analyzer”。
② 在 Quartus Prime 主界面主菜單下,選擇Tools->Timing Analyzer。
(6)啟動 Timing Analyzer(時序分析器)主界面。在該主界面主菜單下,選擇 Netlist->Create Timing Netlist…。
(7)出現“Create Timing Netlist”對話框,如圖2.83所示。在該對話框中,單擊“OK”按鈕。

圖2.83 “Create Timing Netlist”對話框
(8)在Timing Analyzer主界面主菜單下,選擇Constraints->Create Clock…。
(9)彈出“Create Clock”對話框,如圖 2.84(a)所示。在該對話框中,設計者可以指定時鐘名字(Clock name,-name)、時鐘周期(Period,-period)、波形邊沿(Waveform edges)上升(Rising)和下降(Falling)的值,以及應用于約束的目標信號(Targets)。
在該設計中,按如下設置參數。
① Clock name:clk1.
② Period:10.000ns.
③ 單擊“Targets:”右側的按鈕,彈出“Name Finder”對話框。在該對話框中,單擊“List”按鈕。在左下方窗口中列出了 9 個信號,選中 clk,然后單擊
按鈕,將該信號添加到右側的窗口中,如圖2.84(b)所示。

圖2.84 “Create Clock”和“Name Finder”對話框
(10)單擊“OK”按鈕,退出“Name Finder”對話框。
(11)在“Create Clock”對話框的“SDC command:”右側的文本框中給出了創建時鐘的SDC命令格式為“create_clock-name clk1-period 10.000 [get_ports{clk}]”。
該約束將時鐘的頻率約束為最少100MHz(period為10.000ns)。
(12)單擊“Create Clock”對話框中的“Run”按鈕,退出該對話框。
(13)在 Timing Analyzer 主界面底部的窗口中,在“tcl>”提示符后,給出并運行了該條tcl命令,如圖2.85所示。

圖2.85 運行create_clock命令

注
在時序分析器中定義的約束直接應用于時序數據庫,但不會自動轉移到.sdc文件。因此,需要選擇Write SDC File命令,以將GUI中的約束變化保留到.sdc文件中。
(14)通過下面方式之一,將tcl命令寫到.sdc文件中。
① 在Timing Analyzer左下方的“Tasks”窗口中,找到并單擊“Write SDC File…”,如圖2.86所示。
② 在Timing Analyzer主界面主菜單下,選擇Constraints->Write SDC File…。
(15)如圖2.87所示,彈出“Write SDC File”對話框。在該對話框中,通過單擊“SDC file name:”右側的按鈕,定位到前面創建的 Timing_constraint.sdc 文件。從該對話框中可知,寫.sdc文件的Tcl命令為“write_sdc-expand"Timing_constaint.sdc"”。

圖2.86 “Tasks”窗口

圖2.87 “Write SDC File”對話框
(16)單擊“OK”按鈕,退出“Write SDC File”對話框。
(17)退出Timing Analyzer主界面。
讀者可以打開 Timing_constraint.sdc 文件查看時鐘約束的腳本命令(后面會詳細介紹時序約束),如代碼清單2-12所示。
代碼清單2-12 Timing_constraint.sdc文件


- 新媒體跨界交互設計
- Cortex-M3 + μC/OS-II嵌入式系統開發入門與應用
- 電腦維護與故障排除傻瓜書(Windows 10適用)
- 電腦組裝與維修從入門到精通(第2版)
- 單片機原理及應用系統設計
- Artificial Intelligence Business:How you can profit from AI
- Mastering Manga Studio 5
- 計算機維修與維護技術速成
- Svelte 3 Up and Running
- 計算機組裝與維修技術
- STM32嵌入式技術應用開發全案例實踐
- Building 3D Models with modo 701
- OpenGL Game Development By Example
- SiFive 經典RISC-V FE310微控制器原理與實踐
- Arduino項目案例:游戲開發