Vivado IP核之浮点数开方 Floating-point

Vivado IP核之浮点数开方 Floating-point


前言

        随着制造工艺的不断发展,现场可编程逻辑门阵列(FPGA)的集成度越来越高,应用也越来越广,其中在对数字信号进行处理时必然要用到一些数学处理类的IP核。最近正在研究空域自适应抗干扰技术研究的FPGA硬件实现,其中不免要用到一些IP核,今天就从浮点数开方出发简单介绍一下vivado当中的Floating-point这个IP核吧,希望对各位的学习能起到一定的帮助作用。


提示:以下是本篇文章正文内容,均为作者本人原创,写文章实属不易,希望各位在转载时附上本文链接。

一、浮点数开方示例

        为了后面仿真便于分析结果,在此我们就列举浮点数开方的例子,仿真时直接用下面的例子进行仿真,来验证仿真结果是否正确。

        example:设浮点数a=32'h3EB851EC,即a=0.36,则\sqrt{a}=32'h3F19999A,即\sqrt{a}

=0.6。 

二、Floating-point IP核配置步骤

        1.首先配置Operation Selection界面,如图1所示。

图1 Operation Selection界面的配置

        2.其次配置Precision of Inputs界面,如图2所示。

图2 Precision of Inputs  界面的配置

        3.然后配置Optimizations界面,如图3所示。

图3 Optimizations   界面的配置

         4.最后配置Interface Options界面,如图4所示。

图4 Interface Options   界面的配置

以上4个界面都配置完成后即可点击右下角OK按钮生成开方IP核

三、仿真

1.顶层代码

建立一个顶层模块,命名为float_sqrt,用来例化刚才生成的IP核。

代码如下:

`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/07/28 10:26:26
// Design Name: 
// Module Name: float_sqrt
// Project Name: 
// Target Devices: 
// Tool Versions: 2017.4
// Description: 
// Dependencies: 
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//

module float_sqrt(
input clk,                   //输入时钟信号
input a_valid,               //输入数据有效信号
input [31 : 0] a_data,       //输入数据
output wire re_valid,        //输出结果有效信号
output wire [31 : 0] re_data //输出开方结果
    );
    
    
float_sqrt_ip u1_float_sqrt_ip (  //例化IP核
      .aclk(clk),                                                     
      .s_axis_a_tvalid(a_valid),                   
      .s_axis_a_tdata(a_data),                     
      .m_axis_result_tvalid(re_valid),  
      .m_axis_result_tdata(re_data)    
    );
endmodule

2.仿真代码

建立一个仿真模块,命名为float_sqrt_tb,用来仿真刚才顶层模块例化的IP核。

代码如下:

`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/07/28 10:34:15
// Design Name: 
// Module Name: float_sqrt_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 2017.4
// Description: 
// Dependencies: 
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//

module float_sqrt_tb();
reg clk;
reg a_valid;
reg [31:0] a_data;
wire re_valid;
wire [31:0] re_data;

float_sqrt u1_float_sqrt(
.clk(clk),
.a_valid(a_valid),
.a_data(a_data),
.re_valid(re_valid),
.re_data(re_data)

);

always #5 clk=~clk;
initial begin
    clk=1'b0;
#15;a_valid=1'b1;
       a_data=32'h3EB851EC;  //3.6    
#280;a_valid=1'b0;  
end


endmodule

四、仿真结果分析

仿真结果如图5所示,对比前面所列举浮点数开方的例子,可知该模块成功实现了浮点数的开方。

图5 仿真结果

总结

本次介绍了怎么使用vivado中的Floating-point IP核实现浮点数的开方。

猜你喜欢

转载自blog.csdn.net/m0_66360845/article/details/126031633