本書是針對FPGA初學者編著的入門級圖書,以高云公司的FPGA和Verilog HDL為開發(fā)平臺,詳細闡述FPGA設計所需的基礎知識、基本語法、設計流程、設計技巧,全面、細致、深刻地剖析了Verilog HDL與C語言等傳統(tǒng)順序語言的本質(zhì)區(qū)別,使讀者通過簡單的實例逐步理解FPGA的硬件設計思想,實現(xiàn)快速掌握FPGA設計方法的目的。本書思路清晰、語言流暢、分析透徹,在簡明闡述設計方法的基礎上,重點辨析讀者易于與常規(guī)順序語言混淆的概念,力求使讀者在較短的時間內(nèi)理解硬件編程思想,掌握FPGA設計方法。
杜勇,四川省廣安市人,高級工程師。1999年于湖南大學獲電子工程專業(yè)學士學位,2005年于國防科技大學獲信息與通信工程專業(yè)碩士學位。主要從事數(shù)字信號處理、無線通信以及FPGA應用技術(shù)研究。發(fā)表學術(shù)論文十余篇,出版《數(shù)字濾波器的MATLAB與FPGA實現(xiàn)(第2版)》、《數(shù)字通信同步技術(shù)的MATLAB與FPGA實現(xiàn)》、《數(shù)字調(diào)制解調(diào)技術(shù)的MATLAB與FPGA實現(xiàn)》等多部著作。
目錄
第一篇 基礎篇
第1章 必備的數(shù)字邏輯電路知識 3
1.1 數(shù)字邏輯和邏輯電平 3
1.1.1 模擬器件構(gòu)成的數(shù)字電路 3
1.1.2 TTL反相器電路 4
1.1.3 現(xiàn)實中的數(shù)字信號波形 5
1.1.4 了解常用的邏輯電平 6
1.2 布爾代數(shù) 7
1.2.1 布爾和幾個基本運算規(guī)則 7
1.2.2 常用的布爾代數(shù)法則 8
1.3 組合邏輯電路基礎 9
1.3.1 組合邏輯電路的表示方法 9
1.3.2 為什么會產(chǎn)生競爭冒險 10
1.4 時序邏輯電路基礎 11
1.4.1 時序邏輯電路的結(jié)構(gòu) 11
1.4.2 D觸發(fā)器的工作波形 12
1.4.3 計數(shù)器與寄存器電路 13
1.5 小結(jié) 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的發(fā)展趨勢 24
2.3 FPGA的結(jié)構(gòu) 26
2.4 FPGA與其他處理平臺的比較 28
2.4.1 ASIC、DSP、ARM的特點 29
2.4.2 FPGA的特點及優(yōu)勢 30
2.4.3 FPGA與CPLD的區(qū)別 31
2.5 工程中如何選擇FPGA器件 31
2.6 小結(jié) 32
第3章 準備好開發(fā)環(huán)境 33
3.1 安裝FPGA開發(fā)環(huán)境 33
3.1.1 安裝高云云源軟件 33
3.1.2 安裝ModelSim軟件 35
3.2 開發(fā)平臺CGD100簡介 38
3.3 Verilog HDL基本語法 39
3.3.1 Verilog HDL的程序結(jié)構(gòu) 39
3.3.2 數(shù)據(jù)類型及基本運算符 42
3.3.3 運算符優(yōu)先級及關(guān)鍵詞 44
3.3.4 賦值語句與塊語句 44
3.3.5 條件語句和分支語句 47
3.4 小結(jié) 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 小結(jié) 64
第5章 從組合邏輯電路學起 65
5.1 從最簡單的與非門電路開始 65
5.1.1 調(diào)用門級結(jié)構(gòu)描述與非門 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的用法區(qū)別 73
5.2.5 記住“<=”與“=”賦值的規(guī)則 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線優(yōu)先編碼器電路 86
5.4.3 74LS138譯碼器電路 88
5.4.4 與if…else語句齊名的case語句 90
5.4.5 數(shù)據(jù)分配器與數(shù)據(jù)選擇器電路 91
5.5 數(shù)碼管靜態(tài)顯示電路設計 93
5.5.1 數(shù)碼管的基本工作原理 93
5.5.2 實例需求及電路原理分析 94
5.5.3 數(shù)碼管顯示電路Verilog HDL設計 95
5.5.4 板載測試 97
5.6 小結(jié) 98
第6章 時序邏輯電路的靈魂—D觸發(fā)器 101
6.1 深入理解D觸發(fā)器 101
6.1.1 D觸發(fā)器產(chǎn)生一個時鐘周期的延時 101
6.1.2 D觸發(fā)器能工作的最高時鐘頻率分析 102
6.2 D觸發(fā)器的描述方法 104
6.2.1 單個D觸發(fā)器的Verilog HDL設計 104
6.2.2 異步復位的D觸發(fā)器 106
6.2.3 同步復位的D觸發(fā)器 108
6.2.4 時鐘使能的D觸發(fā)器 109
6.2.5 D觸發(fā)器的ModelSim仿真 111
6.2.6 其他形式的D觸發(fā)器 112
6.3 初試牛刀—邊沿檢測電路設計 113
6.3.1 邊沿檢測電路的功能描述 113
6.3.2 邊沿檢測電路的Verilog HDL設計 114
6.3.3 改進的邊沿檢測電路 115
6.4 連續(xù)序列檢測電路—邊沿檢測電路的升級 116
6.4.1 連續(xù)序列檢測電路設計 116
6.4.2 分析Verilog HDL并行語句 118
6.4.3 再論“<=”與“=”賦值 119
6.4.4 序列檢測電路的ModelSim仿真 121
6.5 任意序列檢測器—感受D觸發(fā)器的強大 124
6.5.1 完成飲料質(zhì)量檢測電路功能設計 124
6.5.2 優(yōu)化檢測電路的設計代碼 128
6.6 小結(jié) 129
第7章 時序邏輯電路的精華—計數(shù)器 131
7.1 簡單的十六進制計數(shù)器 131
7.1.1 計數(shù)器設計 131
7.1.2 計數(shù)器就是加法器和觸發(fā)器 133
7.2 十進制計數(shù)器 134
7.2.1 具有復位及時鐘使能功能的計數(shù)器 134
7.2.2 討論計數(shù)器的進制 135
7.2.3 計數(shù)器代碼的花式寫法 136
7.3 計數(shù)器是流水燈的核心 137
7.3.1 設計一個秒信號 137
7.3.2 流水燈電路的設計方案 139
7.3.3 閃爍頻率可控制的流水燈 140
7.3.4 采用移位運算設計流水燈電路 142
7.4 Verilog的本質(zhì)是并行語言 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 亮度實現(xiàn)模塊Verilog HDL設計 147
7.5.4 亮度控制模塊Verilog HDL設計 148
7.5.5 頂層模塊Verilog HDL設計 150
7.6 小結(jié) 151
第三篇 入門篇
第8章 設計簡潔美觀的秒表電路 155
8.1 設定一個目標—4位秒表電路 155
8.1.1 明確功能需求 155
8.1.2 形成設計方案 156
8.2 頂層文件的Verilog HDL設計 157
8.3 設計一個完善的數(shù)碼管顯示模塊 158
8.4 秒表計數(shù)模塊的Verilog HDL設計 160
8.4.1 秒表計數(shù)電路設計 160
8.4.2 秒表計數(shù)電路的ModelSim仿真 162
8.4.3 簡潔美觀的秒表計數(shù)器設計 163
8.4.4 實現(xiàn)秒表的啟停功能 166
8.5 按鍵消抖模塊的Verilog HDL設計 166
8.5.1 按鍵消抖產(chǎn)生的原理 166
8.5.2 按鍵消抖模塊Verilog HDL設計 167
8.5.3 將按鍵消抖模塊集成到秒表電路中 169
8.6 小結(jié) 169
第9章 數(shù)字密碼鎖電路設計 171
9.1 數(shù)字密碼鎖的功能描述 171
9.2 規(guī)劃好數(shù)字密碼鎖的功能模塊 172
9.2.1 數(shù)字密碼鎖總體結(jié)構(gòu)框圖 172
9.2.2 數(shù)字密碼鎖的頂層模塊設計 172
9.3 數(shù)字密碼鎖功能子模塊設計 174
9.3.1 按鍵消抖模塊Verilog HDL設計 174
9.3.2 計數(shù)模塊Verilog HDL設計 175
9.3.3 密碼設置模塊才是核心模塊 176
9.4 小結(jié) 178
第10章 簡易電子琴電路設計 179
10.1 音符產(chǎn)生原理 179
10.2 琴鍵功能電路設計 180
10.2.1 頂層模塊設計 180
10.2.2 琴鍵模塊設計 182
10.2.3 音符產(chǎn)生模塊設計 183
10.3 自動演奏樂曲《梁! 185
10.3.1 自動演奏樂曲的原理 185
10.3.2 自動演奏樂曲《梁!菲 186
10.4 完整的電子琴電路設計 189
10.5 小結(jié) 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 發(fā)送模塊的Verilog HDL設計 198
11.3.5 FPGA實現(xiàn)及板載測試 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 完善秒表計數(shù)模塊Verilog HDL代碼 207
11.4.6 FPGA實現(xiàn)及板載測試 210
11.5 小結(jié) 210
第12章 對狀態(tài)機的討論 211
12.1 有限狀態(tài)機的概念 211
12.2 狀態(tài)機的Verilog設計方法 212
12.2.1 一段式狀態(tài)機Verilog代碼 212
12.2.2 二段式狀態(tài)機Verilog代碼 213
12.2.3 三段式狀態(tài)機Verilog HDL代碼 215
12.3 計數(shù)器電路的狀態(tài)機描述方法 216
12.4 序列檢測器的狀態(tài)機描述方法 218
12.5 小結(jié) 221
第四篇 提高篇
第13章 基本的時序約束方法 225
13.1 電路的速度極限 225
13.2 時序約束方法 227
13.2.1 查看計數(shù)器的邏輯電路結(jié)構(gòu) 227
13.2.2 計數(shù)器電路添加時鐘周期約束 229
13.3 速度與面積的取舍 231
13.3.1 多路加法器電路的結(jié)構(gòu)分析 231
13.3.2 流水線操作的本質(zhì)—討論多路加法器的運行速度 233
13.3.3 用一個加法器完成4路加法 235
13.3.4 串行加法器時序分析 238
13.4 小結(jié) 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核參數(shù)的設置 248
14.3.2 乘法器IP核的功能仿真 250
14.4 存儲器IP核 251
14.4.1 ROM核 251
14.4.2 RAM核 255
14.5 小結(jié) 260
第15章 采用在線邏輯分析儀調(diào)試程序 261
15.1 在線邏輯分析儀的優(yōu)勢 261
15.2 GAO的使用流程 262
15.3 采用GAO調(diào)試串口通信程序 263
15.3.1 調(diào)試目的 263
15.3.2 添加GAO到項目中 263
15.3.3 設置觸發(fā)信號及觸發(fā)條件 264
15.3.4 設置捕獲信號參數(shù) 265
15.3.5 觀察串口收發(fā)信號波形 267
15.4 小結(jié) 268
第16章 常用的FPGA設計技巧 269
16.1 默認引腳狀態(tài)設置 269
16.2 復位信號的處理方法 271
16.3 合理利用時鐘使能信號設計 272
16.4 利用移位相加實現(xiàn)乘法運算 273
16.5 根據(jù)芯片結(jié)構(gòu)制定設計方案 274
16.6 浮點乘法器設計 275
16.6.1 單精度浮點數(shù)據(jù)格式 275
16.6.2 單精度浮點數(shù)乘法運算分析 276
16.6.3 自定義浮點數(shù)據(jù)格式 276
16.6.4 自定義浮點數(shù)據(jù)乘法算法設計 277
16.6.5 算法Verilog HDL實現(xiàn) 278
16.7 小結(jié) 284
參考文獻 287