news 2026/3/1 3:43:15

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/2/28 6:49:53

如何3分钟配置智能跳过:彻底告别手机弹窗的终极方案

如何3分钟配置智能跳过&#xff1a;彻底告别手机弹窗的终极方案 【免费下载链接】LiTiaoTiao_Custom_Rules 李跳跳自定义规则 项目地址: https://gitcode.com/gh_mirrors/li/LiTiaoTiao_Custom_Rules 还在为手机上不断弹出的广告、更新提示和各种权限请求而烦恼吗&#…

作者头像 李华
网站建设 2026/2/13 15:40:07

基于spring boot的体育馆预约系统

随着全民健身热潮的兴起&#xff0c;体育馆预约系统应运而生&#xff0c;旨在为用户提供便捷的场地预订服务。该系统采用 Android 平台进行前端开发&#xff0c;利用 Java 语言编写简洁高效的代码&#xff0c;结合 Spring Boot 框架的强大功能&#xff0c;实现后端服务的快速搭…

作者头像 李华
网站建设 2026/2/27 19:20:56

VAP动画渲染技术终极性能实战调优深度解析

VAP动画渲染技术终极性能实战调优深度解析 【免费下载链接】vap VAP是企鹅电竞开发&#xff0c;用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap 技术痛点与性能瓶颈分析…

作者头像 李华
网站建设 2026/2/26 9:28:22

BiliTools终极指南:2026年最完整的B站资源下载解决方案

BiliTools终极指南&#xff1a;2026年最完整的B站资源下载解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bil…

作者头像 李华
网站建设 2026/2/12 15:53:53

OCR识别云服务:基于CRNN的SaaS平台搭建

OCR识别云服务&#xff1a;基于CRNN的SaaS平台搭建 &#x1f4d6; 项目背景与技术选型动因 在数字化转型加速的今天&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术已成为信息自动化处理的核心工具之一。从发票报销、证件录入到文档归档&#xff0c;OCR能够将图像中的…

作者头像 李华
网站建设 2026/2/2 3:49:26

双倍效率:Z-Image-Turbo+OpenVINO云端加速全攻略

双倍效率&#xff1a;Z-Image-TurboOpenVINO云端加速全攻略 如果你是一名算法工程师&#xff0c;正在为Z-Image-Turbo在Intel平台上的推理速度优化而头疼&#xff0c;那么这篇文章正是为你准备的。我们将详细介绍如何利用预集成OpenVINO的优化环境&#xff0c;跳过繁琐的交叉编…

作者头像 李华