基于 Vitis HLS 的单个乘法 DSP 映射研究

news2024/11/24 18:41:10

文章目录

  • 1 自媒体账号
  • 2 引言
  • 3 整数乘法
  • 4 定点乘法
  • 5 浮点乘法
  • 6 总结

1 自媒体账号

目前运营的自媒体账号如下:

  • 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com

如果觉得有所收获的话,可以点击我的主页 -> 充电 -> 自定义充电 支持一下,十分感谢!

  • 微信公众号 【雪天鱼】
    |550
  • CSDN 【雪天鱼】: 雪天鱼-CSDN博客

QQ 学习交流群

  • FPGA科研硕博交流群 910055563 (进群有一定的学历门槛,长期未发言会被请出群聊,主要交流FPGA科研学术话题)
  • CNN | RVfpga学习交流群(推荐,人数上限 2000) 541434600
  • FPGA&IC&DL学习交流群 866169462

记录下自己的学习过程,个人拙见,请谨慎参考。

2 引言

ZCU106 的DSP型号为 DSP48E2,支持的最大乘法位宽是 27-bit x 18-bit;
目标:通过简单的单个元素乘法,观察 HLS 工具将不同位宽的乘法映射为几个DSP

  • Vitis HLS 2021.1
  • ZCU106

以下结论的成立的前提是相信 HLS C综合后报告结果是正确的,因为本文主要研究对于HLS工具而言,是将不同位宽的乘法映射为几个DSP。所以不会使用 Vivado 进一步进行验证。
但实际上,Vitis HLS 和 Vivado 的综合结果是会有一定的差距的。

3 整数乘法

  • 测试代码:
#include <ap_int.h>

constexpr unsigned int IN_SIZE  = 20;
typedef ap_int<32> int_test;
void pixel_mul_int(int_test input[IN_SIZE],
				   int_test weight[IN_SIZE],
				   int_test output[IN_SIZE]){

	for(int i=0; i<IN_SIZE; i++){
		#pragma HLS PIPELINE II=1

		output[i] = input[i] * weight[i];
	}

}

通过一个 for 循环实现 IN_SIZE 次元素相乘

  • 32位 x 32位
    image.png|875
    32 位整数乘法需要 3 个DSP

image.png|525
2 个时钟周期完成单次迭代计算,周期1读input和weight, 周期2 进行乘法计算

  • 27 位 x 27 位
    image.png|900
    27 位整数乘法需要 2 个DSP

  • 18位 x 18 位 | 17位 x 17位
    image.png|900
    18位整数乘法需要 1 个DSP
    问题:使用单个DSP,为什么 Iteration Latency就从 2 变成了 5
    image.png|625
    从调度图中可以看到,此时乘法需要三个时钟周期才能完成,导致完成单次迭代的时间变长

  • 16 位 x 16 位 | 14 位 x 14 位 | 12位 x 12位 | 11位 x 11位
    image.png|900


  • 10位 x 10位
    image.png|900

  • 8 位 x 8 位
    image.png|900
    不再占用DSP,使用 LUT 计算

  • 6 位 x 6 位
    image.png|900

  • 4位 x 4 位
    image.png|900

所以对于整数乘法总结如下:

  • 当被乘数位宽 > 27-bit, 乘数位宽 > 18-bit 需要3个DSP实现; 当被乘数位宽 <= 27-bit, 乘数位宽 > 18-bit 需要2个DSP实现;当被乘数位宽 <= 27-bit, 乘数位宽 <=18-bit 需要1个DSP实现;
  • 当乘数与被乘数的位宽均较小时(这里临界点是 10位整数乘法),将不会映射到DSP硬核上计算,而是采用LUT实现。并且随着位宽的继续减少,所用的LUT资源也会随之减少。

4 定点乘法

  • 测试代码:
#include <ap_fixed.h>

constexpr unsigned int IN_SIZE  = 20;
typedef ap_fixed<32, 10> fixed_mul;
void pixel_mul_fixed(fixed_mul input[IN_SIZE],
					 fixed_mul weight[IN_SIZE],
					 fixed_mul output[IN_SIZE]){

	for(int i=0; i<IN_SIZE; i++){
		#pragma HLS PIPELINE II=1

		output[i] = input[i] * weight[i];
	}

}
  • 32位有符号定点数计算 — ap_fixed<32, 20> | ap_fixed<32, 10> | ap_fixed<32, 5>
    image.png|1000
    与 32 位整数计算的综合结果一样, 且整数位的大小不影响最终结果,综合结果只和乘数和被乘数的位宽有关。即 DSP 能实现支持位宽内的定点小数乘法。

  • 27位有符号定点数计算 — ap_fixed<27, 10>
    image.png|975

  • ap_fixed<32, 10> x ap_fixed<16, 2>
    image.png

