- 基于FPGA CPLD的EDA技術實用教程
- 任全會主編
- 8字
- 2020-05-19 12:06:48
項目2 FPGA/CPLD基礎開發
一、FPGA/CPLD開發的基本方法
(一)開發流程
FPGA/CPLD的開發流程(見圖2.1)和基于處理器的軟、硬件開發流程不同,最大特點是迭代性很強,并不是一個簡單的順序流程。在開發設計過程中,設計者在測試驗證時一旦發現問題,往往需要回到前面的步驟重新審查、修改,然后重新綜合、實現、仿真驗證,直到設計符合要求。

圖2.1 FPGA/CPLD開發流程
1.功能定義/器件選型
在FPGA/CPLD設計項目開始之前,必須進行系統功能的定義和模塊的劃分,還要根據任務要求,如系統的功能和復雜度,對工作速度和器件本身的資源、成本以及連線的可布性等進行權衡,選擇合適的設計方案和合適的器件類型,建立與具體開發平臺相對應的工程,比如當前開發平臺是EPM240,則后續的工程開發也應該基于該芯片進行。
2.模塊劃分
一個項目在整體把握的基礎上進行模塊劃分,不僅有利于分工,更有利于日后的代碼升級、維護以及設計的綜合優化。模塊劃分的基本原則是以功能為主,有時也按照數據流來做劃分。
建立設計方案時,必須考慮QuartusⅡ軟件提供的設計流程。在自頂向下的設計流程中,整個設計只有一個輸出網絡表,用戶可以對整個設計計劃進行跨設計邊界和結構層次的優化處理,并且管理容易;在自底向上的設計流程中,每個設計模塊具有單獨的網格表,它允許用戶單獨編譯每個模塊,且單個模塊的修改不會影響到其他模塊的優化?;趬K的設計流程使用EDA設計輸入和綜合工具分別設計和綜合各個模塊,然后將各模塊整合到QuartusⅡ軟件的最高層設計中。用戶可根據實際情況靈活使用各種設計方法。
3.設計輸入方式
創建好工程后,需要給工程添加設計輸入文件。設計輸入可以使用文本形式的文件(如AHDL、VHDL、Verilog HDL等)、存儲器數據文件(如HEX、MIF等)、原理圖輸入以及第三方EDA工具產生的文件(如HDL、EDIF、VQM等)。同時還可以混合使用集中設計輸入方式進行設計。
(1)Verilog HDL/VHDL硬件描述語言設計輸入方式
硬件描述語言HDL設計法是大型模塊化設計工程最常用的設計方法。目前較為流行的HDL語言有Verilog HDL、VHDL等,其共同的特點是易于使用自頂向下的設計方法,易于進行模塊劃分和復用,移植性強,通用性好,設計流程不因芯片工藝和結構的改變而變化,利于ASIC的移植。HDL采用純文本文件格式,用任何編輯器都可以編輯。
(2)AHDL輸入方式
AHDL是完全集成到QuartusⅡ軟件系統中的一種高級模塊化語言,可以用QuartusⅡ軟件文本編輯器或者其他的文本編輯器產生AHDL文件。AHDL語言只能用于采用Altera器件的FPGA/CPLD設計,其代碼不能移植到其他廠商器件(如Xilinx、Lattice等)上使用,通用性不強。
(3)模塊/原理圖輸入方式
模塊/原理圖輸入方式是FPGA/CPLD設計的基本方法之一,幾乎所有的設計環境都集成有模塊/原理圖輸入方式。這種設計方式直觀、易用,支撐它的是一個功能強大、分門別類的器件庫。由于器件庫元件通用性差,因此其移植性差,如果更換芯片,整個原理圖需要做很大修改,甚至是全部重新設計,所以這種設計方式主要是混合設計中的一種輔助設計方式。
(4)使用Mega Wizard Plug-In Maneger產生IP核/宏功能塊
Mega Wizard Plug-In Maneger工具的使用基本可以分為以下幾個過程:工程的創建和管理,查找適用的IP核/宏功能模塊,參數設計與生成,IP核/宏功能模塊的仿真與綜合。
4.邏輯綜合
邏輯綜合是將較高層次的電路描述轉化為較低層次的電路描述。具體地說,就是將設計代碼翻譯成最基本的與門、或門、非門及RAM、觸發器等基本邏輯單元的連接關系(網表)。同時分析出邏輯設計中的I/O引腳,以便后續進行I/O引腳的分配。
5.布局布線
布局布線可理解為利用實現工具把邏輯映射到目標器件結構資源中,確定邏輯的最佳布局,選擇連接邏輯單元與輸入輸出單元的布線通道進行連線,并產生相應文件(如配置文件與相關報告)。實現是將綜合生成的邏輯網表配置到具體的FPGA/CPLD芯片上,布局布線是其中最重要的過程。布局將邏輯網表中的硬件原語和底層單元合理地配置到芯片內部的固有硬件結構上,并且往往需要在速度最優和面積最優之間作出選擇。布線是根據布局的拓撲結構,利用芯片內部的各種連線資源,合理正確地連接各個元件。目前,FPGA/CPLD的結構非常復雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束后,軟件工具會自動生成報告,提供有關設計中各部分資源的使用情況。由于只有FPGA/CPLD芯片生產商對芯片結構最為了解,所以布局布線必須選擇芯片開發商提供的工具。
6.仿真
仿真的目的就是在軟件環境下,驗證電路的行為和設想中的是否一致。一般在FPGA/CPLD中,仿真分為功能仿真和時序仿真。功能仿真在設計輸入之后,在進行綜合、布局布線之前實施的仿真,又稱為行為仿真或前仿真,是在不考慮電路邏輯門的時間延遲,只考慮電路在理想環境下的行為和設計構想的一致性;時序仿真又稱為后仿真,是在綜合、布局布線后,即電路已經映射到特定的工藝環境后,在考慮器件延時的情況下對布局布線的網表文件進行的仿真。
7.編程與配置
設計的最后一步就是芯片編程與調試。芯片編程是指產生要使用的數據文件(位數據流文件),然后將編程數據下載到FPGA/CPLD芯片中進行驗證或使用。芯片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等。
(二)原理圖輸入
QuartusⅡ軟件原理圖輸入包括原理圖編輯、文本編輯、混合編輯。原理圖和圖表模塊編輯是自頂向下設計的主要方法。
1.原理圖編輯
(1)內附邏輯函數
原理圖編輯主要在符號的引入和線的連接。需要引入的邏輯函數存放在三個不同的目錄,分為primitives(基本邏輯函數,包括基本邏輯單元、管腳、電源、接地端、緩沖邏輯單元等)、others(其他許多常用的邏輯函數,包括7400、7496等)、megafunctions(參數化宏模塊)三類。
(2)編輯規則
①腳位名稱。腳位命名可用英文字母的大寫或是小寫、阿拉伯數字,或者是一些特殊符號:“/”“-”“_”等。名稱中英文大小寫的意義相同,即abc和aBc代表相同的管腳名稱。另外在同一個設計文件中不能有重復的腳位名稱。
②節點名稱。在QuartusⅡ中,只要器件連接線的節點名稱相同,就會默認是連接的。節點(Node)的命名操作方法是:選中要添加節點的直線→單擊鼠標右鍵→選中“properties”選項→在對話框中的“General”選項頁中添加節點名稱。
③總線名稱??偩€(bus)代表很多節點的組合。總線命名的方法與節點相同,但命名時,必須要在名稱的后面加上“[a..b]”,表示一條總線內所含有的節點編號,其中a和b必須是整數。
④文件擴展名。文件擴展名為“.bdf”。
(3)原理圖和圖表模塊編輯工具
原理圖和圖表模塊編輯工具見圖2.2。

