FPGA 進階開發與實踐
內容描述
本書內容共6章,主要介紹FPGA設計與優化方法,以及使用FPGA解決實際問題的具體過程。
其中,硬件設計方法包括FPGA高階設計方法,以及基於FPGA的SOPC和SoC設計方法;
軟件設計方法包括基於FPGA的HLS、OpenCL、OpenVINO高階設計方法。
目錄大綱
第1章 FPGA高階設計方法 001
1.1 可編程邏輯設計原則 001
1.1.1 面積與速度互換原則 001
1.1.2 數字電路硬件原則 005
1.1.3 系統設計原則 006
1.1.4 同步設計原則 008
1.2 可編程邏輯常用設計思想和技巧 009
1.2.1 乒乓操作 009
1.2.2 串並轉換 009
1.2.3 流水操作 009
1.2.4 異步時鐘域的數據同步 010
1.2.5 英特爾推薦的Coding Style 011
1.3 英特爾FPGA器件的高級特性與應用 015
1.3.1 時鐘管理 015
1.3.2 片內存儲器 021
1.3.3 數字信號處理 024
1.3.4 片外存儲器 028
1.3.5 高速差分接口 031
1.3.6 高速串行收發器 031
1.4 時序約束與時序分析 032
1.4.1 時序約束和分析基礎 032
1.4.2 高級時序分析 037
1.5 區域約束 041
1.5.1 Logic Lock設計方法簡介 041
1.5.2 Logic Lock區域 042
1.6 命令行與Tcl腳本 047
1.6.1 命令行 047
1.6.2 Tcl基礎知識 049
1.6.3 創建和執行Tcl腳本 052
1.6.4 Tcl腳本實驗 053
1.7 FPGA系統設計技術 059
1.7.1 信號完整性設計 059
1.7.2 電源完整性設計 066
1.7.3 高速I/O設計 068
1.7.4 高速I/O的PCB設計 071
第2章 基於FPGA的SOPC設計 074
2.1 SOPC開發流程 075
2.1.1 硬件開發流程 076
2.1.2 軟件開發流程 076
2.2 系統集成工具Qsys 076
2.2.1 Qsys簡介 076
2.2.2 Qsys系統設計流程 079
2.2.3 Qsys用戶界面 079
2.2.4 用戶自定義元件 085
2.3 Nios嵌入式處理器 087
2.3.1 第一代Nios嵌入式處理器 087
2.3.2 第二代Nios嵌入式處理器 087
2.3.3 可配置的軟核嵌入式處理器的優勢 088
2.3.4 軟件設計實例 091
2.3.5 HAL系統庫 106
2.4 基於FPGA的SOPC設計實驗 112
2.4.1 實驗一:流水燈實驗 112
2.4.2 實驗二:中斷控制實驗 145
2.4.3 實驗三:定時器實驗 149
第3章 基於FPGA的SoC設計 154
3.1 SoC FPGA簡介 154
3.2 英特爾SoC FPGA的特點 156
3.3 Cyclone Ⅴ SoC FPGA資源組成 161
3.4 開發SoC FPGA所需的工具 168
3.4.1 Quartus Prime 168
3.4.2 SoC EDS 175
3.5 SoC FPGA中HPS與FPGA的接口 182
3.5.1 H2F_AXI_Master 183
3.5.2 F2H_AXI_Slave 183
3.5.3 H2F_LW_AXI_Master 183
3.5.4 連接AXI總線與Avalon-MM總線 183
3.5.5 MPU外設地址映射 184
3.6 SoC FPGA開發 185
3.6.1 SoC FPGA開發流程 185
3.6.2 SoC FPGA啟動過程 186
3.6.3 使用GHRD 187
3.6.4 生成Preloader Image 196
3.6.5 編譯生成u-boot文件 202
3.6.6 生成Root Filesystem 204
3.6.7 配置和編譯Linux內核 215
3.6.8 系統鏡像製作及刻錄方法 221
3.6 9 DS-5程序的編寫、調試及運行 230
3.7 Linux相關知識 237
3.7.1 安裝Ubuntu虛擬機 237
3.7.2 下載Linux系統源碼 242
3.8 常見問題 245
3.9 基於FPGA的SoC設計實驗 246
3.9.1 實驗一:生成Preloader源碼 246
3.9.2 實驗二:編譯Preloader源碼 249
3.9.3 實驗三:編譯生成u-boot文件 252
3.9.4 實驗四:配置和編譯Linux內核 255
第4章 基於FPGA的HLS技術與應用 260
4.1 HLS簡介 260
4.2 優化的依據 260
4.3 循環優化 263
4.3.1 並行與管道 263
4.3.2 性能度量 265
4.3.3 循環依賴 268
4.3.4 明確循環的退出條件 272
4.3.5 線性操作 272
4.3.6 循環展開 273
4.3.7 嵌套循環 276
4.4 代碼優化 277
4.4.1 避免指針別名 277
4.4.2 最小化內存依賴 277
4.4.3 將嵌套循環改為單層循環 278
4.5 指令優化 278
4.5.1 ivdep指令 279
4.5.2 loop_coalesce指令 280
4.5.3 ii和max_concurrency指令 281
4.6 內存優化 281
4.6.1 本地內存 281
4.6.2 內存架構 282
4.6.3 本地內存的屬性 289
4.6.4 靜態變量 294
4.6.5 寄存器的使用 295
4.7 接口優化 295
4.7.1 標準接口 295
4.7.2 Avalon MM Master接口 297
4.7.3 Avalon MM Slave接口 298
4.7.4 流式接口 300
4.7.5 不使用指針的標準接口 302
4.8 數據類型優化 303
4.8.1 任意精度的整數 304
4.8.2 任意精度的定點數 304
4.8.3 特殊數據類型與普通數據類型之間的轉換 306
4.9 浮點運算優化 306
4.10 其他優化建議 308
4.11 基於FPGA的HLS實驗 308
4.11.1 實驗一:簡單的乘法器 309
4.11.2 實驗二:接口 318
4.11.3 實驗三:循環優化 330
第5章 基於FPGA的OpenCL技術與應用 336
5.1 OpenCL簡介 336
5.2 OpenCL環境搭建 337
5.3 OpenCL基本架構 339
5.3.1 平台模型 340
5.3.2 執行模型 340
5.3.3 存儲模型 342
5.3.4 執行流程 342
5.4 OpenCL主機端程序設計 343
5.4.1 OpenCL平台 343
5.4.2 OpenCL設備 344
5.4.3 OpenCL上下文 347
5.4.4 OpenCL命令隊列 349
5.4.5 OpenCL程序對象 351
5.4.6 OpenCL內核對象 355
5.4.7 OpenCL對象回收與錯誤處理 359
5.5 OpenCL設備端程序設計 362
5.5.1 基本語法和關鍵字 362
5.5.2 數據類型 364
5.5.3 維度和工作項 367
5.5.4 其他注意事項 369
5.6 OpenCL常用優化方法 369
5.6.1 單工作項優化 369
5.6.2 循環優化 374
5.6.3 任務並行優化 380
5.6.4 NDRange類型內核的優化 391
5.6.5 內存訪問優化 398
5.7 OpenCL編程原則 414
5.7.1 避免“昂貴”的函數和方法 414
5.7.2 使用“廉價”的數據類型 415
5.8 基於FPGA的OpenCL實驗 415
5.8.1 準備工作 415
5.8.2 實驗一:hello 417
5.8.3 實驗二:platform 420
5.8.4 實驗三:device 424
5.8.5 實驗四:ctxt_and_queue 437
5.8.6 實驗五:program_and_kernel 442
5.8.7 實驗六:sample 450
5.8.8 實驗七:first 453
第6章 基於FPGA的OpenVINO人工智能應用 456
6.1 OpenVINO簡介 456
6.1.1 OpenVINO工具套件堆棧 457
6.1.2 OpenVINO的優勢 458
6.1.3 應用前景 458
6.2 OpenVINO的安裝與驗證 458
6.2.1 安裝步驟 459
6.2.2 驗證安裝結果 461
6.3 OpenVINO中的模型優化器 463
6.3.1 模型優化器的作用 464
6.3.2 優化模型 464
6.3.3 模型優化器高級應用 473
6.3.4 模型優化器定制層 486
6.4 OpenVINO深度學習推理引擎 487
6.4.1 推理引擎簡介 487
6.4.2 推理引擎的組成 488
6.4.3 推理引擎的使用方法 489
6.4.4 擴展推理引擎內核 489
6.4.5 集成推理引擎 498
6.4.6 神經網絡構建器 502
6.4.7 動態批處理 505
6.4.8 形狀推理 507
6.4.9 低精度8位整數推理 509
6.4.10 模型轉換驗證 511
作者介紹
田亮,男,武漢科技大學碩士,重慶海雲捷訊科技有限公司CTO,英特爾FPGA中國創新中心技術管理主要生態負責人。
10年以上的雲計算產品開發、設計和架構經驗,服務過人民日報、CNTV、國家電網、武漢大學等客戶,主導設計了人工智能開放創新平台和FPGA雲加速平台,熟悉OpenStack、SDN、分佈式存儲、Docker、Kubernetes、FPGA、異構計算、人工智能等技術,致力於為客戶提供“雲+AI”的解決方案。