从本篇文章开始,就来记录一下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的开发流程,可以总结为如下步骤:





以上两种流程,虽然过程有点区别,但都是可以的

最新文章

  1. jQuery实现DOM加载方法源码分析
  2. C++字符串格式化库:CPPFormatLibrary
  3. JSON与XML的区别比较
  4. Linux的课程总结
  5. SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
  6. C++学习笔记之迭代器
  7. 换一换js
  8. Google jQuery URL
  9. 百度静态资源(JS)公共库
  10. iOS开发——An App ID with identifier "*****" is not avaliable
  11. postgresql 多表联查
  12. 201521123049 《JAVA程序设计》 第3周学习总结
  13. (译)JToken的层次结构
  14. uboot - the bootloader of linux
  15. javascript中获取字符串或数组中元素的索引
  16. iOS9.3描述文件怎么安装
  17. react 使用hooks
  18. MVC路由 路由的三种扩展 替换MVC内置的Handler
  19. PHP数组合并和去重的函数有哪些
  20. 立个FLAG

热门文章

  1. PHP面向对象(三)
  2. vue常用插件集合(常用,但一般UI库又不太能满足)
  3. vue中的Swiper使用slideTo提示no function
  4. JavaSE 日期时间类整理
  5. vue3中读取本地excel文件内容
  6. LambdaQueryWrapper 的条件构造器方法对应Sql
  7. Linux系统Shell脚本第一章:Shell脚本基础及时间同步
  8. pg9.6进程架构
  9. Web入门实战
  10. fetch,axios简介与语法