本篇博客建立一套ZYNQ系統開發的一般方法和流程,並對ZYNQ的硬件和軟件的設計流程進行概述
設計工具:
- vivado IDE:創建SoC設計中的硬件系統部分,同時和設計套件中的其他工具有交互,包含集成和打包IP的工具
- SDK:基於Eclipse平台開發的軟件設計工具,使用c和c++語言且支持ARM和NEON擴展的GCC庫
- vivado simulator:提供硬件描述語言的仿真環境
- vivado logic analyser:提供系統內驗證的工具,例如一些包含在硬件設計里的特殊的核心,可以探測芯片行為並將捕捉的數據傳回主機,然后在邏輯分析器上顯示
- vivado serial I/O analyser:針對特定高速通信接口的仿真工具
- vivado high-level synthesis:從c語言描述來綜合硬件的工具
- system generator for DSP:用於DSP設計的創建和仿真
ZYNQ設計流程概述:
- 系統架構的設計通常采用自上而下的方法,即先定義頂層的接口和參數,再確定底層的子系統或功能
- 軟件常常用來完成一些一般性的順序執行的任務,比如操作系統、用戶應用程序和圖形界面,而偏向於數據流計算或者具有並行限制的軟件算法適合在PL端實現,因此這也類似於"協處理器"模型,可以把處理器從那些重在計算且具有並行性的任務中解放出來改為硬件處理,從而從整體上提升性能
- ZYNQ的一個特別的優勢就是處理器和可編程邏輯之間的強耦合,在PS和PL之間以低延時、高性能的AXI連接,在通信開銷上有大量減少
- 通常以vivado IDE作為設計起點,在頂層設計的創建過程中起到"駕駛艙"的作用,套件內工具和其他部分(特別是system generator和vivado HLS)的集成支持多種功能不同的子系統,當硬件設計完成后,就會被導入到SDK進行軟件開發,還可以在SDK和vivado IDE之間進行設計的迭代
硬件開發與測試
硬件系統開發包括在PL上設計和實現的外部模塊和其他邏輯單元,在這些模塊和PS之間創建合適的連接,以及恰當的配置PS,比如一個硬件系統可能包括CAN總線接口、一個調試用的UART接口以及GPIO,這些協處理器一起支持軟件在ARM上的運行:
硬件系統開發由vivado IDE套件承擔,用戶可以從IP庫(IP Integrator)中選出模塊來組成所期望的系統框圖,配置模塊參數,以及設計合適的內部連接和外部接口
以下是在IP Integrator設計中的示例:
其中可以看到PS模塊、PS復位模塊、外設和AXI互聯模塊,在這些模塊之間主要通過AXI接口連接
軟件開發與測試
從vivado中導出到SDK的是為軟件平台定制的硬件,稱為基礎硬件系統,對應在IP Integrator中的配置
軟件系統可以被認為是建立在基礎硬件系統上的一個棧:
在基礎硬件系統上一層的是板級支持包(BSP),提供底層的驅動和函數供上一層(操作系統)使用和硬件通信,軟件應用程序運行於操作系統之上,不過軟件也可以直接和硬件通信,即裸機應用,且由於是雙核架構,也可以部署兩個不同的操作系統,每一個使用一個核心
- BSP會針對硬件系統進行調整,BSP是為基礎硬件系統和操作系統之間的連接定制的,包括硬件參數,設備驅動以及底層操作系統函數,SDK提供了創建BSP以及開發測試上層軟件的環境
- 在測試階段,SDK包含Xilinx microprocessor debugger(XMD)和system debugger(TCF)工具,可以在硬件平台運行時測試軟件的功能,通過使用比特流(.bit)文件燒寫ZYNQ的PL端和在PS端運行軟件(.elf文件)完成;GDB調試器(建立在XMD上)是一種更加高級的完成遠程調試的方法;還可以使用vivado simulator在PC端上復現PL端
以IP為重點的系統級設計
- IP Integrator
- IP Packager:使IP被打包成標准包(基於IP-XACT標准)
Tool Command Language(TCL)腳本語言
閱讀Xilinx的文檔
在設計中如果有些不能確定的地方,Xilinx官方的文檔往往可以解答我們的疑惑,下面就來談談如何使用這些文檔
首先我們從哪里獲得這些文檔:
- DocNav
- Xilinx官網
其次如何閱讀這些文檔,應當選擇一本貼合自己當前設計的文檔,然后以這個文檔內的一些別的補充文檔的鏈接獲取別的一些知識,從而構建起知識樹
一些推薦的文檔:
-
ug1137 zynqmpsoc swdev guide
-
ug1209 embedded design tutorial
-
ug1085 zynq trm (Technicial Reference)
-
ds891 overview data sheet
-
ug1228 embedded design methodology guide
-
ug1144 petalinux
-
ug1157 petalinux-tools
-
ug1169 qemu
-
ug1208 XSCT(xilinx sw command line tool) for tcl
-
ug1283 bootgen user guide
-
ug903:介紹了如何在vivado中使用約束文件