原创 小梅哥和你一起深入学习FPGA之altera浮点IP核的仿真使用

2017-1-9 15:30 2255 6 6

近期小梅哥的项 目要使用到整型数据转浮点型数据,将16位的整数转换为单精度浮点数(32bit)。本打算自己写逻辑实现的,不过考虑到本身项目时间紧,能力也有限,就 没有贸然行事。再说了,Quartus II软件中也给我们免费提供了专用的浮点转换IP。因此就直接使用该IP核来进行设计。


通过阅读Altera提供的Floating-Point IP Cores User Guide中相关章节,了解到该浮点IP包含以下功能:


整型转浮点(Integer-to-Float);


浮点转整型(Float-to-Integer);


浮点转浮点(Float-to-Float);


定点转浮点(Fixed-to-Float);


浮点转定点(Float-to-Fixed)。


本次我的项目需要使用到的功能为定点转浮点类型。因此这里只记录定点转浮点功能的测试。


小梅哥使用的是Quartus II13.0的软件,这里先介绍如何在Quartus II工程中调用添加ALTFP_CONVERT的IP核。


1、打开兆功能核向导:


2、在向导中选择新建一个用户兆功能核并点击next:



3、在Arithmetic(1)下选择ALTFP_CONVERT(2)核,并选择生成语言为Verilog(3),给IP核命一个名字(4),然后点击next(5):


4、等待大约20秒左右,打开浮点IP核的参数配置选项卡,在选项卡中,Operationmode选择An integer to a floating point(1),Integer data选择32bits(2),然后点击next:


5、设置output floating point Setting为single precision(32bits)(1),然后点击next:


6、为模块添加一个异步清零信号(1),当然这里如果不添加这个信号一般情况下使用也没有问题,勾选后点击next:


7、仿真模式设置界面,这里不需要勾选生成网表,因此直接点击next即可。


8、点击finish即可完成IP核的生成。


9、在Quartus II工程中,添加此IP核 的qip文件(fpconvert.qip)到工程中来。


10、将fpconvert.v文件设置为工程顶层文件:


11、为该IP核编写testbench文件,这里暂时不进行全面覆盖的仿真测试,只是随机取几个值进行转换,并查看仿真结果,testbench代码如下所示:


01 `timescale 1ns/1ns


02


03 module tb;


04


05 reg aclr;


06 reg clock;


07 wire [31:0] dataa;


08 wire [31:0] result;


09


10 reg [15:0]data;


11


12 fpconvert fpconvert(


13 aclr,


14 clock,


15 dataa,


16 result


17 );


18


19 initial clock = 1;


20 always #10 clock = ~clock;


21


22 assign dataa = data[15] {16'hffff,data}:{16'h0000,data};


23


24 initial begin


25 aclr = 1'b1;


26 #50;


27 aclr = 1'b0;


28 data = 32'd0;


29 #100;


30 begin


31 data = 128;


32 #200;


33 data = -128;


34 #200;


35 data = 3456;


36 #200;


37 data = -3456;


38 #200;


39 end


40 $stop;


41 end


42


43 endmodule


44


由于在实际 使用中我们的输入数据为16位的有符号整型数,而该IP核的输入为固定的32位整型数,因此需要进行16位有符号数到32位有符号数之间的转换。转换代码 如第22行所示。16位的有符号整型数,其最高位为符号位即data[15],而在32位的有符号整型数中,也是最高位为符号位,即dataa[31]。 因此,如果直接将16位的有符号数据输入到32位的有符号整型数据端口,则势必会发生错误,因此,这里根据data的符号位data[15]的值来对 dataa的 高16位进行补全操作,若data[15]为1,则将dataa[31:16]全部填1,若data[15]为0,则将dataa[31:16]全部填0 即可。


使用以上testbench对该IP核的仿真结果如下图所示:(点击图片可查看高清原图哦)


这里,通过仿真, 对Altera提供的浮点数据转换IP核的性能进行了测试验证。同时,Altera还提供了很多其它好用的浮点IP,我们都可以通过仿真方式来对其进行功 能的验证和性能的分析。一转眼,小梅哥已经半年没有在EDNChina上写过博客了。时隔半年,再来发文,希望大家能够给我多多鼓励,让我继续坚持下去。


文章评论0条评论)

登录后参与讨论
相关推荐阅读
小梅哥 2019-09-04 22:10
小梅哥FPGA时序分析笔记(6.2)深入现象看本质——庖丁解牛之FPGA内数据传输模型
通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。 时钟和数据传输路径 通过上一节内容中,我绘制的那个FPGA内部数...
小梅哥 2019-09-01 21:28
小梅哥FPGA时序分析笔记(6.1)深入现象看本质——庖丁解牛之FPGA可编程原理
上一次发博客,已经是2个月前了,这中间两个月,干了件很有意义的事情,尤其是对于自己来说,感觉学到了非常多的知识和经验,每天都很忙,忙到没时间逛网站博客,终于忙完闲下来了,连载的事情可不能忘,终于可以书...
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
我要评论
0
6
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条