【ZYNQ学习】ZYNQ简介与Vivado使用
从本篇文章开始,就来记录一下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的开发流程,可以总结为如下步骤:
以上两种流程,虽然过程有点区别,但都是可以的