Xilinx Zynq-7000嵌入式系統設計與實現:基于Arm Cortex-A9雙核處理器和Vivado的設計方法(第二版)( 簡體 字) | |
作者:何賓 | 類別:1. -> 電子工程 -> FPGA |
出版社:電子工業出版社 | 3dWoo書號: 51976 詢問書籍請說出此書號! 缺書 NT售價: 895 元 |
出版日:11/1/2019 | |
頁數:760 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121374715 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 章 Zynq - 7000 SoC設計導論 1
1.1 全可編程片上系統基礎知識 1 1.1.1 全可編程片上系統的演進 1 1.1.2 SoC與MCU和CPU的比較 3 1.1.3 全可編程SoC誕生的背景 4 1.1.4 可編程SoC系統技術特點 5 1.1.5 全可編程片上系統中的處理器類型 5 1.2 Arm架構及分類 6 1.2.1 M - Profile 7 1.2.2 R - Profile 9 1.2.3 A - Profile 10 1.3 Zynq - 7000 SoC功能和結構 11 1.3.1 Zynq - 7000 SoC產品分類及資源 12 1.3.2 Zynq - 7000 SoC的功能 12 1.3.3 Zynq - 7000 SoC處理系統PS的構成 14 1.3.4 Zynq - 7000 SoC可編程邏輯PL的構成 19 1.3.5 Zynq - 7000 SoC內的互聯結構 20 1.3.6 Zynq - 7000 SoC的供電引腳 22 1.3.7 Zynq - 7000 SoC內MIO到EMIO的連接 23 1.3.8 Zynq - 7000 SoC內為PL分配的信號 28 1.4 Zynq - 7000 SoC在嵌入式系統中的優勢 30 1.4.1 使用PL實現軟件算法 30 1.4.2 降低功耗 32 1.4.3 實時減負 33 1.4.4 可重配置計算 34 第 章 AMBA規范 35 2.1 AMBA規范及發展 35 2.1.1 AMBA 1 36 2.1.2 AMBA 2 36 2.1.3 AMBA 3 36 2.1.4 AMBA 4 37 2.1.5 AMBA 5 38 2.2 AMBA APB規范 40 2.2.1 AMBA APB寫傳輸 40 2.2.2 AMBA APB讀傳輸 42 2.2.3 AMBA APB錯誤響應 43 2.2.4 操作狀態 44 2.2.5 AMBA 3 APB信號 44 2.3 AMBA AHB規范 45 2.3.1 AMBA AHB結構 45 2.3.2 AMBA AHB操作 46 2.3.3 AMBA AHB傳輸類型 48 2.3.4 AMBA AHB猝發操作 50 2.3.5 AMBA AHB傳輸控制信號 53 2.3.6 AMBA AHB地址譯碼 54 2.3.7 AMBA AHB從設備傳輸響應 55 2.3.8 AMBA AHB數據總線 58 2.3.9 AMBA AHB傳輸仲裁 59 2.3.10 AMBA AHB分割傳輸 64 2.3.11 AMBA AHB復位 67 2.3.12 關于AHB數據總線的位寬 67 2.3.13 AMBA AHB接口設備 68 2.4 AMBA AXI4規范 69 2.4.1 AMBA AXI4概述 69 2.4.2 AMBA AXI4功能 70 2.4.3 AMBA AXI4互聯結構 78 2.4.4 AXI4 - Lite功能 79 2.4.5 AXI4 - Stream功能 80 第 章 Zynq - 7000系統公共資源及特性 83 3.1 時鐘子系統 83 3.1.1 時鐘子系統架構 83 3.1.2 CPU時鐘域 84 3.1.3 時鐘編程實例 86 3.1.4 時鐘子系統內的生成電路結構 87 3.2 復位子系統 91 3.2.1 復位子系統結構和層次 92 3.2.2 復位流程 93 3.2.3 復位的結果 94 第 章 Zynq調試和測試子系統 95 4.1 JTAG和DAP子系統 95 4.1.1 JTAG和DAP子系統功能 97 4.1.2 JTAG和DAP子系統I/O信號 99 4.1.3 編程模型 99 4.1.4 Arm DAP控制器 101 4.1.5 跟蹤端口接口單元(TPIU) 102 4.1.6 Xilinx TAP控制器 102 4.2 CoreSight系統結構及功能 103 4.2.1 CoreSight結構概述 103 4.2.2 CoreSight系統功能 104 第 章 Cortex - A9處理器及指令集 107 5.1 應用處理單元概述 107 5.1.1 基本功能 107 5.1.2 系統級視圖 108 5.2 Cortex - A9處理器結構 110 5.2.1 處理器模式 111 5.2.2 寄存器 113 5.2.3 流水線 118 5.2.4 分支預測 118 5.2.5 指令和數據對齊 119 5.2.6 跟蹤和調試 121 5.3 Cortex - A9處理器指令集 122 5.3.1 指令集基礎 122 5.3.2 數據處理操作 125 5.3.3 存儲器指令 130 5.3.4 分支 131 5.3.5 飽和算術 133 5.3.6 雜項指令 134 第 章 Cortex - A9片上存儲器系統結構和功能 138 6.1 L1高速緩存 138 6.1.1 高速緩存背景 138 6.1.2 高速緩存的優勢和問題 139 6.1.3 存儲器層次 140 6.1.4 高速緩存結構 140 6.1.5 緩存策略 145 6.1.6 寫和取緩沖區 147 6.1.7 緩存性能和命中速度 147 6.1.8 無效和清除緩存 147 6.1.9 一致性點和統一性點 149 6.1.10 Zynq - 7000中Cortex - A9 L1高速緩存的特性 151 6.2 存儲器順序 153 6.2.1 普通、設備和強順序存儲器模型 154 6.2.2 存儲器屬性 155 6.2.3 存儲器屏障 155 6.3 存儲器管理單元 159 6.3.1 MMU功能描述 160 6.3.2 虛擬存儲器 161 6.3.3 轉換表 162 6.3.4 頁表入口域的描述 165 6.3.5 TLB構成 167 6.3.6 存儲器訪問順序 169 6.4 偵聽控制單元 170 6.4.1 地址過濾 171 6.4.2 SCU主設備端口 171 6.5 L2高速緩存 171 6.5.1 互斥L2 - L1高速緩存配置 173 6.5.2 高速緩存替換策略 174 6.5.3 高速緩存鎖定 174 6.5.4 使能/禁止L2高速緩存控制器 176 6.5.5 RAM訪問延遲控制 176 6.5.6 保存緩沖區操作 176 6.5.7 在Cortex - A9和L2控制器之間的優化 177 6.5.8 預取操作 178 6.5.9 編程模型 179 6.6 片上存儲器 180 6.6.1 片上存儲器概述 180 6.6.2 片上存儲器功能 181 6.7 系統地址分配 186 6.7.1 地址映射 186 6.7.2 系統總線主設備 188 6.7.3 I/O外設 188 6.7.4 SMC存儲器 188 6.7.5 SLCR寄存器 188 6.7.6 雜項PS寄存器 189 6.7.7 CPU私有寄存器 189 第 章 Zynq - 7000 SoC的Vivado基本設計流程 190 7.1 創建新的工程 190 7.2 使用IP集成器創建處理器系統 192 7.3 生成頂層HDL并導出設計到SDK 197 7.4 創建應用測試程序 199 7.5 設計驗證 202 7.5.1 驗證前的硬件平臺準備 202 7.5.2 設計驗證的具體實現 203 7.6 SDK調試工具的使用 205 7.6.1 打開前面的設計工程 205 7.6.2 導入工程到SDK 205 7.6.3 建立新的存儲器測試工程 205 7.6.4 運行存儲器測試工程 206 7.6.5 調試存儲器測試工程 207 7.7 SDK性能分析工具 209 第 章 Arm GPIO的原理和控制實現 213 8.1 GPIO模塊原理 213 8.1.1 GPIO接口及功能 214 8.1.2 GPIO編程流程 217 8.1.3 I/O接口 218 8.1.4 部分寄存器說明 218 8.1.5 底層讀/寫函數說明 220 8.1.6 GPIO的API函數說明 220 8.2 Vivado環境下MIO讀/寫控制的實現 221 8.2.1 調用底層讀/寫函數編寫GPIO應用程序 221 8.2.2 調用API函數編寫控制GPIO應用程序 224 8.3 Vivado環境下EMIO讀/寫控制的實現 226 8.3.1 調用底層讀/寫函數編寫GPIO應用程序 227 8.3.2 調用API函數編寫控制GPIO應用程序 232 第 章 Cortex - A9異常與中斷原理及實現 236 9.1 異常原理 236 9.1.1 異常類型 237 9.1.2 異常處理 241 9.1.3 其他異常句柄 242 9.1.4 Linux異常程序流 243 9.2 中斷原理 244 9.2.1 外部中斷請求 244 9.2.2 Zynq - 7000 SoC內的中斷環境 247 9.2.3 中斷控制器的功能 248 9.3 Vivado環境下中斷系統的實現 252 9.3.1 Cortex - A9處理器中斷及異常初始化流程 252 9.3.2 Cortex - A9 GPIO控制器初始化流程 252 9.3.3 導出硬件設計到SDK 253 9.3.4 創建新的應用工程 253 9.3.5 運行應用工程 256 第 章 Cortex - A9定時器原理及實現 257 10.1 定時器系統架構 257 10.1.1 CPU私有定時器和看門狗定時器 257 10.1.2 全局定時器/計數器 258 10.1.3 系統級看門狗定時器 259 10.1.4 3重定時器/計數器 261 10.1.5 I/O信號 264 10.2 Vivado環境下定時器的控制實現 264 10.2.1 打開前面的設計工程 265 10.2.2 創建SDK軟件工程 265 10.2.3 運行軟件應用工程 267 第 章 Cortex - A9 DMA控制器原理及實現 268 11.1 DMA控制器架構 268 11.2 DMA控制器功能 271 11.2.1 考慮AXI交易的因素 272 11.2.2 DMA管理器 273 11.2.3 多通道數據FIFO(MFIFO) 274 11.2.4 存儲器—存儲器交易 274 11.2.5 PL外設AXI交易 274 11.2.6 PL外設請求接口 275 11.2.7 PL外設長度管理 276 11.2.8 DMAC長度管理 277 11.2.9 事件和中斷 278 11.2.10 異常終止 278 11.2.11 安全性 280 11.2.12 IP配置選項 282 11.3 DMA控制器編程指南 282 11.3.1 啟動控制器 282 11.3.2 執行DMA傳輸 282 11.3.3 中斷服務例程 282 11.3.4 寄存器描述 283 11.4 DMA引擎編程指南 284 11.4.1 寫微代碼編程用于AXI交易的CCRx 284 11.4.2 存儲器到存儲器傳輸 284 11.4.3 PL外設DMA傳輸長度管理 287 11.4.4 使用一個事件重新啟動DMA通道 289 11.4.5 中斷一個處理器 289 11.4.6 指令集參考 290 11.5 編程限制 291 11.6 系統功能之控制器復位配置 292 11.7 I/O接口 293 11.7.1 AXI主接口 293 11.7.2 外設請求接口 293 11.8 Vivado環境下DMA傳輸的實現 294 11.8.1 DMA控制器初始化流程 295 11.8.2 中斷控制器初始化流程 295 11.8.3 中斷服務句柄處理流程 296 11.8.4 導出硬件設計到SDK 296 11.8.5 創建新的應用工程 297 11.8.6 運行軟件應用工程 303 第 章 Cortex - A9安全性擴展 305 12.1 TrustZone硬件架構 305 12.1.1 多核系統的安全性擴展 307 12.1.2 普通世界和安全世界的交互 307 12.2 Zynq - 7000 APU內的TrustZone 308 12.2.1 CPU安全過渡 309 12.2.2 CP15寄存器訪問控制 310 12.2.3 MMU安全性 310 12.2.4 L1緩存安全性 311 12.2.5 安全異常控制 311 12.2.6 CPU調試TrustZone訪問控制 311 12.2.7 SCU寄存器訪問控制 312 12.2.8 L2緩存中的TrustZone支持 312 第 章 Cortex - A9 NEON原理及實現 313 13.1 SIMD 313 13.2 NEON架構 315 13.2.1 與VFP的共性 315 13.2.2 數據類型 316 13.2.3 NEON寄存器 316 13.2.4 NEON指令集 318 13.3 NEON C編譯器和匯編器 319 13.3.1 向量化 319 13.3.2 檢測NEON 319 13.4 NEON優化庫 320 13.5 SDK工具提供的優化選項 321 13.6 使用NEON內聯函數 324 13.6.1 NEON數據類型 325 13.6.2 NEON內聯函數 325 13.7 優化NEON匯編器代碼 327 13.8 提高存儲器訪問效率 328 13.9 自動向量化實現 329 13.9.1 導出硬件設計到SDK 329 13.9.2 創建新的應用工程 330 13.9.3 運行軟件應用工程 331 13.10 NEON匯編代碼實現 331 13.10.1 導出硬件設計到SDK 331 13.10.2 創建新的應用工程 332 13.10.3 運行軟件應用工程 333 第 章 Cortex - A9外設模塊結構及功能 334 14.1 DDR存儲器控制器 334 14.1.1 DDR存儲器控制器接口及功能 335 14.1.2 AXI存儲器接口 337 14.1.3 DDR核和交易調度器 338 14.1.4 DDRC仲裁 338 14.1.5 DDR存儲器控制器PHY 340 14.1.6 DDR初始化和標定 340 14.1.7 糾錯碼 341 14.2 靜態存儲器控制器 342 14.2.1 靜態存儲器控制器接口及功能 343 14.2.2 靜態存儲器控制器和存儲器的信號連接 344 14.3 四 - SPI Flash控制器 345 14.3.1 四 - SPI Flash控制器功能 347 14.3.2 四 - SPI Flash控制器反饋時鐘 349 14.3.3 四 - SPI Flash控制器接口 349 14.4 SD/SDIO外設控制器 351 14.4.1 SD/SDIO控制器功能 352 14.4.2 SD/SDIO控制器傳輸協議 353 14.4.3 SD/SDIO控制器端口信號連接 356 14.5 USB主機、設備和OTG控制器 356 14.5.1 USB控制器接口及功能 358 14.5.2 USB主機操作模式 361 14.5.3 USB設備操作模式 363 14.5.4 USB OTG操作模式 365 14.6 吉比特以太網控制器 365 14.6.1 吉比特以太網控制器接口及功能 367 14.6.2 吉比特以太網控制器接口編程向導 368 14.6.3 吉比特以太網控制器接口信號連接 372 14.7 SPI控制器 373 14.7.1 SPI控制器的接口及功能 374 14.7.2 SPI控制器時鐘設置規則 376 14.8 CAN控制器 376 14.8.1 CAN控制器接口及功能 377 14.8.2 CAN控制器操作模式 379 14.8.3 CAN控制器消息保存 380 14.8.4 CAN控制器接收過濾器 381 14.8.5 CAN控制器編程模型 382 14.9 UART控制器 383 14.10 I2C控制器 387 14.10.1 I2C速度控制邏輯 388 14.10.2 I2C控制器的功能和工作模式 388 14.11 XADC轉換器接口 390 14.11.1 XADC轉換器接口及功能 391 14.11.2 XADC命令格式 392 14.11.3 供電傳感器報警 392 14.12 PCI - E接口 393 第 章 Zynq - 7000內的可編程邏輯資源 395 15.1 可編程邏輯資源概述 395 15.2 可編程邏輯資源功能 396 15.2.1 CLB、Slice和LUT 396 15.2.2 時鐘管理 396 15.2.3 塊RAM 398 15.2.4 數字信號處理 - DSP Slice 398 15.2.5 輸入/輸出 399 15.2.6 低功耗串行收發器 400 15.2.7 PCI - E模塊 401 15.2.8 XADC(模擬 - 數字轉換器) 402 15.2.9 配置 402 第 章 Zynq - 7000內的互聯結構 404 16.1 系統互聯架構 404 16.1.1 互聯模塊及功能 404 16.1.2 數據路徑 406 16.1.3 時鐘域 407 16.1.4 連接性 408 16.1.5 AXI ID 409 16.1.6 寄存器概述 409 16.2 服務質量 410 16.2.1 基本仲裁 410 16.2.2 高級QoS 410 16.2.3 DDR端口仲裁 411 16.3 AXI_HP接口 411 16.3.1 AXI_HP接口結構及特點 411 16.3.2 接口數據寬度 415 16.3.3 交易類型 416 16.3.4 命令交替和重新排序 416 16.3.5 性能優化總結 416 16.4 AXI_ACP接口 417 16.5 AXI_GP接口 418 16.6 AXI信號總結 418 16.7 PL接口選擇 422 16.7.1 使用通用主設備端口的Cortex - A9 423 16.7.2 通過通用主設備的PS DMA控制器(DMAC) 423 16.7.3 通過高性能接口的PL DMA 426 16.7.4 通過AXI ACP的PL DMA 426 16.7.5 通過通用AXI從(GP)的PL DMA 426 第 章 Zynq - 7000 SoC內定制簡單AXI - Lite IP 429 17.1 設計原理 429 17.2 定制AXI - Lite IP 429 17.2.1 創建定制IP模板 429 17.2.2 修改定制IP設計模板 432 17.2.3 使用IP封裝器封裝外設 436 17.3 打開并添加IP到設計中 440 17.3.1 打開工程和修改設置 440 17.3.2 添加定制IP到設計 442 17.3.3 添加XDC約束文件 445 17.4 導出硬件到SDK 446 17.5 建立和驗證軟件應用工程 446 17.5.1 建立應用工程 447 17.5.2 下載硬件比特流文件到FPGA 449 17.5.3 運行應用工程 450 第 章 Zynq - 7000 SoC內定制復雜AXI Lite IP 451 18.1 設計原理 451 18.1.1 VGA IP核的設計原理 451 18.1.2 移位寄存器IP核的設計原理 453 18.2 定制VGA IP核 454 18.2.1 創建定制VGA IP模板 454 18.2.2 修改定制VGA IP模板 455 18.2.3 使用IP封裝器封裝VGA IP 459 18.3 定制移位寄存器IP核 460 18.3.1 創建定制SHIFTER IP模板 460 18.3.2 修改定制SHIFTER IP模板 462 18.3.3 使用IP封裝器封裝SHIFTER IP 463 18.4 打開并添加IP到設計中 464 18.4.1 打開工程和修改設置 464 18.4.2 添加定制IP到設計 466 18.4.3 添加XDC約束文件 470 18.5 導出硬件到SDK 471 18.6 建立和驗證軟件工程 472 18.6.1 建立應用工程 472 18.6.2 下載硬件比特流文件到FPGA 476 18.6.3 運行應用工程 477 第 章 Zynq - 7000 AXI HP數據傳輸原理及實現 478 19.1 設計原理 478 19.2 構建硬件系統 479 19.2.1 打開工程和修改設置 479 19.2.2 添加并連接AXI DMA IP核 480 19.2.3 添加并連接FIFO IP核 482 19.2.4 連接DMA中斷到PS 485 19.2.5 驗證和建立設計 487 19.3 建立和驗證軟件工程 487 19.3.1 導出硬件到SDK 488 19.3.2 創建軟件應用工程 488 19.3.3 下載硬件比特流文件到FPGA 497 19.3.4 運行應用工程 497 第 章 Zynq - 7000 ACP數據傳輸原理及實現 499 20.1 設計原理 499 20.2 打開前面的設計工程 499 20.3 配置PS端口 499 20.4 添加并連接IP到設計 500 20.4.1 添加IP到設計 501 20.4.2 系統連接 501 20.4.3 分配地址空間 502 20.5 使用SDK設計和實現應用工程 504 20.5.1 創建新的軟件應用工程 504 20.5.2 導入應用程序 504 20.5.3 下載硬件比特流文件到FPGA 507 20.5.4 運行應用工程 508 第 章 Zynq - 7000軟件和硬件協同調試原理及實現 509 21.1 設計目標 509 21.2 ILA核原理 510 21.2.1 ILA觸發器輸入邏輯 510 21.2.2 多觸發器端口的使用 510 21.2.3 使用觸發器和存儲限制條件 510 21.2.4 ILA觸發器輸出邏輯 512 21.2.5 ILA數據捕獲邏輯 512 21.2.6 ILA控制與狀態邏輯 513 21.3 VIO核原理 513 21.4 構建協同調試硬件系統 514 21.4.1 打開前面的設計工程 514 21.4.2 添加定制IP 514 21.4.3 添加ILA和VIO核 515 21.4.4 標記和分配調試網絡 516 21.5 生成軟件工程 518 21.6 S/H協同調試 520 第 章 Zynq - 7000 SoC啟動和配置原理及實現 527 22.1 Zynq - 7000 SoC啟動過程 527 22.2 Zynq - 7000 SoC啟動要求 527 22.2.1 供電要求 528 22.2.2 時鐘要求 528 22.2.3 復位要求 528 22.2.4 模式引腳 528 22.3 Zynq - 7000 SoC內的BootROM 530 22.3.1 BootROM特性 530 22.3.2 BootROM頭部 531 22.3.3 啟動設備 535 22.3.4 BootROM多啟動和啟動分區查找 538 22.3.5 調試狀態 539 22.3.6 BootROM后狀態 540 22.4 Zynq - 7000 SoC器件配置接口 543 22.4.1 描述功能 544 22.4.2 器件配置流程 545 22.4.3 配置PL 549 22.4.4 寄存器概述 550 22.5 生成SD卡鏡像文件并啟動 551 22.5.1 SD卡與XC7Z020接口設計 551 22.5.2 打開前面的設計工程 552 22.5.3 創建第一級啟動引導 553 22.5.4 創建SD卡啟動鏡像 553 22.5.5 從SD卡啟動引導系統 555 22.6 生成QSPI Flash鏡像并啟動 556 22.6.1 QSPI Flash接口 556 22.6.2 創建QSPI Flash鏡像 557 22.6.3 從QSPI Flash啟動引導系統 558 22.7 Cortex - A9雙核系統的配置和運行 558 22.7.1 構建雙核硬件系統工程 558 22.7.2 添加并互聯IP核 559 22.7.3 導出硬件設計到SDK中 561 22.7.4 設置板級包支持路徑 561 22.7.5 建立FSBL應用工程 562 22.7.6 建立CPU0應用工程 562 22.7.7 建立CPU1板級支持包 566 22.7.8 建立CPU1應用工程 566 22.7.9 創建SD卡鏡像文件 570 22.7.10 雙核系統運行和測試 571 22.7.11 雙核系統的調試 571 第 章 Zynq - 7000 SoC內XADC原理及實現 574 23.1 ADC轉換器接口結構 574 23.2 ADC轉換器功能 575 23.2.1 XADC的命令格式 576 23.2.3 供電傳感器報警 576 23.3 XADC IP核結構及信號 577 23.4 開發平臺上的XADC接口 578 23.5 在Zynq - 7000 SoC內構建數模混合系統 579 23.5.1 打開前面的設計工程 579 23.5.2 配置PS端口 579 23.5.3 添加并連接XADC IP到設計 580 23.5.4 查看地址空間 582 23.5.5 添加用戶約束文件 583 23.5.6 設計處理 583 23.6 使用SDK設計和實現應用工程 584 23.6.1 生成新的應用工程 584 23.6.2 導入應用程序 585 23.6.3 下載硬件比特流文件到FPGA 591 23.6.4 運行應用工程 591 第 章 Linux開發環境的構建 592 24.1 構建虛擬機環境 592 24.2 安裝和啟動Ubuntu 14.04客戶機操作系統 595 24.2.1 新添加兩個磁盤 595 24.2.2 設置CD/DVD(SATA) 596 24.2.3 安裝Ubuntu 14.04 597 24.2.4 更改Ubuntu 14.04操作系統啟動設備 600 24.2.5 啟動Ubuntu 14.04操作系統 600 24.2.6 添加搜索鏈接資源 600 24.3 安裝FTP工具 601 24.3.1 Windows操作系統下LeapFTP安裝 601 24.3.2 Ubuntu操作系統環境下FTP安裝 602 24.4 安裝和啟動SSH和GIT組件 603 24.4.1 安裝和啟動SSH組件 603 24.4.2 安裝和啟動GIT組件 604 24.5 安裝交叉編譯器環境 604 24.5.1 安裝32位支持工具包 604 24.5.2 安裝和設置SDK 2015.4工具 605 24.6 安裝和配置Qt集成開發工具 606 24.6.1 Qt集成開發工具功能 606 24.6.2 構建PC平臺Qt環境 607 24.6.3 構建Arm平臺Qt環境 613 第 章 構建Zynq - 7000 SoC內Ubuntu硬件運行環境 622 25.1 建立新的設計工程 622 25.2 添加IP核路徑 623 25.3 構建硬件系統 623 25.3.1 添加和配置ZYNQ7 IP 624 25.3.2 添加和配置VDMA IP核 625 25.3.3 添加和配置AXI Display Controller IP核 626 25.3.4 添加和配置HDMI Transmitter IP核 627 25.3.5 添加和配置VGA IP核 627 25.3.6 連接用戶自定義IP核 627 25.3.7 添加和配置Processor System Reset IP核 630 25.3.8 連接系統剩余部分 630 25.4 添加設計約束文件 632 25.5 導出硬件文件 633 第 章 構建Zynq - 7000 SoC內Ubuntu軟件運行環境 635 26.1 u - boot原理及實現 635 26.1.1 下載u - boot源碼 635 26.1.2 u - boot文件結構 636 26.1.3 u - boot工作模式 637 26.1.4 u - boot啟動過程 637 26.1.5 編譯u - boot 650 26.1.6 鏈接腳本文件結構 652 26.2 內核結構及編譯 654 26.2.1 內核結構 654 26.2.2 下載Linux內核源碼 655 26.2.3 內核版本 655 26.2.4 內核系統配置 655 26.2.5 Bootloader 啟動過程 658 26.2.6 Linux內核啟動過程 660 26.2.7 編譯內核 662 26.3 設備樹原理及實現 662 26.3.1 設備樹概述 662 26.3.2 設備樹數據格式 663 26.3.3 設備樹的編譯 664 26.4 文件系統原理及下載 664 26.5 生成Ubuntu啟動鏡像 665 26.5.1 生成FSBL文件 666 26.5.2 生成BOOT.bin啟動文件 666 26.5.3 制作SD卡 668 26.5.4 復制BOOT. bin文件 670 26.5.5 復制編譯后的內核文件 670 26.5.6 復制編譯后的設備樹文件 671 26.5.7 復制文件系統 671 26.6 啟動Ubuntu操作系統 672 第 章 Linux環境下簡單字符設備驅動程序的開發 674 27.1 驅動程序的必要性 674 27.2 Linux操作系統下的設備文件類型 675 27.3 Linux驅動的開發流程 676 27.4 驅動程序的結構框架 676 27.4.1 加載和卸載函數模塊 676 27.4.2 字符設備中重要的數據結構和函數 677 27.5 編寫makefile文件 683 27.6 編譯驅動程序 684 27.7 編寫測試程序 685 27.8 運行測試程序 686 第 章 Linux環境下包含中斷機制驅動程序的開發 688 28.1 設計原理 688 28.2 編寫包含中斷處理的驅動代碼 688 28.2.1 驅動程序頭文件 688 28.2.2 驅動的加載和卸載函數 689 28.2.3 file_operations初始化 691 28.3 編寫makefile文件 691 28.4 編譯驅動程序 692 28.5 測試驅動程序 693 第 章 Linux環境下圖像處理系統的構建 694 29.1 系統整體架構和功能 694 29.2 OV5640攝像頭性能 695 29.2.1 攝像頭捕獲模塊的硬件 696 29.2.2 SCCB接口規范 696 29.2.3 寫攝像頭模組寄存器操作 697 29.2.4 讀攝像頭模組寄存器操作 698 29.2.5 攝像頭初始化流程 700 29.3 Vivado HLS實現拉普拉斯算子濾波算法的設計 701 29.3.1 Vivado HLS工具的性能和優勢 701 29.3.2 拉普拉斯算法與HDL之間的映射 703 29.4 圖像處理系統的整體構建 706 29.5 圖像處理系統軟件的設計 708 29.5.1 Ubuntu桌面系統的構建 708 29.5.2 Qt圖像處理程序的開發 708 29.6 嵌入式圖像處理系統測試 710 第 章 Zynq-7000 SoC上構建和實現Python應用 712 30.1 設計所需的硬件環境 712 30.2 構建PetaLinux開發環境 712 30.2.1 PetaLinx開發環境概述 712 30.2.2 安裝32位庫 714 30.2.3 安裝并測試tftp服務器 714 30.2.4 下載并安裝PetaLinux 715 30.3 構建嵌入式系統硬件 717 30.3.1 下載并安裝Vivado 2018.2集成開發環境 717 30.3.2 添加板級支持包文件 717 30.3.3 建立新的Vivado工程 717 30.3.4 構建硬件系統 718 30.4 構建嵌入式Python開發環境 721 30.5 構建PC端Python開發環境 723 30.6 服務器和客戶端Python的開發 724 30.6.1 服務器端Python的開發 725 30.6.2 客戶端Python的開發 726 30.7 設計驗證 728 30.7.1 啟動服務器程序 728 30.7.2 啟動客戶端程序 729 本書是作者在已經出版的 《Xilinx Zynq-7000嵌入式系統設計與實現:基于ARM Cortex-A9雙核處理器和Vivado的設計方法》 一書的基礎上進行修訂而成的。 本書新修訂后內容增加到30章。修訂后,本書的一大特色就是加入了Arm架構及分類、使用PetaLinux工具在Zynq-7000 SoC上搭建Ubuntu操作系統,以及在Ubuntu操作系統環境下搭建Python語言開發環境,并使用Python語言開發應用程序的內容。本書修訂后。進一步降低了讀者學習Arm Cortex-A9嵌入式系統的門檻,并引入了在Zynq-7000 SoC上搭建Ubuntu操作系統的新方法。此外,將流行的Python語言引入到Arm嵌入式系統中,進一步拓寬了在Arm嵌入式系統上開發應用程序的方法。
本書是在作者已經出版的《Xilinx Zynq-7000嵌入式系統設計與實現:基于ARM Cortex-A9雙核處理器和Vivado的設計方法》一書基礎上修訂而成。主要修訂內容包括:
(1)刪除原書第一章Zynq-7000 SoC的Vivado設計流程一節的內容,增加了Arm架構與分類一節的內容,系統介紹了Arm架構與不同處理器IP之間的關系,使得讀者能更加系統了解并掌握Arm架構與Cortex-M、Cortex-R和Cotex-A框架下不同處理器IP之間的對應關系。 (2)本書增加了第30章,該章主要介紹了PetaLinx 2018.2工具,以及通過該工具在Xilinx SoC器件上構建Ubuntu操作系統環境的方法。需要指出,與本書前面使用傳統的方法搭建Ubuntu操作系統環境相比,通過Xilinx公司自己的PetaLinx工具,使得在Xilinx Zynq-7000 SoC以及在UltraScale MPSoC上搭建Ubuntu操作系統環境更加便捷高效,顯著降低了構建操作系統運行環境的難度,更加有利于初學者的入門學習。 (3)作為本書的亮點之一,在使用PetaLinx工具構建嵌入式操作系統運行環境的基礎上,構建了嵌入式Python語言開發環境,并在所構建的環境下使用Python語言開發了應用程序。為了比較Python語言在arm Cortex-A9嵌入式處理器上的運行性能,同時在PC/筆記本電腦上也構建了Python語言開發環境,并使用Python語言開發了應用程序。因此,實現了Zynq-7000 SoC作為服務器,以及PC/筆記本電腦作為客戶端的網絡交互和數據傳輸功能。 (4)修改并更正了書中的一些錯誤。 考慮到Vivdo集成開發環境的主要功能和開發界面沒有明顯的不同,因此,書中所有案例仍然保留原來的開發版本。但是,增加的一章內容使用了較新的PetaLinux 2018.2環境。 總體來說,通過本書這一次的修訂,使得介紹嵌入式系統設計的內容更加條理化,讀者更加容易系統學習基于Arm Cortex-A9處理器的嵌入式系統硬件和軟件設計方法,進一步降低了學習Arm嵌入式系統和Xilinx Zynq-7000 SoC的難度。 由于作者水平有限,書中難免有不足之處,懇請讀者批評指正,以幫助讀者今后進一步提高圖書的編寫質量。同時,也要感謝電子工業出版社的張迪編輯為本書的出版所做出的辛勤工作,也要感謝作者曾經帶過并且已經畢業的研究生張艷輝,協助作者修訂了本書,使得作者可以將更加精彩的內容奉獻給國內廣大的讀者。 作者 2019.09于北京 |