不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

ZYNQ学习笔记(3)-局部重构Partial Reconfiguration

        动态局部重构Dynamic Partial Reconfiguration(DPR),顾名思义,局部重构是当下载了全部的bit 配置以后,可以通过下载局部分区bit 文件来动态修改对应分区的逻辑功能,同时其余分区的逻辑功能持续运行而不中断

典型应用

局部重构优化了传统的FPGA 应用,通过这项技术减少了尺寸,重量,功耗和成本。

         一个典型的例子是网络交换机。每个网络交换机都具有多个端口,每个端口能够支持多种接口,比如10GigE ,OC48和光纤等等。然而在FPGA配置之前,无法预测用户将会使用哪一种网络接口,于是只能将每个端口的所有的接口控制逻辑都在FPGA 中实现。如下图所示:

显然这种方式浪费了FPGA内部的资源,增加了FPGA 的面积和功耗。局部重构能够实现更有效的设计方法,如下图所示:

在设个设计中,我们将各种类型的网络接口的控制逻辑预先设计并编译成为bitstream 文件,存储在处理机的存储空间或者SD card 上,当用户配置某一类型的网络接口时,将相应的bitstream 下载到相关的局部重构块中。

局部重构技术在工业控制器设计中同样是需要的。例如在模块化PLC 中,有多种IO模块存在,使用背板FPGA 实现高速IO 逻辑,例如高速PWM信号,脉冲计数,解码器接口,和模拟量采集,每个IO模块的插槽有十几根IO控制线。但是每个插槽对应的FPGA 的控制逻辑与插入的IO模块相对应,在PLC 出厂时是无法确定的。因此,可以使用FPGA的 动态局部逻辑配置的功能。当处理器通过IO模块内部的EEPROM 的数据确定IO模块的类型。然后将对应逻辑的bit 下载到局部分区中。

动态局部配置与matlab /simulink算法

           matlab是著名的科学计算软件。而simulink是在matlab基础上构建的建模。仿真和分析的软件。不仅如此,matlab/simulink 能够生成产品级 C、C++、CUDA、PLC、Verilog 和 VHDL 代码,并直接部署到您的嵌入式系统。现在,matlab、simulink 的应用已经非常广泛,包括了无线通信,电力电子,控制系统,机器人,高级驾驶辅助系统,数字孪生,人工智能等领域。 matlab/simulink 采用了基于模型的设计方法,直接生成各种产品级代码,实现了从“模型到代码”的设计自动化。这是最受欢迎的功能之一。省去了大量编码和FPGA 设计繁琐工作,大大提高了原型设计的效率。

   基于模型设计的思想受到各类行业工程师的欢迎,不过,实现这一理想是复杂的过程,目前matlab 支持的Xilinx 和Intel的FPGA 系列。实现matlab to fpga 的过程大至如下

  •   1 使用matlab/simulink 建模与仿真
  •   2 导出算法的verilog 语言。
  •   3 使用FPGA 设计软件将verilog 算法添加到vivado 的工程中。产生一个IP 核。
  •   4 Simulink 通过以太网与ZYNQ 处理器通信,ZYNQ 处理器通过AXI接口访问IP核。
  •   5 处理器通过FPGA 的PCAP(Processor Configuration Access Port )和ICAP(Internal Configuration Access Port)实现FPGA 的配置。
  •   6 结合FPGA的动态局部重构技术实现Matlab to FPGA 的功能。

        根据IP 核的具体要求,可以选择不同的AXI接口,例如使用AXI_DMA 实现IP核与处理器之间的高速数据传输,通过AXI_Lite 实现寄存器访问和配置。

        上图是一个高级架构图,显示了 Zynq 平台上处理器和 FPGA 架构之间的流式数据传输。通常,AXI4-Stream 接口与 DMA 控制器一起使用,将大量数据从处理器传输到 FPGA。数据通常在软件端表示为矢量数据。DMA 控制器从内存中读取矢量数据,并通过 AXI4-Stream 接口将其“流式传输”到 FPGA IP。“流”过程每个样本发送一个数据元素,这意味着 FPGA IP 中流算法的数据路径使用标量数据类型。

