ZYNQ7000芯片的基本组成
赛灵思Zynq-7000 可扩展处理平台(EPP)将双 ARM Cortex-A9 MPCore 处理器系统与可编程逻辑和硬 IP 外设紧密集成在一起,提供了灵活性、可配置性和性能的完美组合。围绕其刚刚推出的可扩展处理平台(EPP), 赛灵思在今年3月发布了基于Zynq -7000新系列的首批器件。 采用 28 nm制造工艺, Zynq-7000嵌入式处理平台系列的每款产品均采用带有NEON及双精度浮点引擎的双核 ARM Cortex-A9 MPCore 处理系统,该系统通过硬连线完成了包括L1,L2 缓存、存储器控制器以及常用外设在内的全面集成。(图 1)。尽管 FPGA 厂商此前已推出过带硬核或软核处理器的器件,但 Zynq-7000 EPP 的独特之处在于它由ARM处理器系统而非可编程逻辑元件来进行控制。也就是说,处理系统能够在开机时引导(在 FPGA 逻辑之前)并运行各个独立于可编程逻辑之外的操作系统。这样设计人员就可对处理系统进行编程,根据需要来配置可编程逻辑。
如何在Zynq-7000上烧写PL Image
在Zynq-7000上编程PL大致有3种方法:
1. 用FSBL,将bitstream集成到boot.bin中
2. 用U-BOOT命令
3. 在Linux下用xdevcfg驱动。
步骤:
1. 去掉bitstream的文件头
用FSBL烧写PL Images没有什么好说的,用Xilinx SDK的Create Boot Image工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。
一个典型的bif文件如下所示:
the_ROM_image:
{
[bootloader]f***l_name.elf
pl_bitstream_name.bit
u-boot_name.elf
}
bif文件可以用文本编辑器写,也可以用Xilinx SDK的Create Boot Image工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件头。
bootgen -image bootimage.bif -split bin -o i BOOT.BIN
"-split”参数可以生成以下文件:
pl_bitstream_name.bit.bin
2. 在U-BOOT下烧写PL Image
命令”fpga load”和”fpga loadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。
在OSL 2014.2上,缺省编译就可以完整支持写入PL Image的功能。但是在Petalinux 2013.10下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件
PROJ/subsystems/linux/configs/u-boot/platform-top.h 中增加以下内容后重新编译才可以支持具体的功能。
#define CONFIG_FPGA
#define CONFIG_FPGA_XILINX
#define CONFIG_FPGA_ZYNQPL
#define CONFIG_CMD_FPGA
#define CONFIG_FPGA_LOADFS
在OSL 2014.2 U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。
3. 在Linux下烧写PL Image
OSL Linux 2014.2.01中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PL Image写入。
ZYNQ7000 启动流程解析
存放在ZYNQ芯片内部ROM不可更改,用于找到FSBL并启动它(从SD或者QSPI或者NAND),ug585第六章
用于引导U-Boot
用于引导Linux Kernel
petalinux工具可以构建2和3还有内核
BOOT.BIN包括f***l,bitstream,用户程序(uboot)
image.ub包括了kernel(devicetree DTB和rootfs通过设置可选包不包含在ub内)
主要是分析下FSBL工程的main函数
调用ps7_init函数
主要是对PS端配置信息进行初始化操作,包括MIO,PLL,CLK and DDR
我们在vivado软件中可以通过图形化的方式对ZYNQ PS端外设进行相关配置,那么这些配置信息会写入到hdf文件,SDK(或petalinux)会对hdf文件进行解析并生成对应的寄存器配置表,然后FSBL工程中会通过ps7_init函数将寄存器配置表写入到对应的寄存器中,完成对MIO/PLL/CLK/DDR等外设的硬件配置。
先调用Xil_DCacheFlush函数完成刷DCache缓存的操作,然后再调用Xil_DCacheDisable***用DCache缓存。
调用RegisterHandlers函数
调用DDRInitCheck函数
调用InitPcap函数
处理器配置访问端口
这个寄存器记录ZYNQ的启动方式(QSPI、SD、NAND、Nor、JTAG)
可以通过MIO3 MIO4 MIO5这三个引脚去配置ZYNQ的启动方式
ZYNQ上电复位的时候,会将这三个引脚的电平状态保存在BOOT_MODE寄存器当中。
每一种启动方式会有不同的处理方式。
***、先初始化对应的flash设备
第二、再将MoveImage函数指针指向Flash设备的读写函数实体
调用LoadBootImage函数
FSBL的主要工作是启动U-Boot(终极目标),也要将bitstream文件加载到PL端。
找到U-Boot、bitstream
在读取U-Boot拷贝DDR中对应的加载地址,读取bitstream加载到PL端
调用F***lHandoff(HandoffAddress)
启动完U-Boot之后,FSBL的使命的就完成了。
如何评估zynq7000的功耗
Zynq系列是赛灵思公司(Xilinx)推出的行业***个可扩展处理平台,旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。该系列四款新型器件得到了工具和IP 提供商生态系统的支持,将完整的 ARM® Cortex™-A9 MPCore 处理器片上系统 (SoC) 与 28nm 低功耗可编程逻辑紧密集成在一起,可以帮助系统架构师和嵌入式软件开发人员扩展、定制、优化系统,并实现系统级的差异化。
实际上,Zynq就是两大功能块:双核Arm的SoC和FPGA。根据Xilinx提供的手册,PS: 处理系统 (Processing System) , 就是与FPGA无关的ARM的SOC的部分。PL: 可编程逻辑 (Progarmmable Logic), 就是FPGA部分。这有点像xilinx以前推出的powerPC+FPGA平台。下图为官方文档中介绍的ZYNQ内部结构。
从图中可以看到,ZYNQ的绝大多数外设都是PL逻辑部分相连,比如说GPIO,IIS,XADC等等,所以如果我们要使用这些外设的话必须在PL逻辑部分对其进行配置。OK,下面我们就以一个简单的例子来看看如何使用PL和PS进行交互。在下面的例子中,我们通过设置8个开关来对应点亮8个LED灯。
首先打开XPS,由于XILINX内部已经帮我们做好了GPIO部分的IP核,所以我们只需要直接使用即可(如果要用自己的ip核,则可以使用ISE先把IP核写好再导入进来)。新建立一个工程,选择“Create New Project Using base System Builder”,
填好项目工程文件的路径,其它不需要更改,直接点OK
由于我们用的就是ZEDBOARD,所以在这里我们选择的是ZYNQ开发板,直接点击NEXT,
该界面表示当前工程里已经默认把GPIO和4位的led包含进去了,由于我们这里和光放的ZYNQ开发板还有点差别,所以就不需要这些默认设置了,直接选中点击REMOVE,最后点击FINISH完成工程的建立。
双击图中所示的AXI General Purpose IO,添加该IP核到ZYNQ中,注意在Width中选择8,表示当前的GPIO的宽度为8,当然如果你需要更宽也可以进行其它设置,但最多不能超过32 位。我们这里的SW开关和LED都为8个,所以我们把宽度设置为8.一路点击OK按钮,把该IP核加入到工程中。
由于我们有SW开关和LED两个外设并且一个为输入一个为输出,所以还需要按照同样的方法再添加一个GPIO核。完成添加后看右边的BUS INTERFACES,可以看到GPIO 0和GPIO1均添加到了系统中。
点击PORT栏,进入到端口设置部分,在这里我们把一个GPIO设置为输出,它与8个LED灯相连,另外一个设置为输入,它与8个SW开关相连。完成设置后的结果如下图所示
下面就是编辑约束文件,给定义的端口分配管脚了,
双击project栏中的UCF,打开约束编辑(在这里有个问题,难道ISE14.2中没有专门的约束编辑器吗?),输入以下内容
上面表示8个LED等,下面表示8个SW按键,注意,在DS中,8个SW按键是连接到VCC_ADJ上的,所以我们这里使用LVCMOS18电平标准。完成这些设置后,依次点击Generate BitStream和Export Design按钮,完成流配置文件的生成和导出到SDK中。
上面就是PL部分的配置了,下面我们就根据PL的配置来进行PS部分的编程。打开SDK工具,新建工程(具体如何新建可以参考ZedBoard_CTT_v14.1文档,该文档在ZEDBOARD.org网站上有下载)后更改其中的main函数为以下形式
点击编译,成功生成ELF文件后即可进行下载,当然在下载ELF文件前还要先把FPGA的配置下载进去。
总结一下,zynq虽然是一个新的东西,但它的基本开发流程和开发原理和xilinx以往的产品基本一样,ISE,XPS,SDK等等的使用方法也基本相同,所不同的是,ZYNQ系列中包含了两个ARM核,极大的提高了系统的性能。
关于zynq7000和Zynq7000外设的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。