news 2026/9/3 2:18:40

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/9/2 23:31:15

更快、更强、更实惠:谷歌正式发布Gemini 3 Flash,开启AI新纪元

2025年12月17日&#xff0c;谷歌重磅推出其Gemini 3模型家族的最新成员——Gemini 3 Flash。这款新模型以速度和效率为核心&#xff0c;实现了前沿智能与低成本、低延迟的完美结合&#xff0c;并已开始向全球用户和开发者全面推送。谷歌正式宣布推出Gemini 3 Flash&#xff0c;…

作者头像 李华
网站建设 2026/9/2 10:09:57

【Java毕设全套源码+文档】基于springboot的癌症患者交流平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/3 2:05:53

MySQL如何给查出的数据 加上序号

MySQL给查出的数据加序号的方法 SELECT sid,sname,gender,age,(i:i1) AS 序号 FROM student,(SELECT i:0) AS itable;或者 SET i0; SELECT sid,sname,gender,age,i:i1 AS 序号 FROM student;查询结果如图所示&#xff1a;解释说明&#xff1a; 1、(i:i1)也可以写成 i:i1 &…

作者头像 李华
网站建设 2026/9/2 23:30:38

MySQL如何删除binlog日志文件

MySQL如何删除binlog日志文件呢&#xff1f; 1、使用命令手动在操作系统中删除,但是这种删除并没有从数据库逻辑层面删除&#xff0c;数据库里还记录着这条日志&#xff0c;可能会有一些问题。 进入到MySQL数据目录下&#xff0c;rm -rf 日志文件2、使用SQL命令删除&#xff0c…

作者头像 李华
网站建设 2026/9/3 1:31:16

mysql如何创建用户并且授权

在 MySQL 中可以使用以下步骤创建用户&#xff1a; 1.使用管理员账户登录到 MySQL&#xff1a; - 打开命令行终端&#xff0c;输入以下命令以管理员身份登录 MySQL&#xff08;假设 MySQL 安装在默认位置且管理员用户为root&#xff0c;密码为your_root_password&#xff09;&a…

作者头像 李华
网站建设 2026/9/3 0:26:40

2026年转行AI大模型必备:两个高薪岗位,让你年后求职弯道超车

文章指出当前就业市场低迷&#xff0c;但春节后很快进入春招旺季&#xff0c;建议现在就开始准备。重点推荐两个普通人也能入行的AI方向&#xff1a;AI大模型应用开发师&#xff08;年薪最高72万&#xff09;和AI大模型训练师&#xff08;年薪最高45万&#xff09;。AI行业正处…

作者头像 李华