本文描述基于f3实例的RTL(Register Transfer Level)开发流程。
前提条件
- 已注册阿里云账号。如还未注册,请先完成账号注册。
- 已创建f3实例,并且实例能访问公网。具体操作,请参见创建f3实例。
- 已在f3实例所在安全组中添加规则放行SSH(22)端口。具体操作,请参见添加安全组规则。
- 登录ECS管理控制台,在f3实例的详情页上,获取实例ID。
- 已在华东2创建一个OSS Bucket,专门用于FaaS服务。具体操作,请参见创建一个OSS Bucket。
说明 这个Bucket会对FaaS管理账号开通读写权限,因此不建议您存储与FaaS无关的内容。
- 使用RAM用户操作FPGA,必须先完成以下操作:
背景信息
开始操作之前,您需要了解以下注意事项。
- 本文所述所有操作必须由同一个账号在同一个地域执行。
- 强烈建议您使用RAM用户操作FPGA实例。基于最小授权原则,建议您不要对RAM用户过度授权,而只授予RAM用户刚好满足其工作所需的权限,例如访问OSS bucket获取原始DCP/xclbin文件、上传Vivado编译log、操作指定的ECS实例等。您还需要指定RAM角色AliyunFAASDefaultRole,FaaS服务默认使用此角色来访问您在其他云产品中的资源,其权限策略AliyunFAASRolePolicy还包括KMS相关的权限,以便您使用KMS服务对IP进行加密。
操作步骤
- 远程连接Linux实例。
说明 编译工程时需要2~3小时。建议您使用nohup或者VNC连接实例,以免编译时意外退出。
- 下载并解压RTL参考设计。
- 配置环境。
说明 配置环境主要包括安装xdma驱动或xocl驱动,设置vivado环境变量,检查vivado license,检测aliyun-f3 sdaccel平台,2018.2 runtime配置和faascmd版本检测 。
- 指定OSS存储空间。
faascmd config --id=<hereIsYourSecretId> --key=<hereIsYourSecretKey> #将<hereIsYourSecretId>和<hereIsYourSecretKey>替换为您的RAM用户AK信息
faascmd auth --bucket=hereIsYourBucket # 将<hereIsYourBucket>替换为您创建的OSS Bucket名称
- 运行以下命令编译RTL工程。
cd <您之前解压的路径>/hw/ # 进入解压后的hw路径
sh compiling.sh
- 上传网表文件,并下载FPGA镜像。您可以采用脚本化流程或者单步操作流程完成该步骤。
- 脚本化流程:仅适用于配备单块FPGA卡的f3实例。
- 运行以下命令上传并生成镜像文件。
sh /root/xbinst_oem/tool/faas_upload_and_create_image.sh <需要上传的压缩包文件名>

- 下载镜像文件。
sh /root/xbinst_oem/tool/faas_download_image.sh <压缩包的文件名> <0/1> # 最后的数字<0/1>为实例中fpga的序号
0为FaaS实例中的第一个FPGA,单芯片实例序号一律为0,对多芯片实例,例如4芯片的序号为0,1,2,3。
如果需要对多个FPGA下载同一个镜像,可以在命令的末尾添加相应的序号。例如,对4芯片FPGA下载同一镜像的命令为:
sh /root/xbinst_oem/tool/faas_download_image.sh <压缩包的文件名> 0
sh /root/xbinst_oem/tool/faas_download_image.sh <压缩包的文件名> 1
sh /root/xbinst_oem/tool/faas_download_image.sh <压缩包的文件名> 2
sh /root/xbinst_oem/tool/faas_download_image.sh <压缩包的文件名> 3
- 单步操作流程:使用faascmd工具进行操作。具体操作,请参见使用faascmd。
- 依次运行以下命令,将压缩包上传到您个人的OSS Bucket,再将存放在您个人OSS Bucket中的gbs上传到FaaS管理单元的OSS Bucket中。
faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=<hereIsFPGAImageName> --tags=<hereIsFPGAImageTag> --encrypted=false --shell=<hereIsShellVersionOfFPGA>


- 运行命令查看FPGA镜像是否处于可下载状态。
faascmd list_images
在返回结果中:
- 如果"State"为compiling,表示FPGA镜像处于编译状态,您需要继续等待。
- 如果"State"为success,表示FPGA镜像已经可以下载。您需要找到并记录FpgaImageUUID。
- 运行以下命令。在命令返回结果中,您需要找到并记录FpgaUUID。
faascmd list_instances --instanceId=<hereIsYourInstanceId> # 将<hereIsYourInstanceId>替换为f3实例ID
- 运行以下命令下载FPGA镜像。
# 将<hereIsYourInstanceId>替换为f3的实例ID,<hereIsFpgaUUID>替换为您获取的FpgaUUID,<hereIsImageUUID>替换为您获取的FpgaImageUUID
faascmd download_image --instanceId=<hereIsYourInstanceId> --fpgauuid=<hereIsFpgaUUID> --fpgatype=xilinx --imageuuid=<hereIsImageUUID> --imagetype=afu --shell=<hereIsShellVersionOfFpga>

- 运行以下命令查看镜像是否下载成功。
# 将<hereIsFpgaUUID>替换为您获取的FpgaUUID,<hereIsYourInstanceId>替换为f3实例ID。
faascmd fpga_status --fpgauuid=<hereIsFpgaUUID> --instanceId=<hereIsYourInstanceId>
以下为返回结果示例。如果显示的FpgaImageUUID与您获取的FpgaImageUUID一致,并且显示"TaskStatus":"valid",说明镜像下载成功。

FAQ
问题一:上传镜像时出现异常,如何查看异常详情?
如果您的工程在上传生成镜像的过程中出现异常,例如云上编译服务器编译报错,您可以通过以下两种方式来查看异常详情:
- 查看faas_compiling.log。使用上传脚本faas_upload_and_create_image.sh时,如果编译失败会自动下载并打印faas_compiling.log到terminal中。
- 手动执行命令查看编译log文件:
sh /root/xbinst_oem/tool/faas_checklog.sh <bit.tar.gz之前上传的压缩包文件名>
问题二:如何重新加载镜像?
您可以参考以下步骤重新加载镜像:
- 卸载驱动。
- 如果您安装了
xdma
驱动,则需要在实例中运行sudo rmmod xdma
命令卸载驱动。
- 如果您安装了
xocl
驱动,则需要在实例中运行sudo rmmod xocl
命令卸载驱动。
- 下载镜像。
您可以使用以下两种方式之一:
- 使用脚本:
sh faas_download_image.sh bit.tar.gz <0/1> #最后的数字为实例中FPGA的序号
- 使用faascmd:
faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=hereIsShellVersionOfFpga
- 安装驱动。