有人用过zynq7000 的axi dma实现PS与PL的高速通信吗
1个回答
2017-07-23
展开全部
在Zynq-7000上编程PL大致有3种方法:1.用FSBL,将bitstream集成到boot.bin中2.用U-BOOT命令3.在Linux下用xdevcfg驱动。步骤:1.去掉bitstream的文件头用FSBL烧写PLImages没有什么好说的,用XilinxSDK的CreateBootImage工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。一个典型的bif文件如下所示:the_ROM_image:{[bootloader].elf.bit.elf}bif文件可以用文本编辑器写,也可以用XilinxSDK的CreateBootImage工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件头。bootgen-image.bif-splitbin-oiBOOT.BIN"-split”参数可以生成以下文件:.bit.bin2.在U-BOOT下烧写PLImage命令”fpgaload”和”fpgaloadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。在OSL2014.2上,缺省编译就可以完整支持写入PLImage的功能。但是在Petalinux2013.10下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件/subsystems/linux/configs/u-boot/platform-top.h中增加以下内容后重新编译才可以支持具体的功能。/*EnablethePLtobedownloaded*/#defineCONFIG_FPGA#defineCONFIG_FPGA_XILINX#defineCONFIG_FPGA_ZYNQPL#defineCONFIG_CMD_FPGA#defineCONFIG_FPGA_LOADFS在OSL2014.2U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。3.在Linux下烧写PLImageOSLLinux2014.2.01中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PLImage写入。cat/.bit.bin>/dev/xdevcfgLinux驱动的源代码在xilinx_devcfg.c中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。在Linux驱动中,每次往DevCfg中写入4096字节,直到全部写完。4.在用户程序中烧写PLImage目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:*FSBL中的pcap.c*U-BOOT中的zynqpl.c*Linux中的xilinx_devcfg.c*XilinxSDK中的例子。例子位于以下位置,随SDK的版本会有变化。C:\Xilinx\SDK\2014.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html小结:DevCfg外设内部有自己的DMA,只需要简单的配置PLImage的基地址和长度到DevCfg寄存器,就可以完成Zynq-7000PLImage的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询