本書由淺入深,由基礎知識到實戰案例向讀者系統闡述了如何利用Zynq平臺進行嵌入式系統以及軟硬件協同設計的開發。本書分為基礎篇與進階篇兩部分,基礎篇中介紹了Zynq器件、ZedBoard,并配有簡單入門實驗,同時針對軟件開發人員增設了FPGA硬件加速等內容。在進階篇中介紹了利用Zynq進行軟硬件協同設計,同時對處理器與可編程邏輯接口等技術進行了詳細剖析。本書提供了20個詳細的設計案例,涵蓋了硬件板卡、FPGA邏輯、Linux驅動、Linux操作系統、上層應用、軟硬件協同設計等Zynq開發中可能遇到的各個方面的知識,并在將前述獨立案例整合為4個系統案例。本書重點突出實戰,以案例為指導,配合介紹相關參考文檔,協助讀者盡快掌握在Zynq上進行各項設計的方法。
本書可作為Zynq初學者、軟硬件協同設計開發人員的參考用書,亦可作為大專院校嵌入式系統設計、片上系統設計、可編程邏輯器件等相關專業的教師和學生的參考用書。
推薦購買:《嵌入式系統軟硬件協同設計實戰指南:基于Xilinx ZYNQ(第2版) 》已出版。
Foreword
前言
及時部分 基礎篇
第1章 初試ZedBoard
1.1 GPIO LED動手玩
1.1.1 拷貝SD卡
1.1.2 跳線與外設連接
1.1.3 演示操作
1.2 Linaro Ubuntu動手玩
1.2.1 SD卡分區
1.2.2 文件拷貝(FATEXT)
1.2.3 外設連接
1.2.4 可演示的效果
第2章 Zynq平臺介紹
2.1 7系列FPGA簡介
2.2 Zynq-7000 AP SoC體系簡介
第3章 ZedBoard開發環境
3.1 ZedBoard的板載外設
3.1.1 LED
3.1.2 按鍵
3.1.3 開關
3.1.4 OLED
3.1.5 USB接口
3.1.6 音頻接口
3.1.7 VGA接口
3.1.8 HDMI接口
3.1.9 101001000兆網口
3.2 ZedBoard的擴展外設
3.2.1 外擴PMod插座
3.2.2 外擴FMC插槽
3.2.3 外擴AMS插座
第4章 開發工具鏈
4.1 可編程邏輯開發工具鏈
4.1.1 PlanAhead
4.1.2 Xilinx Platform Studio
4.2 軟件開發工具鏈
4.2.1 Xilinx Software Development Kit
4.2.2 交叉編譯工具鏈
4.3 軟硬件調試工具
4.3.1 ChipScope Pro
4.3.2 GDB與GDBserver
第5章 Zynq體系結構
5.1 應用處理器單元(APU)
5.1.1 ARM Cortex A9處理器
5.1.2 偵聽控制單元(SCU)
5.1.3 L2高速緩存
5.1.4 APU接口
5.2 通用外設
5.2.1 通用IO(GPIO)
5.2.2 SPI接口
5.2.3 UART接口
5.2.4 計時器
5.2.5 USB控制器
5.2.6 DDR控制器
5.3 數字邏輯設計
5.3.1 可編程邏輯"外設"(PL)
5.3.2 XADC
5.3.3 PCIe
5.4 MIOEMIO
第6章 系統級信號
6.1 電源管理
6.2 Clock信號
6.2.1 CPU時鐘域
6.2.2 DDR時鐘域
6.2.3 基本的時鐘分支結構
6.2.4 IO外設(IOP)時鐘
6.2.5 PL時鐘
6.2.6 其他時鐘
6.3 復位系統
6.4 JTAG
6.5 中斷處理
第7章 Zynq啟動與配置
7.1 Zynq啟動過程簡介
7.2 外部啟動條件
7.2.1 電源要求
7.2.2 時鐘要求
7.2.3 復位要求
7.2.4 啟動引腳設置
7.3 BootROM
7.3.1 BootROM的作用
7.3.2 BootROM的特點
7.3.3 BootROM后的狀態
7.4 FSBL
7.5 SSBL
7.6 Linux啟動過程
7.7 Secure Boot
第8章 面向軟件工程師的邏輯設計
8.1 FPGA硬件加速原理
8.1.1 以空間換時間
8.1.2 以存儲器換門電路
8.1.3 以IP集成換生產力
8.2 部分動態可重配置于Zynq
第9章 ZedBoard入門
9.1 UART和GPIO控制
9.1.1 UART和GPIO接口
9.1.2 硬件設計過程
9.1.3 軟件設計過程
9.2 硬件軟件調試方法
9.2.1 ChipScope IP Core
9.2.2 SDK Gdb使用
9.3 搭建你的單板計算機(Single Board Computer)
9.3.1 搭建系統環境
9.3.2 準備工作
第二部分 進階篇
第10章 基于虛擬平臺的Zynq開發
10.1 QEMU介紹
10.2 編譯QEMU源碼
10.2.1 下載QEMU源碼
10.2.2 配置QEMU
10.2.3 QEMU所依賴的庫文件
10.2.4 編譯QEMU
10.3 啟動QEMU
10.4 QEMU中的嵌入式Linux
10.5 商業版虛擬平臺
第11章 PL和PS的接口技術詳解
11.1 PL和PS的接口
11.1.1 AXI接口簡介
11.1.2 AXI Interconnect
11.2 Zynq的內部連接
11.2.1 AXI_HP
11.2.2 AXI_GP
11.2.3 AXI_ACP
11.3 PL和存儲器系統性能概述
11.3.1 接口理論帶寬
11.3.2 DDR控制器的吞吐率及其效率
11.3.3 內部互連吞吐量瓶頸
11.3.4 如何選擇PL的接口
第12章 基于Zynq的軟硬件協同設計
12.1 多核處理器架構簡介
12.1.1 什么是多核處理器
12.1.2 多核處理器發展的動機和優勢
12.1.3 同構、異構多核架構的優點和挑戰
12.2 軟硬件協同設計方法論
12.2.1 什么是軟硬件協同設計
12.2.2 軟硬件協同設計發展的動機和優勢
12.2.3 軟硬件協同設計的基本流程
12.2.4 基于Xilinx工具的軟硬件協同設計簡介
12.3 高層次綜合
12.3.1 高層次綜合綜述
12.3.2 高層次綜合發展的動機與優勢
12.3.3 Xilinx AutoESL工具簡介
12.4 基于Xilinx Zynq的軟硬件協同設計實例
12.4.1 功能簡介
12.4.2 設計流程簡介
12.4.3 實驗結果與驗證
第13章 Zynq開發實戰
13.1 用戶IP設計
13.1.1 用戶IPcore介紹
13.1.2 用戶IPcore設計
13.2 嵌入式Linux設備驅動開發
13.2.1 設備驅動開發介紹
13.2.2 驅動程序的加載與卸載
13.2.3 sys文件系統簡介
13.2.4 PWM模塊驅動程序
13.2.5 PWM驅動程序編譯與測試
13.3 構建嵌入式Linux系統
13.3.1 搭建系統環境
13.3.2 編譯u-boot
13.3.3 編譯內核與設備樹
13.3.4 制作根文件系統
13.3.5 啟動嵌入式Linux
13.4 HDMI設計
13.4.1 HDMI傳輸原理
13.4.2 ADV7511芯片的相關控制信號
13.4.3 設計過程
13.5 OpenCV移植
13.5.1 開發環境準備
13.5.2 配置cmake
13.5.3 OpenCV編譯與安裝
13.5.4 OpenCV移植與ZedBoard測試
13.6 基于OpenCV的樹葉識別系統
13.6.1 項目總覽
13.6.2 圖像采集
13.6.3 預處理
13.6.4 特征提取
13.6.5 分類決策
13.6.6 總結
13.7 基于OpenCV的人臉識別系統
13.7.1 系統綜述
13.7.2 基于Haar特征和Adaboost算法的人臉檢測
13.7.3 系統設計與實現
13.7.4 總結
13.8 嵌入式Web服務器的移植與搭建
13.8.1 嵌入式Web服務器介紹
13.8.2 Boa服務器移植與配置
13.8.3 Boa服務器部署與測試
13.9 嵌入式網絡攝像機的移植與搭建
13.9.1 嵌入式網絡攝像機
13.9.2 mjpg-streamer的移植與架設
13.10 FreeRTOS實時操作系統的應用
13.10.1 FreeRTOS介紹
13.10.2 FreeRTOS與ucOS-Ⅱ的比較
13.10.3 FreeRTOS在Zynq上的應用實例與分析
13.10.4 基于FreeRTOS的Lwip
13.11 XADC的使用
13.11.1 建立硬件工程
13.11.2 軟件工程設計
13.11.3 程序分析
13.12 基于Zynq的部分可重配置
13.12.1 可重配置系統介紹
13.12.2 可重配置的開發流程
13.12.3 小結
13.13 在Zynq上搭建Android簡介
第14章 系統級設計案例
14.1 電機控制系統
14.1.1 雙閉環控制器理論
14.1.2 雙閉環系統
14.1.3 雙閉環控制IP核說明
14.1.4 硬件實現過程
14.1.5 軟件實現過程
14.1.6 硬件平臺測試
14.2 智能家庭健康平臺
14.2.1 智能家庭健康平臺簡介
14.2.2 EKG AFE模塊硬件設計
14.2.3 Night EKG Controller IP設計
14.2.4 建立可運行Linux的完整系統
14.2.5 Night EKG Controller的Linux驅動設計
14.2.6 基于Qt的圖形用戶界面設計
14.2.7 在ZedBoard上運行Qt程序
14.2.8 實現軟件開機自動運行
14.3 高性能視頻處理系統設計
14.3.1 系統架構
14.3.2 硬件架構設計
14.3.3 軟件架構設計
14.3.4 利用Vivado HLS實現Sobel濾波硬件
14.3.5 使系統在ZedBoard上運行
14.4 智能小車系統開發
14.4.1 智能小車系統結構
14.4.2 運動控制設計
14.4.3 Linux系統應用程序設計
14.4.4 智能小車平臺的后續拓展
第15章 如何獲取資料和幫助
15.1 如何獲取Xilinx的技術文檔
15.1.1 DocNav介紹
15.1.2 DocNav使用案例
15.2 如何找到Zynq開發資料
15.2.1 如何獲取本書的近期例程
15.2.2 如何獲取Zynq開發資料
15.2.3 如何獲取ZedBoard文檔與例程
15.3 Xilinx網站資源導讀
15.3.1 序
15.3.2 Xilinx軟件介紹
15.3.3 軟件版本和軟件更新
15.3.4 軟件教程
15.3.5 硬件資料
15.3.6 參考資源
15.3.7 問題解決
附錄A Xilinx開發套件版本14.1到14.3的主要升級變化
參考資料
第1章 初試ZedBoard
第1章
初試ZedBoard
歡迎大家來到Zynq的世界。對于這個業界首款ARM Cortex A9雙核與FPGA緊密融合的全可編程片上系統(All Programmable SoC),大家一定期待已久了吧。那么這款具有顛覆性構架的芯片到底能給我們帶來怎樣的驚喜呢?本章將通過兩個簡單的例子,讓大家對Zynq的能力有一個大致的認識。還等什么,拿起你的ZedBoard跟我來吧。
1.1 GPIO LED動手玩
通常實驗的及時個例子是從如何點亮LED開始,ZedBoard也是這樣,但是如果你細心觀察,將會發現特殊之處哦。在這個實驗中,你需要準備SD卡讀卡器,USB-microUSB線。
1.1.1 拷貝SD卡
將ZedBoard中的SD卡拔出,插入PC后格式化。在隨書附贈的光盤的第1章中找到BOOT.BIN文件,將其拷貝到SD卡中。卸載SD卡,將其插入到ZedBoard上SD卡插槽中。注意:千萬不要重命名BOOT.BIN文件,后面的章節會解釋具體原因。
1.1.2 跳線與外設連接
拿起你的ZedBoard,在板卡的右上方你將找到五個跳線帽。它們用于設置ZedBoard的啟動模式,在這里我們將五個跳線按圖1-1所示進行設置。
前言
平臺及寫作背景
作為全球的可編程邏輯平臺的供應商,Xilinx已將可編程邏輯技術帶領到了All Programmable(全可編程)的時代,其產品不僅有的28nm的7系列(分為Artix7,Kintex7,Virtex7)FPGA芯片,更有通過SSI(堆疊硅片互聯)技術實現的容量FPGA Virtex7-2000T,同時在FPGA芯片內集成了高速AD以及較高可達28.05Gb/s的高速串行口等可編程邏輯外的模塊。對于應用者而言,除了以上工藝的創新外,更具有劃時代意義的是Xilinx推出的Zynq-7000 AP SoC芯片,其不僅解決了芯片工藝實現上的難點,更解決了片內高性能處理器與高性能可編程邏輯數據交互協議的難點。
Zynq-7000是首款將高性能ARM Cortex A9硬核與可編程邏輯緊密集成到一起的器件。在Zynq平臺中,我們首先可以把可編程邏輯看成是處理器外設中一個具有可重配置特點的"外設",比如當串口或以太網接口不夠時、需要視頻接口時,都可以用可編程邏輯擴展;其次我們也可將其看成一個與處理器對等的主設備,其可主動完成與外部芯片的數據交互,例如主動進行視頻、網絡數據預處理。通過這樣的結合,既發揮了處理器在處理復雜控制算法、運行操作系統等方面的優勢,又利用FPGA在并行算法加速、可動態重配置的特點,實現了系統加速,增加了靈活性;同時基于片內結合的方案,減少了板子面積,降低了功耗,也加快了硬件開發速度。結合Zynq推出,Xilinx不僅在先期將所有IP核接口切換到基于ARM AMBA4.0(AXI4)的標準,實現了邏輯IP與Zynq無縫遷移,同時還推出了C2HDL的高層綜合工具AutoESL(目前已集成到的開發套件Vivado中),這加快了已有算法的硬件化過程,同時也使得軟件工程師可以在Zynq上獨立完成軟硬件協同設計。
針對這些新的技術和概念,讀者不妨帶著這樣一些疑問閱讀本書:現在有什么開發板可以直接用?ARM+FPGA這樣的結構與板載ARM處理器與FPGA芯片的結合到底有哪些區別?ARM與FPGA在一個芯片內到底是如何緊密配合的?互相之間數據交互的接口和方式是怎樣的?上電之后ARM和FPGA是如何配置的?利用AutoESL工具到底如何跟Zynq結合?Linux操作系統與FPGA又是如何結合的?這里的驅動如何寫?在本書中,將陸續對這些問題進行解答。
從Zynq平臺提出伊始,全球各地的客戶對這一平臺都產生了濃厚的興趣,Xilinx也于2011年年末正式了Zynq的芯片,在2012年年初就已經有了及時塊Zynq開發板ZC702。到了2012年6月份,專為社區用戶以及科研、教學用戶定制的低價版本ZedBoard板也正式面世。但是對于一個全新的平臺來說,可參考的資源相對缺乏。我們從2012年7月份開始在ZedBoard板上進行設計時就已經明顯感受到項目進度因缺少參考資源而受到的影響。而到了美信的DIY大賽時,更聽到國內用戶對參考資料的迫切需求,尤其是相應的中文資料。而2013年1月份采用ZedBoard板作為主要平臺的開源硬件與嵌入式大賽——OpenHW12也即將展開。
在這樣的背景下,賽靈思大學計劃部門決定以最快的速度對我們在這幾個月中開發的、參與的、學習的案例進行整理,編寫出一本由淺入深、以案例為主的實戰類書籍,希望通過這本書能幫助大家盡快了解、熟悉并掌握Zynq的開發。