• 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个时钟周期。

  • 相关阅读:
    安卓Dialog setCanceledOnTouchOutside(ture) 无效问题
    com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException,OkHttp时间戳校验问题
    安卓recyclerView 分割线的那些事
    安卓小知识
    安卓GridView奇偶行不同颜色
    安卓加载网络图片OOM问题解决
    安卓使用TextView实现图片加文字说明
    内置模块
    递归
    内置函数
  • 原文地址:https://www.cnblogs.com/xiaomeige/p/4506365.html
Copyright © 2020-2023  润新知