zoukankan      html  css  js  c++  java
  • ALTFP_CONVERT IP使用与仿真

    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

    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核的仿真结果如下图所示:

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

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/xiaomeige/p/4506365.html
Copyright © 2011-2022 走看看