圖2.2 原理圖和圖表模塊編輯工具
分離窗口:單擊此按鈕可以將當前窗口與QuartusⅡ主窗口分離。
選擇:可以選取、移動、復制對象。
文字:文字編輯工具,通常在制定名稱或批注時使用。
符號:用于添加工程所需要的各種原理圖函數和符號。
圖表模塊:添加一個圖標模塊,用戶可定義其輸入和輸出及一些相關參數,用于自頂向下的設計。
正交節點:可以畫垂直或水平的連線,同時可以定義節點名稱。
正交總線:可以畫垂直或水平的總線。
正交管道:用于模塊之間的連接和映射。
橡皮筋:選中此項,移動圖形元件時腳位與連線不斷開。
部分線選擇:選中此項后,可以選擇局部連線。
放大/縮小:用于放大或縮小原理圖,選中此項后單擊鼠標左鍵為放大,單擊鼠標右鍵為縮小。
全屏:單擊此按鈕后,原理圖編輯器窗口為全屏顯示。
查找:用于查找節點、總線、元件等。
元件翻轉:包括水平翻轉、垂直翻轉和90度逆時針翻轉。
畫圖:分為畫矩形、圓形、直線和弧線工具。
2.原理圖編輯流程
(1)創建新的工程文件
①指定工程名稱。選擇菜單“Flie”→“New Project Wizard”命令。新建工程向導對話框,如圖2.3所示。

