前言
本篇文章主要讲解在Xilinx ZedBoard上通过VxWorks6.9动态加载FPGA bit/bin文件,从而实现软件定义功能目的。本文力求讲述清楚PS动态加载PL的原理和实现方法,并配套完整的演示软件和相关代码进行验证。下面将从以下几个方面进行讲解。
- Zynq7000 PL加载原理设计
- VxWorks6.9动态加载FPGA
开发使用工具说明:
- WorkBench3.3
1、Zynq7000 PL加载原理设计

图1 非安全启动流程框图
如图1所示,非安全启动流程中PS通过芯片的固件程序从存储设备中读取引导软件fsbl到芯片RAM运行从而完成PS的整个启动流程。PL加载的通道则从PS通过AXI总线到达设备配置模块,然后通过PCAP进行加载。
除了JTAG加载PL之外,PL可以使用PCAP进行配置。用户可以在任何时候配置PL,无论是在PS使用FSBL启动后,还是在操作系统启动之后加载PL的镜像。本节介绍配置PL的要求。PL加载前必须先上电,才能进行配置。重复加载需要复位清除PL的配置SRAM单元。
表1 设备配置寄存器表

本文主要讲解PCAP配置PL的流程,其主要是通过配置表1的寄存器进行操作。
(1) PCAP配置PL
发送配置位流,PL必须完成内部清除工作。其状态由DevC的status寄存器中的[PCFG_INIT]位指示。内部环回功能也必须禁用,并且[PCAP_MODE]位必须设置。位流被传输到PL使用DevC DMA。PCFG_DONE标志表示PL配置成功。具体配置流程为:
1. 等待PL([0xF8007014]STATUS-bit[4])将PCFG_INIT设置为高;

2. 设置内部环回为0 ([0xF8007080]MCTRL-bit[4]),关闭内部环回;

3. 设置PCAP_PR和PCAP_MODE为1 ([0xF8007000]CTRL-bit[27:26]),选择并使能PCAP接口进行配置;

4. 启动一个DevC DMA传输;


a)源地址:PL位流的位置
b)目的地址:0xFFFFFFFF
c)源长度:PL位流中32位字的总数
d)目的长度:PL位流中32位字的总数
5. 等待PL ([0xF800700C]INT_STS-bit[2])将PCFG_DONE设置为高。

(2) PL重复配置
PL配置完成后,使用PCAP重新配置PL,必须在Control中将PCAP_MODE和PCAP_PR位设置为1。内部环回功能也必须禁用。发送重配置位流到使用DevC DMA的PL,源和目标与初始配置相同。PL重复配置流程如下:
- 设置PCAP_MODE和PCAP_PR为1, ([0xF8007000]CTRL-bit[27:26]),选择并使能PCAP接口进行配置;

2. 从PL中清除之前的配置;
a)设置PCFG_PROG_B([0xF8007000]CTRL-bit[30])高。

b)设置“PCFG_PROG_B ([0xF8007000]CTRL-bit[30])为低”。
c)检查PCFG_INIT = 0 ([0xF8007014]STATUS-bit[4])。

d)向INT_STS[2]写入1,清除PCFG_DONE_INT。

3.检查PCFG_INIT = 1 (STATUS-bit[4]);
4. 设置INT_PCAP_LPBK为0(MCTRL-bit[4]);
5. 通过向INT_STS[12]写入1来清除D_P_DONE_INT;

6. 启动一个DevC DMA传输;
a)源地址:新PL位流的位置。
b)目的地址:0xFFFF_FFFF。
c)Source Length:新的PL位流中32位字的总数。
d) Destination Length:新PL位流中32位字的总数。
7. 轮询或等待devcfg。INT_STS[D_P_DONE_INT]触发中断;

8. (可选)如果清除了之前的配置,请检查INT_STS上的PCFG_DONE_INT。

如果之前的PL配置没有被使用清除,那么PCFG_DONE标志将不会被设置PCFG_PROG_B。在这种情况下,应该使用D_P_DONE_INT来指示新的位流,需要注意的是,PCAP和ICAP接口是相互排斥的。一次只有一个接口可以与PL配置控制器通信,使用哪个接口是由DevC的控制寄存器中的PCAP_PR位控制的。
2、VxWorks6.9动态加载FPGA
本文主要目的是为了讲解VxWorks6.9系统下动态加载FPGA位流文件。对外提供一个VxWorks系统加载FPGA位流文件的接口函数。在BSP包里面实现fpga_load_driver.c、fpga_load_driver.h文件,如下图所示。

| /**************************************************************** * 文件名称: fpga_load_driver.h * 文件标识: 定义头文件 * 内容摘要: ZYNQ7000平台FPGA软件加载驱动. * 其它说明: PS->PL加载,涉及PCAP接口.支持bit和bin格式自适应加载. * * |

本文详细介绍如何在Xilinx Zynq ZEDBoard上使用VxWorks6.9动态加载FPGA位流文件,包括PL加载原理、PCAP配置步骤,并提供了BSP包内的相关代码实例,以实现软件定义功能。
最低0.47元/天 解锁文章
4271