HLS 内启动 Implementation
image.png

  • 18位有符号定点数计算 — ap_fixed<18, 10>
    image.png|975

  • 10位有符号定点数计算 — ap_fixed<10, 5>
    image.png|975

5 浮点乘法

  • fp32 x fp32
    image.png
    遇到的问题:无法打开调度图,
    通过重启 Vitis HLS ,重新C综合后解决该问题
    image.png|525
    第0周期和第1周期读取输入数据,第2,3,4周期进行乘法计算,第5周期写回结果

6 总结

  • 整数乘法和定点乘法,只有乘数和被乘数的总位宽不变,乘法在 DSP 实现的策略一样,延迟和占用个数不会改变。
  • 在使用 HLS 工具进行硬件开发时,在满足精度的前提下,可以通过限制乘数和被乘数在目标 DSP 硬核的输入范围内,避免浪费DSP资源。

待解决问题:

  • Q: DSP48E2 是否可以直接支持整数运算、定点运算以及浮点运算?
    可能需要通过 Vivado 调用 DSP IP 进行更深入的研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能在癌症新辅助治疗领域的研究|顶刊速递·24-06-18

小罗碎碎念 本期推文主题——人工智能在肿瘤新辅助治疗领域中的研究进展。 这一期推文谋划已久&#xff0c;最早可以追溯到五一假期。五一的时候&#xff0c;我第一站去的就是北大。当时和北医的一个师兄&#xff08;博士&#xff09;聊天&#xff0c;主要聊的就是新辅助治疗AI…

摄像头图像矫正的表格生成方法

1.设置单元格高宽 点击表格左上角 的 小三角 列宽: HOME -> Rows and Columns -> Column Width 5 CM 行高: HOME -> Rows and Columns -> Row Height 5 CM 2.设置 条件格式 HOME -> Conditional Formatting-> Manager Rules 点击 左上方 New Rule…

老杨说运维 | 如何结合现状进行运维路径建设(文末附演讲视频)

青城山脚下的滔滔江水奔涌而过&#xff0c;承载着擎创一往无前的势头&#xff0c;共同去向未来。2024年6月&#xff0c;双态IT成都用户大会擎创科技“数智化可观测赋能双态运维”专场迎来了完满的收尾。 本期回顾来自擎创科技CTO葛晓波的现场演讲&#xff1a;数智化转型的核心目…

PCI-E 5.0固态硬盘温度价格「双降」,速度近15GB/s

都 2024 年了&#xff0c;相信各位同学对固态硬盘都不陌生了吧。 随着技术的不断更新迭代&#xff0c;固态硬盘接口速率如今最高已经来到了 PCI-e 5.0 了。 其实这不算什么新技术了&#xff0c;早在2023年5月美光就上市了全球首款 PCI-e 5.0 固态硬盘&#xff0c; 英睿达 T700…

推动电子凭证服务革新,加速政务数字化转型

随着“互联网政务”的深入实施&#xff0c;电子凭证已成为政务服务数字化升级的关键要素。电子凭证不仅极大地方便了企业和群众&#xff0c;而且作为国家信息资源的重要组成部分&#xff0c;对于优化政务服务、加强社会治理和行业监管具有深远的影响。然而&#xff0c;由于政务…

Android-apk自动签名

一、创建apk签名 1、有得话忽略 Build->Generate Signed Bundle or APK&#xff0c;选择APK&#xff0c;然后Next&#xff0c;然后选择Create new 2、 2.在app/build.gradle中&#xff0c;在android{…}中添加以下内容 signingConfigs { release { storeFile file(androi…

Mojo崛起:AI-first 的编程语言能否成为新流行?

眨眼之间&#xff0c;你可能会错过又一种编程语言的发明。 有个笑话说&#xff0c;程序员花费20%的时间编写代码&#xff0c;80%的时间决定使用什么语言。 事实上&#xff0c;编程语言如此之多&#xff0c;以至于我们不确定实际有多少种。据估计&#xff0c;至少有700种编程语…

HarmonyOS角落里的知识:一杯冰美式的时间 -- 之打字机

