首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用FPGA加速分布式计算(2)

利用FPGA加速分布式计算(2)

计算线程将输入- 结果数据集的地址发送到 PRR 外设的从接口,并启动PRM 的自动数据集处理功能。管理结构为每个数据集提供这些地址,并在确保结果数据完全可用后设置“完成”标志。在目前的客户端软件概念版本中,计算线程和发送线程通过该结构通信,由发送线程反复检查完成位, 并将lwip_write() 调用存储在存储器中的结果。
在测试 SoC 客户端时,我们发现如果在 PRR 重配置过程中启用全部中断,Xilkernel 的定时器会产生调度函数访问 MicroBlaze,使重配置过程随机发生卡住的状况。如果禁用全部中断,或在没有 Xilkernel 的支持下,对SoC 客户端的 MicroBlaze 处理器使用独立的软件模块,就不会发生这种情况。
配备例化PRM 的总线主控外设
为在 PRM 和外部存储器之间实现自控激励数据和结果的交换,我们将总线主外设构建为一个带数据路径和控制路径的处理器元件(如图 4 所示)。在数据路径中,我们在两个深度均为16 个字的 FIFO 模块之间嵌入 PRM接口,以补偿通信和数据传输延迟。数据路径的两个 FIFO 均直接连接到PLB 的总线主接口。这样,我们通过有限状态机 (FSM) 的直接数据传输,大幅降低时间。由于不采用软件,所以 MicroBlaze 的寄存器文件中不发生中间数据存储。本 RISC 处理器的“加载- 存储”架构一直需要占用两个总线传输周期,用于从某个地址加载 CPU 寄存器,然后将寄存器的内容存储到另一个 PLB 连接的设备。由于从 MicroBlaze 到存储器控制器的DXCL 数据高速缓存链路构成 PLB 的旁路,因此这些“加载- 存储”周期在时序上不能得到改善。这是因为接收到的数据和发送的计算结果都是逐字一次性处理,没有发挥高速缓存的作用。由此 PRR 外设的活动与 MicroBlaze 主软件的处理脱钩,因而 PRR 数据传输不会导致更多的 Xilkernel 环境切换。但仍然不可避免地出现两个主设备竞争总线访问的情况。

外设的从接口含有四个基于软件驱动的寄存器,可为控制路径提供输入和输出数据集的起始地址和终点地址。另一个软件寄存器为 FSM 设定“起始”位,用于初始化主数据传输周期。完整的数据处理周期的状态经第五个软件寄存器的地址提供给客户端软件。
根据控制路径的 FSM 的状态图可以看出,应该采取让到 PLB 的写入周期优先的策略(图5)。从 OUT_FIFO 提取数据优先于向 IN_FIFO 写入数据,防止 OUT_FIFO 为满时,阻止 PRM 处理算法。读取或写入外部存储器可交替进行,因为每次只能使用一种总线访问方式。当来自客户端的计算线程的软件复位启动 FSM(图 3)时,第一件事就是从外部存储器读取(状态 READ_REQ)。自此,总线主设备就受状态 STARTED 提供的转换条件所提供的决策逻辑的控制(表 1)。


Mealy FSM 输出(标记Exit/)让地址计数器在总线传输完成时递增。这里两个计数器都直接导入到 FSM代码中。一般情况下我们倾向于将定时器和地址计数器分开实现为仅用FSM 输出使能的单独时钟进程,以便让计数器的保持小规模的转换逻辑以及尽量避免将多路复用器输入用于计数器状态反馈。对于此点,XST 综合编译器的结果将 RTL 原理图清楚地体现为并行于可加载计数器的 FSM 抽象,其中的时钟使能输入由预期状态解码逻辑驱动。尽管行为级的 VHDL编码方式更容易让人理解,使用 FPGA资源和简单原语也不会影响功能。
用 PLANAHEAD 设置动态部分
FPGA 中静态和动态部分的配置这一设计流程是一个复杂的开发过程,需要用 PlanAheadTM 物理设计约束工具进行多步操作。第一步就是给在ML505 开发板上实现的由 PetaLinux驱动的动态重配置平台编写设计流程脚本。[6] 就当前迭代而言,将 PRR直接集成到外设的用户逻辑中的设计步骤与过去通过添加总线宏和器件控制寄存器(DCR) 用作 PRM 的 PLB接口、添加 PLB-DCR 桥接器实现总线宏的做法相比更实际。
下面的代码摘自 PlanAhead 项目的 UCF 文件,说明我们如何使用AREA_GROUP 约束确定动态部分的大小和位置:


内部的部分重配置区域的命名方法通过为其指定实例名 PRR,并将实例名相连(prm_interface.vhd)。对我们希望囊括在所需的 PRR 中的全部 FPGA 资源而言,我们用设置左下方坐标和右上方坐标的方法来划定一个矩形区域。
这种特殊的方法只能覆盖 Slice和 BRAM,因为可用的 DSP 元件属于专用时钟区域,归多端口存储器控制器 (MPMC) 设计使用(表 2)。

为避免 ISE® 生成的 PRM 网表使用专属资源,我们将综合选项设置为:dsp_utilization_ratio = 0;use_dsp48 = false;iobuf = false。最后,从 FPGA 编辑器观察到静态部分的布局完全与 PRR 分开,PRR 在本例中占用的资源极少(图 6)。

继承事业,薪火相传
返回列表