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. MSYS2 安装和配置

    MSYS2 安装和配置 msys2 和 cygwin 类似,提供了一个类 Linux 的 shell 环境和工具链,同时还使用了 arch linux 的 pacman 管理软件包,比 cygwin ...

  2. LIB和DLL的区别与使用

    转这篇文章是因为以前有个误区,以为lib为静态库,dll为动态库,这理解并不错,但不全面.lib分两种的:(1) lib包含所有内容的静态库,应用程序用它即可,这是我理解的一种(2) lib只包含头部 ...

  3. Power-BI 主要城市商品房销售分析

    经常在网上看到有关房价的讨论,房价可能真的悬了,高房价撑不了多久,一线城市房价远高于国际,暴涨游戏该结束了,等等.那么近年来房价整体上究竟是一个什么样的状态?今天我们撇开宏观经济要素,来看看近年来主要 ...

  4. android网络编程--从网络下载图片,并保存到内存卡

    功能1:从网络上取得的图片显示到imageview上面,生成Bitmap时有两种方法,一种是先转换为byte[],再生成bitmap:一种是直接用InputStream生成bitmap.功能2:点击按 ...

  5. mysql centeros 安装

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html linux mysql允许远程连接 1.登录数据库:my ...

  6. News: Visual Studio Code support debugging Linux Apps

    http://arstechnica.com/information-technology/2015/11/visual-studio-now-supports-debugging-linux-app ...

  7. iOS 隐藏系统的导航,使用自定义的导航

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  8. Leetcode: Create Maximum Number

    Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...

  9. Ubuntu 16.04 LTS Final Beta

    期待已久的Ubuntu  LTS 版本开放了公测版本 Ubuntu 16.04 (Xenial Xerus) Daily Build(http://cdimage.ubuntu.com/daily-l ...

  10. 怎么在eclipse里调试WebDriver的源代码(转)

    当你看完WebDriver的工作原理这篇博客以后,是不是也跃跃欲试想印证文章里的理论是不是正确,想自己也看下webdriver的源代码,并且调试下,通过代码来更深入的了解WebDriver的工作原理. ...