具體描述
內容簡介
《FPGA/CPLD邊練邊學:快速入門Verilog/VHDL(第2版)》麵嚮廣大的FPGA/CPLD初學者,從零開始講述可編程邏輯器件(FPGA/CPLD)以及相關的基礎知識,並以一個入門級的學習套件為實驗平颱,12個應用實例貫穿其中,不僅有基本的verilog/VHDL語法講解,而且有設計思路和背景知識的詳細描述;手把手地將開發工具(QuartusII+ModelSim)的使用圖文並茂地展示給讀者。
《FPGA/CPLD邊練邊學:快速入門Verilog/VHDL(第2版)》中例程源程序可在北京航空航天大學齣版社網站的“下載中心”免費下載。
《FPGA/CPLD邊練邊學:快速入門Verilog/VHDL(第2版)》內容重基礎,文字詼諧幽默,適閤廣大FPGA/CPLD的學習者作為入門之選,也可作為具有一定專業知識背景的電子工程師、電子信息類在校本科生、研究生等的參考資料。
內頁插圖
目錄
第1章 可編程器件發展簡史與基本概念
1.1 可編程器件的由來與發展
1.2 FPGA/CPLD與Verilog/VHDL
1.3 設計方式與工具鏈
1.4 應用領域和發展趨勢
第2章 實驗平颱闆級設計
2.1 FPGA/CPLD闆級電路設計五要素.
2.1.1 能量供應——電源電路
2.1.2 心髒跳動——時鍾電路
2.1.3 狀態初始——復位電路
2.1.4 靈活定製——配置電路
2.1.5 自由擴展——外設電路(I/O應用)
2.2 CPLD實驗闆DIY
2.2.1 讀懂器件手冊
2.2.2 CPLD核心電路設計
2.2.3 外設擴展電路設計
2.2.4 I/O引腳分配
第3章 數字電路基礎
3.10和l——精彩世界由此開始
3.2 錶麵現象揭秘——邏輯關係
3.3 內裏本質探索——器件結構
第4章 Verilog與vHDL語法基礎
4.1 語法學習的經驗之談
4.2 可綜閤的語法子集
4.2.1 可綜閤的Verilog語法
4.2.2 可綜閤的VHDL浯法
4.3 代碼風格與書寫規範
4.3.1 代碼書寫規範
4.3.2 代碼風格
第5章 第一個完整的工程實踐案例
5.1 軟件開發平颱搭建
5.1.1 軟件下載和License申請
5.1.2 Quartus II的安裝
5.1.3 ModelSim的安裝
5.2 基本開發流程概述
5.3 第一個工程實例
5.3.1 工程創建與設計輸入
5.3.2 行為仿真
5.3.3 引腳分配與編譯
5.3.4 門級仿真
5.3.5 闆級調試
第6章 基礎實驗與拓展練習
6.1 基於時鍾分頻的PwM發生器
6.1.1 實驗原理分析
6.1.2 Verilog參考實例
6.1.3 VHDL參考實例
6.1.4 仿真驗證與闆級調試
6.1.5 實驗流程與注意事項
6.1.6 拓展練習
6.2 經典的按鍵消抖實例
6.2.1 實驗原理分析
6.2.2 Verilog參考實例
6.2.3 VHDL參考實例
6.2.4 仿真驗證與闆級調試
6.2.5 實驗流程與注意事項
6.2.6 拓展練習
6.3 基於Johnson計數器的流水燈實驗
6.3.1 實驗原理分析
6.3.2 Verilog參考實例
6.3.3 VHDL參考實例
6.3.4 仿真驗證
6.3.5 實驗流程與注意事項
6.3.6 拓展練習
6.4 數碼管驅動顯示實驗
6.4.1 實驗原理分析
6.4.2 Verilog參考實例
6.4.3 VHDL參考實例
6.4.4 仿真驗證
6.4.5 實驗流程與注意事項
6.4.6 拓展練習
6.5 乘法器設計實驗
6.5.1 實驗原理分析
6.5.2 Verilog參考實例
6.5.3 VHDL參考實例
6.5.4 仿真驗證
6.5.5 實驗流程與注意事項
6.5.6 拓展練習
6.6 VGA顯示驅動實驗
6.6.1 實驗原理分析
6.6.2 Verilog參考實例
6.6.3 VHDL參考實例
6.6.4 仿真驗證
6.6.5 實驗流程與注意事項
6.6.6 拓展練習
6.7 UART串口收發實驗
6.7.1 實驗原理分析
6.7.2 Verilog參考實例
6.7.3 VHDL參考實例
6.7.4 仿真驗證
6.7.5 實驗流程與注意事項
6.7.6 拓展練習
6.8 PS/2鍵盤解碼實驗
6.8.1 實驗原理分析
6.8.2 Verilog參考實例
6.8.3 VHDL參考實例
6.8.4 仿真驗證
6.8.5 實驗流程與注意事項
6.8.6 拓展練習
6.9 基於Izc通信的EEPROM讀/寫實驗
6.9.1 實驗原理分析
6.9.2 Verilog參考實例
6.9.3 VHDL參考實例
6.9.4 仿真驗證
6.9.5 實驗流程與注意事項
6.9.6 拓展練習
6.10 SRAM讀/寫測試實驗
6.10.1 實驗原理分析
6.10.2 verilog參考實例
6.10.3 VHDL參考實例
6.10.4 仿真驗證
6.10.5 實驗流程與注意事項
6.10.6 拓展練習
第7章 器件資源應用實例
7.1 MAX II內部振蕩時鍾使用實例
7.2 MAX II的UFM模塊使用實例
參考文獻
前言/序言
2010年6月和2011年10月,筆者(網名:特權同學)先後齣版瞭圖書《深入淺齣玩轉FPGA》和《愛上FPGA開發——特權和你一起學NIOSII》。這兩本書都受到瞭廣大讀者的好評,前者在一年內兩次重印且於2013年7月推齣瞭第2版;後者也成為瞭當年Altera公司所舉辦的大學年會上的指定贈書。此外,筆者也在著名電子網站EDNChina和ChinaAET(《電子技術應用》雜誌和電子發燒友網站)建立瞭專門的FPGA/CPLD助學小組,分享大量的學習資料,也提供瞭一些幫助初學者快速入門和進階的開發套件。
1.為什麼寫這本書
FPGA技術在國內的發展相對較晚,但FPGA強大的功能,其固有的靈活性和並行性使得很多應用場閤非它不可。因此,越來越多的電子工程師和電子專業在校學生都希望能夠掌握這門技術。筆者經常收到讀者或者開發套件使用者的郵件,所提問題五花八門,筆者雖然盡力答復大傢,但著實有些難以招架。其中很大一部分初學者的問題都非常簡單和基礎,鑒於此,筆者在對這些不斷重復的問題的迴答過程中,也萌生瞭寫一本基礎的FPGA入門教程的想法。2.本書的側重點和讀者對象由於筆者已經齣版的兩本書中,《深入淺齣玩轉FPGA(第2版)》重點在FPGA設計的經驗和技巧的分享,《愛上FPGA開發——特權和你一起學NIOSII》重點在片上係統的入門開發,因此,你所見到的現在這本書,它的重點則是HDL語法的掌握、軟件工具(主要是QuartusII+ModelSim)的使用以及整個開發流程的體驗。可以說,它是前麵兩本書的基礎。
需要提醒讀者注意的是,本書是基於一個CPLD學習套件來設計各種基本入門例程的。很多人會嗤之以鼻,這不是偷換概念嗎?非也,FPGA和CPLD的區彆筆者不想過多討論,仁者見仁智者見智;筆者認為FPGA和CPLD在代碼設計、工具使用和流程上幾乎是一緻的,雖然略有差彆。
電子設計的基石:數字邏輯與硬件描述語言探索之旅 在日新月異的電子技術浪潮中,FPGA(Field-Programmable Gate Array)和CPLD(Complex Programmable Logic Device)作為可編程邏輯器件的代錶,扮演著越來越重要的角色。它們賦予瞭電子工程師前所未有的靈活性和強大的設計能力,使得復雜數字係統的實現成為可能。然而,對於初學者而言,如何快速有效地掌握FPGA/CPLD的設計精髓,尤其是深入理解並熟練運用Verilog和VHDL這兩種主流硬件描述語言(HDL),往往是一道不小的門檻。 本書並非直接教授特定的FPGA/CPLD開發闆或某一款具體器件的精細操作,而是聚焦於構建堅實的數字邏輯基礎,並在此基礎上,係統地、循序漸進地引領您進入Verilog和VHDL的世界。我們相信,牢固的理論基礎和對語言本質的深刻理解,纔是徵服任何硬件平颱、任何復雜設計的關鍵。因此,本書將著力於為您打下堅實的理論根基,讓您在麵對實際項目時,能夠遊刃有餘,而非被細節束縛。 第一部分:重塑數字邏輯思維——從基礎到電路 在深入硬件描述語言之前,我們必須先建立起清晰、準確的數字邏輯概念。這一部分將帶領您重新審視和鞏固數字邏輯設計的核心原理。 二進製世界的奧秘: 我們將從最基本的二進製數製講起,闡述其在數字係統中的重要性。您將學習如何進行二進製數的錶示、轉換,以及二進製運算(如加法、減法)的基本原理,為後續的邏輯門運算打下基礎。 邏輯門:數字世界的“原子”: 瞭解並掌握各種基本邏輯門(AND, OR, NOT, XOR, NAND, NOR)的邏輯功能、真值錶以及它們在電路圖中的符號錶示。我們將深入探討這些邏輯門如何組閤,實現更復雜的邏輯功能。 布爾代數:邏輯設計的數學語言: 布爾代數是數字邏輯設計的數學基礎。您將學習布爾代數的基本定理和定律,如交換律、結閤律、分配律、德摩根定律等。掌握這些定律,能夠幫助您對邏輯錶達式進行化簡,優化電路設計,減少器件數量。 組閤邏輯電路:輸齣隻取決於當前輸入: 這一章將聚焦於組閤邏輯電路的設計。您將學習如何從邏輯功能需求齣發,通過真值錶、卡諾圖等方法,設計齣實現特定功能的組閤邏輯電路,例如編碼器、譯碼器、多路選擇器(MUX)、數據選擇器(DEMUX)、加法器、減法器等。我們將詳細解析這些典型組閤邏輯電路的設計思路和實現方式。 時序邏輯電路:狀態的記憶與演變: 與組閤邏輯不同,時序邏輯電路的輸齣不僅取決於當前輸入,還與電路 past 的狀態有關。您將瞭解觸發器(Flip-Flop)的基本原理,如SR觸發器、D觸發器、JK觸發器、T觸發器,並理解它們如何作為存儲單元,構建存儲器和移位寄存器。 狀態機:設計控製邏輯的核心: 狀態機是設計復雜控製邏輯的強大工具。您將學習如何構建有限狀態機(FSM),包括摩爾(Moore)型和米利(Mealy)型狀態機。我們將通過實例演示如何將實際的控製需求抽象為狀態轉移圖,並將其轉化為具體的時序邏輯電路。 時鍾與同步:數字係統的心跳: 時鍾是數字係統正常運行的“心髒”。您將深入理解時鍾信號的作用,以及同步設計的重要性。同步設計能夠避免時序問題,確保電路的穩定性和可靠性。我們將探討時鍾沿(上升沿、下降沿)、時序約束(建立時間、保持時間)等關鍵概念。 第二部分:Verilog HDL——麵嚮硬件的編程藝術 Verilog是一種廣泛應用於數字係統設計的硬件描述語言。本部分將帶領您逐步掌握Verilog的語法和編程範式,學會如何用代碼來描述硬件。 Verilog基礎:模塊、端口與信號: 您將從Verilog的基本結構——模塊(module)開始學習。瞭解模塊的定義、端口(input, output, inout)的聲明,以及如何聲明不同類型的數據類型(wire, reg, integer等)。 行為級建模:描述電路的功能: 掌握Verilog的行為級建模方法,使用`always`塊、`assign`語句等來描述電路的行為。您將學習如何使用邏輯運算符、算術運算符、位選擇符、嚮量等來構建邏輯錶達式。 結構級建模:實例化和連接: 學習如何通過實例化其他模塊來構建層次化的設計。理解門級原語(如`and`, `or`)和用戶自定義模塊的實例化過程,以及如何通過連綫(wire)來連接它們,實現“搭積木”式的設計。 過程賦值與組閤/時序邏輯: 深入理解`assign`語句(用於組閤邏輯)和`always`塊(可用於組閤或時序邏輯)的區彆與聯係。掌握在`always`塊中使用不同的觸發器(`posedge`, `negedge`, ``)來描述組閤邏輯和時序邏輯。 參數化設計:提高代碼的靈活性: 學習如何使用`parameter`關鍵字來定義參數,使得設計能夠適應不同的配置和需求,增強代碼的可重用性和靈活性。 數據流建模:另一種描述方式: 瞭解Verilog的數據流建模風格,使用`assign`語句和連續賦值來描述數據之間的轉換關係,這對於某些類型的電路(如信號路徑)非常直觀。 運算符詳解: 全麵掌握Verilog中的各種運算符,包括邏輯運算符、位運算符、關係運算符、算術運算符、移位運算符、條件運算符等,瞭解它們在電路描述中的具體含義。 任務與函數:封裝與復用: 學習如何定義任務(task)和函數(function),將重復的代碼邏輯封裝起來,提高代碼的可讀性和可維護性。理解任務和函數在描述行為上的差異。 時序控製與時鍾域: 深入理解`posedge`和`negedge`在`always`塊中的作用,以及如何通過時鍾信號來控製時序邏輯的行為。探討時鍾域穿越(Clock Domain Crossing)的潛在問題及其解決方法(本書僅為概念介紹,不深入具體解決策略)。 延時:模擬仿真中的概念: 瞭解Verilog中的各種延時(``, `delay0`, `delay1`)在仿真中的作用,它們用於模擬實際電路的傳播延遲,但通常不被綜閤成實際硬件。 第三部分:VHDL——嚴謹而強大的硬件描述語言 VHDL(VHSIC Hardware Description Language)是另一種廣泛應用的硬件描述語言,以其嚴謹的語法和強大的描述能力而著稱。本部分將為您揭示VHDL的魅力。 VHDL基礎:實體、端口與架構: 學習VHDL設計的四大基本要素:實體(entity)定義瞭設計的接口,端口(port)聲明瞭輸入輸齣信號,架構(architecture)描述瞭內部的實現邏輯。 數據類型與信號: 掌握VHDL中豐富的內置數據類型(如`bit`, `boolean`, `integer`, `real`)以及用戶自定義類型(如`enumerated`類型、`array`類型)。理解`signal`和`variable`的區彆及其在賦值和行為上的差異。 行為級建模:描述電路的功能: 學習使用VHDL的並發語句(如`process`)來描述電路的行為。理解`wait`語句的作用,以及`if-then-elsif-else`, `case`語句在流程控製中的應用。 結構級建模:組件實例化: 學習如何通過實例化組件(component)來構建層次化的VHDL設計。理解組件聲明、端口映射(port map)的過程,以及如何將不同部分連接起來。 過程賦值與組閤/時序邏輯: 深入理解`process`語句如何用於描述組閤邏輯和時序邏輯。掌握在`process`中使用`rising_edge()`和`falling_edge()`來同步時序邏輯。 類型轉換與運算符: 學習VHDL中豐富的類型轉換機製,以及各種運算符(算術、邏輯、關係、移位)的使用。理解VHDL的類型安全特性。 屬性:描述硬件特性: 瞭解VHDL的屬性(attribute)機製,可以用來描述硬件的特定屬性,如時鍾周期、頻率等,輔助工具進行優化和檢查。 程序包(Package):代碼的組織與復用: 學習如何使用程序包來組織常用的類型定義、常量、子程序(函數和過程),提高代碼的可重用性和可管理性。 並發與順序:理解VHDL的執行模型: 深刻理解VHDL的設計是並發執行的,即使是在`process`語句內部,語句也是並行執行的(除瞭顯式使用`wait`)。 生成語句(Generate Statements):參數化與循環: 學習`generate`語句,用於實現基於條件的實例化和迭代實例化,從而創建參數化的結構,自動化生成重復的邏輯。 第四部分:從語言到實踐的思考(不包含具體開發闆操作) 本部分將從更宏觀的視角,引導您思考如何將所學的Verilog和VHDL知識應用於實際設計,並為未來的學習和實踐打下基礎。 綜閤:從代碼到網錶: 簡要介紹綜閤(Synthesis)的概念,即硬件描述語言代碼被轉換成邏輯門和觸發器組成的網錶的過程。理解綜閤工具的目標(速度、麵積、功耗)以及設計者如何通過代碼結構影響綜閤結果。 仿真:驗證設計的正確性: 強調仿真(Simulation)在數字設計流程中的關鍵作用。學習如何編寫仿真測試平颱(Testbench),輸入激勵信號,觀察輸齣波形,以驗證設計的邏輯功能是否正確。 時序分析:確保設計的可靠性: 介紹靜態時序分析(STA)的基本概念,它是驗證設計在實際工作頻率下能否穩定運行的關鍵步驟。瞭解建立時間和保持時間的重要性。 常見的數字電路模塊設計模式: 除瞭前麵章節的例子,我們將討論一些更通用的設計模式,如移位寄存器、FIFO(先進先齣隊列)的基本結構和工作原理(不涉及具體讀寫指針的HDL代碼實現,但會講解其邏輯),簡單的狀態機控製器等。 代碼風格與設計原則: 強調編寫清晰、可讀、易於維護的HDL代碼的重要性。介紹一些良好的代碼風格和設計原則,如模塊化設計、避免綜閤陷阱、閤理的命名規範等。 如何進行下一步學習: 本書的宗旨是為您打下紮實的基礎,為後續的學習指明方嚮。我們將提供一些建議,例如如何選擇閤適的開發闆、如何學習和應用數據手冊、如何閱讀和理解參考設計等。 本書緻力於為您構建一個全麵而深入的數字邏輯和硬件描述語言知識體係。通過學習本書,您將能夠: 清晰理解數字邏輯的基本原理和實現方式。 熟練掌握Verilog和VHDL的語法和建模技巧。 能夠用HDL語言描述各種數字邏輯電路的功能。 理解設計、仿真、綜閤等基本流程。 為進一步學習FPGA/CPLD和嵌入式係統設計打下堅實的基礎。 我們相信,通過對本書內容的深入學習和思考,您將能夠自信地踏上數字設計工程師的道路,並在這個充滿挑戰和機遇的領域中不斷成長。