本書由至芯科技在各大高校的授課內(nèi)容整理而來,是為初學(xué)者量身定制的FPGA入門教材,從基礎(chǔ)的軟件安裝、工具使用、語法解釋、設(shè)計(jì)方法、常用IP,到最后的設(shè)計(jì)技巧及大量的進(jìn)階實(shí)驗(yàn),內(nèi)容環(huán)環(huán)相扣,為讀者建立了一個(gè)比較清晰的學(xué)習(xí)脈絡(luò)。設(shè)計(jì)思路及方法為本書重點(diǎn)強(qiáng)調(diào)的內(nèi)容,它作為一條主線貫穿始終,希望讀者學(xué)習(xí)時(shí)注意體會。只有掌握了正確的學(xué)習(xí)和設(shè)計(jì)方法,讀者才可能在數(shù)字邏輯設(shè)計(jì)的領(lǐng)域越走越遠(yuǎn)。本書沒有收錄過多煩瑣的理論,一切從實(shí)戰(zhàn)出發(fā),按照一套相對高效的設(shè)計(jì)方法直接切入一個(gè)個(gè)小的項(xiàng)目,深入淺出。希望以此可以培養(yǎng)廣大讀者的設(shè)計(jì)能力,我們不但要知道某個(gè)邏輯可以這樣寫,更重要的還必須清楚為什么這樣寫,這樣寫有什么優(yōu)勢或劣勢,還有沒有優(yōu)化空間等。與本書配套的視頻已保存在網(wǎng)絡(luò)云中,讀者可在下載后參考學(xué)習(xí)。本書內(nèi)容由淺入深,適合廣大可編程邏輯器件的初學(xué)者作為入門和進(jìn)階的教材,也適合作為電子信息、計(jì)算機(jī)等專業(yè)本科生、研究生,以及具有一定電子專業(yè)知識背景的電子工程師的參考用書。
本書是由至芯科技推出的FPGA基礎(chǔ)入門實(shí)驗(yàn)教程。授課內(nèi)容深入淺出,從最基礎(chǔ)的語法到進(jìn)階的端口驅(qū)動開發(fā),所有的設(shè)計(jì)都緊緊地圍繞著“設(shè)計(jì)方法”這樣的一條主線進(jìn)行。
本書主要由至芯科技工程師王建飛(筆名為夢翼師兄)和雷斌執(zhí)筆完成,內(nèi)容全部取材于至芯科技在各大高校的具體授課內(nèi)容,設(shè)計(jì)流程規(guī)范、精練。每個(gè)項(xiàng)目都給出了具體的設(shè)計(jì)目的、設(shè)計(jì)原理、設(shè)計(jì)思路、系統(tǒng)架構(gòu)圖、各模塊端口意義注解及具體模塊的代碼等。內(nèi)容詳細(xì),可以有效地幫助初學(xué)者快速入門FPGA硬件邏輯設(shè)計(jì)。
本書具有以下特點(diǎn)。
(1)教學(xué)題材和教學(xué)方法全部來自至芯科技在各大高校的實(shí)訓(xùn)內(nèi)容,設(shè)計(jì)方法規(guī)范,授課題材實(shí)戰(zhàn)價(jià)值高。
(2)教學(xué)內(nèi)容全部以實(shí)戰(zhàn)形式進(jìn)行,在動手實(shí)現(xiàn)實(shí)際項(xiàng)目的過程中掌握常用的語法、設(shè)計(jì)方法、通用接口及FPGA設(shè)計(jì)過程中常用到的設(shè)計(jì)技巧。
(3)本書由至芯科技工程師夢翼師兄編寫,在內(nèi)容編寫過程中融入了大量工程實(shí)戰(zhàn)經(jīng)驗(yàn),各代碼模塊實(shí)戰(zhàn)價(jià)值高,可移植性強(qiáng),大部分功能模塊可以直接應(yīng)用于其他設(shè)計(jì),從而有效縮短二次開發(fā)周期。
(4)本書配有夢翼師兄錄制的配套高清教學(xué)視頻,手把手教學(xué),幫助讀者提高學(xué)習(xí)效率。
夢翼師兄根據(jù)多年的項(xiàng)目研發(fā)和教學(xué)經(jīng)驗(yàn),將項(xiàng)目設(shè)計(jì)研發(fā)中需要用到的一些開發(fā)技巧和學(xué)習(xí)方法通過項(xiàng)目實(shí)戰(zhàn)的方式盡可能地體現(xiàn)到每一個(gè)實(shí)例中。通過本書的學(xué)習(xí),讀者不但可以掌握常用的FPGA接口和外設(shè)驅(qū)動方式。更重要的是,通過理解和練習(xí),讀者可以建立起一套完整、規(guī)范的開發(fā)設(shè)計(jì)流程和方法,助力之后的公司項(xiàng)目開發(fā)。
另外,讀者可以跟著夢翼師兄錄制的配套教學(xué)視頻進(jìn)行學(xué)習(xí),通過視頻,可以看到夢翼師兄如何對一個(gè)項(xiàng)目進(jìn)行構(gòu)思,以及如何進(jìn)行基礎(chǔ)模塊代碼的編寫。
在此特別感謝黑龍江信息技術(shù)職業(yè)學(xué)院劉春玲老師為本書的編寫提出的大量建設(shè)性建議以及對內(nèi)容的編排所做的大量工作。同時(shí),參與編寫本書的還有黑龍江信息技術(shù)職業(yè)學(xué)院的李茁老師、安康學(xué)院的崔智軍老師以及至芯科技的寇飛強(qiáng)、郝旭帥、陳飛龍三位工程師。非常感謝安康學(xué)院崔智軍老師對本書前4章內(nèi)容的編寫。由于編者水平有限和時(shí)間限制,書中難免存在不妥之處,敬請廣大讀者予以指正和幫助。
第1章 沒有金剛鉆,不攬瓷器活 1
1.1 Quartus II 15.0――溫婉簡約編譯器 1
1.1.1 寫在前面的話 1
1.1.2 Altera Quartus II 15.0安裝 1
1.2 ModelSim 10.3d――獨(dú)具慧眼仿真工 7
1.3 級聯(lián)調(diào)試――標(biāo)準(zhǔn)設(shè)計(jì)勢必行 7
第2章 工欲善其事,必先利其器 31
2.1 工程規(guī)范――我的地盤,你說了算 31
2.2 初識流水燈――很傻很天真 31
2.2.1 項(xiàng)目需求 31
2.2.2 相關(guān)技術(shù)介紹 31
2.2.3 硬件設(shè)計(jì) 32
2.2.4 頂層架構(gòu)設(shè)計(jì) 32
2.2.5 端口描述 33
2.2.6 代碼解釋 33
2.3 測試文件――一切都似曾相識 39
第3章 諄諄教誨莫相忘,字字珠璣記心頭 41
3.1 賦值語句――你是我的最愛 41
3.1.1 寫在前面的話 41
3.1.2 非阻塞賦值語句 41
3.1.3 阻塞賦值語句 43
3.2 關(guān)系運(yùn)算符――心中永遠(yuǎn)的痛 45
3.2.1 寫在前面的話 45
3.2.2 關(guān)系運(yùn)算符的種類 45
3.2.3 關(guān)系運(yùn)算符的使用意義 45
3.2.4 關(guān)系運(yùn)算符與算數(shù)運(yùn)算符優(yōu)先級 45
3.3 if-else 與 case――永遠(yuǎn)的歡喜冤家 45
3.3.1 寫在前面的話 45
3.3.2 if-else 條件分支語句 46
3.3.3 case分支控制語句 50
3.3.4 case語句和if-else語句的區(qū)別 52
3.4 縮減運(yùn)算符――就這樣變沒了 52
3.4.1 寫在前面的話 52
3.4.2 工程實(shí)例 52
3.5 移位運(yùn)算符――性子總是這么直 54
3.5.1 寫在前面的話 54
3.5.2 移位運(yùn)算符實(shí)例 55
3.6 位拼運(yùn)算符――聰慧靈秀惹人妒 57
3.6.1 寫在前面的話 57
3.6.2 代碼實(shí)例 57
第4章 會當(dāng)凌絕頂,設(shè)計(jì)Top-Down 59
4.1 層次化設(shè)計(jì)方法――心中永遠(yuǎn)的女神 59
4.1.1 寫在前面的話 59
4.1.2 層次化設(shè)計(jì)框圖示例 59
4.1.3 層次化設(shè)計(jì)實(shí)例 60
4.2 層次化設(shè)計(jì)技巧――巧奪天工磚瓦匠 65
4.2.1 寫在前面的話 65
4.2.2 電平觸發(fā) 65
4.2.3 尖峰脈沖 66
第5章 內(nèi)涵豐富本領(lǐng)多,誰與爭鋒IP核 68
5.1 鎖相環(huán)――速度,你說了算 68
5.1.1 寫在前面的話 68
5.1.2 項(xiàng)目需求 68
5.1.3 操作步驟 68
5.1.4 頂層架構(gòu)設(shè)計(jì) 73
5.1.5 端口功能 73
5.1.6 代碼解釋 73
5.1.7 仿真結(jié)果分析 75
5.2 ROM――只有你最慷慨 75
5.2.1 寫在前面的話 75
5.2.2 項(xiàng)目需求 75
5.2.3 操作步驟 75
5.2.4 頂層架構(gòu)設(shè)計(jì) 80
5.2.5 模塊功能介紹 80
5.2.6 模塊端口和內(nèi)部連線描述 80
5.2.7 代碼解釋 80
5.2.8 仿真分析 83
5.3 RAM――有入有出,公平合理 84
5.3.1 寫在前面的話 84
5.3.2 項(xiàng)目需求 84
5.3.3 操作步驟 84
5.3.4 頂層架構(gòu)設(shè)計(jì) 86
5.3.5 模塊功能介紹 86
5.3.6 模塊端口和內(nèi)部連線描述 87
5.3.7 代碼解釋 87
5.2.8 仿真分析 90
5.4 FIFO――重中之重緩存器 91
5.4.1 寫在前面的話 91
5.4.2 項(xiàng)目需求 91
5.4.3 操作步驟 91
5.4.4 頂層架構(gòu)設(shè)計(jì) 94
5.4.5 模塊功能介紹 95
5.4.6 模塊端口和內(nèi)部連線描述 95
5.4.7 代碼解釋 95
5.4.8 仿真分析 100
5.5 移位寄存器――你是我的驕傲 101
5.5.1 寫在前面的話 101
5.5.2 功能要求 102
5.5.3 操作步驟 103
5.5.4 頂層架構(gòu)設(shè)計(jì) 105
5.5.5 模塊功能介紹 105
5.5.6 模塊端口和內(nèi)部連線描述 105
5.5.7 代碼解釋 106
5.5.8 仿真分析 110
第6章 基礎(chǔ)項(xiàng)目我在行,信手拈來顯聰慧 111
6.1 二選一之戰(zhàn)――我只是個(gè)新兵 111
6.1.1 寫在前面的話 111
6.1.2 項(xiàng)目需求 111
6.1.3 系統(tǒng)架構(gòu) 111
6.1.4 模塊功能介紹 111
6.1.5 頂層模塊端口描述 111
6.1.6 代碼解釋 112
6.1.7 仿真分析 113
6.1.8 二選一數(shù)據(jù)寄存 114
6.2 三態(tài)門之戰(zhàn)――機(jī)關(guān)算盡太聰明 116
6.2.1 寫在前面的話 116
6.2.2 項(xiàng)目需求 116
6.2.3 系統(tǒng)架構(gòu) 117
6.2.4 模塊功能介紹 117
6.2.5 頂層模塊端口描述 117
6.2.6 代碼解釋 117
6.2.7 仿真分析 119
6.3 串并轉(zhuǎn)換――你無處不在 120
6.3.1 寫在前面的話 120
6.3.2 需求分析 120
6.3.3 頂層框架設(shè)計(jì) 120
6.3.4 頂層模塊端口介紹 121
6.3.5 代碼實(shí)現(xiàn) 121
6.4 generate語句――呵呵,你就會偷懶 125
6.4.1 寫在前面的話 125
6.4.2 基本概念 126
6.4.3 generate_for語句 126
6.2.4 generate_if語句 132
6.4.5 generate_case語句 133
6.5 邊沿檢測――如此高大上 135
6.5.1 寫在前面的話 135
6.5.2 電路原理分析 135
6.5.3 頂層框架結(jié)構(gòu) 136
6.5.4 頂層模塊端口介紹 136
6.5.5 代碼實(shí)現(xiàn) 136
6.5.6 仿真波形分析 138
6.6 按鍵消抖―且看老夫手段 139
6.6.1 寫在前面的話 139
6.6.2 基于尖峰脈沖的按鍵消抖 139
6.6.3 項(xiàng)目需求 139
6.6.4 誤區(qū)排除 139
6.6.5 設(shè)計(jì)思路 140
6.6.6 系統(tǒng)框架 140
6.6.7 頂層端口描述 141
6.6.8 代碼解釋 141
6.6.9 仿真分析 144
第7章 沒有標(biāo)準(zhǔn)的方法,但見可行的技巧 146
7.1 異步復(fù)位同步釋放――高端神秘你最帥 146
7.1.1 寫在前面的話 146
7.1.2 基本概念 146
7.1.3 代碼舉例 146
7.1.4 異步復(fù)位同步釋放電路 148
7.2 任意分頻之戰(zhàn)――一切都如此簡單 155
7.2.1 寫在前面的話 155
7.2.2 實(shí)現(xiàn)原理 156
7.2.3 系統(tǒng)框架 156
7.2.4 頂層模塊端口描述 156
7.2.5 代碼分析 156
7.2.6 仿真分析 159
7.3 二進(jìn)制數(shù)轉(zhuǎn)BCD――終極進(jìn)化 160
7.3.1 寫在前面的話 160
7.3.2 基本概念 160
7.3.3 逐步移位法原理 160
7.3.4 設(shè)計(jì)任務(wù) 161
7.3.5 頂層框圖設(shè)計(jì) 161
7.3.6 代碼實(shí)現(xiàn) 163
7.3.7 仿真分析 165
7.4 BCD轉(zhuǎn)二進(jìn)制――返璞歸真 166
7.4.1 寫在前面的話 166
7.4.2 基本概念 166
7.4.3 移位算法原理 166
7.4.4 頂層框架圖 166
7.4.5 頂層模塊端口介紹 167
7.4.6 代碼實(shí)現(xiàn) 167
7.4.7 仿真分析 169
7.5 流水線設(shè)計(jì)之戰(zhàn)――效率決定成敗 170
7.5.1 寫在前面的話 170
7.5.2 流水線的基本概念 170
7.5.3 流水線改造實(shí)例 171
7.6 Signaltap 之戰(zhàn)――奸細(xì),哪里逃 177
7.6.1 寫在前面的話 177
7.6.2 背景知識 178
7.6.3 典型的SignalTap II調(diào)試流程 180
7.6.4 SignalTap II調(diào)試具體操作步驟 180
7.6.5 具體步驟 181
第8章 進(jìn)階首選我當(dāng)前,乘勝追擊勢必行 204
8.1 字符狀態(tài)機(jī)之戰(zhàn)――進(jìn)來的,都要審查 204
8.1.1 寫在前面的話 204
8.1.2 項(xiàng)目需求 204
8.1.3 解決方案 204
8.1.4 系統(tǒng)架構(gòu) 204
8.1.5 模塊功能介紹 204
8.1.6 頂層模塊端口描述 205
8.1.7 代碼解釋 205
8.1.8 仿真分析 210
8.2 數(shù)碼管之戰(zhàn)――好像勝利的曙光 210
8.2.1 寫在前面的話 210
8.2.2 項(xiàng)目需求 210
8.2.3 原理分析 210
8.2.4 單個(gè)數(shù)碼管顯示 212
8.2.5 6個(gè)數(shù)碼管顯示 215
8.3 PS2之戰(zhàn)――鍵盤原來是這樣 221
8.3.1 寫在前面的話 221
8.3.2 項(xiàng)目需求 221
8.3.3 原理分析 222
8.3.4 系統(tǒng)架構(gòu) 223
8.3.5 模塊功能介紹 223
8.3.6 頂層模塊端口描述 223
8.3.7 用Signaltap II分析波形 223
8.3.8 代碼解釋 225
8.3.9 仿真分析 232
8.4 矩陣鍵盤之戰(zhàn)――嚴(yán)密的資源整合 233
8.4.1 寫在前面的話 233
8.4.2 項(xiàng)目需求 233
8.4.3 矩陣鍵盤的原理 233
8.4.4 架構(gòu)設(shè)計(jì) 235
8.4.5 模塊功能介紹 235
8.4.6 頂層模塊端口描述 235
8.4.7 代碼解釋 235
8.4.8 仿真分析 241
8.5 IIC之戰(zhàn)――配置離不開你 241
8.5.1 寫在前面的話 241
8.5.2 項(xiàng)目需求 242
8.5.3 IIC的原理分析 242
8.5.4 架構(gòu)設(shè)計(jì) 246
8.5.5 模塊功能介紹 246
8.5.6 頂層模塊端口描述 246
8.5.7 代碼解釋 246
8.5.8 仿真分析 263
8.6 串口通信之戰(zhàn)――通信終于暢通了 264
8.6.1 寫在前面的話 264
8.6.2 項(xiàng)目需求 265
8.6.3 UART的原理分析 265
8.6.4 系統(tǒng)架構(gòu) 266
8.6.5 模塊功能介紹 268
8.6.6 模塊端口和內(nèi)部連線描述 268
8.6.7 代碼解釋 268
8.5.8 仿真分析 276
8.7 VGA之戰(zhàn)――我型我酷炫 276
8.7.1 寫在前面的話 276
8.7.2 什么是VGA 277
8.7.3 VGA接口 277
8.7.4 VGA顯示原理 278
8.7.5 頂層框架 280
8.7.6 頂層模塊端口描述 280
8.7.7 代碼實(shí)現(xiàn) 280
8.7.8 仿真分析 285
8.8 12864液晶之戰(zhàn)――心靈的窗口 285
8.8.1 寫在前面的話 285
8.8.2 基本概念 285
8.8.3 硬件電路結(jié)構(gòu) 286
8.8.4 官方代碼解析 287
8.8.5 項(xiàng)目需求 293
8.8.6 系統(tǒng)架構(gòu) 293
8.8.7 代碼解釋 294
8.8.8 仿真分析 305
8.9 DDS――形隨心動 305
8.9.1 寫在前面的話 305
8.9.2 項(xiàng)目需求 305
8.9.3 項(xiàng)目分析 305
8.9.4 系統(tǒng)架構(gòu) 306
8.9.5 模塊功能介紹 306
8.9.6 頂層端口和內(nèi)部連線描述 306
8.9.7 波形數(shù)據(jù)的由來 307
8.9.8 波形發(fā)生器(不可調(diào)頻和調(diào)相) 308
8.9.9 波形發(fā)生器(不可調(diào)頻,但可以調(diào)相) 312
8.9.10 波形發(fā)生器(可以調(diào)頻,可以調(diào)相) 315
8.9.11 最終設(shè)計(jì) 318
8.10 蜂鳴器之戰(zhàn)――奏響凱旋的樂章 322
8.10.1 寫在前面的話 322
8.10.2 什么是蜂鳴器 322
8.10.3 設(shè)計(jì)任務(wù) 323
8.10.4 頂層端口介紹 325
8.10.5 代碼解釋 325
8.10.6 仿真分析 331