圖2.3 指定工程名稱
建立項目工程要完成的工作包括制定項目目錄、名稱和項目實體,指定項目設計文件,指定設計的Altera器件系列,指定其他用于該項目的EDA工具,建立項目信息報告。
任何一項設計都是一項工程,必須首先為工程建立一個放置所有與此工程相關的文件的文件夾,同一個項目的所有文件都必須放到同一個文件夾中,一般來說,不同的設計項目最好放在不同的文件夾中。
單擊“Next”按鈕,進入圖2.4所示對話框,在圖中從上到下的各個文本框分別輸入新工程的文件夾名稱、當前工程和頂層實體的名稱(注意:工程名要和頂層實體名稱一致),在此例中工程名為“add”。

圖2.4 設置工程名
②選擇需要加入的文件和庫。在圖2.4中單擊“Next”按鈕(若文件夾不存在,系統會自動提示用戶是否創建該文件夾,選擇“Next”后會自動建立),彈出圖2.5所示對話框。如果此設計中包括其他設計文件,可以在“File name”欄框選擇文件,或者單擊“Add All”按鈕,加入該目錄下的所有文件。如果需要用戶自定義庫,則單擊“User Libraries”按鈕來選擇。如果沒有需要添加的文件和庫,可以不選,直接單擊“Next”按鈕即可。

圖2.5 選擇文件和庫
③選擇目標器件。單擊“Next”按鈕,出現目標器件窗口,見圖2.6,在“Target device”選項下選擇“Auto device selected by the Filter”選項,系統會自動給所設計的文件分配一個器件。如果選擇“Specific device selected in ‘Available device’ list”選項,用戶需指定目標器件。在右側的選擇項下可以選擇器件的封裝類型(Package)、引腳數量(Pin count)和速度等級(Speed grade),快速查找用戶需要指定的器件。本例中選擇ACEX1K系列下的EP1K30TC144-1。

圖2.6 選擇元器件
④選擇第三方EDA工具。單擊“Next”按鈕→進入第三方工具選擇對話框,沒有第三方工具可以不選,見圖2.7。

圖2.7 選擇第三方工具
⑤結束設置。單擊“Next”按鈕,可以看出工程文件配置的信息報告,見圖2.8。單擊“Finish”按鈕,即完成了當前工程的創建。

圖2.8 結束設置
(2)建立文件
選擇菜單命令“File”→“New”,彈出圖2.9所示“New”對話框,在“Device Design Files”標簽下選擇源文件的類型,這里選擇“Block Diagram/Schematic File”類型,單擊“OK”按鈕,即出現圖2.10所示的輸入元件對話框。

圖2.9 “New”對話框

圖2.10 輸入元件對話框
(3)放置元件符號
在圖2.10所示窗口的空白處雙擊左鍵,出現圖2.11所示的圖形編輯窗口,在左側“Libraries”欄中依次選擇“primitives”→“logic”,調入“與”門(and2)、“異或”門(xor)、輸入端口(input)、輸出端口(output)等元件,可在“Name”文本框中直接輸入元件的名字,也可在元件庫中直接尋找,調入元件,見圖2.12。

圖2.11 圖形編輯窗口

圖2.12 調入元件
(4)連接各元件并命名
選中工具欄中的正交節點按鈕,光標自動變成十字形連線的狀態,移動光標到門電路的輸入端,連接點出現藍色的小方塊,單擊鼠標左鍵,即可看到連線生成。輸入信號的名稱,將這些元件進行連接,構成半加器,如圖2.13所示。

