Xilinx Zynq系列SoC嵌入式系統應用與人工智能實現:基于Arm多核處理器和Vivado的設計方法( 簡體 字) | |
作者:何賓,李天凌,余晨 | 類別:1. -> 電腦組織與體系結構 -> 嵌入式系統 -> Cortex 2. -> 程式設計 -> 人工智慧 |
出版社:電子工業出版社 | 3dWoo書號: 56440 詢問書籍請說出此書號! 缺書 NT售價: 990 元 |
出版日:6/1/2024 | |
頁數:704 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121480010 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 Xilinx Zynq系列SoC設計導論 1
1.1 全可編程SoC基礎知識 1 1.1.1 全可編程SoC的演進 1 1.1.2 SoC與MCU和CPU的比較 3 1.1.3 全可編程SoC誕生的背景 4 1.1.4 全可編程SoC的技術特點 4 1.1.5 全可編程SoC中的處理器類型 5 1.2 Arm架構及分類 6 1.2.1 M-Profile 7 1.2.2 R-Profile 8 1.2.3 A-Profile 9 1.3 Zynq-7000 SoC的功能和結構 11 1.3.1 Zynq-7000 SoC產品的分類及資源 11 1.3.2 Zynq-7000 SoC的功能 12 1.3.3 Zynq-7000 SoC內的PS的構成 13 1.3.4 Zynq-7000 SoC內的PL的構成 18 1.3.5 Zynq-7000 SoC內的互聯結構 19 1.3.6 Zynq-7000 SoC的供電引腳 20 1.3.7 Zynq-7000 SoC內MIO到EMIO的連接 22 1.3.8 Zynq-7000 SoC內為PL分配的信號 26 1.4 Zynq UltraScale+MPSoC的功能和結構 28 1.4.1 Zynq UltraScale+MPSoC產品的分類及資源 28 1.4.2 Zynq UltraScale+MPSoC的結構 31 1.4.3 Zynq UltraScale+MPSoC的供電區域 35 1.4.4 Zynq UltraScale+MPSoC PS-PL AXI接口 36 第2章 AMBA規范 38 2.1 AMBA規范的發展 38 2.1.1 AMBA 1 39 2.1.2 AMBA 2 39 2.1.3 AMBA 3 39 2.1.4 AMBA 4 40 2.1.5 AMBA 5 41 2.2 AMBA APB規范 43 2.2.1 AMBA APB寫傳輸 43 2.2.2 AMBA APB讀傳輸 45 2.2.3 AMBA APB錯誤響應 45 2.2.4 操作狀態 46 2.2.5 AMBA 3 APB信號 47 2.3 AMBA AHB規范 48 2.3.1 AMBA AHB的結構 48 2.3.2 AMBA AHB操作 49 2.3.3 AMBA AHB的傳輸類型 51 2.3.4 AMBA AHB的猝發操作 52 2.3.5 AMBA AHB的傳輸控制信號 55 2.3.6 AMBA AHB地址譯碼 56 2.3.7 AMBA AHB從設備傳輸響應 57 2.3.8 AMBA AHB數據總線 59 2.3.9 AMBA AHB傳輸仲裁 61 2.3.10 AMBA AHB分割傳輸 65 2.3.11 AMBA AHB復位 68 2.3.12 關于AHB數據總線的位寬 68 2.3.13 AMBA AHB接口設備 69 2.4 AMBA AXI4規范 71 2.4.1 AMBA AXI4概述 71 2.4.2 AMBA AXI4的功能 71 2.4.3 AMBA AXI4的互聯結構 79 2.4.4 AXI4-Lite的功能 80 2.4.5 AXI4-Stream的功能 81 第3章 Zynq-7000系統的公共資源和特性 84 3.1 時鐘子系統 84 3.1.1 時鐘子系統的架構 84 3.1.2 CPU時鐘域 86 3.1.3 時鐘編程實例 87 3.1.4 時鐘子系統內的生成電路結構 88 3.2 復位子系統 92 3.2.1 復位子系統的結構 92 3.2.2 復位流程 93 3.2.3 復位結果 94 第4章 Zynq-7000 SoC調試和測試子系統 96 4.1 JTAG和DAP子系統 96 4.1.1 JTAG和DAP子系統的功能 98 4.1.2 JTAG和DAP子系統I/O信號 100 4.1.3 編程模型 100 4.1.4 Arm DAP控制器 101 4.1.5 TPIU 102 4.1.6 Xilinx TAP控制器 103 4.2 CoreSight系統的結構及功能 103 4.2.1 CoreSight系統的結構 103 4.2.2 CoreSight系統的功能 104 第5章 Cortex-A9處理器及其指令集 108 5.1 應用處理單元概述 108 5.1.1 基本功能 108 5.1.2 系統級視圖 109 5.2 Cortex-A9處理器的結構 111 5.2.1 處理器模式 112 5.2.2 寄存器 113 5.2.3 流水線 118 5.2.4 分支預測 119 5.2.5 指令和數據對齊 119 5.2.6 跟蹤和調試 121 5.3 Cortex-A9處理器的指令集 122 5.3.1 指令集基礎 122 5.3.2 數據處理操作 125 5.3.3 存儲器指令 129 5.3.4 分支 131 5.3.5 飽和算術 132 5.3.6 雜項指令 133 第6章 Cortex-A9片上存儲器系統的結構和功能 137 6.1 L1高速緩存 137 6.1.1 高速緩存的背景 137 6.1.2 高速緩存的優勢和問題 138 6.1.3 存儲器的層次 139 6.1.4 高速緩存的結構 139 6.1.5 緩存策略 143 6.1.6 寫和取緩沖區 145 6.1.7 緩存性能和命中速度 145 6.1.8 無效和清除緩存 146 6.1.9 一致性點和統一性點 147 6.1.10 Zynq-7000 SoC中的Cortex-A9 L1高速緩存的特性 149 6.2 存儲器訪問順序 150 6.2.1 普通、設備和強順序存儲器模型 151 6.2.2 存儲器屬性 152 6.2.3 存儲器屏障 153 6.3 存儲器管理單元 156 6.3.1 MMU功能描述 156 6.3.2 虛擬存儲器 157 6.3.3 轉換表 158 6.3.4 頁表入口域的描述 161 6.3.5 TLB的構成 163 6.3.6 存儲器訪問順序 165 6.4 偵聽控制單元 166 6.4.1 地址過濾 166 6.4.2 SCU主設備端口 166 6.5 L2高速緩存 167 6.5.1 互斥L2-L1高速緩存配置 169 6.5.2 高速緩存替換策略 170 6.5.3 高速緩存鎖定 170 6.5.4 使能/禁止L2高速緩存控制器 171 6.5.5 RAM訪問延遲控制 171 6.5.6 保存緩沖區操作 172 6.5.7 Cortex-A9處理器和L2高速緩存控制器之間的優化 172 6.5.8 預取操作 173 6.5.9 編程模型 174 6.6 片上存儲器 175 6.6.1 片上存儲器概述 175 6.6.2 片上存儲器的功能 176 6.7 系統地址空間分配 181 6.7.1 地址映射 181 6.7.2 系統總線主設備 182 6.7.3 I/O外設 182 6.7.4 SMC存儲器 183 6.7.5 SLCR 183 6.7.6 PS系統寄存器 183 6.7.7 CPU私有寄存器 183 第7章 Zynq-7000 SoC的Vivado基本設計流程 185 7.1 創建新的工程 185 7.2 使用IP集成器創建處理器系統 187 7.3 生成頂層HDL并導出設計到SDK 192 7.4 創建應用測試程序 195 7.5 設計驗證 198 7.5.1 驗證前的硬件平臺準備 198 7.5.2 設計驗證的具體實現 199 7.6 SDK調試工具的使用 200 7.6.1 打開前面的設計工程 200 7.6.2 導入工程到SDK 200 7.6.3 建立新的存儲器測試工程 201 7.6.4 運行存儲器測試工程 201 7.6.5 調試存儲器測試工程 203 7.7 SDK性能分析工具 205 第8章 Zynq-7000 SoC GPIO原理和控制實現 209 8.1 GPIO模塊的原理 209 8.1.1 GPIO接口及其功能 210 8.1.2 GPIO編程流程 212 8.1.3 I/O接口 214 8.1.4 部分寄存器說明 214 8.1.5 底層讀/寫函數說明 215 8.1.6 GPIO的API函數說明 216 8.2 Vivado集成開發環境下MIO讀/寫控制的實現 216 8.2.1 調用底層讀/寫函數編寫GPIO應用程序 217 8.2.2 調用API函數編寫GPIO應用程序 219 8.3 Vivado集成開發環境下EMIO讀/寫控制的實現 222 8.3.1 調用底層讀/寫函數編寫GPIO應用程序 222 8.3.2 調用API函數編寫GPIO應用程序 227 第9章 Cortex-A9異常與中斷原理和實現 230 9.1 異常原理 230 9.1.1 異常類型 230 9.1.2 異常處理 234 9.1.3 其他異常句柄 235 9.1.4 Linux異常程序流 236 9.2 中斷原理 237 9.2.1 外部中斷請求 237 9.2.2 Zynq-7000 SoC內的中斷環境 240 9.2.3 中斷控制器的功能 241 9.3 Vivado集成開發環境下中斷系統的實現 244 9.3.1 Cortex-A9處理器中斷及異常的初始化流程 245 9.3.2 Cortex-A9處理器的GPIO控制器的初始化流程 245 9.3.3 導出硬件設計到SDK 246 9.3.4 創建新的應用工程 246 9.3.5 運行應用工程 248 第10章 Cortex-A9定時器原理和控制實現 250 10.1 定時器的系統結構 250 10.1.1 CPU私有定時器和看門狗定時器 251 10.1.2 全局定時器/計數器 251 10.1.3 系統級看門狗定時器 252 10.1.4 3重定時器/計數器 253 10.1.5 I/O信號 256 10.2 Vivado集成開發環境下定時器的控制實現 257 10.2.1 打開前面的設計工程 257 10.2.2 創建SDK軟件工程 257 10.2.3 運行軟件應用工程 259 第11章 Cortex-A9 DMA控制器原理和實現 261 11.1 DMA控制器的結構 261 11.2 DMA控制器的功能 264 11.2.1 考慮AXI交易的因素 265 11.2.2 DMA管理器 265 11.2.3 多通道數據FIFO(MFIFO) 266 11.2.4 存儲器—存儲器交易 266 11.2.5 PL外設AXI交易 266 11.2.6 PL外設請求接口 267 11.2.7 PL外設長度管理 268 11.2.8 DMAC的長度管理 269 11.2.9 事件和中斷 270 11.2.10 異常終止 270 11.2.11 安全性 272 11.2.12 IP配置選項 273 11.3 DMA控制器編程指南 273 11.3.1 啟動控制器 274 11.3.2 執行DMA傳輸 274 11.3.3 中斷服務例程 274 11.3.4 寄存器描述 274 11.4 DMA引擎編程指南 275 11.4.1 寫微代碼編程用于AXI交易的CCRx 275 11.4.2 存儲器到存儲器的傳輸 276 11.4.3 PL外設DMA傳輸長度管理 279 11.4.4 使用一個事件重新啟動DMA通道 280 11.4.5 中斷一個處理器 281 11.4.6 指令集參考 281 11.5 編程限制 282 11.6 系統功能之控制器復位配置 284 11.7 I/O接口 284 11.7.1 AXI主接口 285 11.7.2 外設請求接口 285 11.8 Vivado集成開發環境下DMA傳輸的實現 286 11.8.1 DMA控制器初始化流程 286 11.8.2 中斷控制器初始化流程 287 11.8.3 中斷服務句柄處理流程 287 11.8.4 導出硬件設計到SDK 287 11.8.5 創建新的應用工程 288 11.8.6 運行軟件應用工程 294 第12章 Cortex-A9安全性擴展 295 12.1 TrustZone硬件架構 295 12.1.1 多核系統的安全性擴展 297 12.1.2 非安全世界和安全世界的交互 297 12.2 Zynq-7000 SoC APU內的TrustZone 298 12.2.1 CPU安全過渡 299 12.2.2 CP15寄存器訪問控制 299 12.2.3 MMU安全性 300 12.2.4 L1高速緩存安全性 301 12.2.5 安全異常控制 301 12.2.6 CPU調試TrustZone訪問控制 301 12.2.7 SCU寄存器訪問控制 301 12.2.8 L2高速緩存中的TrustZone支持 301 第13章 Cortex-A9 NEON原理和實現 303 13.1 SIMD 303 13.2 NEON架構 305 13.2.1 與VFP的共性 305 13.2.2 數據類型 305 13.2.3 NEON寄存器 306 13.2.4 NEON指令集 307 13.3 NEON C編譯器和匯編器 308 13.3.1 向量化 308 13.3.2 檢測NEON 308 13.4 NEON優化庫 309 13.5 SDK工具提供的優化選項 310 13.6 NEON內聯函數 313 13.6.1 NEON數據類型 313 13.6.2 NEON內聯函數的用法 314 13.7 優化NEON匯編器代碼 315 13.8 提高存儲器訪問效率 317 13.9 自動向量化實現 318 13.9.1 導出硬件設計到SDK 318 13.9.2 創建新的應用工程 318 13.9.3 運行軟件應用工程 319 13.10 NEON匯編代碼實現 319 13.10.1 導出硬件設計到SDK 319 13.10.2 創建新的應用工程 320 13.10.3 運行軟件應用工程 321 第14章 Zynq-7000 SoC的PL資源 322 14.1 PL資源概述 322 14.2 PL資源的功能 323 14.2.1 CLB、切片和LUT 323 14.2.2 時鐘管理 323 14.2.3 塊RAM 324 14.2.4 數字信號處理-DSP切片 325 14.2.5 I/O 326 14.2.6 低功耗串行收發器 327 14.2.7 PCI-E模塊 328 14.2.8 XADC 328 14.2.9 配置 329 第15章 Zynq-7000 SoC的互聯結構 330 15.1 系統互聯架構 330 15.1.1 互聯模塊及其功能 330 15.1.2 數據路徑 332 15.1.3 時鐘域 333 15.1.4 連接性 334 15.1.5 AXI ID 335 15.1.6 GPV寄存器概述 335 15.2 服務質量 336 15.2.1 基本仲裁 336 15.2.2 高級QoS 336 15.2.3 DDR端口仲裁 336 15.3 AXI_HP接口 337 15.3.1 AXI_HP接口的結構及特點 337 15.3.2 接口數據寬度 340 15.3.3 交易類型 341 15.3.4 命令交替和重新排序 342 15.3.5 性能優化總結 342 15.4 AXI_ACP接口 343 15.5 AXI_GP接口 344 15.6 AXI信號總結 344 15.7 PL接口選擇 348 15.7.1 使用通用主設備端口的Cortex-A9處理器 348 15.7.2 使用通用主設備的PS DMA控制器 348 15.7.3 使用高性能接口的PL DMA 351 15.7.4 使用AXI ACP的PL DMA 351 15.7.5 使用通用AXI從(GP)的PL DMA 351 第16章 在Zynq-7000 SoC內定制簡單AXI-Lite IP 354 16.1 設計原理 354 16.2 定制AXI-Lite IP 354 16.2.1 創建定制IP模板 354 16.2.2 修改定制IP模板 357 16.2.3 使用IP封裝器封裝外設 360 16.3 打開并添加IP到設計中 363 16.3.1 打開工程和修改設置 363 16.3.2 添加定制IP到設計 364 16.3.3 添加XDC約束文件 367 16.4 導出硬件到SDK 368 16.5 建立和驗證軟件應用工程 369 16.5.1 建立應用工程 369 16.5.2 下載硬件比特流文件到FPGA 371 16.5.3 運行應用工程 371 第17章 在Zynq-7000 SoC內定制復雜AXI-Lite IP 372 17.1 設計原理 372 17.1.1 VGA IP核的設計原理 372 17.1.2 移位寄存器IP核的設計原理 374 17.2 定制VGA IP核 375 17.2.1 創建定制VGA IP模板 375 17.2.2 修改定制VGA IP模板 376 17.2.3 使用IP封裝器封裝VGA IP 379 17.3 定制移位寄存器IP核 381 17.3.1 創建定制SHIFTER IP模板 381 17.3.2 修改定制SHIFTER IP模板 382 17.3.3 使用IP封裝器封裝SHIFTER IP 383 17.4 打開并添加IP到設計 384 17.4.1 打開工程和修改設置 384 17.4.2 添加定制IP到設計 385 17.4.3 添加XDC約束文件 389 17.5 導出硬件到SDK 391 17.6 建立和驗證軟件工程 391 17.6.1 建立應用工程 391 17.6.2 下載硬件比特流文件到FPGA 394 17.6.3 運行應用工程 395 第18章 Zynq-7000 AXI HP數據傳輸原理和實現 396 18.1 設計原理 396 18.2 構建硬件系統 397 18.2.1 打開工程和修改設置 397 18.2.2 添加并連接AXI DMA IP核 397 18.2.3 添加并連接FIFO IP核 400 18.2.4 連接DMA中斷到PS 402 18.2.5 驗證和建立設計 406 18.3 建立和驗證軟件工程 406 18.3.1 導出硬件到SDK 406 18.3.2 創建軟件應用工程 406 18.3.3 下載硬件比特流文件到FPGA 415 18.3.4 運行應用工程 415 第19章 Zynq-7000 ACP數據傳輸原理和實現 416 19.1 設計原理 416 19.2 打開前面的設計工程 416 19.3 配置PS端口 416 19.4 添加并連接IP到設計 418 19.4.1 添加IP到設計 418 19.4.2 系統連接 419 19.4.3 分配地址空間 421 19.5 使用SDK設計和實現應用工程 422 19.5.1 創建新的軟件應用工程 422 19.5.2 導入應用程序 422 19.5.3 下載硬件比特流文件到FPGA 425 19.5.4 運行應用工程 425 第20章 Zynq-7000 SoC軟件與硬件協同調試原理和實現 427 20.1 設計目標 427 20.2 ILA核的原理 428 20.2.1 ILA觸發器輸入邏輯 428 20.2.2 多觸發器端口的使用 428 20.2.3 使用觸發器和存儲限制條件 428 20.2.4 ILA觸發器輸出邏輯 429 20.2.5 ILA數據捕獲邏輯 430 20.2.6 ILA控制與狀態邏輯 430 20.3 VIO核的原理 431 20.4 構建協同調試硬件系統 432 20.4.1 創建新的設計工程 432 20.4.2 添加定制IP 432 20.4.3 添加ILA和VIO核 433 20.4.4 標記和分配調試網絡 434 20.5 生成軟件工程 436 20.6 S/H協同調試 437 第21章 Zynq-7000 SoC啟動與配置原理和實現 443 21.1 Zynq-7000 SoC的啟動過程 443 21.2 Zynq-7000 SoC的啟動要求 444 21.2.1 供電要求 444 21.2.2 時鐘要求 444 21.2.3 復位要求 444 21.2.4 模式引腳 445 21.3 Zynq-7000 SoC內的BootROM 446 21.3.1 BootROM的特性 446 21.3.2 BootROM的頭部 449 21.3.3 啟動設備 451 21.3.4 BootROM多啟動和啟動分區查找機制 453 21.3.5 調試狀態 455 21.3.6 BootROM后狀態 456 21.4 Zynq-7000 SoC設備配置接口 458 21.4.1 描述功能 459 21.4.2 器件的配置流程 461 21.4.3 配置PL 464 21.4.4 寄存器概述 465 21.5 生成SD卡鏡像文件并啟動 466 21.5.1 SD卡與XC7Z020接口設計 466 21.5.2 打開前面的設計工程 466 21.5.3 創建第一級啟動引導 468 21.5.4 創建SD卡啟動鏡像 468 21.5.5 從SD卡啟動引導系統 470 21.6 生成QSPI Flash鏡像并啟動 471 21.6.1 QSPI Flash接口 471 21.6.2 創建QSPI Flash鏡像 471 21.6.3 從QSPI Flash啟動引導系統 472 21.7 Cortex-A9雙核系統的配置和運行 473 21.7.1 構建雙核硬件系統工程 473 21.7.2 添加IP核 474 21.7.3 導出硬件設計到SDK 475 21.7.4 建立FSBL應用工程 476 21.7.5 建立CPU0應用工程 476 21.7.6 建立CPU1應用工程 478 21.7.7 修改工程設置 480 21.7.8 創建SD卡鏡像文件 481 21.7.9 雙核硬件系統的運行和測試 482 第22章 Linux開發環境的構建 484 22.1 構建虛擬機環境 484 22.2 安裝和啟動Ubuntu 16.04客戶機操作系統 489 22.2.1 下載Ubuntu操作系統鏡像 489 22.2.2 安裝Ubuntu操作系統 490 22.2.3 設置共享文件夾 493 22.2.4 更換鏡像下載源 495 22.3 安裝FTP和配置FileZilla 496 22.3.1 在Linux操作系統中安裝FTP 497 22.3.2 在Windows操作系統中配置FileZilla 497 22.4 安裝和啟動SSH和GIT組件 499 22.4.1 安裝和啟動SSH組件 499 22.4.2 安裝和啟動GIT組件 500 22.5 安裝交叉編譯環境 500 22.5.1 安裝32位支持工具包 501 22.5.2 安裝Vivado設計套件 501 22.6 安裝和配置Qt集成開發工具 506 22.6.1 Qt集成開發工具的功能 506 22.6.2 構建計算機平臺Qt集成開發環境 507 22.6.3 構建Arm平臺Qt集成開發環境 516 第23章 Zynq-7000 SoC內Ubuntu硬件運行環境的構建 526 23.1 建立新的設計工程 526 23.2 添加自定義IP核路徑 527 23.3 構建完整的硬件系統 527 23.3.1 創建塊設計 527 23.3.2 添加和配置ZYNQ7 IP核 528 23.3.3 添加和配置VDMA IP核 530 23.3.4 添加和配置Video Timing Controller IP核 531 23.3.5 添加和配置AXI4-Stream to Video Out IP核 533 23.3.6 添加和配置HDMI IP核 534 23.3.7 添加和配置Dynamic Clock Generator IP核 534 23.3.8 添加和配置RGB2BGR IP核 534 23.3.9 添加和配置DVI_Transmitter IP核 534 23.3.10 添加和配置Concat IP核 535 23.3.11 連接IP核 535 23.4 設計有效性檢查 541 23.5 添加設計約束文件 541 23.6 導出硬件設計到SDK 542 第24章 Zynq-7000 SoC內Ubuntu軟件運行環境的構建 544 24.1 u-boot的原理和實現 544 24.1.1 下載u-boot源碼 544 24.1.2 u-boot文件結構 545 24.1.3 u-boot的工作模式 546 24.1.4 修改u-boot啟動配置和編譯u-boot 546 24.1.5 SDK生成BOOT.bin文件及設備樹 548 24.2 內核的結構和編譯過程 554 24.2.1 內核的結構 554 24.2.2 下載Linux內核源碼 555 24.2.3 內核版本 556 24.2.4 內核系統配置 556 24.2.5 Bootloader的啟動過程 557 24.2.6 Linux內核的啟動過程 558 24.2.7 添加驅動源碼文件 560 24.2.8 修改內核配置文件 562 24.2.9 編譯內核 563 24.3 設備樹的原理和實現 564 24.3.1 設備樹概述 564 24.3.2 設備樹的數據格式 564 24.3.3 設備樹的修改 565 24.3.4 設備樹的編譯 568 24.4 創建新的SD卡分區 568 24.5 復制boot分區的文件 573 24.6 文件系統的下載和驗證 573 24.6.1 文件系統的下載 573 24.6.2 文件系統的驗證 577 24.7 MATE桌面的安裝 579 第25章 Linux環境下簡單字符設備驅動程序的開發 581 25.1 驅動程序的必要性 581 25.2 Linux操作系統下的設備文件類型 582 25.3 Linux驅動程序的開發流程 583 25.4 Linux驅動程序的結構框架 583 25.4.1 加載和卸載函數模塊 583 25.4.2 字符設備中重要的數據結構和函數 585 25.5 編寫Makefile文件 590 25.6 編譯驅動程序 590 25.7 編寫測試程序 591 25.8 運行驅動程序 593 第26章 Linux環境下包含中斷機制驅動程序的開發 595 26.1 設計原理 595 26.2 編寫包含處理中斷的驅動程序 595 26.2.1 驅動程序頭文件 595 26.2.2 驅動的加載和卸載函數 596 26.2.3 初始化file_operations結構體 598 26.2.4 設備樹的改寫 598 26.3 編寫Makefile文件 599 26.4 編譯驅動程序 600 26.5 編寫測試程序 601 26.6 測試驅動程序 602 第27章 Linux環境下圖像處理系統的構建 604 27.1 系統的整體架構和功能 604 27.2 OV5640攝像頭的性能 605 27.2.1 攝像頭捕獲模塊的硬件 606 27.2.2 SCCB接口規范 606 27.2.3 寫OV5640攝像頭傳感器模組寄存器操作 607 27.2.4 讀OV5640攝像頭傳感器模組寄存器操作 607 27.2.5 OV5640攝像頭傳感器模組初始化流程 609 27.3 Vivado HLS工具實現拉普拉斯算子濾波算法設計 611 27.3.1 Vivado HLS工具的性能和優勢 611 27.3.2 拉普拉斯算法與HDL之間的映射 612 27.4 圖像處理系統的整體構建 615 27.5 圖像處理系統軟件設計 617 27.5.1 Ubuntu桌面系統的構建 617 27.5.2 Qt圖像處理程序的開發 617 27.6 嵌入式圖像處理系統測試 619 第28章 在Zynq-7000 SoC上構建和實現Python應用 621 28.1 設計所需的硬件和軟件環境 621 28.2 構建PetaLinux開發環境 621 28.2.1 PetaLinux開發環境概述 621 28.2.2 安裝32位庫 623 28.2.3 安裝并測試TFTP服務器 623 28.2.4 下載并安裝PetaLinux 624 28.3 構建嵌入式硬件系統 625 28.3.1 下載并安裝Vivado IDE 625 28.3.2 添加板級支持包文件 626 28.3.3 建立新的Vivado工程 626 28.3.4 構建硬件系統 626 28.4 構建嵌入式Python開發環境 629 28.5 構建PC端Python開發環境 631 28.6 服務器和客戶端Python的開發 632 28.6.1 服務器Python的開發 632 28.6.2 客戶端Python的開發 634 28.7 設計驗證 635 28.7.1 啟動服務器程序 635 28.7.2 啟動客戶端程序 637 第29章 手寫體識別模型訓練與推理一體化設計和實現 639 29.1 卷積神經網絡訓練和推理過程概述 639 29.2 卷積神經網絡前向推理與反向傳播的原理 640 29.2.1 卷積層的前向推理與反向傳播的原理 640 29.2.2 池化層的前向推理與反向傳播的原理 643 29.2.3 全連接層的前向推理與反向傳播的原理 644 29.2.4 激活函數層的前向推理與反向傳播原理 646 29.3 卷積神經網絡參數更新原理 647 29.3.1 損失函數 647 29.3.2 學習率與網絡參數更新 647 29.4 卷積神經網絡訓練與推理加速器IP核的設計方法 648 29.4.1 IP核子模塊的設計 648 29.4.2 IP核數據流與映射的實現 652 29.5 卷積神經網絡訓練與推理加速器IP核的實現 654 29.5.1 創建新的HLS工程 654 29.5.2 添加C語言設計代碼 655 29.5.3 執行高級綜合 662 29.6 構建完整的硬件系統 663 29.6.1 創建新的Vivado設計工程 664 29.6.2 建立新的處理器系統設計 664 29.6.3 生成頂層HDL并導出設計到SDK 667 29.7 創建Jupyter工程并測試 669 第30章 基于KR260開發平臺的人體姿態識別的軟件實現 673 30.1 Ubuntu操作系統鏡像制作 673 30.2 Ubuntu操作系統的運行 675 30.3 PYNQ框架的安裝 677 30.4 Jupyter Notebook的登錄 677 30.5 姿態識別代碼的執行 679 本書是對《Xilinx Zynq-7000嵌入式系統設計與實現:基于Arm Cortex-A9雙核處理器和Vivado的設計方法(第二版)》一書的一次重要修訂,全書共包含30章,主要內容包括Xilinx Zynq系列SoC設計導論、AMBA規范、Zynq-7000系統公共資源和特性、Zynq-7000調試和測試子系統、Cortex-A9處理器指令集、Cortex-A9片上存儲器系統結構和功能、Zynq-7000 SoC的Vivado基本設計流程、Zynq-7000 GPIO原理和控制、Cortex-A0異常與中斷原理和實現、Cortex-A9定時器原理及實現、Cortex-A9 DMA控制器原理和實現、Cortex-A9安全性擴展、Cortex-A9 NEON原理和實現、Zynq-7000的可編程邏輯資源、Zynq-7000的互聯結構、Zynq-7000 SoC內定制簡單AXI-Lite IP、Zynq-7000 SoC內定制復雜AXI Lite IP、Zynq-7000 AXI HP數據傳輸原理和實現、Zynq-7000 ACP數據傳輸原理和實現、Zynq-7000軟件與硬件協同調試原理和實現、Zynq-7000 SoC啟動與配置原理和實現、Linux開發環境的構建、Zynq-7000 SoC內Ubuntu硬件運行環境的構建、Zynq-7000 SoC內Ubuntu軟件運行環境的構建、Linux環境下簡單字符設備驅動程序的開發、Linux環境下包含中斷機制驅動程序的開發、Linux環境下圖像處理系統的構建、Zynq-7000 SoC上構建和實現Python應用、手寫體識別模型訓練與推理一體化設計和實現,以及基于KR260平臺的人體姿態識別的實現。
距離《Xilinx Zynq-7000嵌入式系統設計與實現:基于Arm Cortex-A9雙核處理器和Vivado的設計方法(第二版)》(以下簡稱“第二版”)一書的出版已經好幾年了。在此期間,發生了一些重要的事,首先就是AMD(美國超微半導體)公司于2022年收購了Xilinx(賽靈思)公司,其次就是人工智能(Artificial Intelligence,AI)技術的蓬勃發展。
這里我想從個人的角度談談目前十分火爆的人工智能。人工智能主要涉及數據、算法和算力3方面,其中算力是一個非常重要的方面。人工智能的模型訓練和推理需要進行大量的運算,因此對計算平臺的運算能力提出了更高的要求。GPU對很多從事人工智能算法研究的開發人員來說更加友好,容易上手,但是成本較高,功耗也較高,需要更多的電力資源支持,因此,在算力、成本和功耗之間凸顯出矛盾。而集成多核處理器單元的異構架構SoC由于其內部提供了豐富的可編程邏輯資源,在軟件和硬件邏輯之間提供了更高的靈活性,因此能夠在性能、成本和功耗之間提供更好的權衡,為人工智能未來的可持續發展與高算力要求提供了軟件和硬件融合的另一種高效率解決方案。 在本書的修訂過程中,我們充分考慮了Xilinx Zynq系列SoC在人工智能方面的應用前景,從模型訓練和推理部署兩個角度對Xilinx Zynq系列SoC在人工智能領域的使用方法進行了系統的介紹。 另外,在本書的修訂過程中,我們還保留了嵌入式系統應用的必要理論知識,刪除了一些不必要的理論知識,同時增加了對Xilinx最新Zynq UltraScale+ MPSoC的介紹,并更新了相關開發工具的版本,使得這部分內容更能夠體現嵌入式系統設計,以及Xilinx Zynq系列SoC的最新應用成果。 本書修訂的主要內容如下。 (1)刪除了第二版中的第14章“Cortex-A9外設模塊結構及功能”。 (2)刪除了第二版中的第23章“Zynq-7000 SoC內XADC原理及應用”。 (3)在第二版第1章“Zynq-7000 SoC設計導論”的基礎上增加了有關Xilinx Zynq UltraScale+ MPSoC的內容,將第1章改為“Xilinx Zynq系列SoC設計導論”。 (4)將Vivado設計套件的版本更新到2019.1,并更新了相關設計實例。 (5)將虛擬機上安裝的Ubuntu操作系統版本更新到2016.4,并更新了相關操作過程。 (6)將開發平臺上運行的Ubuntu操作系統版本更新到2018.3,并更新了u-boot、操作系統內核、設備樹和文件系統。 (7)將QT Creator版本更新到5.14.1。 (8)重新編寫了第25章“Linux環境下簡單字符設備驅動程序的開發”(第二版中的第2章)的內容。 (9)重新編寫了第26章“Linux環境下包含中斷機制驅動程序的開發”(第二版中的第2章)的內容。 (10)增加了第29章“手寫體識別模型訓練與推理一體化設計和實現”,以體現人工智能在Xilinx Zynq-7000 SoC上的應用。 (11)增加了第30章“基于KR260開發平臺的人體姿態識別的軟件實現”,以體現人工智能在Xilinx Zynq UltraScale+ MPSoC上的應用。 本書在修訂過程中得到了余晨和李天凌的幫助與支持,他們在系統學習第二版內容的基礎上,使用最新的Vivado設計套件和Ubuntu操作系統對全書的設計案例重新進行了修改與驗證。此外,甄向徹、鄭陽揚、李天凌、薛貝經過5年多的不斷接力,實現了將人工智能從最初在Xilinx Zynq-7000 SoC上單純的硬件加速實現到在Xilinx Zynq系列SoC上的手寫體識別模型訓練與推理部署的一體化,再到在Zynq UltraScale+ MPSoC上的人體姿態識別模型訓練與推理部署的一體化,對最初所設想的人工智能技術路線進行了實現和驗證,初步構成了一個技術比較成熟的人工智能整體解決方案。 關于本書配套的設計案例,讀者可登錄華信教育資源網進行下載;關于本書配套開發平臺及技術問題的交流,讀者可通過郵件聯系我們。 本書在修訂過程中也得到了原Xilinx大學計劃亞太區經理陸佳華先生的支持和幫助;本書在出版過程中得到了電子工業出版社領導與編輯的大力支持和幫助,在此一并向他們表示感謝。 何賓 于北京 |