內容簡介
從現代FPGA設計相關的數字電路基礎和Verilog硬件描述語言開始,結閤筆者多年的教學和實踐經驗,本書詳細講述瞭VerilogHDL及其仿真,業內常用IO規範和各種總綫,數字邏輯在數字信號處理、數字通信和控製方嚮的典型功能單元,FPGA的常規結構,靜態時序分析等。
目錄
前言
第1章 數字電路基礎1
1.1 模擬電路與數字電路1
1.2 二進製相關知識3
1.2.1 二進製和其他進製3
1.2.2 進製間的相互轉換4
1.2.3 二進製的四則運算5
1.3 二進製在電路中的錶達6
1.3.1 有限字長和補碼6
1.3.2 負數、有符號數和無符號數6
1.4 門電路和基本邏輯運算10
1.4.1 非門、與門和或門11
1.4.2 與非門和或非門12
1.4.3 異或門和同或門12
1.4.4 三種錶達形式的轉換13
1.4.5 基本門的電路實現14
1.4.6 三態輸齣和漏極開路輸齣15
1.4.7 波形圖17
1.4.8 門電路的一些非典型應用18
1.5 邏輯代數22
1.5.1 基本定律22
1.5.2 錶達式的代數化簡法23
1.5.3 卡諾圖化簡法23
1.6 基本組閤邏輯24
1.6.1 編碼器和譯碼器24
1.6.2 未定義的輸入狀態26
1.6.3 數據選擇器27
1.6.4 延遲和競爭冒險27
1.6.5 加法器28
1.6.6 乘法器31
1.6.7 數值比較器32
1.7 鎖存器32
1.7.1 SR鎖存器32
1.7.2 D鎖存器33
1.8 觸發器34
1.8.1 D觸發器、時鍾和使能34
1.8.2 D觸發器的異步和同步復位36
1.8.3 D觸發器的建立時間、保持時間和傳輸延遲37
1.8.4 其他觸發器38
1.9 時序邏輯40
1.9.1 移位寄存器和串-並互換40
1.9.2 延遲鏈42
1.9.3 分頻器43
1.9.4 計數器44
1.9.5 同步時序邏輯46
1.9.6 纍加器48
1.10 存儲器49
1.10.1 存儲器容量和類型49
1.10.2 SRAM50
1.10.3 雙端口SRAM54
1.10.4 同步SRAM54
1.11 小數55
1.11.1 定點小數及其範圍和誤差55
1.11.2 定點小數的運算56
1.11.3 浮點小數58
第2章 Verilog HDL和SystemVerilog60
2.1 硬件描述語言簡介60
2.2 設計方法和流程62
2.3 標識符和關鍵字63
2.4 值、數和字麵量63
2.4.1 整型常數64
2.4.2 浮點常數65
2.4.3 時間常數和字符串常數65
2.5 綫網66
2.6 變量67
2.7 參數和常量68
2.8 類型和位寬轉換70
2.9 操作符和錶達式71
2.9.1 位選取操作符74
2.9.2 位拼接和流運算符74
2.9.3 按位邏輯運算符76
2.9.4 縮減運算符76
2.9.5 移位77
2.9.6 自增賦值和自減賦值77
2.9.7 條件判斷相關運算符78
2.9.8 條件運算符79
2.9.9 let語句79
2.10 結構和聯閤80
2.11 數組82
2.12 賦值、過程和塊83
2.12.1 賦值的延遲84
2.12.2 賦值的強度85
2.12.3 流程控製語句86
2.12.4 always過程88
2.12.5 阻塞和非阻塞賦值91
2.13 模塊93
2.14 接口97
2.15 生成塊100
2.16 任務和函數101
2.17 包102
2.18 係統任務和函數103
2.18.1 顯示相關104
2.18.2 文件相關105
2.18.3 存儲器相關106
2.18.4 仿真相關107
2.18.5 錯誤和信息107
2.18.6 類型轉換和數學函數107
2.19 編譯指令108
第3章 ModelSim和仿真111
3.1 仿真和測試的相關概念111
3.2 測試代碼編寫112
3.2.1 時鍾的産生112
3.2.2 復位的産生114
3.2.3 一般輸入的産生115
3.3 ModelSim軟件仿真流程118
3.3.1 主界麵簡介118
3.3.2 創建工程119
3.3.3 嚮工程中添加文件121
3.3.4 開始仿真122
3.3.5 帶有信號和波形的例子124
3.4 波形和格式127
第4章 Verilog基本應用130
4.1 代碼風格130
4.2 常用組閤邏輯單元的描述132
4.2.1 編碼器和譯碼器132
4.2.2 數據選擇器133
4.3 常用時序邏輯單元的描述133
4.3.1 移位寄存器133
4.3.2 延遲鏈134
4.3.3 計數器134
4.3.4 纍加器136
4.4 時鍾域和使能137
4.5 跨時鍾域問題138
4.5.1 域外慢速跳沿138
4.5.2 域間狀態傳遞140
4.5.3 域間事件傳遞142
4.5.4 域間數據傳遞144
4.6 存儲器及其初始化144
4.6.1 各種模式的存儲器描述145
4.6.2 存儲器的初始化148
4.7 用存儲器實現延遲鏈151
4.8 單時鍾FIFO152
4.9 雙時鍾FIFO156
4.10 用戶按鍵和數碼LED157
4.10.1 用戶按鍵處理157
4.10.2 數碼LED159
4.11 PWM和死區161
4.11.1 單端PWM161
4.11.2 差分PWM162
4.11.3 死區165
4.12 正交增量編碼器接口166
4.13 有限狀態機170
4.13.1 秒錶例子171
4.13.2 數字示波器觸發采樣例子175
第5章 IO規範與外部總綫182
5.1 單端信號和地182
5.2 傳輸綫與端接184
5.3 差分信號185
5.4 高速串行接口188
5.5 UART189
5.5.1 UART規範介紹189
5.5.2 發送器的設計190
5.5.3 接收器的設計193
5.5.4 UART收發仿真195
5.6 SPI197
5.6.1 SPI規範介紹197
前言/序言
前 言
筆者2004年開始學習FPGA,並被其強大的靈活性所吸引,從此一切成本不敏感的項目能用FPGA的,則不會考慮其他方案。從簡單的邏輯控製、MCU替代到高速的信號處理、網絡與通信應用,沒有什麼是一片FPGA(或含有處理器核)不能駕馭的,“一片不行,那就兩片!”在成本不敏感的領域,如科研、産品或芯片原型研發和驗證中,FPGA扮演瞭極其重要的角色,因為在這些領域往往包含大量特殊的、創新的定製邏輯和功能,或者具備極高的數據傳輸帶寬,並非MCU、MPU(DSP是MPU的一種)或應用處理器所能勝任。
即使是MCU或MPU能夠勝任的工作,若使用FPGA來完成,你可以肆意揮灑自己的創意,構建符閤自己習慣的邏輯接口和功能,創造符閤特殊要求的功能模塊和處理器外設,而不必像使用通用MCU或MPU那樣,需要學習為瞭功能通用而設置的紛繁復雜的接口、控製寄存器或API函數。當然,一切的前提是項目成本不敏感,並且你具備深厚的FPGA開發功力——這比MCU或MPU開發要難很多。
但終端産品領域是FPGA尚無法觸及的,主要限製是成本、功耗和開發難度。在成本和功耗上,FPGA靈活的本質決定瞭它無法與MCU或MPU抗衡,同時終端産品往往齣貨量也很大,因而在高帶寬或特殊定製邏輯方麵,也可以由ASIC勝任——ASIC在量大時成本極低。
而開發難度大則源於多個方麵。在理論方麵,想要學好FPGA,甚至說想要入門FPGA,都必須掌握紮實的數字邏輯基礎知識。在語言方麵,用於FPGA開發的硬件描述語言(HDL)描述的數字邏輯電路是並行的,與人類思維的串行性(即一步一步的思考)不符,而MCU等開發使用的程序語言則符閤人類思維的串行性,相對易於入門和掌握。依筆者淺見,“程序”一詞含有“依序執行的過程”之意,與可綜閤的硬件描述語言的並行性不符,因而本書盡量避免使用“程序”一詞指代可綜閤的硬件描述語言代碼。
開發睏難還源於FPGA技術近年來的快速發展和FPGA相關教育的滯後。
筆者自六年前開始麵嚮華中科技大學啓明學院電工電子科技創新中心(以下簡稱“創新中心”)的學生開設與FPGA應用相關的選修課,並為他們設計開發闆,無論課程內容還是開發闆,每年都可能會變動以跟進新的技術發展。
創新中心的學生主要來自全校各電類相關院係,並經過嚴格的考核選入,都是理論成績和實踐能力兼優並對電子技術有著濃厚興趣的學生。即便如此,筆者依然感受到FPGA應用教學的睏難,特彆是在引導和幫助他們使用FPGA實現具備一定難度和深度的功能的時候,或者在實現一個完備的電子電路係統,比如將FPGA用作大學生電子設計競賽作品主控或者各類研究、雙創項目的主要實現平颱的時候。
筆者以為,FPGA應用教學的睏難直接反映瞭數字電路應用教學的睏難,這與傳統數字電路課程設置不無關係。在電子技術子領域日趨細分、國內大學電類專業日趨細分的當代,側重數字電路應用的專業(如通信、電氣、自動化等)仍然在深入學習SR鎖存器的電路構成,深入學習如何用74係列IC設計異步時序邏輯電路。筆者並不認為這些不重要,但以為這些應該是側重數字電路理論的專業(如電子、電信等)纔需要深入學習的內容,畢竟側重數字電路應用的專業的學生以後一般不需要設計IC;不需要在數字邏輯電路中做晶體管級的優化;也不需要為少數關鍵路徑而動用異步邏輯、鎖存器邏輯。相應地,在側重數字電路應用的專業中,現代數字電路應用中的同步時序邏輯內容並沒有提升到應有的地位,與之相關的時鍾概念和知識、常用的時序邏輯功能單元、基礎的時序分析概念和知識也是比較缺失的。
在本書中,筆者提煉和擴展瞭傳統數字電路課程中與FPGA應用相關的部分,形成瞭本書的第1章,便於讀者快速強化FPGA應用設計所需的數字電路基礎知識,尚未學習數字電路課程的低年級讀者也可以通過學習第1章來入門數字電路基礎。
第2章則是SystemVerilog(IEEE 1800—2012)簡明語法講解,主要側重可綜閤(即可以在FPGA中實現)的語法,最新的IEEE 1800—2012標準較早期版本引入瞭不少“漂亮”的語法元素,讓筆者急切地想與讀者分享,後果是少數理應可綜閤的語法在目前主流開發工具中尚不支持,或許它們還需要一點時間來跟進,遇到這些特例,書中均會給齣解決方法。
第3章是使用ModelSim進行Verilog功能仿真的簡單教程。
第4章是Verilog的基本應用,這一章主要介紹各種數字邏輯基本功能單元的描述,並著重介紹瞭時鍾、使能的概念和跨時鍾域處理。從這一章起,我們正式開始瞭FPGA應用設計之旅。
第5章介紹IO規範,首先通識性地介紹瞭IO連接的常識和常見電平規範,而後以四種常見外部邏輯接口規範為例,介紹瞭通用接口邏輯的設計和實現。希望讀者能在學習過程中領會到此類設計的一般思路和處理方法。
第6章介紹片上係統的內部互連。片上係統(SoC)結閤瞭通用處理器和FPGA邏輯的優勢,實現瞭軟硬件協同設計,是當下FPGA應用技術的熱門。而要充分利用SoC的優勢,發揮軟硬件協同的潛力,處理器係統與FPGA邏輯的高速互連至關重要。此章從一種簡單的互連接口入手,逐步過渡到目前應用最為廣泛的AXI互連協議。
FPGA應用開發和仿真 下載 mobi epub pdf txt 電子書 格式