本書(shū)由至芯科技在各大高校的授課內(nèi)容整理而來(lái),是為初學(xué)者量身定制的FPGA入門(mén)教材,從基礎(chǔ)的軟件安裝、工具使用、語(yǔ)法解釋、設(shè)計(jì)方法、常用IP,到最后的設(shè)計(jì)技巧及大量的進(jìn)階實(shí)驗(yàn),內(nèi)容環(huán)環(huán)相扣,為讀者建立了一個(gè)比較清晰的學(xué)習(xí)脈絡(luò)。設(shè)計(jì)思路及方法為本書(shū)重點(diǎn)強(qiáng)調(diào)的內(nèi)容,它作為一條主線貫穿始終,希望讀者學(xué)習(xí)時(shí)注意體會(huì)。只有掌握了正確的學(xué)習(xí)和設(shè)計(jì)方法,讀者才可能在數(shù)字邏輯設(shè)計(jì)的領(lǐng)域越走越遠(yuǎn)。本書(shū)沒(méi)有收錄過(guò)多煩瑣的理論,一切從實(shí)戰(zhàn)出發(fā),按照一套相對(duì)高效的設(shè)計(jì)方法直接切入一個(gè)個(gè)小的項(xiàng)目,深入淺出。希望以此可以培養(yǎng)廣大讀者的設(shè)計(jì)能力,我們不但要知道某個(gè)邏輯可以這樣寫(xiě),更重要的還必須清楚為什么這樣寫(xiě),這樣寫(xiě)有什么優(yōu)勢(shì)或劣勢(shì),還有沒(méi)有優(yōu)化空間等。與本書(shū)配套的視頻已保存在網(wǎng)絡(luò)云中,讀者可在下載后參考學(xué)習(xí)。本書(shū)內(nèi)容由淺入深,適合廣大可編程邏輯器件的初學(xué)者作為入門(mén)和進(jìn)階的教材,也適合作為電子信息、計(jì)算機(jī)等專業(yè)本科生、研究生,以及具有一定電子專業(yè)知識(shí)背景的電子工程師的參考用書(shū)。
本書(shū)是由至芯科技推出的FPGA基礎(chǔ)入門(mén)實(shí)驗(yàn)教程。授課內(nèi)容深入淺出,從最基礎(chǔ)的語(yǔ)法到進(jìn)階的端口驅(qū)動(dòng)開(kāi)發(fā),所有的設(shè)計(jì)都緊緊地圍繞著“設(shè)計(jì)方法”這樣的一條主線進(jìn)行。
本書(shū)主要由至芯科技工程師王建飛(筆名為夢(mèng)翼師兄)和雷斌執(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é)者快速入門(mén)FPGA硬件邏輯設(shè)計(jì)。
本書(shū)具有以下特點(diǎn)。
(1)教學(xué)題材和教學(xué)方法全部來(lái)自至芯科技在各大高校的實(shí)訓(xùn)內(nèi)容,設(shè)計(jì)方法規(guī)范,授課題材實(shí)戰(zhàn)價(jià)值高。
(2)教學(xué)內(nèi)容全部以實(shí)戰(zhàn)形式進(jìn)行,在動(dòng)手實(shí)現(xiàn)實(shí)際項(xiàng)目的過(guò)程中掌握常用的語(yǔ)法、設(shè)計(jì)方法、通用接口及FPGA設(shè)計(jì)過(guò)程中常用到的設(shè)計(jì)技巧。
(3)本書(shū)由至芯科技工程師夢(mèng)翼師兄編寫(xiě),在內(nèi)容編寫(xiě)過(guò)程中融入了大量工程實(shí)戰(zhàn)經(jīng)驗(yàn),各代碼模塊實(shí)戰(zhàn)價(jià)值高,可移植性強(qiáng),大部分功能模塊可以直接應(yīng)用于其他設(shè)計(jì),從而有效縮短二次開(kāi)發(fā)周期。
(4)本書(shū)配有夢(mèng)翼師兄錄制的配套高清教學(xué)視頻,手把手教學(xué),幫助讀者提高學(xué)習(xí)效率。
夢(mèng)翼師兄根據(jù)多年的項(xiàng)目研發(fā)和教學(xué)經(jīng)驗(yàn),將項(xiàng)目設(shè)計(jì)研發(fā)中需要用到的一些開(kāi)發(fā)技巧和學(xué)習(xí)方法通過(guò)項(xiàng)目實(shí)戰(zhàn)的方式盡可能地體現(xiàn)到每一個(gè)實(shí)例中。通過(guò)本書(shū)的學(xué)習(xí),讀者不但可以掌握常用的FPGA接口和外設(shè)驅(qū)動(dòng)方式。更重要的是,通過(guò)理解和練習(xí),讀者可以建立起一套完整、規(guī)范的開(kāi)發(fā)設(shè)計(jì)流程和方法,助力之后的公司項(xiàng)目開(kāi)發(fā)。
另外,讀者可以跟著夢(mèng)翼師兄錄制的配套教學(xué)視頻進(jìn)行學(xué)習(xí),通過(guò)視頻,可以看到夢(mèng)翼師兄如何對(duì)一個(gè)項(xiàng)目進(jìn)行構(gòu)思,以及如何進(jìn)行基礎(chǔ)模塊代碼的編寫(xiě)。
在此特別感謝黑龍江信息技術(shù)職業(yè)學(xué)院劉春玲老師為本書(shū)的編寫(xiě)提出的大量建設(shè)性建議以及對(duì)內(nèi)容的編排所做的大量工作。同時(shí),參與編寫(xiě)本書(shū)的還有黑龍江信息技術(shù)職業(yè)學(xué)院的李茁老師、安康學(xué)院的崔智軍老師以及至芯科技的寇飛強(qiáng)、郝旭帥、陳飛龍三位工程師。非常感謝安康學(xué)院崔智軍老師對(duì)本書(shū)前4章內(nèi)容的編寫(xiě)。由于編者水平有限和時(shí)間限制,書(shū)中難免存在不妥之處,敬請(qǐng)廣大讀者予以指正和幫助。
第1章 沒(méi)有金剛鉆,不攬瓷器活 1
1.1 Quartus II 15.0――溫婉簡(jiǎn)約編譯器 1
1.1.1 寫(xiě)在前面的話 1
1.1.2 Altera Quartus II 15.0安裝 1
1.2 ModelSim 10.3d――獨(dú)具慧眼仿真工 7
1.3 級(jí)聯(lián)調(diào)試――標(biāo)準(zhǔn)設(shè)計(jì)勢(shì)必行 7
第2章 工欲善其事,必先利其器 31
2.1 工程規(guī)范――我的地盤(pán),你說(shuō)了算 31
2.2 初識(shí)流水燈――很傻很天真 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 測(cè)試文件――一切都似曾相識(shí) 39
第3章 諄諄教誨莫相忘,字字珠璣記心頭 41
3.1 賦值語(yǔ)句――你是我的最愛(ài) 41
3.1.1 寫(xiě)在前面的話 41
3.1.2 非阻塞賦值語(yǔ)句 41
3.1.3 阻塞賦值語(yǔ)句 43
3.2 關(guān)系運(yùn)算符――心中永遠(yuǎn)的痛 45
3.2.1 寫(xiě)在前面的話 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)先級(jí) 45
3.3 if-else 與 case――永遠(yuǎn)的歡喜冤家 45
3.3.1 寫(xiě)在前面的話 45
3.3.2 if-else 條件分支語(yǔ)句 46
3.3.3 case分支控制語(yǔ)句 50
3.3.4 case語(yǔ)句和if-else語(yǔ)句的區(qū)別 52
3.4 縮減運(yùn)算符――就這樣變沒(méi)了 52
3.4.1 寫(xiě)在前面的話 52
3.4.2 工程實(shí)例 52
3.5 移位運(yùn)算符――性子總是這么直 54
3.5.1 寫(xiě)在前面的話 54
3.5.2 移位運(yùn)算符實(shí)例 55
3.6 位拼運(yùn)算符――聰慧靈秀惹人妒 57
3.6.1 寫(xiě)在前面的話 57
3.6.2 代碼實(shí)例 57
第4章 會(huì)當(dāng)凌絕頂,設(shè)計(jì)Top-Down 59
4.1 層次化設(shè)計(jì)方法――心中永遠(yuǎn)的女神 59
4.1.1 寫(xiě)在前面的話 59
4.1.2 層次化設(shè)計(jì)框圖示例 59
4.1.3 層次化設(shè)計(jì)實(shí)例 60
4.2 層次化設(shè)計(jì)技巧――巧奪天工磚瓦匠 65
4.2.1 寫(xiě)在前面的話 65
4.2.2 電平觸發(fā) 65
4.2.3 尖峰脈沖 66
第5章 內(nèi)涵豐富本領(lǐng)多,誰(shuí)與爭(zhēng)鋒IP核 68
5.1 鎖相環(huán)――速度,你說(shuō)了算 68
5.1.1 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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)目我在行,信手拈來(lái)顯聰慧 111
6.1 二選一之戰(zhàn)――我只是個(gè)新兵 111
6.1.1 寫(xiě)在前面的話 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)門(mén)之戰(zhàn)――機(jī)關(guān)算盡太聰明 116
6.2.1 寫(xiě)在前面的話 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)換――你無(wú)處不在 120
6.3.1 寫(xiě)在前面的話 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語(yǔ)句――呵呵,你就會(huì)偷懶 125
6.4.1 寫(xiě)在前面的話 125
6.4.2 基本概念 126
6.4.3 generate_for語(yǔ)句 126
6.2.4 generate_if語(yǔ)句 132
6.4.5 generate_case語(yǔ)句 133
6.5 邊沿檢測(cè)――如此高大上 135
6.5.1 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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章 沒(méi)有標(biāo)準(zhǔn)的方法,但見(jiàn)可行的技巧 146
7.1 異步復(fù)位同步釋放――高端神秘你最帥 146
7.1.1 寫(xiě)在前面的話 146
7.1.2 基本概念 146
7.1.3 代碼舉例 146
7.1.4 異步復(fù)位同步釋放電路 148
7.2 任意分頻之戰(zhàn)――一切都如此簡(jiǎn)單 155
7.2.1 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 170
7.5.2 流水線的基本概念 170
7.5.3 流水線改造實(shí)例 171
7.6 Signaltap 之戰(zhàn)――奸細(xì),哪里逃 177
7.6.1 寫(xiě)在前面的話 177
7.6.2 背景知識(shí) 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)前,乘勝追擊勢(shì)必行 204
8.1 字符狀態(tài)機(jī)之戰(zhàn)――進(jìn)來(lái)的,都要審查 204
8.1.1 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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)――鍵盤(pán)原來(lái)是這樣 221
8.3.1 寫(xiě)在前面的話 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 矩陣鍵盤(pán)之戰(zhàn)――嚴(yán)密的資源整合 233
8.4.1 寫(xiě)在前面的話 233
8.4.2 項(xiàng)目需求 233
8.4.3 矩陣鍵盤(pán)的原理 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)――配置離不開(kāi)你 241
8.5.1 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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 寫(xiě)在前面的話 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――形隨心動(dòng) 305
8.9.1 寫(xiě)在前面的話 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ù)的由來(lái) 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)――奏響凱旋的樂(lè)章 322
8.10.1 寫(xiě)在前面的話 322
8.10.2 什么是蜂鳴器 322
8.10.3 設(shè)計(jì)任務(wù) 323
8.10.4 頂層端口介紹 325
8.10.5 代碼解釋 325
8.10.6 仿真分析 331