news 2026/4/28 4:56:21

RTL设计和HLS高层次设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RTL设计和HLS高层次设计

一、RTL设计和HLS高层次设计
1.rtl设计需要关注微架构的决策,高层次设计不需要制定微架构决策,关注的是宏框架设计;
2.FSM状态机的创建、数据的路径、寄存器流水线这些细节留给HLS工具编译器来处理;
3.高层次综合通过提供的约束来生成优化的rtl;
4.高层次综合在宏框架上做出解决方案,在性能和面积之间做权衡和取舍

二、任务级别的并行度
1.可以使用dataflow编译指令,或者使用hls::task对象来显式创建并行度;
2.存储器架构:
访问全局存储器会产生更高的时延成本,可耗时大量周期,而访问本地存储器通常十分快速,只需一个或多个周期
即可。

三、函数级别并行设计
1.在函数级别实现任务级并行度。为实现任务级并行度,需将循环推送到多个独立的函数中。原始 compute() 函数
拆分为多个子函数。根据经验法则,顺序函数可并发执行,顺序循环则可采用流水打拍。

2.没有优化之前的代码:
void compute (data_t in[totalNumWords ], data_t Out[totalNumWords ]) {
data_t tmp1[totalNumWords], tmp2[totalNumWords];
A: for (int i = 0; i < totalNumWords ; ++i) {
tmp1[i] = in[i] * 3;
tmp2[i] = in[i] * 3;
}
B: for (int i = 0; i < totalNumWords ; ++i) {
tmp1[i] = tmp1[i] + 25;
}
C: for (int i = 0; i < totalNumWords ; ++i) {
tmp2[i] = tmp2[i] * 2;
}
D: for (int i = 0; i < totalNumWords ; ++i) {
out[i] = tmp1[i] + tmp2[i] * 2;
}

3.优化设计

#include "diamond.h"
#define NUM_WORDS 16
extern "C" {
void diamond(vecOf16Words* vecIn, vecOf16Words* vecOut, int size)
{
hls::stream<vecOf16Words> c0, c1, c2, c3, c4, c5;
assert(size % 16 == 0);
#pragma HLS dataflow
load(vecIn, c0, size);
compute_A(c0, c1, c2, size);
compute_B(c1, c3, size);
compute_C(c2, c4, size);
compute_D(c3, c4,c5, size);
store(c5, vecOut, size);
}
}
void load(vecOf16Words *in, hls::stream<vecOf16Words >& out, int size)
{
Loop0:
for (int i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
out.write(in[i]);
}
}
void compute_A(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out1, hls::stream<vecOf16Words >& out2, int size)
{
Loop0:
for (int i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
vecOf16Words t = in.read();
out1.write(t * 3);
out2.write(t * 3);
}
}
void compute_B(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{
Loop0:
for (int i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
out.write(in.read() + 25);

}
}
void compute_C(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{
Loop0:
for (data_t i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
out.write(in.read() * 2);
}
}
void compute_D(hls::stream<vecOf16Words >& in1, hls::stream<vecOf16Words >&
in2, hls::stream<vecOf16Words >& out, int size)
{
Loop0:
for (data_t i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
out.write(in1.read() + in2.read());
}
}
void store(hls::stream<vecOf16Words >& in, vecOf16Words *out, int size)
{
Loop0:
for (int i = 0; i < size; i++)
{
#pragma HLS PERFORMANCE target_ti=32
#pragma HLS LOOP_TRIPCOUNT max=32
out[i] = in.read();
}
}

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

生产系统里维护 SAP Gateway System Alias 的正确打开方式

生产系统里的 SAP Gateway hub 最容易遇到一种尴尬局面,OData 服务已经从开发系统一路传到质量系统,功能验证也通过了,到了生产环境却发现后端系统连接信息必须按生产环境填写。这个信息通常落在 SAP System Alias 里,典型维护视图是 /IWFND/V_DFSYAL。偏偏生产 client 在 …

作者头像 李华
网站建设 2026/4/28 4:46:20

AI论文精华速递:三重过滤机制与关键技术解析

1. 项目概述&#xff1a;AI论文精华速递服务的核心价值作为一名长期跟踪AI领域发展的从业者&#xff0c;我深知及时获取前沿论文核心贡献的痛苦。每周arXiv上新增的机器学习论文数以百计&#xff0c;而顶级会议&#xff08;NeurIPS/ICML/CVPR等&#xff09;每年接收的论文早已突…

作者头像 李华
网站建设 2026/4/28 4:44:23

Flux局部重绘3——LoRA

目录 一、前言 二、LoRA基础 ❓ 这到底在解决一个什么大难题&#xff1f; &#x1f4a1; LoRA的核心思想&#xff1a;引入一个“极小外挂” ✨ 降维打击式的性能与效果&#xff1a;好到难以置信 三、LoRA的一些疑惑 问题1&#xff1a;加速LoRA与蒸馏的联系 1. 加速LoRA…

作者头像 李华
网站建设 2026/4/28 4:38:20

开源阅读鸿蒙版:高效构建跨设备数字阅读生态的完整指南

开源阅读鸿蒙版&#xff1a;高效构建跨设备数字阅读生态的完整指南 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 开源阅读鸿蒙版是一款基于HarmonyOS的免费开源小说阅读器&#xff0c;为开发者提供…

作者头像 李华
网站建设 2026/4/28 4:36:53

收藏这篇就够了!2026 黑客技术自学网站汇总,零基础到大神

七个合法学习黑客技术的网站&#xff0c;让你从萌新成为大佬_黑客网 合法的学习网站&#xff0c;以下这些网站&#xff0c;虽说不上全方位的满足你的需求&#xff0c;但是大部分也都能。能带你了解到黑客有关的技术&#xff0c;视频&#xff0c;电子书&#xff0c;实践&#xf…

作者头像 李华