动态局部配置与IEC61499 功能块

        IEC61499 是面向分布式工业控制,测量和监督系统的功能块的标准。大多数IEC61499 功能块是软件实现的。为了提高IEC61499 功能块执行的实时性,一部分IEC61499 功能块,复合功能块以及子应用能够使用FPGA 来实现。例如PWM 发生器,模拟数据采集,PID 闭环控制算法,模拟信号的数字信号处理(DSP),滤波,FFT等算法都可以使用FPGA来实现。近几年流行的AI算法也能够通过HDL 来实现。并且下载到FPGA 的动态局部分区中运行。

ZYNQ 动态局部配置的机制

        动态局部重构机制将IP 核的bitstream 存储在处理器(PS)端的存储器中,通过软件和接口将bit文件下载到局部重构块中。在ZYNQ 中,有两种用于PR 的方案,它们分别是:

PCAP(Processor Configuration Access Port)

ICAP( Internal Configuration Access Port)

PCAP

ZYNQ 的启动过程大致如下:

参考《Zynq UltraScale\+ Device Technical Reference Manual》,FSBL 在写入BitStream 之前,初始化PCAP接口。通过PCAP写入Bitstream。

ICAP接口

ICAP 是Xilinx公司提供的一个AXI4 IP核。它用来访问FPGA 内部的配置存储器。它基于AXI Lite 接口。

PCAP与ICAP 的差别

        通过XDcfgtransferBitFile 函数将RP的Bitstream 从DRAM 传送到PCAP,这种方案的主要优点是不需要使用任何PL 资源。传输的吞吐量为128MB。它的主要缺点是在重构时挂起了处理器。

    Xilinx 同样提供了一个IP核(AXI_HWICAP)和程序库XHwIcapdeviceWrite。允许使用ICAP来实现PR。AXI_Lite接口通过GP 端口将它连接到PS。由于这种方式不使用DMA 所以转送速率为19MB。也可以使用DMA 方式。

vivado 设计流程

网络上有一些vivado 软件开发PR 的文章,但是比较凌乱。 下面我们按照

xilinx fpga 部分动态重配置(Partial Reconfiguration)设计实现 一文的提示的方法的过程。

同时参考XILINX公司的ug909-vivado-partial-reconfiguration.pdf

在这个实例中,我们设计两个RP模块,一个固定模块

其中:

PM_LED 是局部重构模块,可以配置为1秒或者4 秒闪烁。LED2 是固定模块2秒闪烁。

它们对应的verilog 文件:

led.v     1秒

led_4s   4 秒

led2_2s  2 秒

设计过程

1 建立一个项目,将top.v ,led.v和led.v 导入源文件。

注意:在构建项目时,只要导入一个RM模块的源代码(led.v)就可以了。

2一旦项目建成后,将项目转变为局部重构项目,选择Tools > Enable Partial Reconfiguration.

 这个操作是不可逆的。所以,如果需要,要做好预先保存。

3 一旦项目转变为PR 项目,要定义重构分区(Reconfigurable Partitions)。在led模块的名称击右键。选择Create Partition Definition

在对话框中输入相应的pd和pm名字,这里分别输入led和led_1s。

4 配置该项目的所有细节,包括为每个重构分区(Reconfigurable Partitions)添加额外的可重构模块(Reconfigurable Modules)。所有这些工作都通过(Dynamic Function eXchange wziard)完成。

在这里,我们设置partion Definition name 为led,Reconfiguration module Name为led_4s

并且添加led_4s.v 文件。,如果由更多的RM 模块,想必也是通过这个方式添加。

5 开始FPGA 的综合(Run Synithesis),这是一个漫长的过程。

6 当综合完成之后,要在FPGA 中划出一个区域作为PM 的物理位置。

7. 实现及生成bit

结束语

到此为止,事情还没有完成。许多的疑问:

  • 如何加入PCAP或ICAP 接口模块
  • 上层软件如何编写
  •  从上面的设计过程看,在设计PR项目时,每个RM 的源代码已经完成,如果像Matlab/Simulink
  •  产生的verilog 代码,在项目的设计时没有确定代码,如何定义可重构分区呢?能够预留么?

慢慢来吧!

转自:https://blog.csdn.net/yaojiawan/article/details/122892902

posted on 2022-11-10 17:21  皮皮祥  阅读(509)  评论(0编辑  收藏  举报