如何在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:\Xilinx\SDK\2014.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html

小結:
DevCfg外設內部有自己的DMA,只需要簡單的配置PL Image的基地址和長度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的加載。Xilinx已經提供了靈活的解決方案,如果開發者要把這個功能集成在自己的應用程序中,也有很多的代碼可以參考,並不是很困難的任務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM