0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用FPGA进行基本运算和特殊函数定点运算

FPGA设计论坛 来源:未知 2023-09-05 11:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA以擅长高速并行数据处理而闻名,从有线/无线通信到图像处理中各种DSP算法,再到现今火爆的AI应用,都离不开卷积、滤波、变换等基本的数学运算。但由于FPGA的硬件结构和开发特性使得其对很多算法不友好.

二、FPGA中的加减乘除

1.硬件资源

Xilinx 7系列的FPGA中有DSP Slice ,叫做“DSP48E1”这一专用硬件资源,这是一个功能强大的计算单元,单就用于基本运算的部分有加减单元和乘法器。详见参考文献1.

因此可以直接用HDL语言中的加、减、乘符号实现变量与常量间运算操作以及变量与变量间操作。而四则运算中的除法没有基本的逻辑计算单元可以对应,因此计算除法需要调用除法器IP核。

2.确认数据的表示范围

有符号数:(补码)-2^(N-1) ~ 2^(N-1)-1 如N = 8,则表示范围是:-128 ~ 127.

无符号数:0~2^N-1 如N = 8,则表示范围是:0~255.

定点数:2Q13 范围是:-4~4-2^(-13) 精度是:2^(-13)

3.结果有效位宽

首先讨论结果位宽问题。在FPGA中往往采用定点运算替代浮点运算来降低硬件资源占用率和计算延迟,其中的精髓就是精度与资源的权衡。若按照保留计算结果的全部精度,N bit数与Mbit数相加结果需要N+1bit(N>M)。N bit数与M bit数相乘之积需要N+M bit。而减法可以转化为加法,除法则转换为乘法和加减法的组合。如果操作数是定点小数,则在满足以上准则的前提下,A与B相加(A小数点位数>B小数点位数),结果小数点位数与A相同;A与B相乘(小数点位数分别为p和q),结果小数点位数是p+q。

4.定点运算步骤

然而(话锋一转),在大多数场合下,不需要以上这么多位来保留计算结果,因为我们在进行数学运算时,已经知道输入数据的大致范围,一个数除以1000和除以1结果数据所需最小位宽能一样么?加减运算的操作步骤是先对齐小数点位数,后加减。而乘法是先计算后取小数点。这实际上与十进制运算一致,我们看看具体的计算步骤:

整数之间加减以及乘法的统一步骤:预估结果位宽N --> 按照结果位宽扩展操作数符号位以防止溢出 --> 运算取低N位。

定点小数加减运算步骤:预估结果位宽N --> 得到结果小数点后位数 --> 对齐操作数整数位和小数位,确定扩展位宽M(M≥N) --> 加减运算取低M位。

定点小数乘法运算步骤:预估结果位宽N --> 得到结果小数点后位数 --> 扩展操作数位宽 --> 相乘取低N位

5. 变量与常量运算化简

以上讨论的均是两变量之间的运算规则,当然结果位宽及格式准则是适用的。变量与常量的运算的优势在于,可以将乘除法转换成加减以及移位运算实现,从而降低计算复杂度和延迟。当常数项C为2的整数次幂(C = 2^p),则乘C等于变量左移p位,除以C等于变量右移p位。几个在书中看到的几个简单示例:A*16 = A <<4  A*20 = A<<4 + A<<2.  A除以2 = A >>1A除以3 = A*(0.25+0.0625+0.0156) = A>>2+A>>4+A>>6A除以5 = A*(0.125+0.0625+0.0156) = A>>3 + A>>4 + A>>6.其中乘法完全等价对应的移位相加操作,而除法的移位代替会损失精度。

三、如何计算特殊函数

FPGA内部的DSP Slice可以直接进行最基本的加法和乘法运算,但是对于其他比如对数、指数、三角函数、开根号等特殊函数就无能为力了。这时需要借助算法对这些特殊函数进行变换和简化。FPGA实现复杂函数的常用手段一个是级数展开,再一个就是CORDIC算法。关于CORDIC的理论知识和具体内容详见参考文献2,这里主要阐述CORDIC的IP核调用以及应用示例。CORDIC算法就是通过一定的手段,将很多复杂的特殊函数变为相加移位运算,这一点对于硬件芯片实现来说非常友好。CORDIC分为旋转模式和矢量模式,配合圆周坐标、线性坐标和双曲线坐标会有六种组合,具体见下表:

