在Zynq-7000上編程PL大致有3種方法:
1. 用FSBL,將bitstream集成到boot.bin中
2. 用U-BOOT命令
3. 在Linux下用xdevcfg驅(qū)動。
步驟:
1. 去掉bitstream的文件頭
用FSBL燒寫PL Images沒有什么好說的,用Xilinx SDK的Create Boot Image工具即可完成,不再贅述。用后兩種方法需要把bitstream文件的文件頭用bootgen工具去掉。
一個(gè)典型的bif文件如下所示:
the_ROM_image:
{
[bootloader].elf
.bit
.elf
}
bif文件可以用文本編輯器寫,也可以用Xilinx SDK的Create Boot Image工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件頭。
bootgen -image .bif -split bin -o i BOOT.BIN
"-split”參數(shù)可以生成以下文件:
.bit.bin
2. 在U-BOOT下燒寫PL Image
命令”fpga load”和”fpga loadb”都可以。區(qū)別是前一個(gè)命令接受去掉了文件頭的bitstream文件,后一個(gè)命令接受含有文件頭的bitstream文件。
在OSL 2014.2上,缺省編譯就可以完整支持寫入PL Image的功能。但是在Petalinux 2013.10下,盡管可以在U-BOOT下看到命令”fpga”,還需要在文件
/subsystems/linux/configs/u-boot/platform-top.h 中增加以下內(nèi)容后重新編譯才可以支持具體的功能。
/* 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()中實(shí)現(xiàn)的。
3. 在Linux下燒寫PL Image
OSL Linux 2014.2.01中已經(jīng)含有xdevcfg驅(qū)動了(之前就有,不過本文是在這個(gè)版本上驗(yàn)證的),直接用以下命令就可以完成PL Image寫入。
cat /.bit.bin > /dev/xdevcfg
Linux驅(qū)動的源代碼在xilinx_devcfg.c中。因?yàn)轵?qū)動的編號是通過alloc_chrdev_region()動態(tài)分配的,所以不需要手工用mknod命令手動建立設(shè)備節(jié)點(diǎn)。
在Linux驅(qū)動中,每次往DevCfg中寫入4096字節(jié),直到全部寫完。
4. 在用戶程序中燒寫PL Image
目前沒有現(xiàn)成的源碼來完成這個(gè)功能,不過可以用mmap()把DevCfg的寄存器映射到用戶程序的虛地址中,然后參考一些現(xiàn)成的軟件代碼來完成這個(gè)功能:
* FSBL中的pcap.c
* U-BOOT中的zynqpl.c
* Linux中的xilinx_devcfg.c
* Xilinx SDK中的例子。
小結(jié):
DevCfg外設(shè)內(nèi)部有自己的DMA,只需要簡單的配置PL Image的基地址和長度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的加載。Xilinx已經(jīng)提供了靈活的解決方案,如果開發(fā)者要把這個(gè)功能集成在自己的應(yīng)用程序中,也有很多的代碼可以參考,并不是很困難的任務(wù)。
-
編程
+關(guān)注
關(guān)注
88文章
3596瀏覽量
93609 -
Zynq-7000
+關(guān)注
關(guān)注
3文章
144瀏覽量
36798
發(fā)布評論請先 登錄
相關(guān)推薦
評論