如何利用Zynq-7000的PL和PS进行交互

如何利用Zynq-7000的PL和PS进行交互,第1张

在Zynq-7000上编程PL大致有3种方法:
1 用FSBL,将bitstream集成到bootbin中
2 用U-BOOT命令
3 在Linux下用xdevcfg驱动。

步骤:
1 去掉bitstream的文件

用FSBL烧写PL Images没有什么好说的,用Xilinx SDK的Create Boot Image工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。

一个典型的bif文件如下所示:
the_ROM_image:
{
[bootloader]<fsbl_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 BOOTBIN
"-split”参数可以生成以下文件:
<pl_bitstream_name>bitbin

2 在U-BOOT下烧写PL Image
命令”fpga load”和”fpga loadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。

在OSL 20142上,缺省编译就可以完整支持写入PL Image的功能。但是在Petalinux 201310下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件
<PROJ>/subsystems/linux/configs/u-boot/platform-toph 中增加以下内容后重新编译才可以支持具体的功能。

/ Enable the PL to be downloaded /
#define CONFIG_FPGA
#define CONFIG_FPGA_XILINX
#define CONFIG_FPGA_ZYNQPL
#define CONFIG_CMD_FPGA
#define CONFIG_FPGA_LOADFS

在OSL 20142 U-BOOT中,具体的功能是在zynqplc的zynq_load()中实现的。

3 在Linux下烧写PL Image
OSL Linux 2014201中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PL Image写入。
cat <path_to_storage_media>/<pl_bitstream_name>bitbin > /dev/xdevcfg

Linux驱动的源代码在xilinx_devcfgc中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。

在Linux驱动中,每次往DevCfg中写入4096字节,直到全部写完。

4 在用户程序中烧写PL Image

目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:
FSBL中的pcapc
U-BOOT中的zynqplc
Linux中的xilinx_devcfgc
Xilinx SDK中的例子。例子位于以下位置,随SDK的版本会有变化。
C:\Xilinx\SDK\20141\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\indexhtml

小结:
DevCfg外设内部有自己的DMA,只需要简单的配置PL Image的基地址和长度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。

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灯。

官网提供的可执行文件是基于64位Linux的:zynq_linuxtargz 对于32位的系统,需要自己编译,解决方案如下: 1) 下载代码:git clone git://gitxilinxcom/qemu-xarmgit 2) 配置工程: cd qemu-xarm /configure --target-list=arm-softmmu


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/10776834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存