在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
);