https://www.cnblogs.com/gary-zhang/p/15878443.html
之前刚开始学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程序即可。