ZYNQ
ZYNQ 的本质特征,是它组合了一个双核 ARM Cortex-A9 处理器和一个传统的现场可编程门阵列(FPGA)逻辑部件。
ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC),
它将处理器的软件可编程性与FPGA的硬件可编程性进行完美整合,
以提供无与伦比的系统性能、灵活性与可扩展性。与传统的SOC解决方案不同,高度灵活的可编程逻辑FPGA可以实现系统的优化和差异化,允许添加定制的外设和存储器,从而适应各种广泛的应用。
SOC:system on chip 片上系统
soc是系统级的芯片,既有MCU微控制器的内置RAM,RAM同时又像MPU微处理器那样强大。 片上系统(System-on-Chip)指的是在单个硅芯片就可以实现整个系统的功能。
片上系统 SoC 在一个芯片里就实现了存储、处理、逻辑和接口等各个功能模块。
ZYNQ应用场景:
基于 Zynq-SoC 器件强大的硬件特性和便捷的软件功能,用户可获得更智能 & 优化 & 最安全的解决方案。
通过运行各种成熟的操作系统(Linux、RTOS),这些成熟的 OS 所提供的 中间件、协议栈、加速器和 IP 生态环境等,能为用户提供最简洁高效的应用开 发环境。其中,Zynq-7000 系列主要面向传统嵌入式和 FPGA 交叉应用领域,实现复杂 FPGA+ARM 结构的板级简化,让系统设计更加灵活简洁。
在单个设备上集成了功能丰富的双核 ARM CortexTM-A9 MPCore 处理系统(PS)和 Xilinx 可编程逻辑(PL),实现了灵活性,可配置性和性能的完美结合。
双核 ARM Cortex-A9 MPCore 处理器是 PS 的核心,它还包括片内存储器、外部存储器接口和一组丰富的 I/O外设。
Zynq-7000系列通过将ARM CPU 和 外设 集成在一个芯片内,使得其兼具处理器和 FPGA 的双重特性。
Xilinx Zynq-7000 SoC FPGA 既拥有 ARM 处理器灵活高效的数据运算和事务处理能力,又拥有 FPGA的高速并行数据处理优势。同时,基于两者独特的片上互联结构,设计者在使用时可以将 FPGA 上的通用逻辑资源经过配置,映射为 ARM 处理器的一个或多个具有特定功能的外设,并通过高性能的 AXI 高速总线进行通信以完成控制命令和高速数据的交互。
在 SoC FPGA 中,嵌入的是 ARM 公司 32 位的 Cortex-A9 硬核处理器,简 称 PS(Processor System)。而 SOPC 技术中,嵌入的是 Xilinx 自己开发的 32 位MicroBlaze 软核处理器,两者指令集与处理器性能均有差异。
Xilinx ZYNQ 7010
资源:
1 28k 的FPGA逻辑单元
2 2.1M的嵌入式RAM存储器。
3 80 个数字信号处理器
4 2个模拟锁相环PLL
5 2个数字锁相环DLL
6 双核Cortex-A9 硬处理器系统PS。
7 DDR3 一个
8 SPI UART I2C
9 SD 卡控制器
10 USB控制器
11 千兆以太网MAC控制器x2
1-4 为为FPGA部分的资源,5-11为ps处理系统资源,在PS系统资源里,由于引脚复用关系,并不是所有外设资源都可以同时使用。根据自己需求,合理选择外设功能并设计相应硬件电路。
工程设计:
对于 zynq 的工程设计,大体上我们可以将其分为两部分,分别是对硬件逻辑系统的设计和对 CPU 软件程序的设计。
二者所要达到的目的不同,开发的软件环境也不同。硬件逻辑系统设计目的是搭建一个满足用户需求的硬件环境,该环境的搭建通过 vivado 实现;CPU 软件程序设计目的是用户通过用户程序控制 CPU 工作,使整个系统达到预定的效果,该部分设计通过 SDK 实现。
其中硬件逻辑设计需要很多操作,如添加ip核、导出引脚、端口连接。
hdf文件为硬件资源描述文件,可以通过生成比特流或生成模块设计产生。 对于涉及到PL端的设计,导出hdf文件时需要包含比特流(PL配置文件),因此通常使用生成比特流的方式产生hdf文件。 对于纯ps端,导出使不需要比特流。
硬件逻辑系统设计
创建工程 - 创建模块设计create block design- 构建硬件系统(添加ip核)- 配置其ip核 - 导出引脚(将ip核引脚导出)run block automation - 端口连接(自动连接的点自动,未用到的端口也需要给输入) - 验证设计 - 生成封装 - 管脚约束 - 生成比特流 - 导出硬件 - 启动SDK -
构建硬件系统: 添加 ZYNQ7 processing system IP核。 该ip核为ZYNQ7处理器系统IP核。
配置其ip核 : 使能外设 和 配置DDR型号。 zynq的外设接口由相应的控制器控制,使用时需要先进行使能。
生成封装: 点击source下文件 选中模块设计资源,选择generate output product。 生成输出 - 选择 out of context per IP (综合选项) - generate - source下选中-create HDL wrapper
管脚约束: 点击open elaborated design
生成比特流: 在program and debug中选择 generate bitstream
导出硬件: 点击file,选择export hardware
ACZ702 开发板启动时,PS 总是优先启动,随后 PS 开始配置 PL。
启动SDK: 硬件导出完成,vivado部分设计已经完成,接下来SDK开始CPU软件程序设计。 file - launch SDK
CPU软件程序设计
创建SDK工程 - 导入库文件 -添加头文件路径 - 添加用户代码
创建SDK工程: file - new - application project - empty application
导入库文件: 打开SDK 将库文件粘贴在led工程资源文件夹下。
开始添加头文件路径: 点击工程 右键 - propeties - c/c++ general - path and symbols - add - workspace - PS_GPIO 选择对应的库文件夹- ok - ok
添加用户代码: 添加完头文件路径,接下来便是添加用户代码,src目录下新建一个源文件。new source file
对资源文件命名,命名为main.c
接下来就是在main.c 添加用户代码。 编写完成后,ctrl+S对代码进行保存,软件会自动编译。编译成功后就完成了CPU软件设计环节。
板级验证
下载验证,run - run Configurations - 双击GDB新建配置任务 - 纯PS设计无比特流,比特流只在使用到PL资源时需要 - 复位 配置FPGA PS初始化 PL-PS电平转换这四个全都勾选 - 点击application切换到应用界面 - 检查elf文件是否被选中 - RUN 开始烧录
板级调试
run - debug configuration - 选择GDB任务 - debug开始下载程序 - 程序下载完成 点击yes进入调试界面 -
总结
流程:
硬件逻辑系统设计
创建vivado工程
创建模块设计
构建硬件系统
生成封装
管脚约束
生成并导出hdf文件
运行SDK
CPU软件程序设计
创建SDK工程
导入库文件
添加头文件路径
添加用户代码
板级验证
板级调试