可以运行vivado的云服务器,百度云服务器FPGA标准开发环境的逻辑开发与编译示例 - 全文...

镜像是云服务器实例运行环境的模板,包括操作系统和预装软件等配置。百度云为每个FPGA实例默认提供了专属公共镜像,用户可以按需选择适合的镜像类型。

bd517caac6e5d3413e44bcf5af4c2b48.png

概述

基于百度云自研的FPGA加速卡,提供了一套FPGA标准开发环境。您可以使用百度云提供的镜像工具包,在FPGA上开发与调试自己的业务功能,或者将已有的功能模块移植到FPGA加速卡上。

百度自研FPGA加速卡使用Xilinx 20nm KU115 FPGA。FPGA板卡带有4通道DDR4,每个通道72bit,带ECC,容量2GB,速率2400Mhz。FPGA通过PCIE 3.0x8和CPU相连。板卡的结构框图如下所示:

a0a7c6b051f238ef63ae711fb2e02625.png

基于上面的FPGA板卡,百度还提供的FPGA标准开发环境,其系统结构如下图:

8a6071876e0aad1219da5293047189c5.png

FPGA标准开发环境具有极大的灵活性:

您可以自行研发FPGA中动态部分的逻辑,包括KU115芯片的绝大部分资源,以及4个DDR4通道,让FPGA电路完成定制化的功能,

百度云提供驱动和应用参考设计,您只需修改软件侧的驱动和应用程序,调用FPGA完成特定的功能。

直接使用百度提供的工具包更换FPGA中动态部分的逻辑。

FPGA标准开发环境提供虚拟jtag工具,您可以使用vivado工具对FPGA进行调试。

FPGA 标准开发环境操作包括两部分:

FPGA软件驱动开发

以运行支持PE进行简单浮点向量加功能的示例程序为例:

1. 编译驱动,提供编译示例程序。

2. 运行示例程序。

FPGA逻辑开发

使用工具包开发和调试用户逻辑:

1. 使用Baidu_HW_design_toolkit编译实现您的动态逻辑。

2. 使用bin_pr_tools更换您的动态逻辑。

3. 使用Vivado对您的动态逻辑进行调试。

FPGA软件驱动开发

编译驱动

修改driver/Makefile中的KERNELDIR变量,使之指向当前内核的编译目录,一般为/lib/modules/$(uname -r)/build目录或/usr/src/kernels/$(uname -r)。

ed24f965892acbdc8662670cfda202ff.png

执行make,如果编译成功,当前目录下会生成xdma_xvc.ko驱动文件,如下图所示:

75382ebc174368cc4b402522443062df.png

执行insmod xdma_xvc.ko,装载上一步生成的驱动文件,在/dev目录下会出现如下设备文件/dev/xil_xvc/cfg_ioc0。

10c4c72ffc0231d17f7fa6d5d7f65714.png

编译示例程序

进入sample目录,执行make。如果编译成功,当前目录下生成sample、sample_user_irq等可执行文件,参见下图:

ef1022ebe52363de3384aecabdd9f3d8.png

运行示例程序

执行./sample,输出如下结果,PE正确地执行了浮点向量加功能。sample使用轮询寄存器方式检查命令结果是否完成。

执行./sample_user_irq,输出如下结果,PE正确地执行了浮点向量加功能。sample_user_irq使用中断方式检查命令结果是否完成。

关键代码示例

8959c98c250054bee3b96ecb3b95e2d4.png

395939735e2512ef1c0cd4a282863ac1.png

4788bd3a1f2e3bdbd2a7f120df377dfa.png

FPGA逻辑开发

使用Baidu_HW_design_toolkit编译实现您的动态逻辑

“Baidu_HW_design_toolkit”工具包,帮助将您开发的动态逻辑实现在FPGA中。

“Baidu_HW_design_toolkit”提供FPGA硬件逻辑所需的环境,只需将自己逻辑所需的相关的文件(如rtl代码,ip核,xdc约束等)放入指定的路径,然后执行脚本,即可生成用于烧写FPGA云服务器的逻辑镜像文件。

“Baidu_HW_design_toolkit”包含了三个子文件夹,build,common_files和usr_files.

usr_files存放用户的工程设计文件。

common_files存放FPGA云服务镜像工程的一些通用设计。如静态逻辑的dcp,ddr约束等。通常情况下,不建议您修改common_files目录中的内容。

build存放制作FPGA云服务器逻辑镜像所要执行的脚本,如果您具备丰富的FPGA开发经验,可以根据自己的需要修改脚本。例如,用更加适合的布局布线策略管理您的工程实现。

“Baidu_HW_design_toolkit”提供了两种流程制作FPGA云服务逻辑镜像,需要准备不同的设计文件:

Non_IPI流程

这种方式比较类似传统的FPGA工程实现方式,您需要准备好动态部分逻辑(也就是rp_bd_wrapper.rp_bd_i)的设计文件放入usr_files指定的目录,然后执行build目录下的run_nonIPI.tcl脚本。

IPI流程

这种方式采用vivado IP Integrator制作云服务逻辑镜像的动态部分逻辑(也就是rp_bd_wrapper.rp_bd_i)。你需要准备好IPI的设计文件放入usr_files和build下指定的目录,然后执行build目录下的run_IPI.tcl脚本。

使用bin_pr_tools更换您的动态逻辑

