全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

下载bitstream文件到FPGA芯片

更新时间:2017-12-06 20:56:50

本文介绍了如何生成并下载自定义bitstream文件到一个指定的FPGA芯片里。

注意
强烈建议您使用RAM用户操作FPGA实例。为了防止意外操作,您需要让RAM用户仅执行必要的操作。在操作FPGA镜像及下载时,因为您需要从指定的OSS空间下载原始DCP工程,所以您需要为FaaS账号创建一个角色,并授予临时权限,让FaaS账号可以访问指定的OSS空间。如果需要对IP加密,需要授予RAM用户一些KMS相关的权限。如果需要做权限检查,还需要授予查看用户资源的权限。

前提条件

创建f1实例

您必须先 开通OSS服务,用于上传您自定义的bitstream文件。

如果需要加密bitstream,您还需要 开通密钥管理服务(KMS)

使用RAM用户操作FPGA,需要 创建RAM用户授权创建RAM角色授权

操作步骤

您可以按以下步骤生成并下载bitstream。

第 1 步. 生成bitstream

  1. 上传工程到指定的OSS空间。这个空间必须与授权RAM用户里使用的OSS空间相同。

    • 如果正在使用Intel FPGA,您需要先将最终的gbs文件上传到您的OSS空间里。
    • 如果使用Xilinx FPGA,您需要先将布局布线后的DCP文件上传到您的OSS空间里。
  2. 调用Python SDK里的CreateFpgaImageTask接口,创建最终的bitstream。可以参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import CreateFpgaImageTaskRequest
    4. request = CreateFpgaImageTaskRequest.CreateFpgaImageTaskRequest()
    5. request.set_Bucket(<DCP/bitstream所在的OSS bucket>)
    6. request.set_Object(<DCP/bitstreamOSS中的object name>)
    7. request.set_FpgaType(<Fpga类型>)
    8. request.set_ShellUUID(<shell类型>)
    9. request.set_Name(<给镜像取个方便记的名字>)
    10. request.set_RoleArn(<给faas-admin账号创建的角色>)
    11. request.set_Encrypted(<是否加密, True/False>)
    12. request.set_KeyId(<如果加密,指定KMSkeyID>)
    13. result = clt.do_action_with_exception(request)
    14. print result
  3. 调用Python SDK里的DescribeFpgaImages接口,查看bitstream是否已经生成。

    说明
    CreateFpgaImageTask是个异步操作。您提交请求后,后台服务器会做一些安全检查,如果是Xilinx工程,后台服务器还需要从DCP工程生成bitstream,这需要一段时间。

    可以参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import DescribeFpgaImagesRequest
    4. request = DescribeFpgaImagesRequest.DescribeFpgaImagesRequest()
    5. result = clt.do_action_with_exception(request)
    6. print result

第 2 步. 下载bitstream

生成bitstream后,您可以按以下步骤将bitstream下载到指定的FPGA。

  1. 您可以调用Python SDK里的DescribeFpgaInstances接口,查看当前实例下你的FpgaUUID(FPGA唯一识别标识)。请参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import DescribeFpgaInstancesRequest
    4. request = DescribeFpgaInstancesRequest.DescribeFpgaInstancesRequest()
    5. request.set_InstanceId(<指定实例ID>)
    6. request.set_RoleArn(<给faas-admin账号创建的角色>)
    7. result = clt.do_action_with_exception(request)
    8. print result
  2. 您的bitstream使用fpgaImageUUID作为唯一标识,通过调用DescribeFpgaImages接口可以查看您账号下所有bitstream的相关信息。请参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import DescribeFpgaImagesRequest
    4. request = DescribeFpgaImagesRequest.DescribeFpgaImagesRequest()
    5. result = clt.do_action_with_exception(request)
    6. print result
  3. 调用Python SDK里的LoadFpgaImageTask接口,将指定的bitstream下载到指定的FPGA里。请参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import LoadFpgaImageTaskRequest
    4. request = LoadFpgaImageTaskRequest.LoadFpgaImageTaskRequest()
    5. request.set_InstanceId(<指定实例ID>)
    6. request.set_FpgaUUID(<需要操作的FPGA>)
    7. request.set_FpgaType(<Fpga类型>)
    8. request.set_FpgaImageUUID(<需要下载的镜像UUID>)
    9. request.set_FpgaImageType(<镜像类型>)
    10. request.set_ShellUUID(<指定shell>)
    11. request.set_RoleArn(<给faas-admin账号创建的角色>)
    12. result = clt.do_action_with_exception(request)
    13. print result
  4. 调用Python SDK里的DescribeLoadTaskStatus接口,查看下载是否成功。请参考以下示例。

    1. from aliyunsdkcore import client
    2. clt = client.AcsClient(<您的AccessKeyID>,<您的AccessKeySecret>,'cn-hangzhou')
    3. from aliyunsdkfaas.request.v20170824 import DescribeLoadTaskStatusRequest
    4. request = DescribeLoadTaskStatusRequest.DescribeLoadTaskStatusRequest()
    5. request.set_FpgaUUID(<需要操作的FPGA>)
    6. request.set_InstanceId(<指定实例ID>)
    7. request.set_RoleArn(<给faas-admin账号创建的角色>)
    8. result = clt.do_action_with_exception(request)
    9. print result

至此,您已经将自定义的bitstream文件下载到指定的FPGA里。

本文导读目录