從本篇文章開始,就來記錄一下ZYNQ的學習,本篇博客主要介紹ZYNQ是什么以及在vivado中創建一個ZYNQ工程的過程,其中的知識大部分來自於正點原子的ZYNQ教程,感興趣的可以去看一下他們家的參考資料
ZYNQ簡介
ZYNQ全稱ZYNQ-7000 All Programmable SoC,即全可編程片上系統,將處理器的軟件可編程性與FPGA的硬件可編程性整合,其本質特征在於它組合了一個雙核ARM Cortex-A9處理器作為處理系統(PS)和一個傳統的現場可編程門陣列(FPGA)邏輯部件作為可編程邏輯(PL)
因此在ZYNQ中,ARM Cortex-A9是一個應用級處理器,可以運行像Linux一樣的操作系統,而可編程邏輯是基於Xilinx 7系列的FPGA架構,同時實現了AXI接口,使兩個部分實現了高帶寬低延遲的連接
SoC發展史

PL部分
PL:Programmable Logic
PLD:Programmable Logic Device可編程邏輯器件,PLD的邏輯功能可以由使用者通過編程來設定
CPLD:復雜可編程邏輯器件,基於乘積項的與或邏輯陣列
FPGA:Field Programmable Gate Array現場可編程門陣列,基於查找表(LUT)的CLB陣列
PL部分提供了高精度DSP處理器,XADC模數轉換器等通用的邏輯單元

ZYNQ內部的PL其實就是Xilinx7系列的FPGA

PS部分
PS:Processing System
ZYNQ實際上是一個以處理器為核心的系統,PL只是一個它的外設,ZYNQ包含了完整的ARM處理器系統,且處理器系統中集成了內存控制器和大量外設,使Cortex-A9處理器可以完全獨立於可編程邏輯單元
ZYNQ處理器系統里並非只有ARM處理器,還有一組相關的處理資源,形成了一個應用處理器單元(APU),以ARM處理器為核心的應用處理單元(APU)可以集成豐富的外設,以外還有擴展外設接口,cache存儲器,存儲器接口,互聯接口和時鍾發生電路等

框圖中的一些專用術語:
MIO(Multiplexing IO):PS 域可復用的 IO,因為此 IO 管腳的配置在一定范圍內有靈活性
EMIO(Extensible MIO):對 MIO 的擴展, 將 PL 域的 IO 口直接連到 PS 域
GIC (General Interrupt Controller):通用的中斷控制器
IRQ(Interrupt Request):中斷請求
OCM(On Chip Memory):片上存儲
DMA(Direct Memory Access):直接存儲訪問
MMU:內存管理單元
外部接口
PS實現了很多接口,PS與外部接口的通信主要靠復用的輸入/輸出實現的(MIO),提供了可靈活配置的54個引腳。當需要超過54個引腳時可以通過擴展MIO實現(EMIO),EMIO 並不是 PS 和外部連接之間的直接通路,而是通過共用了 PL 的 I/O 資源來實現的
PS當中可用的I/O除了標准通信接口外還有通用輸入/輸出(GPIO)
PL與PS互聯
PS和PL互聯基於ARM的 AMBA3.0協議的AXI總線
AXI:Advanced Extensible Interface(高級可擴展接口),屬於AMBA接口
AMBA:Advanced Microcontroller Bus Architecture

- AXI-4 Memory Map:存儲映射,支持突發傳輸,主要用於處理器訪問存儲器等需要指定地址的高速數據傳輸場景
- AXI-4 Stream:類似FIFO,數據傳輸時不需要地址這種,在主從設備之間直接連續讀寫數據,主要用於視頻,高速AD,DMA接口等需要高速數據傳輸的場合
- AXI-4 Lite:為外設提供單個數據傳輸,主要用於訪問一些低速外設中的寄存器
在PS和PL之間主要通過一組9個AXI接口,每個接口有多個通道組成

vivado使用
Vivado是賽靈思公司為其產品定制的集成開發環境,支持Block Design,Verilog,VHDL等多種設計輸入方式,內嵌綜合器和仿真器,可以完成從設計輸入,綜合適配,仿真到下載的完整FPGA設計流程
Vivado還集成了HLS(High Level Synthesis)工具,可實現直接使用C,C++,System C語言對Xilinx的FPGA器件進行編程,用戶無需手動創建RTL,通過高層次綜合生成HDL級的IP核,從而加速IP創建
Vivado開發流程:

Vivado創建工程
選擇Create Project

設置工程名字和存儲位置

選擇RTL Project
如果要添加源文件則不勾選,如果創建完工程后再添加源文件則勾選

選擇開發的芯片型號

可以直接搜索ZYNQ芯片型號如下:

也可以像下面一樣選擇:


Vivado工程界面
在上面用vivado創建了一個新的工程,這里主要介紹一下vivado的工程界面

(1)左邊的是設計流程導航窗口,從上到下是FPGA的各個設計環節
PROJECT MANAGER是工程管理部分,可以添加文件,FPGA的原語模板工具,IP核等
IP INTEGRATOR 包含模塊化圖表形式的創建和打開,生成等管理
SIMULATION 包含 FPGA 設計的仿真功能相關
RTL ANALYSIS 包含工程的分析,以及設計的檢查,以及設計的原理圖邏輯關系的生成等SYNTHESIS 是 FPGA 的綜合,是 FPGA的最關鍵部分
IMPLEMENTATION 是實現部分,完成 FPGA 的布局布線設計
PROGRAM AND DEBUG,是 FPGA 生成配置文件,以及在線實時調試文件生成,下載,調試功能部分
(2)中間的PROJECT MANAGER-pl_LED是工程文件窗口,查看工程的層次結構,編輯工程文件屬性
(3)右邊的Project Summary是主工作窗口,根據不同的layout有不同的顯示內容
(4)下面的藍色窗口是結果顯示窗口,顯示各個環節的執行結果,其中,TCL Console 可以采用 TCL 腳本指令進行軟件交互
創建源文件

從上到下依次是:
工程設置
添加源文件
提供了一些文件模板
給工程添加IP核
點擊Add Sources即可創建各種源文件
也可以直接點擊+號創建源文件:

在編寫完Verilog代碼后,選擇RTL ANALYSIS

對代碼進行分析並將Verilog代碼翻譯成RTL原理圖
同時在這一步中可以直接綁定引腳,設置完引腳后需要保存管腳約束文件,也可以綜合后在新建約束文件設置引腳
接下來可以對代碼進行綜合(也可以再編寫完Verilog代碼后直接進行綜合),點擊Run Synthesis:

在綜合后彈出的綜合完成的對話框中先不要選擇Run Implementation,在綁定管腳后再進行 Implementation 實現:

接下來約束輸入,分配管腳:
首先創建一個約束文件,點擊sources窗口的+號,選擇Add or create constraints

點擊Create File創建一個新的約束文件

輸入約束文件的名稱,並完成約束文件的創建

應當注意,vivado的約束文件是以.xdc為后綴的文本文件,存儲的是一條條的xdc約束命令

或者在最右邊

約束輸入完畢后即可開始實現設計,點擊Run Implementation

在下載程序之前,首先要生成用於下載到器件中的比特流文件,文件后綴為.bit,點擊Generate Bitstream(也可以先點直接生成bit文件包含了實現操作)

在完成后彈出的界面中選擇打開硬件管理器 Open Hardware Mnager
點擊Open target或Hardware子窗口中的Auto Connect按鈕

點擊Program Device並Program即可下載程序:


這樣就完成了ZYNQ的FPGA的開發流程,可以總結為如下步驟:


以上兩種流程,雖然過程有點區別,但都是可以的
