Xilinx Zynq 系列 SoC 嵌入式系統應用與人工智能實現:基於 Arm 多核處理器和 Vivado 的設計方法

何賓,李天凌,餘晨

  • 出版商: 電子工業
  • 出版日期: 2024-06-01
  • 售價: $1,188
  • 貴賓價: 9.5$1,129
  • 語言: 簡體中文
  • 頁數: 704
  • ISBN: 7121480018
  • ISBN-13: 9787121480010
  • 相關分類: 嵌入式系統
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

相關主題

商品描述

本書是對《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平臺的人體姿態識別的實現。

目錄大綱

目錄
第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