隨著現(xiàn)場可編程邏輯器件結(jié)構(gòu)和工藝的發(fā)展,F(xiàn)PGA的性能和容量逐年提升,同時功耗和價格持續(xù)降低。近年來,已經(jīng)有越來越多的企業(yè)考慮并在其實際項目或產(chǎn)品中加入FPGA,或者直接以FPGA作為核心控制單元。FPGA作為一種硬件邏輯器件,其開發(fā)思路與常規(guī)的MCU或處理器有較大的差別,如何正確地學習并掌握FPGA的開發(fā)方法,對于高效地使用FPGA至關(guān)重要。
筆者曾自學FPGA近兩年,但始終不得要領(lǐng),后經(jīng)專業(yè)人士指點,方才領(lǐng)悟FPGA之所以難學,是難在沒有掌握正確的學習和開發(fā)方法。一旦掌握了正確的學習方法,一切就變得輕松了。在FPGA的學習和開發(fā)中最為關(guān)鍵的一點就是驗證。
作為一本入門級的FPGA技術(shù)教材,本書主要針對剛接觸FPGA的讀者。這一類讀者,往往都有一定的MCU開發(fā)經(jīng)驗,也正是這一點,讓很多自學FPGA的人往往一開始就按照MCU開發(fā)的慣性思維來對待FPGA,結(jié)果就是耗費了幾倍的精力,卻沒有太大的進步。所以本書在編排時,重點關(guān)注FPGA的開發(fā)流程。每個實驗,無論是最基礎(chǔ)的點亮LED燈,還是綜合的多模塊數(shù)字系統(tǒng)設(shè)計,以及復雜的SDRAM控制器設(shè)計,都嚴格按照“設(shè)計+驗證”的流程進行。首先,通過知識背景的介紹,講解設(shè)計中需要注意的問題;接著,一步一步地根據(jù)設(shè)計需求完成設(shè)計中的每一個部分;然后,編寫Testbench文件,使用ModelSim軟件對設(shè)計進行仿真驗證;最后,仿真驗證通過后,再配置到FPGA器件中運行,如果板級運行不正確,則再回到仿真波形中查找可能的錯誤原因,在必要時使用板級驗證工具如SignaltapⅡ進行板級調(diào)試。
本書按照循序漸進的過程,分成6章,具體內(nèi)容如下:
第1章,主要介紹了FPGA的硬件架構(gòu),軟件開發(fā)工具的安裝與基本使用。
第2章,介紹了本書所依靠的FPGA學習平臺AC620開發(fā)板的相關(guān)特性,并通過一個實例介紹了FPGA的開發(fā)流程。
第3章,介紹了基于FPGA的一些基本數(shù)字邏輯電路設(shè)計,這些設(shè)計所依靠的背景都是大家所熟悉的一些內(nèi)容,因此較容易接受,方便大家能夠輕松入門。
第4章,介紹了CycloneⅣEFPGA上專用硬件資源PLL、嵌入式塊RAM的使用;同時,本章通過這些硬件資源的使用,介紹了在QuartusPrime軟件中調(diào)用IP進行設(shè)計的方法。
第5章,為進階數(shù)字系統(tǒng)設(shè)計,主要介紹了項目中比較實用的一些外設(shè)的驅(qū)動。
第6章,為綜合數(shù)字系統(tǒng)設(shè)計,通過若干個具有一定難度的綜合實例,展示了FPGA復雜系統(tǒng)開發(fā)的常見思路和實現(xiàn)方法。
本書配套的相關(guān)視頻及技術(shù)文件可在http://www.corecouurse.cn網(wǎng)站中觀看和下載。
第1章從頭認識FPGA/1
1.1CycloneⅣEFPGA原理與應(yīng)用/1
1.1.1CycloneⅣE概述/1
1.1.2CycloneⅣE擴展資源介紹/4
1.1.3重點電路設(shè)計/5
1.2IntelFPGA開發(fā)環(huán)境/17
1.2.1Quartus軟件的發(fā)展史/18
1.2.2QuartusPrime的下載/18
1.2.3QuartusPrime的安裝/21
1.2.4QuartusPrime軟件的基本使用/27
第2章FPGA開發(fā)軟硬件平臺介紹/39
2.1AC620開發(fā)套件/39
2.1.1AC620開發(fā)板的功能特點/39
2.1.2AC620開發(fā)板的使用/43
2.2IntelFPGA開發(fā)流程/57
2.2.1建立工程/57
2.2.2設(shè)計輸入/61
2.2.3分析和綜合/61
2.2.4功能仿真/62
2.2.5綜合與布局布線/66
2.2.6時序仿真/66
2.2.7I/O分配以及生成配置文件/67
2.2.8配置FPGA下載/67
2.3FPGA設(shè)計的燒寫與投產(chǎn)/68
2.3.1FPGA固件存儲方案/68
2.3.2CycloneⅣEFPGA固件燒寫方案/69
2.3.3燒寫文件JIC的產(chǎn)生/70
第3章FPGA基本數(shù)字邏輯設(shè)計/74
3.1組合邏輯電路設(shè)計———譯碼器/74
3.1.1譯_碼器工作原理/74
3.1.2譯碼器Verilog實現(xiàn)/75
3.1.3激勵創(chuàng)建及仿真測試/76
3.2時序邏輯電路設(shè)計———計數(shù)器/79
3.2.1計數(shù)器工作原理/80
3.2.2計數(shù)器Verilog實現(xiàn)/81
3.2.3仿真及板級驗證/82
3.3IP核應(yīng)用———計數(shù)器/85
3.3.1IP核創(chuàng)建流程/85
3.3.2仿真及板級驗證/89
3.3.3已生成IP核的參數(shù)修改/90
3.3.4QuartusⅡ中IP核參數(shù)的修改/94
3.4BCD計數(shù)器設(shè)計與驗證/95
3.4.1BCD碼原理/95
3.4.2BCD計數(shù)器的Verilog實現(xiàn)/96
3.4.3激勵創(chuàng)建及仿真測試/97
3.4.4級聯(lián)BCD計數(shù)器設(shè)計與仿真/98
3.5阻塞賦值與非阻塞賦值原理分析/103
3.5.1不同賦值方式的對比與實現(xiàn)/103
3.5.2不同賦值方式的仿真及測試/105
3.6狀態(tài)機設(shè)計實例/108
3.6.1狀態(tài)機工作原理/108
3.6.2字符串檢測狀態(tài)機實現(xiàn)/110
3.6.3激勵創(chuàng)建及仿真測試/113
3.7獨立按鍵消抖設(shè)計與驗證/115
3.7.1按鍵的物理結(jié)構(gòu)及電路設(shè)計/115
3.7.2硬件電路實現(xiàn)按鍵消抖/116
3.7.3狀態(tài)機實現(xiàn)按鍵消抖/118
3.7.4激勵創(chuàng)建及仿真測試/124
3.7.5任務(wù)及隨機函數(shù)的使用/125
3.8模塊化設(shè)計基礎(chǔ)———加減法計數(shù)器/129
3.8.1模塊功能劃分/129
3.8.2模塊功能設(shè)計/129
3.8.3仿真及板級驗證/132
3.98位7段數(shù)碼管驅(qū)動設(shè)計與驗證/134
3.9.1數(shù)碼管驅(qū)動原理/134
3.9.2三線制數(shù)碼管電路設(shè)計/137
3.9.3數(shù)碼管動態(tài)掃描驅(qū)動設(shè)計/138
3.9.4ISSP生成及使用/145
3.9.5板級調(diào)試與驗證/149
3.9.6QuartusⅡ中ISSP的使用方法/…152
3.10串口發(fā)送模塊設(shè)計與驗證/153
3.10.1異步串行通信原理及電路設(shè)計/…154
3.10.2UART異步串行通信發(fā)送模塊設(shè)計與實現(xiàn)/157
3.10.3激勵創(chuàng)建及仿真測試/162
3.10.4按鍵控制串口發(fā)送設(shè)計/163
3.11串口接收模塊的設(shè)計與驗證/165
3.11.1串口接收原理分析/166
3.11.2UART異步串行通信接收模塊設(shè)計與實現(xiàn)/167
3.11.3仿真及板級驗證/171
第4章FPGA片上專用資源使用/176
4.1嵌入式RAM的使用———雙端口RAM/176
4.1.1CycloneⅣ體系結(jié)構(gòu)及嵌入式存儲器原理/176
4.1.2IP核使用———dpram/178
4.1.3激勵創(chuàng)建及仿真測試/182
4.2搭建串口收發(fā)與雙口RAM存儲的簡易應(yīng)用系統(tǒng)/185
4.2.1系統(tǒng)模塊功能劃分及接口設(shè)計//185
4.2.2頂層文件設(shè)計/185
4.2.3控制模塊設(shè)計/186
4.2.4仿真及板級驗證/187
4.3嵌入式RAM的使用———ROM/190
4.3.1IP核使用———ROM/191
4.3.2激勵創(chuàng)建及仿真測試/193
4.3.3SignaTapⅡ使用及板級驗證/195
4.4嵌入式塊RAM的使用———FIFO/201
4.4.1FIFO的相關(guān)知識/202
4.4.2IP核的使用———FIFO/204
4.5PLL鎖相環(huán)介紹與簡單應(yīng)用/213
4.5.1PLL相關(guān)知識/213
4.5.2IP核使用———PLL/215
4.5.3仿真及板級驗證/219
第5章FPGA進階數(shù)字邏輯設(shè)計/223
5.1無源蜂鳴器驅(qū)動設(shè)計與驗證/223
5.1.1無源蜂鳴器電路設(shè)計/223
5.1.2無源蜂鳴器驅(qū)動原理/224
5.1.3PWM發(fā)生器模塊設(shè)計/225
5.1.4仿真及板級驗證/227
5.2線性序列機與串行接口DAC驅(qū)動設(shè)計與驗證/232
5.2.1DAC芯片概述及電路設(shè)計/232
5.2.2TLV5618型DAC芯片輸出電壓計算原理/234
5.2.3TLV5618型DAC接口時序/235
5.2.4線性序列機設(shè)計思想與接口時序設(shè)計/236
5.2.5基于線性序列機的DAC驅(qū)動設(shè)計/238
5.2.6仿真及板級測試/241
5.3線性序列機與串行接口ADC驅(qū)動設(shè)計與驗證/243
5.3.1ADC芯片概述及電路設(shè)計/244
5.3.2ADC128S022型ADC接口時序/245
5.3.3ADC128S022接口時序設(shè)計/247
5.3.4基于線性序列機的ADC驅(qū)動設(shè)計/249
5.3.5仿真及板級測試/252
5.4HT6221紅外遙控解碼設(shè)計與驗證/257
5.4.1紅外遙控系統(tǒng)組成及電路設(shè)計/257
5.4.2紅外遙控協(xié)議分析(NEC協(xié)議)/258
5.4.3紅外解碼模塊設(shè)計/260
5.4.4仿真及板級驗證/265
5.5TFT顯示屏驅(qū)動設(shè)計與驗證/267
5.5.1TFT觸摸屏驅(qū)動電路設(shè)計/268
5.5.2RGB接口TFT屏掃描方式/270
5.5.3RGB接口TFT屏時序分析/271
5.5.4RGB接口TFT屏驅(qū)動設(shè)計/272
5.5.5仿真及板級驗證/275
第6章FPGA綜合數(shù)字系統(tǒng)設(shè)計/280
6.1八通道數(shù)字電壓表/280
6.1.1數(shù)字電壓表功能劃分/280
6.1.2按鍵輸入模塊/281
6.1.3通道選擇模塊/281
6.1.4ADC控制模塊———ADC128S022/282
6.1.5數(shù)據(jù)預處理模塊/282
6.1.6碼制轉(zhuǎn)換模塊/284
6.1.7數(shù)碼管驅(qū)動模塊/287
6.1.8頂層設(shè)計/288
6.1.9基于查找表的數(shù)據(jù)電壓換算/289
6.2雙通道幅頻相可調(diào)DDS信號發(fā)生器/292
6.2.1DDS原理與實現(xiàn)/293
6.2.2數(shù)/模轉(zhuǎn)換器(DAC)驅(qū)動模塊設(shè)計/299
6.2.3串口命令接收與解析/303
6.2.4信號發(fā)生器頂層設(shè)計/315
6.2.5系統(tǒng)測試/316
6.3串口讀/寫EEPROM/317
6.3.1I2C基本概念/317
6.3.2I2C協(xié)議時序介紹/318
6.3.3I2C器件地址/319
6.3.4I2C存儲器地址/320
6.3.5I2C寫時序/321
6.3.6I2C單字節(jié)讀時序/323
6.3.7I2C讀/寫器件控制器設(shè)計/325
6.3.8I2C控制器仿真驗證/335
6.3.9串口讀/寫EEPROM系統(tǒng)設(shè)計/341
6.3.10串口讀/寫EEPROM仿真驗證/351
6.3.11串口讀/寫EEPROM板級驗證/355
6.4基于串口獵人的虛擬示波器/359
6.4.1系統(tǒng)結(jié)構(gòu)/359
6.4.2模塊詳解/361
6.4.3仿真驗證/375
6.4.4基于串口獵人的板級驗證/385
6.5SDRAM控制器設(shè)計/391
6.5.1SDRAM基本概念/391
6.5.2SDRAM存取原理/392
6.5.3SDRAM器件引腳說明/394
6.5.4SDRAM特性/395
6.5.5SDRAM操作命令介紹/396
6.5.6SDRAM操作時序/403
6.5.7SDRAM控制器設(shè)計/418
6.5.8SDRAM控制器仿真驗證/425
6.5.9SDRAM控制器設(shè)計優(yōu)化/430
6.5.10優(yōu)化控制器仿真驗證/436
6.6串口傳圖幀緩存設(shè)計/440
6.6.1系統(tǒng)結(jié)構(gòu)/440
6.6.2仿真驗證/446
6.6.3板級驗證/450
參考文獻/454