从表中发现,基本的乘除法、三角函数、反三角函数、双曲函数、反双曲函数、开根号都能够直接求得,那其他函数怎么办?

常见的函数计算需求基本都能满足,虽上述变换式对自变量定义域有限制,但同样可以分析输入数据的取值范围并利用简单的数学变换得到想要的结果。Xilinx同时提供了浮点IP核以及CORDIC IP核,前者调用简单但占用资源大,延迟高,因此利用CORDIC算法计算函数是个较好的选择。

四、CORDIC计算e^x Demo

1. 算法仿真分析

要计算e^x数值需要让CORDIC工作在双曲坐标的旋转模式下,通过e^x = sinhx+coshx关系式间接求得。首先看下sinh和cosh函数的曲线,有个直观认识。

 

我们用MATLAB毫不费力地验证一下公式正确性:

在设计后也同样要借助MATLAB进行仿真验证。

2. CORDIC IP核

现在通过查看user guide得知CORDIC IP核的接口及主要特性。

接口包括输入笛卡尔数据输入通道、相位输入通道、全局信号以及数据输出通道。该IP核有两种结构:串行和并行,可根据数据吞吐量需求选择,并行结构可以每个时钟输出一个计算结果。如果计算sinh和cosh,要向phase通道输入相位信息,X_OUT是cosh(phase),Y_OUT是sinh(phase).输入phase必须满足数据范围,否则出现不可预计结果。输出帧结构及数据范围如下:

其中输入数据格式为2QN,输出则是1QN。由于均是有符号数,也就是输入整数部分3bit,输出整数部分2bit。接下来对IP核进行配置,重点是第一页,此处将其配置为计算sinh和cosh模式,采用并行优化的流水线结构。相位以角度为单位,输入输出位宽设置成16bit。

3.HDL代码设计及仿真验证

设计代码:

cordic_ex

用MATLAB产生两组数据,并将角度值定点化后作为设计模块数据激励:

testbench:

cordic_ex_tb

仿真结果:

仿真波形表明,计算结果与MATLAB浮点运算相近,满足一般计算需求。若想提高精度,可以增加CORDIC输出数据位宽。


有你想看的精彩



至芯科技FPGA就业培训班——助你步入成功之路、9月23号北京中心开课、欢迎咨询!
FPGA如何在高清图像处理领域大展雄图
FPGA架构和应用基础知识





扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看






原文标题:用FPGA进行基本运算和特殊函数定点运算

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22283

    浏览量

    630181

