HLS高层次综合设计技巧--循环merge和循环split

一、loop_merge & loop_split

1.loop merge循环合并是有指令的

2.loop split也就是循环拆分

loop fission或者loop distribution这个没有指令,需要开发者手动来进行拆分。

3.循环合并(Loop Merge) 和 循环拆分(Loop Split / Fission) 是两种方向相反的优化策略,分别用于解决不同的问题。

二、loop merge

1.将多个连续的循环合并,减少状态机开销,共享资源;

2.#pragma HLS LOOP_MERGE 指令,用于将多个连续的循环合并为一个循环。合并后,原本多个循环的控制逻辑(状态机、计数器等)被共享,循环体可能被拼接在一起顺序执行。

3.在 HLS 综合中,每个循环通常会被映射为一个有限状态机(FSM),包含初始化、条件判断、循环体执行和递增计数等状态。多个连续的循环会生成多个 FSM,它们串行工作。循环合并将这些 FSM 合并成一个,减少了状态转换开销和硬件资源(如计数器、比较器、多路选择器)。此外,如果循环体之间没有数据依赖,合并后可能增加资源共享的机会(例如乘法器、加法器等可时分复用)。

4.合并的好处:

多个短循环:当多个循环的迭代次数相同或相近,且循环体较简单时,合并可以减少控制逻辑面积。

顺序执行的循环:循环之间没有数据依赖,可以安全合并。

资源共享:如果多个循环使用了相同类型的运算单元(如多个乘法器),合并后可以共享这些资源,降低面积。

减少延迟:合并后消除了循环之间的状态机切换延迟,可能略微提高吞吐率。

三、loop split

1.将大循环,手动拆分为多个循环;

2.当循环体非常庞大或包含多种不同类型的操作时,综合器可能会面临以下问题:

资源冲突:不同操作可能需要同一类资源(如 DSP 块),导致调度困难。

数据依赖复杂:多种操作混合在一起,使数据依赖分析变得复杂,阻碍流水线或并行化。

存储访问模式不佳:如果循环中同时访问多个大数组,可能导致 BRAM 端口冲突。

将循环拆分后,每个小循环专注于一种或一类操作,使得:

每个循环的数据依赖更简单,便于流水线化。

可以为不同循环应用不同的优化指令(例如对一个循环做 PIPELINE,对另一个做 UNROLL)。

每个循环可以独立进行数组分区,优化存储带宽。

四、对比

相关推荐
青蓝智慧马老师3 分钟前
大模型应用落地,到底靠什么?RAG、智能体和上下文工程一次讲清
人工智能
纪念 2299 分钟前
C++算法(六)
开发语言·c++·算法
JAVA_AI人工智能项目实战14 分钟前
深度学习实验笔记
人工智能·深度学习·语言模型·自然语言处理
forest_0916 分钟前
当 AI 搜索开始「自我进化」,谁来进化它的核实?——「已核实」结论复核器:3 条结论挖出 2 个洞(附可运行代码)
人工智能·python·机器学习·prompt·agi
金海星科技17 分钟前
船舶交通管理中心的人工智能值守:从“听、说、读、写“看人机协同
人工智能·macos·xcode
释厄62318 分钟前
AI 军备竞赛悖论——为 AI 卖游戏但 AI 需要游戏母场景
人工智能·游戏·kotlin
十铭忘22 分钟前
Orin新系统常用软件安装教程
人工智能
云和恩墨36 分钟前
Mopheus Runtime深度剖析:如何将Provider CLI变成企业级智能体运行时
人工智能
X54先生(人文科技)38 分钟前
百度智能对 X54 先生学科底色评估
人工智能·深度学习·百度·架构
LaughingZhu39 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion