本書使用Altera公司的Cyclone Ⅳ FPGA器件, 由淺入深的引領(lǐng)讀者從板級設(shè)計、基礎(chǔ)入門實例、FPGA片內(nèi)資源應(yīng)用實例和綜合進階實例等方面, 玩轉(zhuǎn)FPGA邏輯設(shè)計。本書基于特定的FPGA實驗平臺, 既有足夠的理論知識深度作支撐, 也有豐富的例程進行實踐學習, 并且穿插著筆者多年FPGA學習和開發(fā)過程中的各種經(jīng)驗和技巧。
(1)本書由《深入淺出玩轉(zhuǎn)FPGA》一書的作者吳厚航(網(wǎng)名:特權(quán)同學)傾心打造。
(2)供FPGA板級設(shè)計說明、工具安裝說明、入門實例、片內(nèi)資源應(yīng)用實例和綜合實例,由淺入深地全面掌握FPGA的開發(fā)設(shè)計。
(3)使用Altera公司的Cyclone Ⅳ FPGA器件既有足夠的理論知識深度作支撐,也有豐富的例程進行實踐學習,并且穿插著筆者多年FPGA學習和開發(fā)過程中的各種經(jīng)驗和技巧。
前言
Foreword
FPGA技術(shù)在當前的電子設(shè)計領(lǐng)域越來越火熱。它的成本雖然還是高高在上,但是它給電子系統(tǒng)所帶來的不可限量的速度和帶寬及其在靈活性、小型性方面的優(yōu)勢,越來越為對性能要求高、偏重定制化需求的開發(fā)者所青睞。因此,越來越多的電子工程師和電子專業(yè)在校學生希望能夠掌握這門技術(shù)。而對一門電子技能的掌握,單憑讀幾本初級入門教材是很難達到的。筆者結(jié)合自身的學習經(jīng)歷,為廣大學習者量身打造了基于低成本、高性價比的AlteraCycloneⅣFPGA器件的硬件開發(fā)學習平臺。基于該平臺,配套本書的各種基本概念闡釋和例程講解,相信可以幫助大家快速掌握這門新技術(shù)。
全書共10章,各章主要內(nèi)容如下:
第1章是基礎(chǔ)中的基礎(chǔ),講述可編程器件的基本概念及主要應(yīng)用領(lǐng)域、相對傳統(tǒng)技術(shù)的優(yōu)勢和開發(fā)流程。
第2章從FPGA開發(fā)平臺的電路板設(shè)計入手,介紹FPGA板級硬件電路設(shè)計要點,以及本書配套開發(fā)平臺的外圍電路設(shè)計。
第3章從最基礎(chǔ)的0和1開始回顧數(shù)字電路的基礎(chǔ),同時深入探討讀者所關(guān)心的可編程器件的內(nèi)部架構(gòu)和原理。
第4章講述開發(fā)環(huán)境的搭建,包括AlteraFPGA集成開發(fā)環(huán)境QuartusⅡ、仿真工具ModelSim、文本編輯器Notepad++以及下載器驅(qū)動和UART驅(qū)動安裝,幫助讀者快速解決學習路上遇到的最棘手的“軟”問題。
第5章講述Verilog的基本語法,包括語法的學習方法、可綜合的語法子集以及代碼風格與書寫規(guī)范。
第6章和第7章完成最基本的工程創(chuàng)建、語法檢查、仿真驗證以及編譯,甚至在線板級調(diào)試和代碼固化,帶領(lǐng)讀者初步掌握基于AlteraCycloneⅣ的FPGA開發(fā)流程。
第8章介紹13個最基本的入門實例。
第9章通過6個實例幫助讀者熟悉FPGA除邏輯資源以外的其他豐富資源,如PLL和可配置為ROM、RAM、FIFO的內(nèi)嵌存儲器,以及在線邏輯分析儀SignalTapⅡ等。
第10章的15個例程,是對前面一些實例的集成整合,力圖通過大量的實例實踐,幫助讀者熟練掌握FPGA的基本開發(fā)設(shè)計。
本書既有對基礎(chǔ)理論知識的專門講解,也有非常詳細的實例演練和講解,更多的是在實
踐中傳遞實用的設(shè)計方法與技巧,非常適合初學者。
本書配套例程的下載鏈接為http://pan.baidu.com/s/1i5LMUUD。
本書配套開發(fā)平臺的淘寶鏈接:https://myfpga.taobao.com/。
吳厚航(網(wǎng)名:特權(quán)同學)
2017年7月于上海
作者簡介
吳厚航[網(wǎng)名:特權(quán)同學]有近10年的FPGA工程實踐經(jīng)歷,擅長記錄、分析并總結(jié)FPGA開發(fā)中的經(jīng)驗與技巧,也非常樂于分享。活躍于各大電子技術(shù)網(wǎng)站的FPGA社區(qū)或版塊,多年來筆耕不輟、風雨無阻,不斷地發(fā)表FPGA相關(guān)文章,其總點擊量超過300萬。著有多本FPGA技術(shù)相關(guān)圖書,其詼諧的文字、貼近讀者實際需求的知識點與經(jīng)驗技巧分享,贏得了廣大讀者的一致認可。
第1章FPGA開發(fā)入門
1.1FPGA基礎(chǔ)入門
1.2FPGA的優(yōu)勢在哪里
1.3FPGA應(yīng)用領(lǐng)域
1.4FPGA開發(fā)流程
第2章實驗平臺“勇敢的芯”板級電路詳解
2.1板級電路整體架構(gòu)
2.2電源電路
2.3復(fù)位與時鐘電路
2.3.1關(guān)于FPGA器件的時鐘
2.3.2關(guān)于FPGA器件的復(fù)位
2.3.3實驗平臺電路解析
2.4FPGA下載配置電路
2.5SRAM接口電路
2.6ADC/DAC芯片電路
2.7UART接口電路
2.8RTC接口電路
2.94×4矩陣按鍵電路
2.10VGA顯示接口電路
2.11蜂鳴器、流水燈、數(shù)碼管、撥碼開關(guān)電路
2.12超聲波接口、外擴LCD接口電路
第3章邏輯設(shè)計基礎(chǔ)
3.10和1——精彩世界由此開始
3.2表面現(xiàn)象揭秘——邏輯關(guān)系
3.3內(nèi)里本質(zhì)探索——器件結(jié)構(gòu)
第4章軟件安裝與配置
4.1軟件下載和license申請
4.2Quartus Ⅱ與ModelSimAltera的安裝
4.3文本編輯器Notepad++安裝
4.4QuartusⅡ中使用Notepad++的關(guān)聯(lián)設(shè)置
4.5USBBlaster的驅(qū)動安裝
4.5.1Windows XP系統(tǒng)USBBlaster安裝
4.5.2在Windows 7系統(tǒng)安裝USBBlaster
4.5.3在Windows 8系統(tǒng)安裝USBBlaster
4.6串口芯片驅(qū)動安裝
4.6.1驅(qū)動安裝
4.6.2設(shè)備識別
第5章Verilog語法概述
5.1語法學習的經(jīng)驗之談
5.2可綜合的語法子集
5.3代碼風格與書寫規(guī)范
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA
第6章基于仿真的第一個工程實例
6.1新建工程
6.2Verilog源碼文件創(chuàng)建與編輯
6.2.1Verilog源碼文件創(chuàng)建
6.2.2Verilog源碼文件編輯
6.3Verilog語法檢查
6.4ModelSim仿真驗證
6.4.1Quartus Ⅱ基本設(shè)置
6.4.2測試腳本創(chuàng)建與編輯
6.4.3測試腳本關(guān)聯(lián)設(shè)置
6.4.4調(diào)用ModelSim仿真
第7章基于板級調(diào)試的第二個工程實例
7.1PWM蜂鳴器驅(qū)動——功能概述
7.2PWM蜂鳴器驅(qū)動——引腳分配
7.3PWM蜂鳴器驅(qū)動——綜合、映射與配置文件產(chǎn)生
7.4Altera FPGA配置方式
7.4.1概述
7.4.2配置方式
7.5PWM蜂鳴器驅(qū)動——FPGA在線下載配置
7.6PWM蜂鳴器驅(qū)動——FPGA配置芯片固化
7.7PWM蜂鳴器驅(qū)動——復(fù)位與FPGA重配置功能
第8章基礎(chǔ)入門實例
8.1蜂鳴器開關(guān)實例
8.1.1功能簡介
8.1.2代碼解析
8.1.3打開工程
8.1.4下載配置操作
8.2流水燈實例
8.2.1功能簡介
8.2.2代碼解析
8.2.3下載配置
8.338譯碼器實例
8.3.1功能簡介
8.3.2代碼解析
8.3.3板級調(diào)試
8.4按鍵消抖與LED開關(guān)實例
8.4.1按鍵消抖原理
8.4.2功能簡介
8.4.3代碼解析
8.4.5板級調(diào)試
8.5經(jīng)典模式流水燈實例
8.5.1功能簡介
8.5.2代碼解析
8.5.3板級調(diào)試
8.6基于PLL分頻計數(shù)的LED閃爍實例
8.6.1PLL概述
8.6.2功能簡介
8.6.3新建IP核文件
8.6.4PLL配置
8.6.5模塊化設(shè)計概述
8.6.6模塊化設(shè)計實踐
8.6.7代碼解析
8.6.8板級調(diào)試
8.7數(shù)碼管驅(qū)動實例
8.7.1數(shù)碼管驅(qū)動原理
8.7.2功能概述
8.7.3代碼解析
8.7.4板級調(diào)試
8.8SRAM讀寫測試實例
8.8.1SRAM讀寫時序解讀
8.8.2功能簡介
8.8.3代碼解析
8.8.4仿真設(shè)置
8.8.5功能仿真
8.8.6FPGA在線配置
8.8.7觸發(fā)采樣波形
8.9UART loopback測試
8.9.1功能概述
8.9.2代碼解析
8.9.3板級調(diào)試
8.10VGA驅(qū)動ColorBar顯示實例
8.10.1VGA概述
8.10.2功能簡介
8.10.3代碼解析
8.10.4板級調(diào)試
8.11LCD基本驅(qū)動實例
8.11.1LCD驅(qū)動時序
8.11.2功能簡介
8.11.3代碼解析
8.11.4裝配
8.11.5板級調(diào)試
8.12LCD字符顯示驅(qū)動實例
8.12.1字符取模
8.12.2ROM初始化文檔創(chuàng)建
8.12.3新建源文件
8.12.4ROM配置
8.12.5功能簡介
8.12.6代碼解析
8.12.7板級調(diào)試
8.13矩陣按鍵掃描檢測實例
8.13.1鍵盤概述
8.13.2矩陣按鍵工作原理
8.13.3功能概述
8.13.4代碼解析
8.13.5RTL Viewer
8.13.6State Machine Viewer
8.13.7Technology Map Viewer
8.13.8板級調(diào)試
第5章
Verilog語法概述
本章導(dǎo)讀
本章介紹學習Verilog語言的一些經(jīng)驗和Verilog語言可綜合的基本語法,以及常見邏輯功能的代碼風格與書寫規(guī)范。
5.1語法學習的經(jīng)驗之談
FPGA器件的設(shè)計輸入有多種方式,如繪制原理圖、編寫代碼或是調(diào)用IP核。早期的工程師對原理圖的設(shè)計方式情有獨鐘,這種輸入方式應(yīng)付簡單的邏輯電路還湊合,應(yīng)該算得上簡單實用,但隨著邏輯規(guī)模的不斷攀升,這種落后的設(shè)計方式已顯得力不從心。取而代之的是代碼輸入的方式,今天的絕大多數(shù)設(shè)計都是采用代碼來完成的。
FPGA開發(fā)所使用的代碼,通常稱為硬件描述語言(HardwareDescriptionLanguage),目前最主流的是VHDL和Verilog。VHDL發(fā)展較早,語法嚴謹;Verilog類似C語言,語法風格比較自由。IP核調(diào)用通常也是基于代碼設(shè)計輸入的基礎(chǔ)之上,現(xiàn)在很多EDA工具的供應(yīng)商都在打FPGA的如意算盤,F(xiàn)PGA的設(shè)計也在朝著軟件化、平臺化的方向發(fā)展。也許在不久的將來,越來越多的工程只需要設(shè)計者從一個類似蘋果商店的IP核庫中索取組件進行配置,最后像搭積木一樣完成一個項目,或者整個設(shè)計都不需要見到一句代碼。當然,未來什么情況都有可能發(fā)生,但是底層的代碼邏輯編寫方式無論如何還是有其生存空間的,畢竟一個個IP核組件都是從代碼開始的,所以對于初入這個行業(yè)的新手而言,掌握基本代碼設(shè)計的技能是必需的。
這里不過多談?wù)揤HDL和Verilog語言孰優(yōu)孰劣,總之這兩種語言是當前業(yè)內(nèi)絕大多數(shù)開發(fā)設(shè)計者所使用的語言,從二者對電路的描述和實現(xiàn)上看,有許多相通之處。無論是VHDL還是Verilog,建議初學者先掌握其中一門,至于到底先下手哪一門,則需要讀者根據(jù)自身的情況做考量。對于沒有什么外部情況限制的朋友,若之前有一定的C語言基礎(chǔ),不妨先學Verilog,這有助于加快對語法本身的理解。在將其中一門語言學精、用熟之后,最好也能夠著手掌握另一門語言。雖然在單個項目中,很少需要“雙語齊下”,但在實際工作中,還是很有可能需要去接觸另一門語法所寫的工程。網(wǎng)絡(luò)上有很多很好的開源實例,若只會Verilog,而參考實例卻是VHDL的,那么就很尷尬了;忽然有一天A同事離職,老板把他寫了一半的Verilog工程扔給只會VHDL的你來維護,那可就被動難堪了……所以,對于VHDL和Verilog的取舍問題,建議先學精一門,也別忘了兼顧另一門,無論哪一種語言,至少需要具備看懂別人設(shè)計的基本能力。
HDL雖然和軟件語言有許多相似之處,但由于其實現(xiàn)對象是硬件電路,所以它們之間的設(shè)計思維存在較大差異。尤其是那些做過軟件編程的朋友,很喜歡用軟件的順序思維來駕驅(qū)HDL,豈不知HDL實現(xiàn)的硬件電路大都是并行處理的。也許就是這個大彎轉(zhuǎn)不過來,所以很多朋友在研究HDL所實現(xiàn)的功能時常常百思不得其解。對于初學者,尤其是軟件轉(zhuǎn)行過來的初學者,筆者的建議是不要拋開實際電路而研究語法,在一段代碼過后,多花些精力對比實際邏輯電路,必要時做一下仿真,最好能再找一些直觀的外設(shè)在實驗板上看看結(jié)果。長此以往,若能達到代碼和電路都心中有數(shù),那才證明是真真正正掌握HDL的精髓了。
HDL的語法條目雖多,但并非所有的HDL語法都能夠?qū)崿F(xiàn)最終的硬件電路。由此進行劃分,可實現(xiàn)為硬件電路的語法常稱為可綜合的語法;而不能夠?qū)崿F(xiàn)到硬件電路中,卻常常可作為仿真驗證的高層次語法則稱為行為級語法。很多朋友在初學語法時,抱著一本語法書暈頭轉(zhuǎn)向地看,最后實戰(zhàn)的時候卻常常碰到這種語法不能用、那種語法不支持的報錯信息,從而更加抱怨HDL不是好東西,學起來真困難。其實不然,可綜合的語法是一個很小的子集,對于初學者,建議先重點掌握好這個子集,實際設(shè)計中或許靠著十來條基本語法就可以打天下了。怎么樣?HDL一下變簡單了吧。這么說一點也不夸張,本書的重點就是要通過各種可實現(xiàn)到板級的例程讓讀者快速地掌握如何使用可綜合的語法子集完成一個設(shè)計。5.2節(jié)中會將常用的可綜合語法子集逐一羅列并簡單介紹。對于已入門的讀者,也不是說掌握了可綜合的語法子集就“萬事大吉”了。
行為級語法也非一無是處,都說“存在即是合理”,行為級語法也大有用處。一個稍微復(fù)雜的設(shè)計,若是在板級調(diào)試前不經(jīng)過幾次三番的仿真測試,一次性成功的概率幾乎為零。而仿真驗證也有自己的一套高效便捷的語法,如果再像底層硬件電路一樣搭仿真平臺,恐怕就太浪費時間了。行為級語法最終的實現(xiàn)對象不是FPGA器件,而是手中的計算機,動輒上G甚至雙核、四核的CPU可不愿做“老牛拉破車”的活,所以行為級語法幫助設(shè)計者在仿真過程中利用好手中的資源,能夠快速、高效地完成設(shè)計的初期驗證平臺搭建。因此,掌握行為級語法,可以服務(wù)于設(shè)計的仿真驗證階段的工作。