Design PLDs Applications using Quartus and Verilog HDL - Chapter 1 (Beginner Level)

此文章內容節錄自本人筆記「使用Quartus與Verilog HDL設計FPGA應用_第一章_數位電路與HDL.docx」


相關教學筆記依能力指標共被劃分為四級:入門、初階、中階、高階,本筆記屬入門級。現今 PLDs(CPLD/FPGA)常被用應用於處理大量即時資料或平行高速計算的場合(如實作FFT ),假若讀者已掌握入門的內容,建議後續不要在七段顯示器、掃描鍵盤、LCD 等基礎周邊浪費時間,應把心力放在撰寫測試平台(test bench)上。

圖 1、講解 Quad-Output FFT Engine 的片段(來自 intel.com)


數位電路設計與實作,歷經了真空管、電晶體、小型積體電路(SSI)直至現今極大型積體電路(ULSI)等時期。早期小型積體電路所使用的方法,主要仰賴使用 7400 與 4000 系列等各式小型數位晶片,採用人力方式規劃拼湊組合出滿足目標功能的數位電路。


圖 2、使用 SSI 設計的經典案例(挖土機電腦)


前者採用小型積體電路(SSI)實作,主要是考量製作特定應用積體電路(ASIC)的代價太高,其交期更為漫長。但隨著近年來記憶元件的容量密度提高與技術的純熟,使得可程式化邏輯裝置(PLD)與現場可程式化邏輯閘陣列(FPGA)成為目前數位電路設計的主流。現今僅需透過硬體描述語言(HDL)描述其功能,便可透過相關軟體在目標 CPLD/FPGA 上實現符合預期的邏輯電路功能。

圖 3、使用 CPLD 設計的經典案例(三軸光學擷取單元)


Verilog HDL 與 VHDL 是現今硬體描述語言的主流,主要用於描述一個電路的行為,透過類似 Quartus、Vivado 等支援該標準的電子設計自動化工具(EDA Tools)進行一系列的編譯、模擬與實際驗證,產生出滿足目標 CPLD/FPGA 晶片或需的配置資料並下載到其中,完成最終的數位電路實作。

圖 4、1364-2005 - IEEE Standard 封面(來自 ieeexplore.ieee.org)


此外 Verilog 也存在不同的標準版本,如 Verilog-95、Verilog-2001、Verilog-2005、SystemVerilog-2005(具 Verilog-2005 子集)、SystemVerilog-2009(合併 Verilog)、SystemVerilog-2017。基於 Quartus Prime 預設採用 Verilog-2001標準, 所以本系列筆記將皆以該標準為主。

圖 5、Quartus 編譯設定頁面


由於 Verilog 可以方便調用 VHDL代碼,甚至能快速撰寫測試平台(test bench) 模擬 VHDL 所撰寫的模塊,所以吾人並不推薦在小規模 CPLD/FPGA 的應用場景中使用VHDL進行設計。儘管話雖如此,但後續把 VHDL 學好仍是必要的,畢竟這兩種硬體描述語言各有適合的應用場合。於此,讀者可以透過下方的範例代碼,初步了解一下VHDL與Verilog的風格差異。

圖 6、使用 VHDL 撰寫的計數器範例代碼(來自 intel.com)


 圖 7、使用 Verilog 撰寫的計數器範例代碼(來自 intel.com)


關於 Verilog 的版本,吾人可以再進一步精簡如下。

圖 8、使用 Verilog 撰寫的計數器範例代碼(較圖 7 精簡) 


對於大部份的 CPLD/FPGA EDA 開發工具而言,設計流程大致都相去不遠。但吾人仍要提醒讀者不要忽略模擬(Simulation)的重要性,一定要養成模擬的習慣!儘管初期使用七段顯示器、掃描鍵盤、點矩陣等周邊直接進行測試簡單又直覺、程式碼數量也不大,但往往需要解決抽象問題時,撰寫測試平台(test bench)的開發效率要遠高於使用實驗板周邊。


