SoC FPGA 嵌入式設計和開發教程(Intel FPGA 大學計劃推薦,一線工程師實踐總結)
內容描述
本書以Intel Cyclone v SoC FPGA系列器件為例,介紹了SoC FPGA 器件的架構特點、常用電路設計以及軟硬件開發流程和開發技巧。
內容編排按照開發一個基於SoC FPGA 的應用系統所需掌握的*基本的知識路線展開,
從基本的Linux系統操作到分析一個基礎的應用系統框架,
然後基於該應用系統框架,詳細講解應用系統的構建、
BSP文件的生成、啟動引導文件的更新、Ubuntu虛擬機安裝配置、Linux內核配置與編譯。
接著介紹如何在嵌入式Linux系統環境下,使用虛擬地址映射的方式編寫相應的應用程序來實現該應用系統中各個功能IP的編程控制和調試。
後以兩個實際的例子展示如何通過HPS和FPGA的片上通信橋實現軟硬件聯合開發的過程,
包括FPGA側邏輯開發, IP總線封裝,Linux驅動程序的編寫編譯,Linux應用程序的編寫與運行等。
本書既可作為工程類應用、電子信息類專業本科生以及相關專業專科生的嵌入式系統基礎類課程的教材,
也可作為SoC FPGA自學人員以及從事SoC FPGA開發的工程技術人員的培訓教材和參考用書。
目錄大綱
第1章SoC FPGA軟硬件系統開發概述… 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應用領域與前景 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架構的優勢… 6
1.3 Cyclone Ⅴ SoC FPGA器件硬件設計概述 9
1.3.1 FPGA I/O和時鐘… 10
1.3.2 SoC FPGA JTAG電路設計… 12
1.4 AC501-SoC開發板介紹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 通用顯示擴展接口… 19
1.4.8 USB轉UART 21
1.4.9 以太網收發器21
1.5 本章小結23
第2章SoC FPGA開發板的使用… 24
2.1 安裝SoC FPGA開發工具24
2.2 SoC FPGA的配置數據燒寫與固化24
2.2.1 SoC FPGA啟動配置方式介紹24
2.2.2 sof文件的燒寫方式26
2.2.3 Jic文件的生成和燒寫… 28
2.3 在SoC FPGA上運行Linux操作系統… 32
2.3.1 SoC FPGA中的HPS啟動流程介紹32
2.3.2 HPS啟動方式介紹33
2.3.3 製作啟動鏡像SD卡34
2.3.4 準備硬件闆卡35
2.3.5 開機測試39
2.4 開發板Linux系統常用操作… 40
2.4.1 查看目錄40
2.4.2 設置和修改用戶密碼40
2.4.3 查看和編輯文件… 41
2.4.4 設置IP地址… 43
2.4.5 掛載SD卡的FAT32分區45
2.4.6 掛載U盤46
2.4.7 文件操作47
2.4.8 目錄操作48
2.4.9 停止某個進程49
2.4.10 重啟和關機… 50
2.5 本章小結50
第3章SoC FPGA開發概述… 51
3.1 SoC FPGA開發流程… 51
3.1.1 硬件開發51
3.1.2 軟件開發53
3.2 AC501-SoC FPGA開發板的黃金參考設計說明53
3.2.1 GHRD … 53
3.2.2 打開和查看GHRD 54
3.2.3 組件參數配置詳解… 57
3.3 本章小結62
第4章手把手修改GHRD系統63
4.1 修改GHRD工程… 63
4.1.1 打開GHRD工程… 63
4.1.2 添加UART IP 64
4.1.3 關於HPS與FPGA數據交互… 64
4.1.4 連接UART IP信號端口65
4.1.5 分配組件基地址… 67
4.1.6 生成Qsys系統的HDL文件… 68
4.1.7 添加uart_1的端口到Quartus工程中69
4.1.8 分配FPGA引腳… 71
4.1.9 生成配置數據二進製文件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 製作設備樹… 82
4.3.1 設備樹製作流程… 82
4.3.2 準備所需文件82
4.3.3 生成.dts文件83
4.3.4 生成.dtb文件84
4.4 運行修改後的工程85
4.5 本章小結87
第5章使用DS-5編寫和調試SoC的Linux應用程序88
5.1 啟動DS-5 …88
5.2 創建C工程… 91
5.3 編譯工程94
5.4 建立SSH遠程連接95
5.4.1 創建遠程連接95
5.4.2 複製文件到目標板101
5.4.3 運行應用程序102
5.5 遠程調試… 103
5.5.1 GDB設置… 103
5.5.2 GDB連接和調試… 106
5.6 使用WinSCP實現多系統傳輸文件108
5.6.1 為什麼要使用WinSCP 108
5.6.2 安裝WinSCP 109
5.6.3 建立遠程主機連接109
5.6.4 新建遠程連接112
5.6.5 調用PuTTY終端112
5.7 本章小結… 113
第6章基於虛擬地址映射的Linux硬件編程114
6.1 什麼是虛擬地址映射… 114
6.2 虛擬地址映射的實現… 115
6.3 基於虛擬地址映射的PIO編程應用117
6.3.1 PIO外設的虛擬地址映射117
6.3.2 在DS-5中建立PIO應用工程11
6.3.3 添加和包含HPS庫文件119
6.3.4 添加FPGA側外設硬件信息… 121
6.3.5 PIO IP核介紹124
6.3.6 PIO核寄存器映射125
6.3.7 PIO IP核應用實例128
6.3.8 合理的程序退出機制… 131
6.3.9 關於按鍵消抖133
6.4 基於虛擬地址映射的UART編程應用… 134
6.4.1 UART核介紹134
6.4.2 UART寄存器映射134
6.4.3 UART IP核應用實例… 136
6.4.4 UART IP核板級調試… 144
6.4.5 小結145
6.5 基於虛擬地址映射的I2C編程應用145
6.5.1 OpenCores I2C IP簡介… 146
6.5.2 OpenCores I2C IP寄存器映射146
6.5.3 I2C IP核應用實例149
6.5.4 小結161
6.6 本章小結… 161
第7章基於Linux應用程序的HPS配置FPGA … 162
7.1 製作Quartus工程163
7.2 生成rbf格式配置數據163
7.3 編譯Linux配置FPGA應用程序… 165
7.4 在系統重配置FPGA實驗… 166
7.5 本章小結… 168
第8章編譯嵌入式Linux系統內核16
8.1 安裝VMware … 170
8.2 安裝Ubuntu系統171
8.2.1 使用現成的Ubuntu系統鏡像171
8.2.2 安裝全新的Ubuntu系統17
8.3 下載Linux系統源碼… 182
8.4 設置交叉編譯環境185
8.5 配置和編譯內核… 189
8.5.1 快速配置內核189
8.5.2 保存內核配置文件195
8.5.3 編譯內核195
8.5.4 使用內核啟動開發板… 197
8.6 本章小結… 199
第9章Linux設備樹的原理與應用實例200
9.1 什麼是設備樹200
9.2 設備樹基本格式… 201
9.3 設備樹加載設備驅動原理… 206
9.4 編寫I2C控制器設備節點… 208
9.5 加載OC_I2C驅動211
9.6 使用RTC … 212
9.7 使用EEPROM … 216
9.8 編寫SPI控制器設備節點… 217
9.9 本章小結… 219
第10章基於Linux標准文件I/O 的設備讀/寫… 220
10.1 什麼是文件I/O 220
10.2 基於文件I/O操作的一般方法… 220
10.2.1 文件描述符220
10.2.2 打開設備(open)… 221
10.2.3 向設備寫入數據(write) 221
10.2.4 讀取設備數據(read)… 222
10.2.5 雜項操作(ioctl)… 222
10.2.6 關閉設備(close)… 223
10.2.7 其他操作… 223
10.3 使用文件I/O實現I2C編程223
10.4 本章小結… 226
第11章FPGA與HPS高速數據交互應用… 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 總線的互聯… 230
11.3 Avalon-MM 總線230
11.4 Avalon-MM Slave接口232
11.5 基本Avalon-MM Slave IP設計框架… 234
11.5.1 端口定義… 234
11.5.2 寄存器和線網定義235
11.5.3 Avalon總線對寄存器的讀/寫235
11.5.4 用戶邏輯使用寄存器… 236
11.6 PWM 控制器設計237
11.6.1 PWM IP核端口設計… 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主機… 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 高速數據採集系統… 263
11.8.1 安裝Avalon-MM Master模板263
11.8.2 完善Qsys系統… 265
11.8.3 修改Quartus中的Qsys例化269
11.8.4 測試邏輯設計… 271
11.9 本章小結… 275
第12章Linux驅動編寫與編譯… 276
12.1 基本字符型設備驅動… 276
12.1.1 字符型設備驅動框架… 277
12.1.2 PWM 控制器驅動的完整源碼286
12.1.3 驅動編譯Makefile 291
12.1.4 Ubuntu下編譯設備驅動292
12.1.5 字符型設備驅動驗證… 293
12.2 基於DMA的字符型設備驅動… 297
12.2.1 Avalon-MM Master Write驅動… 298
12.2.2 Avalon-MM Master Write測試… 304
12.3 本章小結… 311
附錄A 外設地址映射312
附錄B HPS GPIO映射… 314
作者介紹
梅雪松
網名小梅哥,擁有多年電子設計經驗,擅長知識的總結和傳播,有《小梅哥和你一起深入學習FPGA》、
《小梅哥FPGA學習筆記》兩個系列網絡博文;並推出了手把手式視頻教程《FPGA設計思想與驗證方法視頻教程》,
該教程在各大視頻點擊平台備受好評,網友稱其為學習FPGA基礎與提高教學視頻的不二之選。
同時,開設FPGA實地培訓班,進行網絡和實地FPGA培訓,並多次進入高校進行SoC FPGA開發技術的培訓。
培訓課程以其係統的知識講解和生動的實例分析,得到了學員的一致肯定。