基于Zynq7000平台VxWorks6.9开发应用——FPGA动态加载篇

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

 

 

前言 

本篇文章主要讲解在Xilinx ZedBoard上通过VxWorks6.9动态加载FPGA bit/bin文件,从而实现软件定义功能目的。本文力求讲述清楚PS动态加载PL的原理和实现方法,并配套完整的演示软件和相关代码进行验证。下面将从以下几个方面进行讲解。

  1. Zynq7000 PL加载原理设计
  2. VxWorks6.9动态加载FPGA

开发使用工具说明:

  1. 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重复配置流程如下:

  1. 设置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接口.支持bitbin格式自适应加载.

*

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CPUOS2010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值