【Vitis Accel】1 - HLS 简介

本文介绍了HLS(High-Level Synthesis)在FPGA开发中的作用,详细阐述了HLS的工作过程,包括Scheduling部署、Binding捆绑和Control logic extraction控制逻辑提取。通过三个示例说明了如何在C语言中实现算法设计、验证和综合,并讨论了性能参数如面积、延迟和启动间隔。HLS使得开发者能够使用高级语言避免繁琐的HDL编程,生成针对FPGA的优化硬件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


HLS 简介

HLS: High-Level Synthesis

简单来说,HLS 是为了免去硬件设计者使用 HDL 编程 FPGA的步骤,用 C 语言完成算法设计、验证、综合过程控制,利用 FPGA 实现所需逻辑。


1. 工作过程

HLS 的工作主要分为以下三段:

1.1 Scheduling 部署

这一部分决定了运算操作在哪一个时钟周期完成。分配取决于:
a. 时钟周期的长度、频率
b. 由目标设备所定义的,运算操作完成所需的时间
c. 用户指定的优化指令

如果时钟周期足够长,或者目标设备足够快,将会有更多的运算操作在一个周期内完成。反之,有些运算操作将在多个周期完成。

1.2 Binding 捆绑

指定完成运算的硬件资源,HLS 需要目标设备的信息来完成此步骤。

1.3 Control logic extraction 控制逻辑提取

提取控制逻辑,建立有限状态机(FSM),以在 RTL 设计中顺序完成运算。

2. 综合过程

HLS 的对 C 程序的综合主要包含以下内容

  • 将顶层函数的变量综合为 RTL 的 I/O 接口
  • 将 C 函数综合成为 RTL 层次的块(Blocks) 。 如果 C 函数中有子函数的话,形成的RTL也由有对应的子模块组成。
  • C 函数中的循环 Loop 默认没有展开(rolled)。如果希望展开循环,并行执行的话,需要使用优化指令(optimization directivities)。Loop 也可以流水化执行。
  • C 语言数组在最终的 FPGA 设计中将被综合成为 RAM 块,或者UltraRAN块。如果数组是顶层函数接口,那么数组将被综合成为 ports 来访问设计外的 RAM 块。

HLS的综合会在默认行为,限制constraints,以及用户指定的优化指令(optimization directivities)的基础上建立一个优化过的实现。优化指令(optimization directivities)可以用来修改或者控制内部逻辑和 I/O ports的默认行为。这使得运用相同 C 代码生成不同硬件实现成为可能。

3. 性能参数

为了判断设计是否符合要求,综合报告会包含以下信息

  • 面积 Area:包括查找表 LUT,寄存器 registers&
### 修改 Vitis-AI TensorFlow 路径配置的方法 在 Vitis AI 开发环境中,路径配置通常涉及 Docker 容器内的工作目录以及模型编译、部署的相关参数。以下是关于如何修改 `vitis-ai-tensorflow` 路径的具体方法: #### 1. **调整 Docker 启动脚本中的挂载路径** 当启动 Vitis AI 的 Docker 容器时,可以通过编辑 `docker_run.sh` 脚本来指定新的主机路径映射到容器内部的工作目录。 默认情况下,Docker 启动命令如下所示: ```bash ./docker_run.sh xilinx/vitis-ai-tensorflow:<version> ``` 如果需要更改路径,则需编辑该脚本或将以下内容替换为自定义路径: ```bash #!/bin/bash HOST_DIR=/path/to/your/host/directory # 更改为主机上的目标路径 CONTAINER_DIR=/workspace # 容器内的工作目录,默认为 /workspace IMAGE_NAME=xilinx/vitis-ai-tensorflow:latest sudo docker run -it --rm \ -v ${HOST_DIR}:${CONTAINER_DIR} \ --network=host \ -e XILINX_VART_FIRMWARE_PATH=${CONTAINER_DIR}/firmware \ ${IMAGE_NAME} ``` 上述代码中 `${HOST_DIR}` 是主机上实际存在的路径,而 `${CONTAINER_DIR}` 则是容器内对应的挂载位置[^1]。 #### 2. **更新 Conda 环境变量** 进入已激活的 `vitis-ai-tensorflow` Conda 环境后,可能还需要重新设置某些环境变量以指向新路径下的资源文件夹。例如: ```bash conda activate vitis-ai-tensorflow export PYTHONPATH=$PYTHONPATH:/new/path/to/models # 添加额外模块搜索路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/new/lib # 更新动态链接库加载路径 ``` 这些操作确保 Python 和其他依赖项能够正确识别用户定义的新存储区域[^3]。 #### 3. **修改 PetaLinux 工程中的 Sysroot 设置** 对于嵌入式开发场景而言,除了基础软件栈外还需同步调整硬件平台相关的配置信息。具体做法是在 Petalinux SDK 下定位至 AArch64 架构交叉编译工具链所在目录,并确认其与最新版 DPU IP 版本兼容无误后再继续后续步骤[^2]: ```bash cd <Petalinux_SDK_Path>/images/linux/ cp rootfs.cpio.gz ../custom_rootfs.cpio.gz # 复制原始根文件系统镜像作为备份副本 tar xf custom_rootfs.cpio.gz # 解压以便于手动编辑其中的内容结构 mv old_libs_or_files new_location # 将原有库或者数据迁移到期望的目标子目录下 find . | cpio -H newc -o >../modified_rootfs.cpio # 打包成新的 CPIO 归档格式供最终烧录使用 gzip modified_rootfs.cpio # 压缩完成后的结果命名为 *.cpio.gz 文件形式保存下来即可。 ``` #### 4. **验证改动效果** 最后一步非常重要——即测试整个流程是否按照预期正常运作起来。这包括但不限于以下几个方面检查点: - 是否能成功拉取远程仓库里的预训练权重; - 编译生成的目标二进制能否顺利加载运行时驱动程序接口调用; - 实际推理性能指标对比分析前后差异情况等等[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值