当前位置: 首页 > ds >正文

【经验总结】【乘法替换方法】

1 背景

客户将原器件(xilinx,altera,lattice,elitestek)平台代码移植到京微齐力器件平台时,代码中可能存在大量的乘法语句。原器件厂商的EDA工具可以将乘法映射到DSP的资源,且能够正确的统计资源的使用情况。由于FUXI目前不支持映射因此需要手动替换。

2 场景

场景1:变量 * 常量

场景2:变量 * 变量

3 替换方案

场景1: 变量位移和加法器/减法器替。

优点:可以减少DSP资源的使用,通过拼接和加法实现,理论上仅仅消耗加法器。

3.1 变量 * 常量 = 变量位移 + 常量

举例:

原代码语句:gray_GF_22 = gray22 * 1796;

分析:以上语句可以分解为:gray_GF_22 = gray22 * (1024 + 512 + 256 + 4);

替换代码语句: gray_GF_22 = {gray22, 10'd0} + {gray22, 9'd0} + {gray22, 8'd0} + {gray22, 2'd0};

3.2 变量 * 常量 = 变量位移 - 常量

举例:

原代码语句:Table_filiter = TableCur + TableBref * 7;

分析:以上语句可以分解为:Table_filiter = TableCur +TableBref *(8 - 1);

替换代码语句:Table_filiter = TableCur + {TableBref , 3'd0} - TableBref;

场景2: 例化DSP IP核

3.3 小于等于10 * 10 例化一个 10 *10的DSP;

3.4 小于等于18*9例化一个18*9的DSP;

3.5 小于等于18*18例化一个18*18的DSP;

4 FUXI工具DSP IP核支持基本模型

4.1 DSP IP核的4种10*10模型

4.1.1 DSP IP核支持单个 X*Y = Z模型,也支持同时8组 X*Y = Z模型,如图1:

图1

4.1.2 DSP IP核支持单个X0*Y0 + X1*Y1 = Z01模型,也支持同时4组X0*Y0 + X1*Y1 = Z01的模型,如图2:

图2

4.1.3 DSP IP核支持单个X0*Y0 + X1*Y1 + X2*Y2 + X3*Y3 = Z0123模型,也支持同时2组X0*Y0 + X1*Y1 + X2*Y2 + X3*Y3 = Z0123模型,如图3:

图3

4.1.4 DSP IP核支持X0*Y0 + X1*Y1 + X2*Y2 + X3*Y3 + X4*Y4 + X5*Y5 + X6*Y6 + X7*Y7 = Z模型,如图4:

图4

4.2 DSP IP核的3种18*9模型

4.2.1 DSP IP核支持单个 X*Y = Z模型,也支持同时4组 X*Y = Z模型,如图5:

图5

4.2.2 DSP IP核支持单个X0*Y0 + X1*Y1 = Z01模型,也支持同时2组X0*Y0 + X1*Y1 = Z01的模型,如图6:

图6

4.2.3 DSP IP核支持1组X0*Y0 + X1*Y1 + X2*Y2 + X3*Y3 = Z模型,如下图7:

图7

4.3 DSP IP核的2种18*18模型

4.3.1 DSP IP核支持单个 X*Y = Z模型,也支持同时2组 X*Y = Z模型,如图8:

图8

4.3.2 DSP IP核支持1组X0*Y0 + X1*Y1 = Z模型,如下图9:

图9

5 大位宽乘法方法

针对大于18*18的位宽乘法可以做如下拆解:

举例:36*18 = (高18*18) << 18 + (低18*18)

例化 4.3.1 18*18同时2组 X*Y = Z模型,然后高位结果移位 + 低位结果。

http://www.xdnf.cn/news/6114.html

相关文章:

  • coco数据集mAP评估
  • function call介绍和实现(以DeepSeek为例)
  • 2025高质量数据集实践指南
  • 无人机避障——(运动规划部分)深蓝学院动力学kinodynamic A* 3D算法理论解读(附C++代码)
  • 聊聊JetCache的CachePenetrationProtect
  • Baklib知识中台驱动企业智慧服务升级
  • WebGIS 开发中的数据安全与隐私保护:急需掌握的要点
  • MongoDB 的主要优势和劣势是什么?适用于哪些场景?
  • 安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷
  • 19.three官方示例+编辑器+AI快速学习webgl_buffergeometry_points
  • 缺乏需求变更的影响评估,如何降低项目风险
  • AI 赋能数智孪生:更快、更智能、更易用
  • OCCT知识笔记之BRepBuilderAPI_NurbsConvert详解
  • 后531时代:光伏产业市场化转型实战策略
  • 使用Spring和Springboot遇到的问题及解决办法
  • 什么叫裸机开发
  • 差分探头量程选择的六大认知误区与应对方案
  • 模板的使用
  • ASP.NET Core Identity 框架中实现密码重置
  • 【Qt】之音视频编程2:QtAV的使用篇
  • MapReduce打包运行
  • 在Window上面添加交叉编译链 MinGW+NDK
  • blazor与硬件通信实现案例
  • PyTorch 分布式训练
  • AI时代,如何实现人机共舞?
  • 新建一个reactnative 0.72.0的项目
  • VLA 论文精读(二十二)Multi-agent Embodied AI: Advances and Future Directions
  • 【架构】RUP统一软件过程:企业级软件开发的全面指南
  • 在scala中sparkSQL连接masql并添加新数据
  • python使用OpenCV 库将视频拆解为帧并保存为图片