Zynq的开发四种方式
ZYNQ中包含了两个部分,双核的arm和FPGA。根据XILINX提供的手册,arm模块被称为PS,而FPGA模块被称为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。
之前刚开始学FPGA的时候用的是基于spartan的FPGA开发板,当上手ZYNQ后一直以为ZYNQ就是在资源上做了升级,我所要做的工作无非是把开发工具从ISE升级到VIVADO罢了,后来发现自己还是过于天真了,很多事都有存在的意思,上手之后便发现ZYNQ和之前的板子有区别。
SOC FPGA
区别就是ZYNQ除了传统FPGA外,还把ARM核和FPGA结合在了一起,成为了内嵌处理器硬核的FPGA,即SOC FPGA,二者利用高速总线AXI4进行通信。
内部结构 PL与PS
由于它既有FPGA又有ARM,所以它同时具有ARM软件的可编程性和FPGA 的硬件可编程性,不仅可实现重要分析与硬件加速,同时还在单个器件上高度集成 CPU、DSP、ASSP 以及混合信号功能。
从结构来看,支持FPGA的部分称为PL(Programmable Logic),支持ARM的部分称为PS(Processing System),如下图所示。
可以看出PS部分有很多接口,如SPI,UART,CAN等等,这些接口的存在可以让FPGA不用写控制器去传输,节省了资源但是牺牲了速度。
工作
PL端和PS端一般通过AXI4总线通信,使用AXI4的PL模块会有相应c驱动文件,用于PL端模块的控制。这些驱动文件有裸机版本,也有linux版本,linux运行时,如果调用pl端模块就使用这些驱动即可。
Zynq的启动分三个阶段。阶段0是BOOTROM的固化代码,不用管;阶段1中,first stage boot loader 首先配置PS端,之后硬件比特流对PL进行配置。阶段2运行用户程序,Linux的BOOT loader在这个阶段才开始运行。
ZYNQ并不能说是一个嵌入ARM核的FPGA。从它的启动过程就可以发现,绝对是ARM主导的,因此称它为以高性能FPGA为外设的双核ARM或许更为合适。
那么就有一个问题Zynq可以作为独立的ARM或者独立的FPGA使用吗?答案是肯定的,可以的。
首先,Zynq可以作为独立的ARM使用是显而易见的,因为Zynq中ARM就是主处理器,上电启动过程也是由ARM来完成的,除了新建ARM工程时需要HDL硬件描述文件(HDL硬件描述文件的制作也很简单),其他都一样。
其次,Zynq作为独立的FPGA使用其实也是可以的,首先我们可以跟使用传统的FPGA一样使用Vivado集成开发环境综合编译工程并通过JTAG接口下载bit文件。唯一的不同是在我们烧写启动时,我们需要把bit文件和FSBL源码合成为一个bin文件烧写后才能启动,上电启动时ARM会先运行加载FSBL程序,然后通过FSBL会加载FPGA的程序。FSBL程序是Xilinx提供的集成在SDK里的二级boot loader程序,我们在SDK集成开发环境中通过很简单的操作就可以完成FSBL程序和bit文件的合成。
上图中红色框框出来的是二级boot loader程序,黄色框框出来的是FPGA程序,蓝色框框出来的是ARM的用户应用程序,如果我们把Zynq作为独立的FPGA使用时,我们就可以删除蓝色框即ARM用户应用程序,保留红色框二级boot loader程序和黄色框FPGA程序即可。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !