当前位置:网站首页>Vivado IP核之浮点数乘除法 Floating-point
Vivado IP核之浮点数乘除法 Floating-point
2022-07-29 05:25:00 【迎风打盹儿】
Vivado IP核之浮点数乘除法 Floating-point
前言
随着制造工艺的不断发展,现场可编程逻辑门阵列(FPGA)的集成度越来越高,应用也越来越广,其中在对数字信号进行处理时必然要用到一些数学处理类的IP核。最近正在研究空域自适应抗干扰技术研究的FPGA硬件实现,其中不免要用到一些IP核,今天就从浮点数乘除法出发详细介绍一下vivado当中的Floating-point这个IP核吧,希望对各位的学习能起到一定的帮助作用。
提示:以下是本篇文章正文内容,均为作者本人原创,写文章实属不易,希望各位在转载时附上本文链接。
一、浮点数乘除法示例
为了后面仿真便于分析结果,在此我们就列举浮点数乘除法的例子,仿真时直接用下面的例子进行仿真,来验证仿真结果是否正确。
example:设浮点数a=32'b1100_0000_1101_0011_0011_0011_0011_0011,即a=-6.6,浮点数b=32'b0100_0001_0000_1100_1100_1100_1100_1101,即b=8.8,则a*b=32'b1100_0010_0110_1000_0101_0001_1110_1100,即a*b=-58.08,a/b=32'b1011_1111_0100_0000_0000_0000_0000_0000,即a/b=-0.75。
二、Floating-point IP核配置步骤
1.乘法器配置
1.首先配置Operation Selection界面,如图1所示。

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

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

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

以上4个界面都配置完成后即可点击右下角OK按钮生成乘法器IP核。
2.除法器配置
在vivado中搜索Floating-point,找到该IP核后即可按照以下操作完成相应的配置。
1.首先配置Operation Selection界面,如图5所示。

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

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

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

以上4个界面都配置完成后即可点击右下角OK按钮生成除法器IP核。
三、仿真
1.顶层代码
建立一个顶层模块,命名为float_mul_div,用来例化刚才生成的IP核。
代码如下:
`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/07/23 16:40:34
// Design Name:
// Module Name: float_mul_div
// Project Name:
// Target Devices:
// Tool Versions: 2017.4
// Description:
// Dependencies:
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//
//
module float_mul_div(
input clk,
input a_tvalid,
input [31:0] a_tdata,
input b_tvalid,
input [31:0] b_tdata,
output mul_result_tvalid,
output [31:0] mul_result_tdata,
output div_result_tvalid,
output [31:0] div_result_tdata
);
float_multiply u1_float_multiply( //乘法器
.aclk(clk),
.s_axis_a_tvalid(a_tvalid),
.s_axis_a_tdata(a_tdata),
.s_axis_b_tvalid(b_tvalid),
.s_axis_b_tdata(b_tdata),
.m_axis_result_tvalid(mul_result_tvalid),
.m_axis_result_tdata(mul_result_tdata)
);
float_divide u1_float_divide( //除法器
.aclk(clk),
.s_axis_a_tvalid(a_tvalid),
.s_axis_a_tdata(a_tdata),
.s_axis_b_tvalid(b_tvalid),
.s_axis_b_tdata(b_tdata),
.m_axis_result_tvalid(div_result_tvalid),
.m_axis_result_tdata(div_result_tdata)
);
endmodule
2.仿真代码
建立一个仿真模块,命名为float_mul_div_tb,用来仿真刚才顶层模块例化的IP核。
代码如下:
`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/07/23 17:03:52
// Design Name:
// Module Name: float_mul_div_tb
// Project Name:
// Target Devices:
// Tool Versions: 2017.4
// Description:
// Dependencies:
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//
//
module float_mul_div_tb();
reg clk;
reg a_tvalid;
reg [31:0] a_tdata;
reg b_tvalid;
reg [31:0] b_tdata;
wire mul_result_tvalid;
wire [31:0] mul_result_tdata;
wire div_result_tvalid;
wire [31:0] div_result_tdata;
float_mul_div u1_float_mul_div(
.clk(clk),
.a_tvalid(a_tvalid),
.a_tdata(a_tdata),
.b_tvalid(b_tvalid),
.b_tdata(b_tdata),
.mul_result_tvalid(mul_result_tvalid),
.mul_result_tdata(mul_result_tdata),
.div_result_tvalid(div_result_tvalid),
.div_result_tdata(div_result_tdata)
);
always #5 clk=~clk;
initial begin
clk=1'b0;
#15; a_tvalid<=1'b1;
a_tdata<=32'b1100_0000_1101_0011_0011_0011_0011_0011; //-6.6
b_tvalid<=1'b1;
b_tdata<=32'b0100_0001_0000_1100_1100_1100_1100_1101; //8.8
end
endmodule
四、仿真结果分析
仿真结果如图9所示,对比前面所列举浮点数乘除法的例子,可知该模块成功实现了浮点数的乘除法。

总结
本次介绍了怎么使用vivado中的Floating-point IP核实现浮点数的乘除法。
边栏推荐
猜你喜欢

Official tutorial redshift 05 AOVs

LeetCode #167.两数之和 II - 输入有序数组

Traditional model predictive control trajectory tracking - wavy trajectory (function package has been updated)

SQL Developer图形化窗口创建数据库(表空间和用户)

Leetcode 557. reverse word III in string
![寒假集训总结 (1.23~1.28) [第一梯队]](/img/cf/2f86ecc23bfe6d96ad0429c785663a.png)
寒假集训总结 (1.23~1.28) [第一梯队]

顺序表和链表

Leetcode 14. longest public prefix

UE4/UE5 C盘变大处理

UE5 光影基础 阴影全解析 锯齿阴影解决方案 Lumen
随机推荐
循环链表和双向链表
寒假集训总结 (1.23~1.28) [第一梯队]
Official tutorial redshift 09 camera
Computer network interview questions
模型空间下的旋转和世界空间下的旋转
[beauty of software engineering - column notes] 19 | as a programmer, you should have product awareness
服务器135、137、138、139、445等端口解释和关闭方法
Official tutorial redshift 05 system parameter detailed explanation
Leetcode 876. Intermediate node of linked list
只让电脑运行某个程序设置
虹科分享 | 带您全面认识“CAN总线错误”(一)——CAN总线错误与错误帧
Redshift还原SP效果 - SP贴图导出设置及贴图导入配置
Operating system interview questions
Official tutorial redshift 04 rendering parameters
【Leetcode刷题】数组3——分治
LeetCode #83. 删除排序链表中的重复元素
计算机大厂面试题
Leetcode 283. move zero
Leetcode 3. longest substring without repeated characters
Leetcode 9. palindromes