news 2026/6/15 18:37:43

vivado hls设计总结(十七)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vivado hls设计总结(十七)

一、数组
1.数组综合后,通常作为内存来实现
内存包括RAM,ROM或者FIFO

2.顶层函数接口上的数组综合为内存接口,用于访问外部的内存接口

3.数组的大小决定了vivado hls工具将数组作为SRL综合,也可能将
数组作为block RAM,或者LUTRAM或者UltraRAM来设计

4.数组作为内存访问可能会存在性能瓶颈。因为内存端口的数量会限制对
数据的访问

5.数组初始化如未谨慎执行,则可能导致 RTL 中不必要的长时间复位和初始化

二、数组的访问和性能
以下代码示例显示了访问数组导致最终 RTL 设计性能受限的案例。在此示例中,对 mem[N] 数组执行了 3 次访问以创
建求和结果。
#include "array_mem_bottleneck.h"
dout_t array_mem_bottleneck(din_t mem[N]) {
dout_t sum=0;
int i;
SUM_LOOP:for(i=2;i<N;++i)
sum += mem[i] + mem[i-1] + mem[i-2];
return sum;
}
在综合期间,该数组作为 RAM 来实现。如果将此 RAM 指定为单端口 RAM,那么将无法通过对 SUM_LOOP 循环进行
流水线化来实现在每个时钟周期内处理新的循环迭代的目标。

三、数组在接口上优化情况
要配置 Vivado HLS 创建这些端口的方式,请执行以下操作:
• 使用 INTERFACE 指令将接口指定为 RAM 或 FIFO 接口。
• 使用 RESOURCE 指令将 RAM 指定为单端口或双端口 RAM。
• 使用 RESOURCE 指令指定 RAM 时延。
• 使用数组最优化指令(Array_Partition、Array_Map 或 Array_Reshape)来重新配置数组结构,从而重新
配置 I/O 端口数量。

四、vivado hls中array数组初始化问题说明
1.xilinx官方是建议设计者将数组使用static来声明的,但是并不强制
2.使用static修饰数组,可以确保vivado hls以rtl中内存的方式来实现数组,
并且初始化数组不会有时钟开销。
3.如果在函数内部有一个局部数组,没有使用static修饰,那么这个局部数组的
初始化在每次函数调用的时候都会进行初始化,综合后,每次执行设计模块的时候,
都会要对RAM写一次初始值。那么对于单口RAM,下面的代码初始化需要8个clock;
int coeff[8] = {-2, 8, -4, 10, 14, 10, -4, 8, -2};
如果coeff的数组大小为1024,那么初始化需要1024个时钟周期,那么这会造成一个问题,
就是在对coeff初始化期间,无法执行任何依赖于coeff的任何运算。

4.如果使用static来修饰coeff
static int coeff[8] = {-2, 8, -4, 10, 14, 10, -4, 8, -2};
这个初始化和rtl是一样的,就是vivado hls会对rtl设计和FPGA的比特流中的变量进行初始化。
这个在程序从flash加载到FPGA的过程中完成的,而不是在程序跑起来需要经历多个时钟周期来初始化内存,
这个设计可以确保大型内存初始化不会产生任何运算开销。

5.RTL配置命令可以指定应用复位后,静态变量是否返回其初始化状态。如果执行复位操作后内存将
返回初始化状态,就会导致运算开销,这个需要经历多个周期才能完成值的复位。每个值必须写入每个内存地址。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:47:31

5分钟快速上手:ebook2audiobook电子书转语音神器终极指南

5分钟快速上手&#xff1a;ebook2audiobook电子书转语音神器终极指南 【免费下载链接】ebook2audiobook Convert ebooks to audiobooks with chapters and metadata using dynamic AI models and voice cloning. Supports 1,107 languages! 项目地址: https://gitcode.com/Gi…

作者头像 李华
网站建设 2026/6/15 11:38:11

Redmi AX3000终极改造指南:从家用路由到专业网络平台

Redmi AX3000终极改造指南&#xff1a;从家用路由到专业网络平台 【免费下载链接】openwrt-redmi-ax3000 Openwrt for Redmi AX3000 / Xiaomi CR8806 / Xiaomi CR8808 / Xiaomi CR8809 项目地址: https://gitcode.com/gh_mirrors/op/openwrt-redmi-ax3000 想要让手中的Re…

作者头像 李华
网站建设 2026/6/15 11:35:58

VMPDump终极指南:简单快速实现VMP脱壳与逆向分析

VMPDump终极指南&#xff1a;简单快速实现VMP脱壳与逆向分析 【免费下载链接】vmpdump A dynamic VMP dumper and import fixer, powered by VTIL. 项目地址: https://gitcode.com/gh_mirrors/vm/vmpdump 在当今软件保护技术日益复杂的背景下&#xff0c;VMPDump作为一款…

作者头像 李华
网站建设 2026/6/15 11:38:12

边缘计算:在迷你设备上优化运行Z-Image-Turbo的奇技淫巧

边缘计算&#xff1a;在迷你设备上优化运行Z-Image-Turbo的奇技淫巧 如果你是一名物联网开发者&#xff0c;想在树莓派或类似边缘设备上集成轻量级图像生成功能&#xff0c;但受限于算力资源&#xff0c;这篇文章就是为你准备的。Z-Image-Turbo作为一款专为边缘计算优化的文生图…

作者头像 李华
网站建设 2026/6/15 11:37:46

Z-Image-Turbo商业授权解析:从部署到上线的完整路径

Z-Image-Turbo商业授权解析&#xff1a;从部署到上线的完整路径 对于创业公司而言&#xff0c;快速部署高效的AI图像生成系统是提升产品竞争力的关键。Z-Image-Turbo作为一款开源的高性能图像生成模型&#xff0c;凭借其亚秒级的生成速度和出色的图像质量&#xff0c;成为许多…

作者头像 李华
网站建设 2026/6/15 11:36:36

告别CAD软件学习曲线:用AI文字描述生成专业机械设计

告别CAD软件学习曲线&#xff1a;用AI文字描述生成专业机械设计 【免费下载链接】text-to-cad-ui A lightweight UI for interfacing with the Zoo text-to-cad API, built with SvelteKit. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui 还在为复杂的CA…

作者头像 李华