零基礎學 FPGA 設計 — 理解硬件編程思想

杜勇

買這商品的人也買了...

商品描述

本書是針對FPGA初編著的入門級圖書,以高雲公司的FPGA和Verilog HDL為開發平臺,
詳細闡述FPGA設計所需的基礎知識、基本語法、設計流程、設計技巧,全面、細、
深刻地剖析了Verilog HDL與C語言等傳統順序語言的本質區別,使讀者通過簡單的實例逐步理解FPGA的硬件設計思想,
實現快速掌握FPGA設計方法的目的。
本書思路清晰、語言流暢、分析透徹,在簡明闡述設計方法的基礎上,
重點辨析讀者易於與常規順序語言混淆的概念,力求使讀者在較短的時間內理解硬件編程思想,掌握FPGA設計方法。

作者簡介

杜勇
四川省廣安市人,高級工程師。
1999年於湖南大學獲電子工程專業學士學位,2005年於國防科技大學獲信息與通信工程專業碩士學位。
主要從事數字信號處理、無線通信以及FPGA應用技術研究。
發表學術論文十餘篇,出版《數字濾波器的MATLAB與FPGA實現(第2版)》、
《數字通信同步技術的MATLAB與FPGA實現》、《數字調製解調技術的MATLAB與FPGA實現》等多部著作。

目錄大綱

