news 2026/6/22 12:32:02

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/6/21 14:45:14

深度学习毕设项目推荐-通过python_CNN卷积神经网络对辣椒类别识别

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

作者头像 李华
网站建设 2026/6/15 0:53:44

MySQL事件功能简介

MySQL 的事件调度器&#xff08;Event Scheduler&#xff09;提供了一种便捷的方法来定时执行 SQL 语句&#xff0c;从而实现数据维护、报告生成等自动化操作。本文将详细介绍 MySQL 的事件功能&#xff0c;并说明如何使用 Navicat 管理这些事件。 1. 什么是 MySQL 事件调度器&…

作者头像 李华
网站建设 2026/6/13 15:41:55

mysql之逻辑函数

MySQL 中的逻辑函数允许你根据条件对数据进行判断和选择。以下是一些常用逻辑函数的详细介绍和示例&#xff1a; IF(expr1, expr2, expr3) 如果 expr1 是真&#xff08;非零和非 NULL&#xff09;&#xff0c;IF() 函数返回 expr2&#xff0c;否则返回 expr3。 SELECT IF(1 0, …

作者头像 李华
网站建设 2026/6/17 1:26:09

光特通信40G光模块:适配各种需求的高速传输方案

在数据中心密集连接、企业园区网络升级、工业极端环境部署这些场景里&#xff0c;40G光模块是保证数据高速传输的核心部件。光特通信作为全球光通信解决方案服务商&#xff0c;有20年的技术积累&#xff0c;打造了全系列40G光模块产品&#xff0c;涵盖普通环境、长距离、工业恶…

作者头像 李华
网站建设 2026/6/13 1:29:02

都说网络安全前景好,到底好在哪?3 个数据给你答案

都说网络安全前景好&#xff0c;到底好在哪&#xff1f;3 个数据给你答案 数字化时代里&#xff0c;网络安全早已不是“可选项”而是“必选项”。从政府机关到互联网公司&#xff0c;从金融能源到日常消费&#xff0c;各行各业的安全防护需求持续爆发&#xff0c;让这个行业成…

作者头像 李华