“bin_pr_tools”工具包,是更换FPGA动态部分逻辑的必要工具。在使用该工具包前,您需要确保FPGA的驱动程序已经加载。然后运行bin_pr_tools目录下的”load_pr_bin.sh”脚本即可更换您的动态部分逻辑。

$sudo sh load_pr_bin.sh base ./ver2/ver2_pr_region_parTIal.bin

OK set decouple! ...

OK loading clear bin! ...

OK loading pr region bin! ...

OK unset decouple! ...

OK soft reset rp_bd ...

successfully load custom bitstream!

parTIal clear bin: ./base/base_pr_region_parTIal_clear.bin

parTIal bin: ./ver2/ver2_pr_region_partial.bin

found clear bin base_pr_region_partial_clear.bin in the current partial bin file’s directory

copy bin base_pr_region_partial_clear.bin into ‘last_clear_bin’ directory

注意:由于更换动态部分逻辑时,需要写入当前动态逻辑对应的clear bin,您务必保存好clear bin文件,以便下次更新动态逻辑时使用。同时bin_pr_tools工具包也会保存新动态逻辑对应的clear bin文件。

使用Vivado对您的动态逻辑进行调试

百度云提供工具包类似日常使用vivado操作,对您的动态逻辑进行调试。

在使用该工具包前,您需要确保FPGA的驱动程序已经加载。

1. 打开xvc_server工具包,运行xvc_pcie服务。

2. 使用vivado工具,仅需几步就可以通过虚拟jtag识别FPGA设备。

3. 选择动态逻辑对应的probe文件,类似使用Vivado工具,对工程中的ila和vio进行功能调试和信号查看。

f5d380c541e82522d7d8fe45cfb82320.png

FPGA示例工程说明

概述

为方便您掌握FPGA云服务器的使用流程,快速创建自己定制的加速卡逻辑,百度云提供一个demo工程作为示例。

该demo工程支持了基于FPGA云服务器开发的几个基础功能,主要包括:

工程分成静态和动态两部分逻辑,支持基于pcie总线的partial reconfiguration开发及配置流程。

静态逻辑支持pcie-3.0-8x xdma,并提供了配套的driver。用户不能修改也无需关注静态部分的逻辑。

动态逻辑为用户自定制部分,用户需基于当前提供的接口实现所需功能逻辑。demo工程中的动态逻辑是一个element-wise向量加法模块,基于HLS开发。接口包括:

1. 一个axi slave(256bit)和一个axi lite slave(32bit)接口,可分别用于传输逻辑所需的数据和控制命令。

2. 4个axi master(512bit),用于连接DDR MIG控制器(可选)。

3. 中断、时钟。

支持基于pcie总线的ila debug,可在云服务器上的vivado中抓取信号波形进行调试。

您可根据此demo工程的结构及提供的配套脚本了解fpga云服务器的开发流程,并以该工程为基础,修改其中的动态逻辑,实现所需的其他功能。

工程结构

demo工程主要包含了两个部分,分别是static_bd_wrapper和rp_bd_wrapper。

其中static_bd_wrapper属于工程的静态部分,提供了pcie xdma,基于pcie的debug模块,flash控制器等。静态部分的逻辑不暴露给用户,用户不能修改也不用关心静态部分的逻辑。

rp_bd_wrapper则是动态逻辑,这部分逻辑中有rp_bd和其他一些组件。其中只有rp_bd是用户可以修改的内容。其他组件主要用于支持用户利用虚拟jtag进行调试或其他功能,这些组件不需要用户关心,用户不能修改。

rp_bd通过两组AXI总线与static_bd_wrapper传输数据,可以此为基础实现您所需的功能。

demo工程的rp_bd结构框图如下:

486b00c62e6cd131468499e5bdfbd507.png

模块 说明

Block Ram   rp_bd内部有一个64KB的block ram用来存储计算所用的数据和计算结果,这个block ram可同时被host和卡上的用户逻辑访问,这是通过rp_bd中的一个AXI Interconnect实现的。

AXI Interconnect   AXI Interconnect用于协调两个AXI master访问rp_bd中的Block Ram;static_bd内的xdma输出的AXI4连接到AXI Interconnect的一个slave端口,demo工程提供的drive支持host通过dma访问这个block ram;PE内的Vector Add模块输出的AXI4连接到AXI Interconnect的另一个端口,使得用户逻辑也可以访问这个block ram。

CU   命令处理单元,static_bd输出的AXI-lite接口连接到PE中的CU模块,CU模块解析从AXI lite收到的命令,并产生符合ap_ctrl总线的请求信号与Vector Add模块相连。ap_ctrl是通过HLS综合出的逻辑模块采用的一种标准状态控制总线。有关其详细介绍可以参考Xilinx ug902文档。

Vector Add   计算处理单元,Vector Add模块完成向量加法运算,他是使用HLS高级综合工具开发的,它的控制输入为一组HLS模块使用的ap_ctrl信号;他使用AXI总线协议将Block Ram中的数据读出,进行加法运算后,将数据写回Block Ram中。

PE工作流程

1. 软件发起dma_to_dev将输入向量A,B拷贝至dev;A,B的长度必须8个float数据对齐。(单精度浮点数)

2. 软件通过配置寄存器发起PE计算指令,然后等待PE计算完成。

3. PE计算完成后,通过中断通知CPU上的软件驱动程序。

4. 软件发起dma_from_dev将输出向量C拷贝至host。(单精度浮点数)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值