news 2026/8/26 15:07:04

vivado hls设计优化(十五)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vivado hls设计优化(十五)

一、循环优化
1.循环可以流水线化,可以展开,可以部分展开,可以扁平化,可以合并。
2.对于循环的索引index变量,避免使用全局变量,这个不利于优化。


二、变量循环边界
1.循环的边界如果是变量,将禁止执行vivado hls可应用的某些最优化操作;
2.如果循环的边界是顶层函数的参数传入过来的,那么认为循环边界是变量
3.如果循环的边界是变量,那么会阻止工具去判断循环的时延,时延将是?问号
解决办法:
使用tripcount行程来约束说明;
或者将c语言代码中使用assert宏定义。
4.由于变量边界循环无法展开,因此不仅阻止应用展开 (unroll) 指令,而且还会阻止将循环上层的层次流水线化
5.当循环或函数实现流水线化后,Vivado HLS 即可将函数或循环下层层级中的所有循环展开。如果在此层
级中存在具有变量边界的循环,它就会阻止流水线化。

三、对含有变量边界的循环的解决办法
对于含变量边界的循环,解决方案是通过循环内部的条件执行来将循环迭代次数设置为固定值。可重写变量循环边界示
例中的代码,如以下代码示例所示。此处循环边界显式设置为变量宽度的最大值,循环主体则以有条件方式来执行
#include "ap_cint.h"
#define N 32
typedef int8 din_t;
typedef int13 dout_t;
typedef uint5 dsel_t;
dout_t loop_max_bounds(din_t A[N], dsel_t width) {
dout_t out_accum=0;
dsel_t x;
LOOP_X:for (x=0;x<N; x++) {
if (x<width) {
out_accum += A[x];
}
}
return out_accum;
}
以上示例中的 for 循环 (LOOP_X) 可展开。由于此循环的上限固定,因此 Vivado HLS 知晓需创建的硬件数量。在 RTL
设计中包含 N(32) 份循环主体副本。每份循环主体副本都包含与之关联的条件逻辑,并根据变量宽度值来执行。

四、循环流水化
1.当循环或函数流水线化时,所在层级比流水线化的循环或函数层级更低的所有循环都必须展开

五、循环流水化示例说明
#include "loop_pipeline.h"
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;
LOOP_I:for(i=0; i < 20; i++){
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}

1.上述代码中,如果对loop_pipeline函数进行流水化设计:
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

#pragram pipeline II= 1

LOOP_I:for(i=0; i < 20; i++){
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}

如果上面是这样优化,那么LOOP_I和LOOP_J都需要被展开!

2.如果对LOOP_I进行pipeline流水化设计
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

LOOP_I:for(i=0; i < 20; i++){
#pragram pipeline II= 1
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}
如果代码是这么设计的化,那么LOOP_J循环被全部展开unroll

3.如何对LOOP_J进行pipeline优化
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

LOOP_I:for(i=0; i < 20; i++){

LOOP_J: for(j=0; j < 20; j++){
#pragram pipeline II= 1
acc += A[i] * j;
}
}
return acc;
}

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

ADVANCE Day44

浙大疏锦行 &#x1f4d8; Day 44 实战作业 (极速版)&#xff1a;ResNet 与 迁移学习 1. 作业综述 核心目标&#xff1a; 迁移学习&#xff1a;学会调用 ImageNet 预训练的 ResNet18 模型&#xff0c;将其知识迁移到 CIFAR-10 任务上。策略对比&#xff1a;亲手实验 冻结骨…

作者头像 李华
网站建设 2026/8/24 13:51:31

2025 AtomGit 最受欢迎 G-Star 项目 组织名单公示

本次评选活动面向全体 G-Star 认证个人项目、G-Star 认证开源组织。分个人和组织两个赛道&#xff0c;以项目/组织 2025 年末在 AtomGit 平台的各项社区化数据进行积分排名。共 332 个 G-Star 项目、152 个 G-Star 组织参与竞选&#xff0c;最终评选出得分最高的项目和组织共 1…

作者头像 李华
网站建设 2026/8/23 16:45:23

导师推荐!专科生必看9款AI论文网站测评

导师推荐&#xff01;专科生必看9款AI论文网站测评 2026年专科生论文写作工具测评&#xff1a;从功能到体验的深度解析 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的AI论文网站&#xff…

作者头像 李华
网站建设 2026/8/22 6:57:03

C 未定义行为

C 未定义行为 引言 C语言作为一种历史悠久且广泛使用的编程语言,拥有强大的功能和灵活性。然而,由于其设计之初并未考虑所有可能的边界情况,C语言中存在一些未定义行为(Undefined Behavior)。这些未定义行为可能导致程序出现不可预测的结果,从而带来安全风险和性能问题…

作者头像 李华
网站建设 2026/8/21 15:34:08

Apipos推荐

作为一名软件开发者&#xff0c;我花了很多时间探索各种工具&#xff0c;以简化我在API开发和测试中的日常工作。Postman 是我一直以来的首选工具&#xff0c;它因其调试和自动化API测试的能力而广受欢迎&#xff0c;几乎成为现代开发者不可或缺的工具。Postman的常见问题然而&…

作者头像 李华