關(guān)于我們
書單推薦
新書推薦
|
SoC FPGA 嵌入式設(shè)計和開發(fā)教程(Intel FPGA 大學(xué)計劃推薦,一線工程師實踐總結(jié))
本書以Intel Cyclone v SoC FPGA系列器件為例,介紹了SoC
FPGA 器件的架構(gòu)特點、常用電路設(shè)計以及軟硬件開發(fā)流程和開發(fā)技巧。內(nèi)容編排按照開發(fā)一個基于SoC FPGA 的應(yīng)用系統(tǒng)所需掌握的*基本的知識路線展開,從基本的Linux系統(tǒng)操作到分析一個*基礎(chǔ)的應(yīng)用系統(tǒng)框架,然后基于該應(yīng)用系統(tǒng)框架,詳細(xì)講解應(yīng)用系統(tǒng)的構(gòu)建、BSP文件的生成、啟動引導(dǎo)文件的更新、Ubuntu虛擬機(jī)安裝配置、Linux內(nèi)核配置與編譯。接著介紹如何在嵌入式Linux系統(tǒng)環(huán)境下,使用虛擬地址映射的方式編寫相應(yīng)的應(yīng)用程序來實現(xiàn)該應(yīng)用系統(tǒng)中各個功能IP的編程控制和調(diào)試。*后以兩個實際的例子展示如何通過HPS和FPGA的片上通信橋?qū)崿F(xiàn)軟硬件聯(lián)合開發(fā)的過程,包括FPGA側(cè)邏輯開發(fā), IP總線封裝,Linux驅(qū)動程序的編寫編譯,Linux應(yīng)用程序的編寫與運行等。
本書既可作為工程類應(yīng)用、電子信息類專業(yè)本科生以及相關(guān)專業(yè)?粕那度胧较到y(tǒng)基礎(chǔ)類課程的教材,也可作為SoC FPGA自學(xué)人員以及從事SoC FPGA開發(fā)的工程技術(shù)人員的培訓(xùn)教材和參考用書。
隨著半導(dǎo)體工藝的提升,芯片廠商將更多的功能集成到單一的半導(dǎo)體芯片之中,芯片集成度的提高,隨之帶來的是應(yīng)用設(shè)計復(fù)雜度的提高。Intel在其FPGA 芯片上集成了ARM Cortex處理器,從而形成一顆基于FPGA 的SoC芯片,這是一個典型的可配置的單芯片系統(tǒng)。
目前一顆主流的FPGA 芯片,除了邏輯單元外,還集成了嵌入式存儲器塊、鎖相環(huán)、DSP塊,甚至高速收發(fā)器電路,并將ARM Core集成到FPGA 芯片上,在帶來功能高度集成的同時,再一次增加了應(yīng)用設(shè)計的復(fù)雜度。
目前,基于SoC FPGA 嵌入式系統(tǒng)設(shè)計的參考書和教材還很少,而小梅哥的這本書從*基本的概念講起,由淺入深,再配合大量的截圖,一步一步地介紹了整個設(shè)計的流程。該書內(nèi)容涵蓋了基于SoC FPGA 的硬件系統(tǒng)搭建、Linux操作系統(tǒng)的配置,以及軟件的設(shè)計與調(diào)試方法等,手把手地將一個初學(xué)者帶進(jìn)SoC FPGA 嵌入式系統(tǒng)的設(shè)計入門,非常值得推薦。
希望作者在本書的基礎(chǔ)上,再接再厲,不斷地寫出更好的參考書,也希望廣大讀者對本書給予大力支持!
Intel FPGA 大學(xué)計劃經(jīng)理 袁亞東 隨著集成電路生產(chǎn)工藝的不斷進(jìn)步,芯片中晶體管的數(shù)量也在不斷增加。GAL、PLD、CPLD、FPGA 等一系列的可編程邏輯數(shù)字集成電路相繼誕生。新型架構(gòu)芯片的出現(xiàn),不僅得益于集成電路設(shè)計和制造工藝的進(jìn)步,而且更離不開實際的應(yīng)用需求。現(xiàn)代數(shù)字系統(tǒng)大多都朝小型化、集成化方向發(fā)展,而作為一種通用的可編程邏輯器件,FPGA 以其靈活的現(xiàn)場可編程特性、強(qiáng)大的并行處理能力,在眾多高性能數(shù)字系統(tǒng)中都有應(yīng)用。 鑒于很多高性能的數(shù)字系統(tǒng)都離不開FPGA 器件,為了進(jìn)一步降低硬件系統(tǒng)的復(fù)雜度,各大FPGA 廠家都推出了基于各自FPGA 的軟核CPU 方案。通過該方案,設(shè)計者能夠?qū)⒃拘枰ㄟ^外置CPU 實現(xiàn)的功能,轉(zhuǎn)移到FPGA 芯片中使用通用邏輯搭建的軟核CPU 來實現(xiàn),在保證系統(tǒng)功能和性能的前提下,簡化硬件系統(tǒng)設(shè)計,提高系統(tǒng)集成度,降低維護(hù)難度。但是受限于FPGA 中通用邏輯的可運行最大頻率,各種軟核CPU 的運行頻率都較低,一般不超過200 MHz,再加上架構(gòu)的原因,各種軟核CPU 的軟件生態(tài)都遠(yuǎn)趕不上各種常用的單片機(jī)。因此,基于軟核處理器的應(yīng)用開發(fā)受到了較大的限制。 在此情形下,眾多的FPGA 廠商又相繼推出了集成高性能ARM 硬核處理器和通用可編程邏輯的新型架構(gòu)芯片。這其中就包括以Xilinx的Zynq系列為代表的全可編程芯片以及Intel 的可編程片上系統(tǒng)芯片(SoC FPGA)。 無論是Xilinx的Zynq系列芯片,還是Intel的SoC FPGA 芯片,兩者的架構(gòu)都是相似的,都是在同一個晶片上將高性能的ARM Cortex A 系列處理器和FPGA有機(jī)結(jié)合,并輔以各種常見的外設(shè),實現(xiàn)完整的系統(tǒng)。依賴于ARM 處理器強(qiáng)大的開發(fā)工具鏈和軟件生態(tài)環(huán)境,使用這一類器件進(jìn)行系統(tǒng)設(shè)計,開發(fā)和調(diào)試的時間將被大大縮短。 得益于Intel大學(xué)計劃提供的眾多學(xué)習(xí)機(jī)會和學(xué)習(xí)資料,筆者從2014年底開始接觸Intel的SoC FPGA,并開始了斷斷續(xù)續(xù)的學(xué)習(xí)。但是由于在這之前,作者并沒有任何基于Linux系統(tǒng)開發(fā)的基礎(chǔ),因此學(xué)習(xí)的過程非常的艱辛,學(xué)習(xí)的資料主要來SoC FPGA 嵌入式設(shè)計和開發(fā)教程自網(wǎng)絡(luò)博文和一些講解Linux開發(fā)的書籍。幸好在這個學(xué)習(xí)的過程中得到了很多朋友的無私幫助,尤其是駿龍科技的工程師,也是本書的第二作者宋士權(quán),多次為我提供最新的一手學(xué)習(xí)資料,讓我最終堅持了下來。 在決定編寫本書之前,市面上還很難找到系統(tǒng)講解Intel SoC FPGA 開發(fā)的書籍,作者作為一個草根創(chuàng)業(yè)者,既對該器件的開發(fā)抱有極大的興趣,同時又受限于個人的知識積累,因此學(xué)習(xí)過程本身就是一個不斷試錯的過程。本書從某種意義上來說,可以算做作者學(xué)習(xí)SoC FPGA 開發(fā)的學(xué)習(xí)筆記。由于作者能力有限,雖然在寫作過程中投入了大量的精力和時間,但錯誤與不妥之處還是在所難免,讀者在閱讀本書時如果發(fā)現(xiàn)任何疏漏,可及時反饋給我們,以便我們及時更正。讀者可以通過本書配套的網(wǎng)站www.corecourse.cn留言反饋在閱讀本書的過程中所發(fā)現(xiàn)的問題,或者在學(xué)習(xí)過程中遇到的疑惑;同時,也可以在該網(wǎng)站上以本書名作為關(guān)鍵詞,搜索與本書相關(guān)的軟硬件配套資源。
梅雪松,網(wǎng)名小梅哥,擁有多年電子設(shè)計經(jīng)驗,擅長知識的總結(jié)和傳播,有《小梅哥和你一起深入學(xué)習(xí)FPGA》、《小梅哥FPGA學(xué)習(xí)筆記》兩個系列網(wǎng)絡(luò)博文;并推出了手把手式視頻教程《FPGA設(shè)計思想與驗證方法視頻教程》,該教程在各大視頻點擊平臺備受好評,網(wǎng)友稱其為學(xué)習(xí)FPGA基礎(chǔ)與提高教學(xué)視頻的不二之選。同時,開設(shè)FPGA實地培訓(xùn)班,進(jìn)行網(wǎng)絡(luò)和實地FPGA培訓(xùn),并多次進(jìn)入高校進(jìn)行SoC FPGA開發(fā)技術(shù)的培訓(xùn)。培訓(xùn)課程以其系統(tǒng)的知識講解和生動的實例分析,得到了學(xué)員的一致肯定。
第1章 SoC FPGA軟硬件系統(tǒng)開發(fā)概述 … 1 1.1 Intel SoC FPGA系列 1 1.1.1 Cyclone Ⅴ SoC FPGA … 2 1.1.2 Arria Ⅴ SoC FPGA 2 1.1.3 Arria 10 SoC FPGA 2 1.1.4 Stratix 10 SoC FPGA 3 1.1.5 SoC FPGA應(yīng)用領(lǐng)域與前景 3 1.2 Intel Cyclone Ⅴ SoC FPGA介紹 … 4 1.2.1 什么是SoC FPGA … 4 1.2.2 SOPC … 4 1.2.3 SoC FPGA與SOPC之間的差異 5 1.2.4 SoC FPGA架構(gòu)的優(yōu)勢 … 6 1.3 Cyclone Ⅴ SoC FPGA器件硬件設(shè)計概述 9 1.3.1 FPGA I/O和時鐘 … 10 1.3.2 SoC FPGA JTAG電路設(shè)計 … 12 1.4 AC501-SoC開發(fā)板介紹 13 1.4.1 布局及組件 … 13 1.4.2 輕觸按鍵 14 1.4.3 用戶LED 15 1.4.4 時鐘輸入 16 1.4.5 GPIO接口 … 17 1.4.6 DDR3SDRAM 18 1.4.7 通用顯示擴(kuò)展接口… 19 1.4.8 USB轉(zhuǎn) UART 21 1.4.9 以太網(wǎng)收發(fā)器 21 1.5 本章小結(jié) 23 第2章 SoC FPGA開發(fā)板的使用 … 24 2.1 安裝SoC FPGA開發(fā)工具 24 2.2 SoC FPGA的配置數(shù)據(jù)燒寫與固化 24 2.2.1 SoC FPGA啟動配置方式介紹 24 2.2.2 sof文件的燒寫方式 26 2.2.3 Jic文件的生成和燒寫 … 28 2.3 在SoC FPGA上運行Linux操作系統(tǒng) … 32 2.3.1 SoC FPGA中的 HPS啟動流程介紹 32 2.3.2 HPS啟動方式介紹 33 2.3.3 制作啟動鏡像SD卡 34 2.3.4 準(zhǔn)備硬件板卡 35 2.3.5 開機(jī)測試 39 2.4 開發(fā)板Linux系統(tǒng)常用操作 … 40 2.4.1 查看目錄 40 2.4.2 設(shè)置和修改用戶密碼 40 2.4.3 查看和編輯文件 … 41 2.4.4 設(shè)置IP地址 … 43 2.4.5 掛載SD卡的FAT32分區(qū) 45 2.4.6 掛載 U盤 46 2.4.7 文件操作 47 2.4.8 目錄操作 48 2.4.9 停止某個進(jìn)程 49 2.4.10 重啟和關(guān)機(jī) … 50 2.5 本章小結(jié) 50 第3章 SoC FPGA開發(fā)概述 … 51 3.1 SoC FPGA開發(fā)流程 … 51 3.1.1 硬件開發(fā) 51 3.1.2 軟件開發(fā) 53 3.2 AC501-SoC FPGA開發(fā)板的黃金參考設(shè)計說明 53 3.2.1 GHRD … 53 3.2.2 打開和查看GHRD 54 3.2.3 組件參數(shù)配置詳解… 57 3.3 本章小結(jié) 62 第4章 手把手修改GHRD系統(tǒng) 63 4.1 修改GHRD工程 … 63 4.1.1 打開GHRD工程 … 63 4.1.2 添加UART IP 64 4.1.3 關(guān)于 HPS與FPGA數(shù)據(jù)交互… 64 4.1.4 連接UART IP信號端口 65 4.1.5 分配組件基地址 … 67 4.1.6 生成 Qsys系統(tǒng)的 HDL文件 … 68 4.1.7 添加uart_1的端口到 Quartus工程中 69 4.1.8 分配FPGA引腳 … 71 4.1.9 生成配置數(shù)據(jù)二進(jìn)制文件 72 4.2 制作Preloader Image … 72 4.2.1 打開SoC EDS工具 73 4.2.2 生成bsp文件 74 4.2.3 編譯Preloader和 U-Boot 77 4.2.4 更新Preloader和 U-Boot 79 4.2.5 Win 10下更新失敗問題… 80 4.2.6 使用新的 U-Boot啟動SoC … 81 4.3 制作設(shè)備樹 … 82 4.3.1 設(shè)備樹制作流程 … 82 4.3.2 準(zhǔn)備所需文件 82 4.3.3 生成.dts文件 83 4.3.4 生成.dtb文件 84 4.4 運行修改后的工程 85 4.5 本章小結(jié) 87 第5章 使用DS-5編寫和調(diào)試SoC的Linux應(yīng)用程序 88 5.1 啟動DS-5 …88 5.2 創(chuàng)建C工程 … 91 5.3 編譯工程 94 5.4 建立SSH遠(yuǎn)程連接 95 5.4.1 創(chuàng)建遠(yuǎn)程連接 95 5.4.2 復(fù)制文件到目標(biāo)板 101 5.4.3 運行應(yīng)用程序 102 5.5 遠(yuǎn)程調(diào)試 … 103 5.5.1 GDB設(shè)置 … 103 5.5.2 GDB連接和調(diào)試 … 106 5.6 使用 WinSCP實現(xiàn)多系統(tǒng)傳輸文件 108 5.6.1 為什么要使用 WinSCP 108 5.6.2 安裝 WinSCP 109 5.6.3 建立遠(yuǎn)程主機(jī)連接 109 5.6.4 新建遠(yuǎn)程連接 112 5.6.5 調(diào)用PuTTY終端 112 5.7 本章小結(jié) … 113 第6章 基于虛擬地址映射的Linux硬件編程 114 6.1 什么是虛擬地址映射 … 114 6.2 虛擬地址映射的實現(xiàn) … 115 6.3 基于虛擬地址映射的PIO編程應(yīng)用 117 6.3.1 PIO外設(shè)的虛擬地址映射 117 6.3.2 在DS-5中建立PIO應(yīng)用工程 118 6.3.3 添加和包含 HPS庫文件 119 6.3.4 添加FPGA側(cè)外設(shè)硬件信息… 121 6.3.5 PIO IP核介紹 124 6.3.6 PIO核寄存器映射 125 6.3.7 PIO IP核應(yīng)用實例 128 6.3.8 合理的程序退出機(jī)制 … 131 6.3.9 關(guān)于按鍵消抖 133 6.4 基于虛擬地址映射的 UART編程應(yīng)用… 134 6.4.1 UART核介紹 134 6.4.2 UART寄存器映射 134 6.4.3 UART IP核應(yīng)用實例 … 136 6.4.4 UART IP核板級調(diào)試 … 144 6.4.5 小 結(jié) 145 6.5 基于虛擬地址映射的I2C編程應(yīng)用 145 6.5.1 OpenCores I2C IP簡介… 146 6.5.2 OpenCores I2C IP寄存器映射 146 6.5.3 I2C IP核應(yīng)用實例 149 6.5.4 小 結(jié) 161 6.6 本章小結(jié) … 161 第7章 基于Linux應(yīng)用程序的HPS配置 FPGA … 162 7.1 制作 Quartus工程 163 7.2 生成rbf格式配置數(shù)據(jù) 163 7.3 編譯Linux配置FPGA應(yīng)用程序… 165 7.4 在系統(tǒng)重配置FPGA實驗 … 166 7.5 本章小結(jié) … 168 第8章 編譯嵌入式Linux系統(tǒng)內(nèi)核 169 8.1 安裝 VMware … 170 8.2 安裝 Ubuntu系統(tǒng) 171 8.2.1 使用現(xiàn)成的 Ubuntu系統(tǒng)鏡像 171 8.2.2 安裝全新的 Ubuntu系統(tǒng) 175 8.3 下載Linux系統(tǒng)源碼 … 182 8.4 設(shè)置交叉編譯環(huán)境 185 8.5 配置和編譯內(nèi)核 … 189 8.5.1 快速配置內(nèi)核 189 8.5.2 保存內(nèi)核配置文件 195 8.5.3 編譯內(nèi)核 195 8.5.4 使用內(nèi)核啟動開發(fā)板 … 197 8.6 本章小結(jié) … 199 第9章 Linux設(shè)備樹的原理與應(yīng)用實例 200 9.1 什么是設(shè)備樹 200 9.2 設(shè)備樹基本格式 … 201 9.3 設(shè)備樹加載設(shè)備驅(qū)動原理 … 206 9.4 編寫I2C控制器設(shè)備節(jié)點 … 208 9.5 加載 OC_I2C驅(qū)動 211 9.6 使用RTC … 212 9.7 使用EEPROM … 216 9.8 編寫SPI控制器設(shè)備節(jié)點 … 217 9.9 本章小結(jié) … 219 第10章 基于Linux標(biāo)準(zhǔn)文件I/O 的設(shè)備讀/寫 … 220 10.1 什么是文件I/O 220 10.2 基于文件I/O操作的一般方法 … 220 10.2.1 文件描述符 220 10.2.2 打開設(shè)備(open)… 221 10.2.3 向設(shè)備寫入數(shù)據(jù)(write) 221 10.2.4 讀取設(shè)備數(shù)據(jù)(read)… 222 10.2.5 雜項操作(ioctl)… 222 10.2.6 關(guān)閉設(shè)備(close)… 223 10.2.7 其他操作 … 223 10.3 使用文件I/O實現(xiàn)I2C編程 223 10.4 本章小結(jié) … 226 第11章 FPGA與HPS高速數(shù)據(jù)交互應(yīng)用 … 227 11.1 FPGA與 HPS通信介紹 … 227 11.1.1 H2F_LW_AXI_Master橋 … 229 11.1.2 H2F_AXI_Master橋 … 229 11.1.3 F2H_AXI_Slave橋 230 11.2 AXI與 Avalon-MM 總線的互聯(lián)… 230 11.3 Avalon-MM 總線 230 11.4 Avalon-MM Slave接口 232 11.5 基本Avalon-MM Slave IP設(shè)計框架 … 234 11.5.1 端口定義 … 234 11.5.2 寄存器和線網(wǎng)定義 235 11.5.3 Avalon總線對寄存器的讀/寫 235 11.5.4 用戶邏輯使用寄存器 … 236 11.6 PWM 控制器設(shè)計 237 11.6.1 PWM IP核端口設(shè)計 … 238 11.6.2 PWM IP核寄存器定義 239 11.6.3 讀/寫PWM 寄存器 … 239 11.6.4 Platform Designer中封裝PWM IP 241 11.7 Avalon-MM Master接口 … 255 11.7.1 常見的通用Avalon-MM Master主機(jī) … 256 11.7.2 DMA Controller 256 11.7.3 Scatter-Gather DMA Controller … 256 11.7.4 Modular Scatter-Gather DMA 258 11.7.5 Avalon-MM Master模板 … 260 11.8 高速數(shù)據(jù)采集系統(tǒng) … 263 11.8.1 安裝Avalon-MM Master模板 263 11.8.2 完善 Qsys系統(tǒng) … 265 11.8.3 修改 Quartus中的 Qsys例化 269 11.8.4 測試邏輯設(shè)計 … 271 11.9 本章小結(jié) … 275 第12章 Linux驅(qū)動編寫與編譯 … 276 12.1 基本字符型設(shè)備驅(qū)動… 276 12.1.1 字符型設(shè)備驅(qū)動框架 … 277 12.1.2 PWM 控制器驅(qū)動的完整源碼 286 12.1.3 驅(qū)動編譯 Makefile 291 12.1.4 Ubuntu下編譯設(shè)備驅(qū)動 292 12.1.5 字符型設(shè)備驅(qū)動驗證 … 293 12.2 基于DMA的字符型設(shè)備驅(qū)動 … 297 12.2.1 Avalon-MM Master Write驅(qū)動 … 298 12.2.2 Avalon-MM Master Write測試 … 304 12.3 本章小結(jié) … 311 附錄A 外設(shè)地址映射 312 附錄B HPS GPIO映射 … 314
你還可能感興趣
我要評論
|