ALTFP_CONVERT IP使用与仿真

 

近期项目要使用到整型数据转浮点型数据,将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):

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

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

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

 

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

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

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

 

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

 

12、为该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

 

由于在实际使用中我们的输入数据为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核的仿真结果如下图所示:

由图可见,每当输入数据更新后,在第6个时钟上升沿,转换结果出现在result上。即该IP核实现整型数到浮点数的转换需要5个时钟周期。

ALTFP_CONVERT IP使用与仿真的更多相关文章

  1. 调用altera IP核的仿真流程—下

    调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...

  2. 调用altera IP核的仿真流程—上

    调用altera IP核的仿真流程—上 在学习本节内容之后,请详细阅读<基于modelsim-SE的简单仿真流程>,因为本节是基于<基于modelsim-SE的简单仿真流程>的 ...

  3. Altera三速以太网IP核快速仿真与使用(上篇)

    对于比较高级的ip核,altera一般都会提供仿真案例,网上有关于这个IP核的各种仿真方法,但都比较繁琐,前几日,朋友跟我分享了一个比较快速高效的仿真方法,这个方法也是他摸索折腾了一段时间才总结出来的 ...

  4. altera DDR2 IP核之仿真

    在生成的IP核文件夹下,有一个testbench文件夹,里面包含了一个example测试激励和DDR2仿真模型. 如下 20 -rw-r--r-- 1 Administrator 197121 171 ...

  5. IP之ALTIOBUF仿真

    这里实现了差分转单端的功能. 问题:差分信号的电平是怎样的?如果像平常一样不设置Pin Planner中的电平的话,编译会报错. 在Pin Planner中做了如下设置: `timescale 1 n ...

  6. IP之NCO仿真

    NCO仿真要用.vo仿真模型,不能用.v文件 /**************************************************************************** ...

  7. modelsim 独立仿真vivado的IP核及仿真脚本

    Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...

  8. IP之ALTDDIO_in仿真

    需要添加altera_mf库,才可以仿真. 上升沿输出,把前一个时钟的数据输出来. `timescale 1 ns/ 1 ns; module altddio_in_ip_tb; reg rst; r ...

  9. Lattice 的 DDR IP核使用调试笔记之DDR 的 仿真

    —— 远航路上ing 整理于 博客园.转载请标明出处. 在上节建立完工程之后,要想明确DDR IP的使用细节,最好是做仿真.然后参考仿真来控制IP 核. 仿真的建立: 1.在IP核内的以下路径找到以下 ...

随机推荐

  1. 使用APICloud平台一周时间开发出休闲娱乐内容类APP

    这款app是我花一周左右时间做出来的,一款阅读笑话,段子,糗事,脑筋急转弯,神回复,语录,谜语等的休闲娱乐app,用户除了可以浏览他人发布的内容外,自己也可以发布相关内容,和其他人一同分享有趣的内容, ...

  2. Fluentd 例子

    0. 安装.启动 安装 curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh 更新:最近貌似会安装 ...

  3. Vue.2.0.5-自定义指令

    简介 除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令.注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件--然而,有的情况下,你仍然需要对纯 D ...

  4. REST Security with JWT using Java and Spring Security

    Security Security is the enemy of convenience, and vice versa. This statement is true for any system ...

  5. mantis 安装问题

    1. 邮件 修改 config_defaults_inc.php $g_administrator_email = 'mantis@pooy.net'; $g_webmaster_email = 'm ...

  6. less 初试

    第一次接触less,做些记录. 官网     民间中文文档      less notepad++插件 1. 支持变量声明 支持颜色.大小等相加 @nice-blue: #5B83AD; @light ...

  7. DG - physical standby switchover切换过程

    一.切换前检查1.检查备库已经全部接收到主库的redo如果是最大可用性.最大保护性模式,可以在primary端查看v$archive_dest_status,确认是否所有的redo已经传送到备库#在主 ...

  8. 使用 jQuery Deferred 和 Promise 创建响应式应用程序

    这篇文章,我们一起探索一下 JavaScript 中的 Deferred 和 Promise 的概念,它们是 JavaScript 工具包(如Dojo和MochiKit)中非常重要的一个功能,最近也首 ...

  9. mysql:查询排名

    sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从而实现排序: mysql里则是需要先将数据查询出来并先行按照需要排序的字段做好降序desc,或则升序 ...

  10. linux:计算机概论

    1>.计算机的五大单元:输入单元.输出单元.CPU内部的控制单元.算术逻辑判断单元和主记忆体单元(记忆体包含主记忆体和辅组记忆体): 2>.CPU分为两类:精简微指令集(RISC)和复杂微 ...