第一篇基礎篇
第1章必備的數字邏輯電路知識 3
1.1 數字邏輯和邏輯電平 3
1.1.1 模擬器件構成的數字電路 3
1.1.2 TTL反相器電路 4
1.1.3 現實中的數字信號波形 5
1.1.4 瞭解常用的邏輯電平 6
1.2 布爾代數 7
1.2.1 布爾和幾個基本運算規則 7
1.2.2 常用的布爾代數法則 8
1.3 組合邏輯電路基礎 9
1.3.1 組合邏輯電路的表示方法 9
1.3.2 為什麼會產生競爭冒險10
1.4 時序邏輯電路基礎11
1.4.1 時序邏輯電路的結構11
1.4.2 D觸發器的工作波形12
1.4.3 計數器與寄存器電路13
1.5 小結16
第2章可編程邏輯器件基礎17
2.1 可編程邏輯器件的歷史17
2.1.1 PROM是可編程邏輯器件17
2.1.2 從PROM到GAL 19
2.1.3 從SPLD到CPLD 21
2.1.4 FPGA的時代22
2.2 FPGA的發展趨勢24
2.3 FPGA的結構26
2.4 FPGA與其他處理平臺的比較28
2.4.1 ASIC、DSP、ARM的特點29
2.4.2 FPGA的特點及優勢30
2.4.3 FPGA與CPLD的區別31
2.5 工程中如何選擇FPGA器件31
2.6 小結32
第3章準備好開發環境33
3.1 安裝FPGA開發環境33
3.1.1 安裝高雲雲源軟件33
3.1.2 安裝ModelSim軟件35
3.2 開發平臺CGD100簡介38
3.3 Verilog HDL基本語法39
3.3.1 Verilog HDL的程序結構39
3.3.2 數據類型及基本運算符42
3.3.3 運算符優先級及關鍵詞44
3.3.4 賦值語句與塊語句44
3.3.5 條件語句和分支語句47
3.4 小結48
第二篇初識篇
第4章FPGA設計流程―LED流水燈電路51
4.1 FPGA設計流程51
4.2 流水燈設計實例要求54
4.3 讀懂電路原理圖55
4.4 流水燈的設計輸入57
4.4.1 建立FPGA工程57
4.4.2 Verilog HDL程序輸入59
4.5 程序文件下載62
4.6 小結64
第5章從組合邏輯電路學起65
5.1 從最簡單的與非門電路開始65
5.1.1 調用門級結構描述與非門65
5.1.2 二合一的命名原則66
5.1.3 用門級電路搭建一個投票電路67
5.2 設計複雜一點的投票電路68
5.2.1 門電路設計方法的短板68
5.2.2 利用assign語句完成門電路功能69
5.2.3 常用的if…else語句71
5.2.4 reg與wire的用法區別73
5.2.5 記住“<=”與“=”賦值的規則74
5.2.6 非常重要的概念―信號位寬75
5.2.7 行為級建模的5人投票電路75
5.3 ModelSim模擬電路功能76
5.3.1 4線-2線編碼器設計77
5.3.2 建立ModelSim工程78
5.3.3 設計測試激勵文件79
5.3.4 查看ModelSim模擬波形82
5.4 典型組合邏輯電路Verilog HDL設計84
5.4.1 8421BCD編碼器電路85
5.4.2 8線-3線優先編碼器電路86
5.4.3 74LS138譯碼器電路88
5.4.4 與if…else語句齊名的case語句90
5.4.5 數據分配器與數據選擇器電路91
5.5 數碼管靜態顯示電路設計93
5.5.1 數碼管的基本工作原理93
5.5.2 實例需求及電路原理分析94
5.5.3 數碼管顯示電路Verilog HDL設計95
5.5.4 板載測試97
5.6 小結98
第6章時序邏輯電路的靈魂―D觸發器101
6.1 深入理解D觸發器101
6.1.1 D觸發器產生一個時鐘週期的延時101
6.1.2 D觸發器能工作的最高時鐘頻率分析102
6.2 D觸發器的描述方法104
6.2.1 單個D觸發器的Verilog HDL設計104
6.2.2 異步復位的D觸發器106
6.2.3 同步復位的D觸發器108
6.2.4 時鐘使能的D觸發器109
6.2.5 D觸發器的ModelSim模擬111
6.2.6 其他形式的D觸發器112
6.3 初試牛刀―邊沿檢測電路設計113
6.3.1 邊沿檢測電路的功能描述113
6.3.2 邊沿檢測電路的Verilog HDL設計114
6.3.3 改進的邊沿檢測電路115
6.4 連續序列檢測電路―邊沿檢測電路的升級116
6.4.1 連續序列檢測電路設計116
6.4.2 分析Verilog HDL並行語句118
6.4.3 再論“<=”與“=”賦值119
6.4.4 序列檢測電路的ModelSim模擬121
6.5 任意序列檢測器―感受D觸發器的強大124
6.5.1 完成飲料質量檢測電路功能設計124
6.5.2 優化檢測電路的設計代碼128
6.6 小結129
第7章時序邏輯電路的精華―計數器131
7.1 簡單的十六進制計數器131
7.1.1 計數器設計131
7.1.2 計數器就是加法器和觸發器133
7.2 十進制計數器134
7.2.1 具有復位及時鐘使能功能的計數器134
7.2.2 討論計數器的進制135
7.2.3 計數器代碼的花式寫法136
7.3 計數器是流水燈的核心137
7.3.1 設計一個秒信號137
7.3.2 流水燈電路的設計方案139
7.3.3 閃爍頻率可控制的流水燈140
7.3.4 採用移位運算設計流水燈電路142
7.4 Verilog的本質是並行語言142
7.4.1 典型的Verilog錯誤用法―同一信號重複賦值142
7.4.2 並行語言與順序語言144
7.4.3 採用並行思維分析信號重複賦值問題145
7.5 呼吸燈電路設計146
7.5.1 呼吸燈的工作原理146
7.5.2 設計思路分析147
7.5.3 亮度實現模塊Verilog HDL設計147
7.5.4 亮度控制模塊Verilog HDL設計148
7.5.5 頂層模塊Verilog HDL設計150
7.6 小結151
第三篇入門篇
第8章設計簡潔美觀的秒錶電路155
8.1 設定一個目標―4位秒錶電路155
8.1.1 明確功能需求155
8.1.2 形成設計方案156
8.2 頂層文件的Verilog HDL設計157
8.3 設計一個完善的數碼管顯示模塊158
8.4 秒錶計數模塊的Verilog HDL設計160
8.4.1 秒錶計數電路設計160
8.4.2 秒錶計數電路的ModelSim模擬162
8.4.3 簡潔美觀的秒錶計數器設計163
8.4.4 實現秒錶的啟停功能166
8.5 按鍵消抖模塊的Verilog HDL設計166
8.5.1 按鍵消抖產生的原理166
8.5.2 按鍵消抖模塊Verilog HDL設計167
8.5.3 將按鍵消抖模塊集成到秒錶電路中169
8.6 小結169
第9章數字密碼鎖電路設計171
9.1 數字密碼鎖的功能描述171
9.2 規劃好數字密碼鎖的功能模塊172
9.2.1 數字密碼鎖總體結構框圖172
9.2.2 數字密碼鎖的頂層模塊設計172
9.3 數字密碼鎖功能子模塊設計174
9.3.1 按鍵消抖模塊Verilog HDL設計174
9.3.2 計數模塊Verilog HDL設計175
9.3.3 密碼設置模塊才是核心模塊176
9.4 小結178
第10章簡易電子琴電路設計179
10.1 音符產生原理179
10.2 琴鍵功能電路設計180
10.2.1 頂層模塊設計180
10.2.2 琴鍵模塊設計182
10.2.3 音符產生模塊設計183
10.3 自動演奏樂曲《梁祝》 185
10.3.1 自動演奏樂曲的原理185
10.3.2 自動演奏樂曲《梁祝》片段186
10.4 完整的電子琴電路設計189
10.5 小結190
第11章應用廣泛的串口通信電路191
11.1 RS-232串口通信的概念191
11.2 串口硬件電路原理分析192
11.3 串口通信電路Verilog HDL設計193
11.3.1 頂層文件的Verilog HDL設計193
11.3.2 時鐘模塊的Verilog HDL設計195
11.3.3 接收模塊的Verilog HDL設計196
11.3.4 發送模塊的Verilog HDL設計198
11.3.5 FPGA實現及板載測試199
11.4 採用串口控制秒錶電路201
11.4.1 設計需求分析201
11.4.2 頂層文件的Verilog HDL設計202
11.4.3 秒錶時間獲取模塊Verilog HDL設計204
11.4.4 完善秒錶電路頂層模塊Verilog HDL代碼205
11.4.5 完善秒錶計數模塊Verilog HDL代碼207
11.4.6 FPGA實現及板載測試210
11.5 小結210
第12章對狀態機的討論211
12.1 有限狀態機的概念211
12.2 狀態機的Verilog設計方法212
12.2.1 一段式狀態機Verilog代碼212
12.2.2 二段式狀態機Verilog代碼213
12.2.3 三段式狀態機Verilog HDL代碼215
12.3 計數器電路的狀態機描述方法216
12.4 序列檢測器的狀態機描述方法218
12.5 小結221
第四篇提高篇
第13章基本的時序約束方法225
13.1 電路的速度極限225
13.2 時序約束方法227
13.2.1 查看計數器的邏輯電路結構227
13.2.2 計數器電路添加時鐘週期約束229
13.3 速度與面積的取捨231
13.3.1 多路加法器電路的結構分析231
13.3.2 流水線操作的本質―討論多路加法器的運行速度233
13.3.3 用一個加法器完成4路加法235
13.3.4 串行加法器時序分析238
13.4 小結238
第14章採用IP核設計241
14.1 FPGA設計中的“拿來主義”―使用IP核241
14.1.1 IP核的一般概念241
14.1.2 FPGA設計中的IP核類型242
14.2 時鐘IP核244
14.2.1 全局時鐘資源244
14.2.2 採用時鐘IP核生成多路時鐘信號244
14.3 乘法器IP核248
14.3.1 乘法器IP核參數的設置248
14.3.2 乘法器IP核的功能模擬250
14.4 存儲器IP核251
14.4.1 ROM核251
14.4.2 RAM核255
14.5 小結260
第15章採用在線邏輯分析儀調試程序261
15.1 在線邏輯分析儀的優勢261
15.2 GAO的使用流程262
15.3 採用GAO調試串口通信程序263
15.3.1 調試目的263
15.3.2 添加GAO到項目中263
15.3.3 設置觸發信號及觸發條件264
15.3.4 設置捕獲信號參數265
15.3.5 觀察串口收發信號波形267
15.4 小結268
第16章常用的FPGA設計技巧269
16.1 默認引腳狀態設置269
16.2 復位信號的處理方法271
16.3 合理利用時鐘使能信號設計272
16.4 利用移位相加實現乘法運算273
16.5 根據芯片結構制定設計方案274
16.6 浮點乘法器設計275
16.6.1 單精度浮點數據格式275
16.6.2 單精度浮點數乘法運算分析276
16.6.3 自定義浮點數據格式276
16.6.4 自定義浮點數據乘法算法設計277
16.6.5 算法Verilog HDL實現278
16.7 小結284
參考文獻287