本文介绍如何使用f1 RTL(Register Transfer Level)。

前提条件

在开始本教程之前,请确保您已完成下列操作:
  • 已创建f1实例并且实例能访问公网。
    说明 f1实例只能使用镜像市场的FaaS F1基础镜像。更多详情,请参见创建f1实例
  • 已在f1实例使用的安全组中添加规则放行SSH(22)端口。具体操作,请参见添加安全组规则
  • 已在ECS管理控制台f1实例详情页上获取实例ID。
  • 已开通OSS服务并创建一个OSS Bucket用于上传您的文件。Bucket与f1实例必须属于同一个账号、同一个地域。具体操作,请参见创建一个OSS Bucket
  • 如果需要加密服务,您还需要开通密钥管理服务。具体操作,请参见开通密钥管理服务(KMS)
  • 若使用RAM用户操作FPGA,必须完成以下操作:
  • 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册

背景信息

在开始本教程之前,请阅读以下注意事项:
  • 本教程中所有操作都必须由同一个账号在同一地域里执行。
  • 强烈建议您使用RAM用户操作FaaS实例。为了防止意外操作,您需要让RAM用户仅执行必要的操作。在操作FPGA镜像及下载时,因为您需要从指定的OSS Bucket下载原始DCP工程,所以您必须为FaaS管理账号创建一个角色,并授予临时权限,让FaaS管理账号访问指定的OSS Bucket。如果需要对IP加密,必须授予RAM用户KMS相关权限。如果需要做权限检查,必须授予查看用户资源的权限。

操作步骤

  1. 远程连接f1实例。具体操作,请参见远程连接Linux实例
  2. 运行以下命令配置基础环境。
    source /opt/dcp1_1/script/f1_env_set.sh
  3. 依次运行以下命令编译工程。
    cd /opt/dcp1_1/hw/samples/dma_afu
    afu_synth_setup --source hw/rtl/filelist.txt build_synth
    cd build_synth/
    run.sh
    说明 编译时间较长,请耐心等待。
  4. 制作镜像。
    1. 依次运行以下命令配置PATH环境变量并为faascmd文件添加可执行权限。
      export PATH=$PATH:/opt/dcp1_1/script/
      chmod +x /opt/dcp1_1/script/faascmd
    2. 依次运行以下命令初始化faascmd配置。
      # 将hereIsYourSecretId替换为您的AccessKey ID,hereIsYourSecretKey替换为您的AccessKey Secret
      faascmd config --id=hereIsYourSecretId --key=hereIsYourSecretKey
      # 将hereIsYourBucket换为华东1地域里OSS Bucket名称
      faascmd auth --bucket=hereIsYourBucket
    3. /opt/dcp1_1/hw/samples/dma_afu目录下,运行以下命令上传gbs文件。
      faascmd upload_object --object=dma_afu.gbs --file=dma_afu.gbs
    4. 运行以下命令制作镜像。
      # 将hereIsYourImageName替换为您的镜像名称
      faascmd create_image --object=dma_afu.gbs --fpgatype=intel --name=hereIsYourImageName --tags=hereIsYourImageTag --encrypted=false --shell=V1.1
  5. 下载镜像。
    1. 运行以下命令查看镜像是否制作成功。
      faascmd list_images
      返回结果里,如果出现"State":"success",表示镜像制作成功。请记录返回结果里显示的FpgaImageUUID的值,稍后会用到。
      download_image
    2. 运行以下命令获取FPGA ID。
      # 将hereIsYourInstanceId替换为您的f1实例ID
      faascmd list_instances --instanceId=hereIsYourInstanceId
      返回结果如下图所示。请记录FpgaUUID的值。
      get_fpga-id
    3. 运行以下命令下载FPGA镜像到f1实例。
      # 将hereIsYourInstanceID替换为刚刚保存的实例ID;将hereIsFpgaUUID替换为上一条命令中记下的FpgaUUID;将hereIsImageUUID替换为上一步记下FpgaImageUUID
      faascmd download_image --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID --fpgatype=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V1.1
    4. 运行以下命令检查镜像是否下载成功。
      # 将hereIsYourInstanceID替换为刚刚保存的实例ID;将hereIsFpgaUUID替换为上一条命令中记下的FpgaUUID
      faascmd fpga_status --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID
      如果返回结果中出现"TaskStatus":"operating",且FpgaImageUUID的值和下载镜像时FpgaImageUUID的值一致,说明下载成功。
      download_success
  6. 依次运行以下命令测试。
    cd /opt/dcp1_1/hw/samples/dma_afu/sw
    make
    sudo LD_LIBRARY_PATH=/opt/dcp1_1/hw/samples/dma_afu/sw:$LD_LIBRARY_PATH ./fpga_dma_test 0
    说明 如果没有开启Huge pages,运行以下命令启用Huge pages。
    sudo bash -c "echo 20 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages"
    输出结果如下图所示,说明测试完成。
    test_complete