目录
一、对ZYNQ的认识
1.1 ZYNQ的开发方式
ZYNQ中包含了两个部分,双核的arm和FPGA。根据XILINX提供的手册,arm模块被称为PS,而FPGA模块被称为PL。PL 和 PS 两部分的供电电路是独立的,这样 PS 或 PL 部分不被使用的话就可以被断电。
ZYNQ内部包含PS和PL两部分,ZYNQ开发有一下四种方式:
A:纯PS开发
PS中包含2个ARM Cortex-9的内核,一些基本的外设扩展口以及Memory接口。PS中包含以下4个主要功能模块:
Application processor unit (APU)
Memory interfaces
I/O peripherals (IOP)
Interconnect
PS开发有两种方式:即传统的arm的方式和xilinx方法(这个是生成一个elf文件,这个elf文件包括了硬件配置信息(xmp)和裸跑程序(c文件))。
B:纯PL开发
PL即FPGA,这个和一般的xilinx的FPGA没有很大的区别。
C:PS+PL(不跑操作系统)开发
生成elf文件包括了硬件配置信息(xmp)和裸跑程序(c文件),还有一个.bit文件。
D:PS+PL(跑操作系统)开发
这个就需要BOOT.BIN,设备树,linux内核镜像,文件系统了。
其中BOOT.BIN是由3部分组成的(boot.elf, .bit, fsbl.elf),boot.elf这个是由交叉编译环境产生的,相当于ssbl,.bit文件是PL使用文件,fsbl.elf这个是fsbl。
1.2 ZYNQ的启动设置
ZYNQ 支持 JTAG 启动模式、NOR BOOT 模式、NAND FLASH 启动模式、QSPI 启动模式、SD 卡启动模式。 可以根据我们的硬件来选择对应的启动模式。(部分硬件不支持)
上电需要满足PS_POR_B应该一直保持低电平,并在PS_SRST_B引脚拉高2us后拉高,如上电时序图1.2-1所示。很多上电异常的情况应该排查电源的启动顺序是否满足要求。
1.2-1 上电时序图
二、创建ZYNQ工程
2.1 创建工程
打开vivado,选择create project创建工程。
在该窗口中输入工程名和需要保存的路径(英文路径),然后一直next。
在该窗口中选择使用的FPGA型号,根据开发板类型选择的是xc7z015clg485-2。
2.2 创建Block Design 图形化设计
选择Create Block Design,输入设计名。
选择中间或者工具栏+,搜索ZYNQ,选择ZYNQ 7 Processing system添加IP,根据自己设计需求可以双击ZYNQ对其进行参数设计和更改;
三、ZYNQ ps端相关描述
3.1、应用程序处理单元(APU)
应用程序处理器单元(APU)提供了广泛的高性能特性和符合标准的功能。
两个 ARM Cortex™-A9 处理器和ARM v7:
- 运行时选项允许单处理器、非对称(AMP)或对称多处理(SMP)配置
- ARM 7 ISA版本:标准的ARM指令集和Thumb®-2, Jazelle® RCT and Jazelle DBX Java™加速
- NEON™128b SIMD协处理器和VFPv3/MPCore
- 32 KB指令和32 KB数据L1缓存,每个MPCore具有奇偶校验
- 512 KB的可共享L2缓存
- 个人计时器和监督计时器
系统功能:
- 系统级控制寄存器(SLCRs):
- Snoop控制单元(SCU),以保持L1和L2的一致性
- 从PL(主)到PS(从)的加速器一致性端口(ACP)
- 64b AXI从机端口
- 可以访问L2和OCM
- 事务处理是与L1和L2缓存相一致的数据
- 256 KB的片上SRAM(OCM)与奇偶校验
- 双端口
- 可通过cpu、PL和中央互联系统接入
- 在L2级别,但不可缓存
- DMA控制器
- PS的四个通道(内存复制到系统中的任何内存)
- PL的四个通道(内存到PL,PL到内存)
- 通用中断控制器(GIC)
- 单个中断掩码和中断优先级
- 个CPU私有外围设备中断(PPI)
- 16个CPu专用软件生成的中断(SGI)
- 从系统的其他部分、PS和PL分发共享的外围中断(SPI) - 20从PL
- 等待中断(WFI)和等待从CPU发送到PL的事件(WFE)信号
- 增强的安全功能,以支持TrustZone™技术
- 看门狗计时器,三重计数器/计时器
3.2、内存接口
多种功能的内存接口。
DDR控制器
- 支持DDR3、DDR3L、DDR2、LPDDR-2
- 速率由设备的速度和温度等级决定
- 16位或者32位位宽
- ECC只支持16位
- 使用73个专用的PS引脚
- 模块(无DIMMs)
- 32位位宽:4*8b,2*16b,1*32b
- 16位位宽:2*8b,1*16b
- 基于可编程空闲时段的自主DDR断电进出
- 数据读频自动校准
- 对每个数据节拍都支持写入数据字节
- 使用低延迟的HPR队列的读取机制
- 每个端口发送特殊的紧急信号
- 信任区域可编程在64 MB边界
- 对每个端口的两个不同ID的独占访问(不支持锁定的事务)
DDR控制器核心和事务调度程序
- 进行事务调度是为了优化数据带宽和延迟
- 先进的重新排序引擎,最大化内存访问效率,目标是90%的效率与连续读写和80%的效率与随机读写
- 刷新写缓冲区的写读地址冲突检查
- 服从AXI订购规则
QSPI控制器
线性QSPI控制器(它可以作为一个主要的引导设备)的主要特点是:
- 单个或两个
- 支持*1或*2读
- 32位APB 3.0接口的I/O模式,允许完整的设备操作,包括程序,读取和配置
- 32位AXI线性地址映射接口的读取操作
- 支持单个设备选择线路
- 4位双向输入输出信号
- 读速度x1、x2和x4
- 写速度x1和x4
- 主模式下的最大QSPI时钟为100 MHz
- 252字节的输入FIFO深度,以提高QSPI的读取效率
- 支持在I/O和线性模式下支持高达128 Mb密度的QSPI设备。仅支持>128Mb设备。
- 支持双QSPI的两个QSPI设备并行
此外,线性地址映射模式的特点包括:
- 支持通过AXI接口进行常规的只读内存访问
- 最多有两个SPI闪存
- 在线性模式下,一个内存高达16 MB寻址空间,两个内存高达32 MB寻址空间
- AXI读取验收能力为4
- AXI递增和包装地址突发读取
- 自动将正常的内存读取操作转换为SPI协议,反之亦然
- 串行、双行和QSPI模式
静态存储器控制器(SMC)
以下任一个都可以是主引导设备:
- NAND控制器
- 8/16位I/O宽度/一个芯片选择信号
- ONFI规范1.0
- 16位读数据和16位写数据fifo
- 8位命令FIFO
- 可编程输入输出循环定时
- ECC辅助
- 异步内存工作模式
- 并行SRAM/NOR控制器
- 8位数据总线
- 一个芯片选择最多有25个地址信号(32 MB)
- (32 MB + 32 MB) 两个芯片选择最多25个地址信号(32 MB + 32 MB)
- 16位读数据和16位写数据fifo
- 8位命令fifo
- 每个芯片选择的可编程I/O周期定时
- 异步内存工作模式
3.3、输入输出外围设备
I/O外围设备(IOP)是用于外部数据通信的行业标准接口的集合。
注意:控制器寄存器需要单个32位的读/写访问,不使用字节、半字或双字引用。
GPIO
- 通过MIO的设备引脚最多54 GPIO信号
- 输出具有3-状态能力
- 在PS和PL之间通过EMIO发出192个GPIO信号
- 64个输入,128个输出(64个真输出和64个输出启用)
- 每个GPIO的功能可以在个人或组的基础上动态编程
- 启用、位或bank数据写入、输出启用和方向控制
- 基于个别GPIO的可编程中断
- 原始中断和屏蔽中断的状态读取
- 上升沿,下降沿,任何边沿,高电平,低电平敏感度
千兆以太网控制器(两个)
- RGMII接口使用MIO引脚和外部PHY
- 使用PL选择iO和外部PHY与附加软IP的附加接口
- SGMII接口使用PL GTP或GTX收发器
- 内置有散射聚集的DMA
- IEEE 802.3-2008
- 唤醒能力
USB控制器:每个作为主机、设备或OTG(两个)
- USB 2.0高速运行(OTG)双角色USB主机控制器或USB设备控制器操作使用相同的硬件
- 仅限MIO引脚(7x010设备中有一个USB控制器)
- 内置DMA
- USB 2.0高速设备
- USB 2.0高速主机控制器
- USB主机控制器寄存器和数据结构与EHCI兼容
- 直接支持USB收发器低针接口(ULPI)。ULPI模块支持8位
- 需要外部PHY
- 最多支持12个端点
SD/SDIO控制器(两个)
- 可引导的SD卡模式(可选项)
- 内置DMA
- 仅支持主机模式
- 支持SD规范的2.0版本
- 支持全速和低速
- 支持1位和4位数据接口
- 低速时钟0-400 kHz
- 支持高速接口
- 全速时钟0-50 MHz,最大吞吐量为25 MB/s
- 支持内存、I/O和组合板卡
- 支持电源控制模式
- 支持中断
- 1KB数据FIFO接口
SPI控制器(两个):主或从
- 四线:MOSI、MISO、SCLK、SS
- 全双工操作提供同步接收和传输
- 主模式
- 手动或自动启动数据传输
- 手动或自动从属选择(SS)模式
- 最多支持三个从属选择线(3个从设备?)
- 允许使用外部外围设备选择3到8解码
- 可编程延迟的数据传输
- 从模式
- 可编程启动检测模式
- 多主(多个主机)环境
- 如果未启用,驱动器将进入3个状态
- 如果检测到多个主节点,则标识错误条件
- 通过MIO支持最大50 MHz最大外部SPI时钟速率
- 最大25 MHz通过EMIO到PL选择IO引脚
- 可选择的主时钟参考
- 可编程主波特率除数
- 支持128字节读和128字节写fifo
- 每个FIFO都是8位宽的
- 可编程FIFO阈值
- 支持可编程时钟相位和极性
- 支持手动或自动启动的数据传输
- 软件可以轮询状态或功能作为中断驱动
- 生成可编程中断
CAN控制器(两个)
- 符合ISO 11898 -1、CAN 2.0A和CAN 2.0B标准
- 同时支持标准(11位标识符)和扩展(29位标识符)帧
- 支持高达1个Mb/s的比特率
- 传输具有64条消息深度的消息FIFO
- 通过一个高优先级的传输缓冲区进行传输优先级划分
- 支持TxFIFO和RxFIFO的水印中断
- 正常模式下错误或仲裁损失自动重新传输
- 接收深度为64条消息的消息FIFO
- 四个验收过滤器的验收过滤器
- 睡眠模式与自动唤醒
- Snoop 模式
- 诊断应用程序的环回模式
- 可隐藏的错误和状态中断
- 针对接收消息的16位时间戳
- 可读错误计数器
UART控制器(两个)
- 可编程波特率发生器
- 64字节的接收和传输fifo
- 6、7、8数据位
- 1、1.5或2个停止位
- 奇数,偶数,空,标记,或者无校验
- 奇偶性、帧化和溢出错误检测
- 断线线的产生和检测
- 自动回波模式、本地环回模式和远程环回通道模式
- 中断生成
- Rx和Tx信号在MIO和EMIO接口上
- 调制解调器控制信号: CTS、RTS、DSR、DTR、RI和DCD可在EMIO接口上使用
I2C 控制器(两个)
- 支持16字节FIFO
- I2C总线规范版本2
- 可编程的正常和快速总线数据速率
- 主模式
- 写传输
- 读传输
- 扩展地址支持
- 支持慢处理器服务
- 支持到中断标志,以避免停止状态
- 从站监视器模式
- 从模式
- 从传输
- 从接受
- 支持扩展地址
- 完全可编程的从属响应地址
- 支持保持,以防止溢出的情况
- 支持到中断标志,以避免停止状态
- 软件可以轮询的状态或功能作为中断驱动的设备
- 可编程中断生成
PS MIO I/Os
PS MIO I/O缓冲器被分成两个电压域。在每个域内,每个MIO都是独立可编程的。
- 两个输入输出电压bank
- Bank 0的电压由引脚0到15组成
- Bank 1的电压由引脚16到53组成
- MIO电压可以为每个bank编程
- 1.8、2.5/3.3 V
- CMOS单端或HSTL差分接收机模式
四、ZYNQ processing system详细介绍
FPGA使用的是 Xilinx 公司的 Zynq70015 系列的芯片,型号xc7z015clg485-2。 芯片的 PS 系统集成了两个 ARM Cortex™-A9 处理器,AMBA®互连,内部存储器,外部存 储器接口和外设。这些外设主要包括 USB 总线接口,以太网接口(ENET),SDI/SDO 接口,I2C 总线接口,CAN 总线接口,UART 接口,GPIO 等。PS 可以独立运行并在上电或复位下启动。 ZYNQ 芯片的总体框图如图所示。
PS块的接口与相关外设
1、PS部分的MIO是固定的,但可以选择连接到其上的不同外设,这就类似于典型MCU的“GPIO复用”;
2、PS模块具有2个连接到引脚的MIO bank和2个连接到PL端的EMIO bank;
3、PS端可以通过PS-PL端时钟生成器、AXI主从端口、DMA等端口连接PL端 。
4.1 输入时钟设置
Input frequency 的时钟,根据输入设置,本次设置是33.333333M(默认设置)。
DDR时钟设置默认即可。
CPU运行时钟设置默认,不同速度等级的CPU所支持的ARM最高频率也不一样,根据需求决定。
QSPI的时钟设置125M,MIO中选择了QSPI后即可更改时钟,设置其他时钟频率可能无法加载FLASH。
4.2 PS端DDR设置
对DDR进行设置,根据硬件DDR3所使用的类型、时钟、位宽、突发长度等进行相关设置。
DDR Controller Configuration(DDR相关控制配置):
Memory type(DDR类型):可选用DDR2或者DDR3,根据硬件设计选择DDR3;
Memory Part(DDR型号):根据硬件设计选择型号MT41K256M16RE-125;
Effective DRAM Bus Width(数据总线位宽):可选位宽16 bit 和32bit,根据硬件设计(使用两片DDR)选择总线位宽32 bit;
ECC:错误纠正码,只支持16位的有效数据宽度;
Burst Length:突发长度,可选4个或者8个,默认选择8个;
DDR:内存时钟频率。允许的频率范围是(200.000000:534.000000)MHz。
Internal Vref:内部电压参考源。禁止使用外部Vref引脚作为电压参考。
Juntion Temperature(C):预期工作温度范围。控制DDR刷新间隔。
Memory Part Configuration(内存部分配置):这部分不可选择,默认即可。
Training/Board Details:
DRAM Training:
Write leveling:启用写电平校准,调整相对于DDR时钟的写DQS。
Read gate:使能读取门校准,调整有效的RD DQS窗口。
Read data eye:启用读取数据眼校准,将读取DQ调整到读取DQ的中心。
DQS to Clock Delay(ns):DQS时钟延迟[0](ns)。时钟路径延迟减去DQS路径延迟。
Board Delay(ns):字节通道0的中间数据(DDR_DQ, DDR_DM)跟踪延迟与时钟(DDR_CK, DR_CK_N)跟踪延迟的平均值。
4.3 外设MIO设置
可以通过Peripheral I/O Pins或MIO Configuration(如下图)中可以查看和配置I/O管脚。Zynq-7000器件的PS部分有超过20种可选的外设,设计者可以将这些外设直接与专用的复用I/O相连,通常称为MIO;也可以使用扩展的复用I/O,通常称为EMIO。
通过设置 Quad SPI Flash和SD0/1来选择启动模式。
加入一个串口设置。
加入一个以太网设置。
在配置完成后可以返回设计看看选用的配置是否都满足需求了,满足需求后点击右下角OK即完成配置。
由于没用到其他PL端的IP可直接自动连线,也可以手动连线(熟练后建议手动)。
连接完成后可以将一些需要用到的外设接口引出去,完成后进行验证(圈红处),验证完成后就可以将图形化设计进行打包输出。
接口说明:
M_AXI_GP0_ACLK:M_AXI_GP0的时钟信号,可以将PS端的时钟提供给PL端使用
DDR:内存控制器输入/输出总线端口
FIXED_IO:PS连接外部IO的端口
M_AXI_GP0:PS与PL进行片上通信的AXI总线端口
FCLK_CLK0:PS部分的FCLK时钟端口
FCLK_RESET0_N:PS提供给PL的FPGA硬件复位端口
先将设计打包输出,然后在生成产生顶层的HDL文件,通过查看源码的层次结构和顶层文件可以看到调用了CPU。
可以添加代码来实现led灯的控制;
begin
if(!RSTn_i)
begin
C0 <= 32'd0;
LED_o <= 4'b1;
end
else
begin
if(C0 == 32'd50_000_000)
begin
C0 <= 32'd0;
if(LED_o == 4'b1000)
LED_o <= 4'b1;
else
LED_o <= LED_o << 1;
end
else
begin
C0 <= C0 + 32'd1;
LED_o <= LED_o;
end
end
end
关于ZYNQ在VIVADO中的基本设置已完成,关于SDK详细的设计与下载流程可在下篇文章中进行阅读和了解,欢迎大家交流与指教。