吾人對於入門級的設計流程建議如下:

1. 執行分析與合成 Analysis & Synthesis 。

2. 查看 RTL Viewr 確認合成結構狀況。

3. 進行 RTL 模擬(不考量實體延遲的理想功能模擬)。

4. 選定目標晶片與接腳配置。

5. 執行編譯 Complication。

6. 將資料下載至目標 CPLD/FPGA 上。



圖 9、Quartus Prime design flow(來自 intel.com)


於此,吾人分享自身經驗,以期減少讀者在學習過程中的障礙。

1. 不建議學習過於老舊的 Quartus 版本,例如 Quartus 9 已是吾人高三時期所發表的版本,也沒必要為了支援老舊的 Cyclone III (距今超過15年)去安裝 Quartus 13,沒事請用最新的工具 Quartus 22。 

2. 對於學習 CPLD/FPGA 設計而言,吾人較重視讀者能透過撰寫測試平台(test bench)自行驗證 RTL 模擬功能的能力,畢竟這是開發效率較高的作法。初期會先演示波形模擬的方法,待讀者建立好觀念以後,後續測試將會把重心放在安排 test bench 資料輸出的技巧。

3. 電路如果採用暫存器、記憶體、解碼器等概念進行描述,該層次屬於暫存器轉移級別(register-transfer level, RTL)。而所謂邏輯閘級別的層次(gate level, GL),則代表電路皆採用基礎邏輯閘的概念進行描述。

4. Quartus 模擬又分 RTL Simulation 與 Gate Level Simulation,前者不會考慮延遲的問題,而後者會。由於 Intel 自 Arria V, Cyclone V, MAX 10, Stratix V 系列起不再支援 Gate level 模擬,請依官方建議使用 Timing Analyzer 進行靜態時序分析,後續再配合 Signaltap II 工具來作最後硬體驗證。

5. 為了避免讀者在學習過程中遭遇困難,另補充幾項前情概要

    a. Intel FPGA Programming Cable 原為 Altera USB-Blaster Download Cable

    b. Intel Quartus Prime 可視為 Altera Quartus 後續版本

    c. QuestaSim 與 ModelSim 介面幾乎一樣,前者是後者的高階版。

    d. 本筆記所配合之軟體版本為:Microsoft Windows 11 Pro 22H2 x64、Intel Quartus Prime 22.1.2 Lite Editon x64、Mentor Questa Intel Starter FPGA Editon 2021.04 x64。 


參考資料: 

1. Digital Design (4th Edition) by M. Morris Mano; Michael D. Ciletti [Pearson, 2007] 

2. FFT IP Core User Guide [Intel, 2017] 

https://cdrdv2-public.intel.com/667064/ug_fft-683374-667064.pdf

3. IEEE Standard Verilog Hardware Description Language, IEEE Std 1364-2001 [IEEE, 2001] 

https://standards.ieee.org/ieee/1364/2052/

4. IEEE Standard for Verilog Hardware Description Language, IEEE Std 1364-2005 [IEEE, 2007] 

https://standards.ieee.org/ieee/1364/3641/

5. VHDL: Behavioral Counter [intel.com] 

https://www.intel.com/content/www/us/en/support/programmable/support-resources/design-examples/horizontal/v-counters.html 

6. Verilog HDL: Behavioral Counter [intel.com]

https://www.intel.com/content/www/us/en/support/programmable/support-resources/design-examples/horizontal/ver-behav-counter.html

7. Intel Quartus Prime Design Software - Support Center [intel.com]

https://www.intel.com/content/www/us/en/support/programmable/support-resources/design-guidance/quartus-support.html

8. Intel Quartus Prime Standard Edition User Guide: Third-party Simulation

https://www.intel.com/content/www/us/en/docs/programmable/683080/22-1/simulation-levels.html

Comments