Vivado IP之浮点数Floating-point

发布于:2025-02-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

在Vivado的IP Catalog中搜索Floating-point即可找到该IP

Operation Selection界面

1.绝对值,即result=|A|

2.累加

3.两个浮点数的加法或者减法

4.两个浮点数进行比较

5.两个浮点数的除法

6.求指数,即e^A

7.定点数到浮点数的转化

8.浮点数转化为定点数

9.浮点数到浮点数的转化,比如单精度转为双精度

10.乘加,如(A*B)+-C

11.求In,即In(A)

12.两个浮点数的乘法

13.1/浮点数,即1/A

14.根号分之一,

15.浮点数开根号

Precision of Inputs界面

该界面为输入数据的精度设置,以12两个浮点数之间的乘法为例

1展示了四种精度,分别是半精度、单精度、双精度、以及自己自定义精度类型。

单精度浮点数的类型如下面所示,指数位有8位,小数位有24位,总共是32位

Optimizations界面

这里是对DSP资源的优化,可以自行选择使用多少个DSP资源,分别在下面有展示,可以根据自己的板卡资源,来决定使用多少资源。

Interface Options界面

可以选择阻塞或非阻塞以及时延

 Verilog例化-以非阻塞为例

例化还是非常简单的,输入时钟、两个浮点数以及其有效信号;输出则是结果和其有效信号,在有效信号拉高时,即可采集到最终的结果。

floating_point_0 your_instance_name (
  .aclk(aclk),                                  // input wire aclk
  .s_axis_a_tvalid(s_axis_a_tvalid),            // input wire s_axis_a_tvalid
  .s_axis_a_tdata(s_axis_a_tdata),              // input wire [31 : 0] s_axis_a_tdata
  .s_axis_b_tvalid(s_axis_b_tvalid),            // input wire s_axis_b_tvalid
  .s_axis_b_tdata(s_axis_b_tdata),              // input wire [31 : 0] s_axis_b_tdata
  .m_axis_result_tvalid(m_axis_result_tvalid),  // output wire m_axis_result_tvalid
  .m_axis_result_tdata(m_axis_result_tdata)    // output wire [31 : 0] m_axis_result_tdata
);