Xilinx浮点数IP核使用记录

前言

这是本人第一篇博客,即处女作,思路不清晰、语言啰嗦请见谅。浑浑噩噩已经研究生一年级了,之前一直过的是衣来伸手饭来张口的日子,哪里不会了就问度娘或者请教学长,感觉这几年也没有自己认认真真去解决过什么问题。在上学期买了两个本子,养成了勤动笔的习惯,课题相关内容,已经不知不觉写了半本多知识点和设计思路。但是每次百度问题,干货往往都是在CSDN上面找到的,每每看到大神在上面分享亦或是记录,心中便充满了憧憬。因此,我决定我不要再做一个乘凉者,我也要种下属于我自己的一片森林,供后人乘凉。此外也是感叹实验室人来人走,但都没留下什么有用的财富,我也希望自己的记录能够方便学弟,让他们少走弯路。最后是我的座右铭“经历痛苦才会蜕变”,与来者共勉!

FPGA上小数的运算

在我们使用C语言的时候,如果想要进行小数运算,那么我们会毫不犹豫的打出float、double…但是Verilog语言中没有这类的数值类型,在Verilog中,数据全部是用进制数字表示的,如1’b18’d100。那么如果想要进行小数运算,FPGA也不是没有办法,Xilinx公司的Vivado套件提供了Floating-poing IP核,内部包含基本的整数核浮点数互换,以及基于浮点数的运算。因此,在进行小数运算之前,首先要先将数值浮点化(哪怕是整数,因为整数与浮点数的存储形式是截然不同的),然后利用该IP核进行一系列操作后,如有需求再转换成整数输出。

XIlinx FPGA浮点数的表示

小数在寄存器中可表示为定点数和浮点数,这里的定点和浮点表示小数点的位置是否是固定的,定点数的缺陷是数值的动态范围没有浮点数大,但是由于小数点位置固定,对器件来说计算压力更小,实现起来也更加简单。例如TI公司为了应对不同的应用场景,推出的DSP既有定点型也有浮点型,用户按需选择。
由上文可知定点数包含于浮点数,因此Xilinx公司FPGA IP核默认为浮点数,用户根据需求选择位数和小数点位置。
Xilinx文档“PG060”为浮点数IP核的详细介绍,内有该公司器件对浮点数的表示方法。
在这里插入图片描述
上图为Xilinx公司对于浮点数结构的定义,数据分为三部分,即符号位(s:sign)、指数位(e:exponent)和小数位(f:fraction)。
符号位:上图中s部分,占最高位,固定1位,即第w-1位。
指数位:上图中e部分,位宽由用户决定。
小数位:上图中f部分,小数的表示形式为“b0.b1b2b3b4…”形式,其中b0位固定位1,即小数部分范围为[1,2)。
数值表达式:
数值表达式
该表达式有些类似于科学计数法,只不过动态范围是由2E来进行调节,而科学计数法使用的是10n

Floating point IP核的使用

本文关于该IP核的使用的介绍借鉴了前人的文章,特此放上前辈链接,今后我也将通过自己的努力,多写一些纯原创文章。

首先介绍一下该IP核的配置界面:

IP核配置

1. 操作选择
由此配置页可看到该IP核除了支持整数与浮点数的转换外,还支持常用的算术操作,基本所有的运算操作都可以通过一个或多个该IP核来实现。
在这里插入图片描述
2. 输入精度
该配置页与其称作输入精度,我倒觉得不如叫输入格式,用户可按需选择。
在这里插入图片描述
3. 结果精度
该配置页用来配置输出格式,用户若需更大的动态范围,则可增大指数位的位数。若需小数尽可能的精确,则可增大小数位数,总位数按需控制。
在这里插入图片描述
4. 优化
该配置页分为两部分,结构优化对应于双精度乘法的情况,实现优化要选择DSP Slice和Block Memory使用与否,主要是资源与速度的取舍,推荐资源够用情况下优先使用。由于整数与浮点数的转换不涉及到运算操作,所以本设计中均为无法选中状态。
在这里插入图片描述 5. 接口选择
该配置页分为三个部分:

  • 流控制选择:
    该选项控制数据接口的工作方式为阻塞模式还是非阻塞模式。
    若该IP核只需要一个输入通道,如整数与浮点数的转换,则可直接选择非阻塞模式,输入数据有更新,那么直接输出,该模式可以减少资源的消耗。
    若该IP核被配置为多通道输入,如加法运算,那么则需考虑是否使用阻塞模式。在阻塞模式下, AXI4总线的ready和valid信号起到了反馈控制的作用。通道输入的数据会先存入缓冲区,当输入数据失配,即一个通道数据量较多,另一个通道数据量较少,那么前者的缓冲区会首先被填满,此时IP就会返回给前级电路无效的ready信号,等待另一个通道数据的到来,从而起到反馈控制,即“Back pressure”。

  • 延迟和速率配置
    该选项也是对于时间与空间的一种权衡,若想要输出与输入延时较短,就适当调小Latency,当然代价就是耗费资源数增加。

  • 控制信号
    时钟使能与复位信号的使用与否。

  • 可选的输出域
    该部分可供选择的信号为计算过程中可能会需要的特殊标志信号,包括各种溢出、非法操作和被除数为0等情况。若使能,该信号会输出给TUSER引脚供用户使用。
    在这里插入图片描述

IP核使用

本实验基于Vivado 2018.3,调用Floating point IP核实现整数到浮点数的转换。IP核被配置为非阻塞模式,延迟为最大值6,输出格式为单精度(Single)浮点数。

Testbench

在这里插入图片描述

仿真及验证

输入1000000,输出49742400;输入200000,输出48435000。
此外从该图可以看出输出域输入的延迟确实为6个时钟周期,10ns*6。
在这里插入图片描述Matlab计算值:
在这里插入图片描述
IP核输出Matlab计算结果一致,IP核调用成功。在此基础上,可以利用该IP核进行进一步的浮点数运算,计算的最后总结过不要忘记转换回标准的整数呦。

  • 29
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vivado软件中有一个名为Float-point的IP用于点数运算。您可以打开Vivado软件,在IP Catalog中搜索关键词"float",然后双击打开Float-point IP进行进一步的配置和使用。 该IP的详细介绍和使用方法可以参考《快速傅里叶变换v9.0 IP指南 ——Vivado设计套件》。该IP是一种计算DFT(离散傅里叶变换)的有效方式,支持前向变换(FFT)和反向变换(IFFT),并且可以在运行时进行配置选择。它的变换点数范围可以根据需求进行设置。 如果您想在Modelsim中独立仿真Vivado的IP,您可以参考链接https://blog.csdn.net/weixin_38712697/article/details/80720428 中的详细教程,了解如何在Modelsim中进行仿真。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vivado点数计算IP介绍及简单运用仿真](https://blog.csdn.net/qq_40230112/article/details/103055304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Vivado Xilinx FFT快速傅里叶变换IP详解](https://download.csdn.net/download/prisoner123/10411652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值