zoukankan      html  css  js  c++  java
  • 如何在Zynq-7000上烧写PL Image

    技术编辑archive1 于 星期六, 06/28/2014 - 10:05 发表
    作者:hqin, Xilinx处理器专家FAE

    在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]<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 BOOT.BIN
    

    "-split”参数可以生成以下文件:<pl_bitstream_name>.bit.bin

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

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

    /* 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 2014.2 U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。

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

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

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

    1. 在用户程序中烧写PL Image
      目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:
      • FSBL中的pcap.c

      • U-BOOT中的zynqpl.c

      • Linux中的xilinx_devcfg.c

      • Xilinx SDK中的例子。例子位于以下位置,随SDK的版本会有变化。

        C:XilinxSDK2014.1dataembeddedswXilinxProcessorIPLibdriversdevcfg_v3_0examplesindex.html

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

  • 相关阅读:
    Docker 笔记
    Win10 Docker 安装使用
    golang struct转map
    Golang 中错误与异常需要重新认识
    Golang 中三种读取文件发放性能对比
    GoLang中如何使用多参数属性传参
    GoLang中flag标签使用
    Windows本地搭建Edusoho环境
    edusoho上传视频弹出abort之解决方案
    XAMPP启动mysql遇到的问题
  • 原文地址:https://www.cnblogs.com/schips/p/how_to_burn_image_in_zynq.html
Copyright © 2011-2022 走看看