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)。

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

四、对比

相关推荐
叠层归一研究院25 分钟前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
IT_陈寒27 分钟前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
why-geo35 分钟前
Hermes Agent 与 Python 的会产生什么样的碰撞
人工智能·python·ai编程
正经教主43 分钟前
【FDE系列】阶段2:Day 29:FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战
人工智能·python·fde
时速GEO系统1 小时前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
咕泡科技1 小时前
咕泡科技FDE系列最新产品重磅发布!
人工智能·大模型·ai落地·fde·前沿部署工程师
犀利豆1 小时前
为什么全世界的 AI 都画不好一只骑自行车的鹈鹕
人工智能·llm·aigc
天天被压力1 小时前
【跨市场数据实战 #08】可转债折价机会怎么筛:3个接口抓比价、列表和实时盘口
java·人工智能·python
Selvaggia1 小时前
Diffusion Model 的基本原理与模型架构
算法
baopixiaoz2 小时前
BeeQuant × BeeAgent:用AI加速策略验证
大数据·人工智能·python·区块链