圖2.13 半加器
(5)保存文件
單擊保存文件按鈕,將設計好的半加器原理圖存于已建立好的工作目錄中。
(6)編譯
選擇菜單“Processing”→“Start Compilation”,或者單擊工具欄按鈕,即啟動了完全編譯,編譯完成后,系統會將有關的編譯信息顯示在窗口中,見圖2.14,其中包括警告和出錯信息。若有錯誤,則根據提示再做相應的修改,并重新編譯,直到沒有錯誤提示為止。
(7)建立矢量波形文件

圖2.14 編譯信息
選擇菜單命令“File”→“New”,在“New”窗口中選擇“Other Files”標簽中的“Vector Waveform File”選項,如圖2.15所示。單擊“OK”按鈕完成建立。

圖2.15 建立矢量波形文件
(8)添加引腳與節點
在圖2.16所示的窗口中選擇“Insert Node or Bus…”,會出現如圖2.17的窗口,選擇“Node Finder…”,彈出圖2.18所示的窗口。

圖2.16 添加引腳與節點

圖2.17 插入的引腳與節點參數

圖2.18 引腳與節點選擇
在圖2.18中單擊按鈕“List”,然后單擊按鈕“?”,再單擊“OK”按鈕,就可以把節點加入到波形編輯器中,結果見圖2.19。

圖2.19 添加引腳與節點結果
(9)仿真
在通常設計中,應先做功能仿真來驗證邏輯的正確性,后做時序仿真來驗證時序是否符合要求。
①功能仿真。如圖2.19所示,選擇菜單命令“Assignments”→“Settings”,會彈出“Settings”對話框,在“Settings”對話框中單擊左側欄中的“Simulator Settings”選項,在“Simulation mode”下拉菜單中選擇“Functional”選項,單擊“OK”按鈕完成設置。
設置完成后,需要生成功能仿真網絡表,選擇菜單命令“Processing”→“Generate Functional Netlist”,自動創建功能仿真網絡表。最后單擊“OK”按鈕進行功能仿真。
②時序仿真。Quartus Ⅱ中默認的仿真為時序仿真。
選擇菜單命令“Edit”→“End Time”,出現圖2.20所示的窗口。可以在“Time”對話框中設置仿真時間。

圖2.20 設置仿真時間
選擇菜單命令“Edit”→“Grid Size”,出現圖2.21所示的窗口。選中“Time Project”選項,設置仿真時每格的時間。

圖2.21 設置仿真每格時間
仿真結果如圖2.22所示。

圖2.22 仿真結果
(10)引腳分配和下載
引腳分配是為了能對所設計的工程進行硬件測試,將I/O信號鎖定在器件確定的引腳上。選擇菜單命令“Assignments”→“Pin Planner”,出現圖2.23所示的窗口,雙擊表格里面的標簽“Location”,可以選擇目標引腳的位置,最后完成引腳分配。

圖2.23 引腳分配與下載
(11)下載驗證
下載驗證是將本次設計所生成的文件通過計算機下載到實驗箱里,來驗證此次設計是否符合要求。
①編譯。分配完管腳后,必須再次編譯,才能存儲這些引腳鎖定的信息。單擊編譯按鈕后,若編譯器件由于引腳的多重功能出現問題,需要在“Assignments”菜單下選擇“Device”選項,在彈出的對話框里單擊“Device and Pin Options…”按鈕,出現對話框,在“Dual-Purpose Pins”選項下進行設置。
②配置下載電纜。選擇菜單命令“Tools”→“Programmer”,在彈出窗口中單擊“Hardware Setup…”按鈕,彈出“配置下載電纜”對話框,見圖2.24,單擊“Add Hardware…”按鈕,在“Hardware type”欄中選擇“USB-blaster”“ByteBlaster MV or ByteBlasterⅡ”,最后單擊“OK”按鈕,設置完成。

圖2.24 配置下載電纜
③JTAG模式下載。JTAG模式是軟件的默認下載模式,相應的下載文件為“.sof”格式。單擊“Add File…”按鈕,瀏覽添加相應的“.sof”文件,在相應的“Program/Configure”項上打勾,單擊“Start”按鈕下載程序,見圖2.25。

圖2.25 JTAG模式下載
④Active Serial Programming模式下載。Active Serial Programming模式的下載文件為“.pof”格式。在圖2.26中的“Mode”下拉列表里,選擇“Active Serial Programming”,然后瀏覽添加相應的“.pof”文件,在相應的“Program/Configure”項和“Verify”項上打勾,單擊“Start”按鈕下載程序。

圖2.26 選擇Active Serial Programming模式下載
(三)使用分析工具分析
1.使用RTL Viewer分析綜合結果
在綜合結束后,設計者經常會希望看到綜合后的原理圖,以分析綜合結果是否與所設想的設計一致,這樣就會用到RTL Viewer和Technology Map Viewer這兩個工具。
(1)打開方法
執行菜單命令:“Tools”→“Netlist”→“RTL Viewer”。
注意:在這之前必須已經執行過綜合或全編譯。
(2)列表項含義
[Instances],即實例,是指設計中能擴展為低層次的模塊或實例。
[Primitives],即原語,是指不能被擴展為低層次的底層節點。用Quartus Ⅱ自帶綜合器綜合時,它包含的是寄存器和邏輯門;而用第三方綜合工具綜合時,它包含的是邏輯單元。
[Pin],即引腳,是當前層次的I/O端口。
[Nets],即網線,是連接節點(包括實例、源語和引腳)的網線。
(3)放大與縮小視圖
[Fit in Window]:視圖適應當前窗口大小,在空白處單擊右鍵,選擇“Zoom”→“Fit in Window”命令,快捷鍵:ctrl+W。
[Fit Selection in Window]:放大當前選擇到適應窗口,空白處單擊右鍵,選擇“Zoom”→“Fit Selection in Window”命令??旖萱I:ctrl+shift+W。
(4)過濾原理圖
選中任意一節點,單擊右鍵,選擇“Filter”命令。參數選項如下。
[Sources],即源,指過濾出所選節點或端口的源端邏輯。
[Destinations],即目標。
[Sources&Destinations],即源和目標。
[Selected Nodes&Nets],所選結點和網線,過濾出已經選擇的節點和網線。
[Between Selected Nodes]所選節點之間的邏輯。
注意:在過濾后可以通過單擊工程區左側工具欄按鈕回到過濾前的原理圖,或者單擊左側列表項,查看其他層次的原理圖。
(5)打開不同層次的模板
雙擊所選模塊可以進入下一層次(或空白處單擊右鍵,選擇“Hierarchy Down”),單擊工程區左側工具欄按鈕回到上一層次(或空白處單擊右鍵,選擇“Hierarchy Up”)。
(6)定位到其他工具
空白處單擊右鍵,選擇“Locate”,在子菜單中分別有定位與各種工具的選項,當前所選項會定位到所選工具中。
(7)查找節點或網線
空白處單擊右鍵,選擇“Find”,查找節點或網線。
(8)設置原理圖分頁
選擇菜單命令“Tools”→“Options”,然后選擇“Category”中的“Rtl/Technology Map Viewer”。參數選項如下:
[Nodes per page]:設置每面多少個節點;
[Ports per page]:設置每面多少個端口或引腳數。
如果“RTL/Technology Map Viewer”超過了所設定的值,就會自動分成一個新的頁面。可以單擊原理圖空白區,選擇“go to”命令,填入頁數,到達自己需要的頁面。
2.創建原理圖
選擇菜單命令“File”→“Creat/Update”→“Creat Symbol Files for Current File”,生成“.bsf”格式的圖元文件,見圖2.27。

圖2.27 新建圖元
如出現圖2.28的提示,即表示創建成功??梢栽凇癙roject”欄里看到出現已經生成的文件。這樣在以后的原理圖設計中就可以將其作為一個模塊直接調用。

圖2.28 創建成功
3.使用Tcl文件分配管腳
①打開Tcl文件,在用戶區修改所要使用的管腳,見圖2.29。

圖2.29 修改管腳
②選擇菜單命令“Tools”→“Tcl Scripts”,單擊“Run”按鈕。見圖2.30。

圖2.30 使用Tcl文件分配管腳
③單擊編譯按鈕,即可批量實現管腳分配。