原文标题:用FPGA进行基本运算和特殊函数定点运算

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    详解FPGA定点数计算方法

    FPGA定点数计算在高效资源利用、运算速度优势、硬件可预测性和成本效益等方面发挥着重要作用。它能节省逻辑和存储资源,实现更快速的运算和更高的时钟频率,保证行为可预测且易于硬件实现和验证
    的头像 发表于 12-02 10:09 182次阅读
    详解<b class='flag-5'>FPGA</b><b class='flag-5'>定点</b>数计算方法

    C语言宏拼接运算符典型使用

    在C语言中,##运算符(称为[size=16.002px]标记拼接运算符)用于宏定义中将两个标记(token)拼接成一个新的标记。它在预处理阶段处理,常用于动态生成变量名、函数名或类型名,以提高代码
    发表于 11-20 08:27

    定点数表示实数的方法以及定点数在硬件上的运算验证

    扩充。结果变成了一个Q8精度的定点数、同时整数位扩充到8位。这与整数的乘法运算类似。两个Q4精度的定点数乘法可以看做两个Q0精度整数相乘的结果乘上2^(-8)。除法的思路也和乘法类似,但是,在
    发表于 10-28 08:13

    卷积运算分析

    卷积运算的基础运算是乘加运算(MAC,Multiplication and Accumulation),本文设计了基本运算单元PE模块来实现MAC
    发表于 10-28 07:31

    蜂鸟内核模块浮点指令运算数据的获取

    核中是如何获取所需的两个操作数。 我们以浮点加法运算为例。 首先,经过分析我们发现整型指令寄存器的例化是通过循环完成的,所以我们可以相同的方式例化32个32位浮点寄存器,相关代码如下: 我们进入例
    发表于 10-24 13:39

    浮点数是如何实现开平方运算

    摘要: 本文主要描述浮点数是如何实现开平方运算的。 简介 事实上,浮点数的开平方运算结构与定点数甚至整数的开平方运算结构是十分相似的,我们可以在对
    发表于 10-24 08:42

    (九)浮点乘法指令设计

    ⊕ sb,得到结果的符号位 阶码相加减 按照定点整数的加减法运算方法对两个浮点数的阶码进行加减运算,因为规格化数的价码e满足1≤e≤254,而ec有可能超出1~254范围,所以当1
    发表于 10-24 07:11

    如何获取蜂鸟内核执行模块浮点指令的运算数据

    核中是如何获取所需的两个操作数。 我们以浮点加法运算为例。 首先,经过分析我们发现整型指令寄存器的例化是通过循环完成的,所以我们可以相同的方式例化32个32位浮点寄存器,相关代码如下: 我们进入例化
    发表于 10-24 07:10

    浮点运算单元的设计和优化

    普通的加减交替法,同样对于无符号乘法进行一位符号扩展后统一当作有符号数进行运算,最终得到完全准确的除法结果,总共最多需要36个时钟周期。 4.浮点指令扩展:计划先完成单精度浮点指令集(F)的拓展,可以
    发表于 10-22 07:04

    定点小数运算

    许多 MCU 芯片只支持整数运算,如果要在这些芯片上进行小数运算,定点运算应该是最佳选择了;此外即使芯片支持浮点数,
    发表于 07-25 14:02

    功率分析仪运算原理 什么是同步源?有功功率运算

    横河功率分析仪的通用运算原理则是首先检测出指定信号的周期,并将检测周期的整数倍时间设为测量区间,随后对这段时间内采集到的数据进行平均运算,这一测量方式也被称为“同步源周期平均法”,其中用于定义测量周期的输入信号被称为同步源。
    的头像 发表于 06-30 15:30 687次阅读
    功率分析仪<b class='flag-5'>运算</b>原理 什么是同步源?有功功率<b class='flag-5'>运算</b>

    FPGA定点和浮点数学运算实例对比

    在创建 RTL 示例时,经常使用 VHDL 2008 附带的 VHDL 包。它提供了出色的功能,可以高效地处理定点数,当然,它们也是可综合的。该包的一些优点包括:
    的头像 发表于 06-23 09:53 772次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>定点</b>和浮点数学<b class='flag-5'>运算</b>实例对比

    从零开始学运算放大器笔记一 | 认识运算放大器

    )是一种模拟电路模块,它采用差分电压输入,产生单端电压输出。它可以对输入信号进行放大以及加、减、乘、除、微分、积分等数学运算,现多应用于信号放大功能。一个运算放大器至
    的头像 发表于 03-24 19:32 3744次阅读
    从零开始学<b class='flag-5'>运算</b>放大器笔记一 | 认识<b class='flag-5'>运算</b>放大器

    复合的逻辑运算

    符合逻辑运算
    的头像 发表于 01-16 09:10 556次阅读
    复合的逻辑<b class='flag-5'>运算</b>

    如何使用运算放大器进行模拟信号处理

    运算放大器是一种高增益、差分输入、单端输出的集成电路元件,能够对输入信号进行放大、滤波、整流等处理,是模拟电路中常用的基本部件之一。以下是如何使用运算放大器进行模拟信号处理的具体步骤和
    的头像 发表于 12-18 17:31 2278次阅读