一、前言 模拟编辑器或者模拟输入框中文字啪啦啪啦输入的效果&#xff0c;往往能够吸引人们的眼球&#xff0c;让用户的注意力聚焦在输入的内容上&#xff0c;本文将和大家探讨打字机效果的实现方式以及应用。Demo基于API12。 二、思路 拆分开来很简单&#xff0c;将字符串拆…

高等数学笔记(三):导数

一、导数概念 1.1 导数的定义 1.1.1 函数在一点处的导数与导函数 1.1.2 单侧导数 1.2 导数的几何意义 1.3 函数可导性与连续性的关系 二、函数的求导法则 2.1 函数的和、差、积、商的求导法则 2.2 反函数的求导法则 2.3 复合函数的求导法则 2.4 基本求导法则与导数公式 三…

以太坊智能合约不能调用:一定注意智能合约地址,每次部署地址都会变化;nonce值 什么作用,是什么;在交易中调用智能合约添加附加信息

目录 以太坊智能合约不能调用 一定注意智能合约地址,每次部署地址都会变化 Transaction must include these fields: %r" % missing_keys 缺少nonce nonce值 什么作用,是什么 在交易中调用智能合约添加附加信息 1. 定义智能合约 2. 部署并调用智能合约 注意事项…

如何恢复iPhone iCloud云盘资料删除?给出建议

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

JAVAEE之网络原理(2)_传输控制协议(TCP)、概念、格式、确认应答及超时重传机制

前言 在上一节中&#xff0c;我们介绍了 UDP (用户数据报) 的相关知识&#xff0c;在这一节中我们将继续介绍传输层中另一种更为重要的协议。 一、什么是TCP协议&#xff1f; 1.1 TCP 基本概念 TCP协议全称&#xff1a;传输控制协议&#xff08;TCP&#xff0c;Transmission C…

redhat 7.8修改网卡名称,最佳实践

背景&#xff1a; 因业务需求&#xff0c;需要将新创建的redhat7.8服务器的网卡名称修改为ens160&#xff0c;目前服务器的网卡名称是ens192。 一、修改网卡配置信息&#xff1a; 查看当前网卡信息&#xff0c;并获取到网卡到Mac地址 [rootlocalhost ~]# ip addr 1: lo: <L…

【CT】LeetCode手撕—103. 二叉树的锯齿形层序遍历

目录 题目1- 思路2- 实现⭐103. 二叉树的锯齿形层序遍历——题解思路 2- ACM实现 题目 原题连接&#xff1a;103. 二叉树的锯齿形层序遍历 1- 思路 二叉树的层序遍历&#xff0c;遇到奇数时&#xff0c;利用 Collections.reverse() 翻转即可 2- 实现 ⭐103. 二叉树的锯齿形层…

QT修改界面图标及exe程序图标

目录 步骤1. 添加图标文件2. 添加保存图标变量3. 窗口启动初始化图标文件4. 构建后即可完成图标的更改 步骤 1. 添加图标文件 如下&#xff0c;添加一个名为 favicon.ico 的文件到.pro 工程文件所在的目录中。 2. 添加保存图标变量 RC_ICONS是一个变量&#xff0c;它被用于存储…

项目准备和启动

1.什么是项目建议书&#xff1f; 2.项目建议书的内容 3.可行性分析方法 4.项目组织结构&#xff08;职能型 项目型 矩阵型&#xff09; 5.项目管理层决策层执行层之间的关系 6.软件项目的可行性分析包括哪几个方面&#xff1f;影响决策的关键因素又是什么&#xff1f; 软件项目…

88. 合并两个有序数组(简单)

88. 合并两个有序数组 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;88. 合并两个有序数组 2.详细题解 两个数组均有序&#xff08;非递减&#xff09;&#xff0c;要求合并两个数组&#xff0c;直观的思路&#xff0c;借助第三个数…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…

栈(Stack)

目录 一.栈&#xff08;Stack&#xff09; 1.概念 2.栈的使用 3.栈的模拟实现 二.栈相关习题 1.逆波兰表达式求值 &#xff08;1&#xff09;链接 &#xff08;2&#xff09;解析 &#xff08;3&#xff09;题解 2.括号匹配 &#xff08;1&#xff09;链接 &#xff…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-创建边界 Objective-C语言】

一、接下来,我们来说一个,碰撞的创建边界, 1.我们刚才呢,仅仅是让self.view,来变成边界, 实际上,这个边界呢,还可以自己去创建, 我们把之前的代码备份一份儿,改个名儿:05-碰撞行为-创建边界, 选中这一段儿,先删掉, command + R, 好,这一段儿,删掉啊, 接下来…