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

文章目录

  • 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 进行更深入的研究

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024加密软件排行榜|最新企业常用加密软件推荐

安秉网盾加密软件&#xff1a; 专注于企业级的透明加密解决方案&#xff0c;确保公司内部文件在公司环境外无法被访问。 审批机制灵活&#xff0c;支持多种审批方式&#xff0c;方便管理。 广泛应用于多个行业&#xff0c;拥有丰富的企业环境适配经验。 适合对内部数据安全有严…

设置角色运动的动画

(1) 打开Assets-UnityTechnologies-Animation-Animators&#xff0c;Create-Animation-Controller,命名为JohnLemon (2) 打开JohnLemon&#xff0c;出现下图 (3) 依次将Assets-UnityTechnologies-Animation-Animation中的JohnIdle和JohnWalk拖放到Base Layer窗口中 (4) 右击Idl…

分享由AI制定一个商城网站的开发计划及推荐的开发语言

商城网站开发计划 一、项目概述 本商城网站开发计划旨在创建一个功能齐全、用户友好的在线购物平台&#xff0c;为顾客提供商品浏览、搜索、购物车管理、订单跟踪、在线支付等服务。商城将支持多种商品分类&#xff0c;包括但不限于电子产品、家居用品、服饰鞋帽等。 二、开…

Nginx缓存之代理缓存配置

Nginx 的缓存功能是集成在代理模块中的&#xff0c;当启用缓存功能时&#xff0c;Nginx 将请求返回的响应数据持久化在服务器磁盘中&#xff0c;响应数据缓存的相关元数据、有效期及缓存内容等信息将被存储在定义的共享内存中。当收到客户端请求时&#xff0c;Nginx 会在共享内…

联邦学习周记|第四周

论文&#xff1a;Active Federated Learning 链接 将主动学习引入FL&#xff0c;每次随机抽几个Client拿来train&#xff0c;把置信值低的Client概率调大&#xff0c;就能少跑几次。 论文&#xff1a;Active learning based federated learning for waste and natural disast…

全新AI图像擦处理工具上线,手机电脑版资源合集下载

下载地址&#xff1a; 安卓手机版&#xff1a; 点击下载 苹果手机版&#xff1a; 点击下载 电脑版&#xff08;支持Mac和Windows&#xff09;&#xff1a; 点击下载 图像处理技术在当今迅速发展&#xff0c;为了满足广大用户的需求&#xff0c;我们推出了一款强大的图像优化…

京东健康·全球医疗AI创新大赛开启!32万奖金池等你来拿!

京东健康全球医疗AI创新大赛是由京东健康发起&#xff0c;以探索医疗行业前沿技术与创新应用为导向、携手产学研各界力量&#xff0c;通过AI创新促进医疗服务行业高质量发展的一场大赛。 本次大赛聚焦“睡眠监测智能算法”与“医疗大模型创新应用”两个课题方向&#xff0c;面…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

HTML入门教程:深度解析HTML,开启你的前端技术之旅

一、引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是前端开发的基础&#xff0c;它负责构建网页的结构和内容。作为前端技术栈的基石&#xff0c;HTML的掌握程度直接影响到网页的开发效率和用户体验。本教程将带你从零开始&#xff…

计算机网络——传输层重要协议(TCP、UDP)

一、常见名词解释 IP地址&#xff1a;IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址&#xff0c;即IP地址用于定位主机的网络地址&#xff1b; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个 8位⼆进制数&#xff08;也就是…

vite项目配置高德api定位功能

项目场景&#xff1a; 用vite项目集成了一个H5页面的小程序&#xff0c;需要调用高德的定位API&#xff0c;在浏览器中测试的时候&#xff0c;出现了一系列定位失败的情况。 问题1 Get ipLocation failed、Geolocation permission denied 本地http访问下&#xff0c;定位失败…

切割游戏介绍

简介 上大学时&#xff0c;在学校实验室里玩过一个貌似使用VC写的小游戏&#xff0c;一个小球在界面上四处游荡&#xff0c;玩家使用鼠标切割背景&#xff0c;将背景切割剩余到一定的百分比后&#xff0c;就胜利了&#xff0c;后边的背景图会全部展示出来。 使用qt的qml技术&a…

C++类与对象、类的6个默认成员函数、构造函数、析构函数等的介绍

文章目录 前言一、类的6个默认成员函数二、构造函数1. 概念2. 特性1. 无参构造函数2. 带参构造函数3. 编译器默认生成的无参构造函数 3. 构造函数的初始化4. 默认构造函数 三、析构函数1. 概念2. 特性3. 编译器默认生成的析构函数的作用4. 构造函数的使用 总结 前言 C类与对象…

Scikit-Learn支持向量机回归

Scikit-Learn支持向量机回归 1、支持向量机回归1.1、最大间隔与SVM的分类1.2、软间隔最大化1.3、支持向量机回归1.4、支持向量机回归的优缺点2、Scikit-Learn支持向量机回归2.1、Scikit-Learn支持向量机回归API2.2、支持向量机回归初体验2.3、支持向量机回归实践(加州房价预测…

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯

一、背景 Modbus协议和Profibus协议是两种常用于工业控制系统的通信协议&#xff0c;它们在自动化领域中起着重要的作用。Modbus是一种串行通信协议&#xff0c;被广泛应用于各种设备之间的通信&#xff0c;如传感器、执行器、PLC等。而Profibus则是一种现场总线通信协议&…

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形 42. 接雨水 题目链接 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 第一次提交 class Solution { public:int trap(vector<int>…

Harbor本地仓库搭建002_Harbor负载均衡节点搭建_nginx安装配置_harbor安装---分布式云原生部署架构搭建002

负载均衡的机器. 可以看到上面是安装nginx的过程 首先去编辑一下yum仓库地址,配置一下nginx的仓库地址 然后这个是配置的内容 然后在进行安装之前最好yum makecache fast 更新一下缓存,这样安装的时候 会安装最新的包 然后就可以安装nginx yum -y install nginx 然后去

解锁微信客服的潜力:提升客户满意度与忠诚度

随着全球数字化进程的加速&#xff0c;企业如何有效利用数字化工具提升服务质量和客户满意度&#xff0c;成为了企业国际化、数字化出海的关键。在这一大背景下&#xff0c;微信客服以其卓越的功能和广泛的用户基础&#xff0c;成为了企业数字化转型的重要助力。 一、微信客服…

西班牙的人工智能医生

西班牙的人工智能医生 西班牙已将自己定位为欧洲负责任人工智能领域的领导者。然而&#xff0c;透明度的承诺往往落空&#xff0c;公共监督机构一直难以获得对司法和福利系统中部署的算法的有效访问。这使得西班牙成为一种日益增长的趋势的一部分&#xff0c;即政府悄悄地试验预…

fastapi修改docs文档页面favicon.ico图标

如下图&#xff0c;文档页面默认使用的是tiangolo大神的Logo 如果打开的标签比较多&#xff0c;就不好区分了&#xff0c;想要修改这个logo&#xff0c;可以用fastapi-cdn-host一行代码搞定 fastapi_cdn_host.patch_docs(app, favicon_url/static/logo.png) 例如&#xff1a;…