当前位置:网站首页>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'b0100_0000_0000_1100_1100_1100_1100_1110,即a+b=2.2000003(之所以不等于2.2,是因为浮点数表示本身就存在一个精度问题),a-b=32'b1100_0001_0111_0110_0110_0110_0110_0110,即a-b=-15.4。
二、配置说明
由于本次调用一个Floating-point IP核实现即能加又能减,所以就必然有一个控制信号控制执行加法还是减法。这个控制信号在数据手册里面是6位的,但具体生成IP核时其实有8位,高两位默认配置为0,具体配置如图1所示。

三、Floating-point IP核配置步骤
在vivado中搜索Floating-point,找到该IP核后即可按照以下操作完成相应的配置。
1.首先配置Operation Selection界面,如图2所示。

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

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

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

以上4个界面都配置完成后即可点击右下角OK按钮生成IP核。
四、仿真
1.顶层代码
建立一个顶层模块,命名为float_add_sub,用来例化刚才生成的IP核。
代码如下:
`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/07/23 12:19:25
// Design Name:
// Module Name: float_add_sub
// Project Name:
// Target Devices:
// Tool Versions: 2017.4
// Description:
// Dependencies:
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//
//
module float_add_sub(
input clk,
input a_tvalid,
input [31:0] a_tdata,
input b_tvalid,
input [31:0] b_tdata,
input operation_tvalid,
input [7:0] operation_tdata,
output result_tvalid,
output [31:0] result_tdata
);
float_add_sub_ip float_add_sub_ip_u1(
.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),
.s_axis_operation_tvalid(operation_tvalid),
.s_axis_operation_tdata(operation_tdata),
.m_axis_result_tvalid(result_tvalid),
.m_axis_result_tdata(result_tdata)
);
endmodule
2.仿真代码
建立一个仿真模块,命名为float_add_sub_tb,用来仿真刚才顶层模块例化的IP核。
代码如下:
`timescale 1ns / 1ps
//
// Company: cq uiniversity
// Engineer: clg
// Create Date: 2022/07/23 12:34:59
// Design Name:
// Module Name: float_add_sub_tb
// Project Name:
// Target Devices:
// Tool Versions: 2017.4
// Description:
// Dependencies:
// Revision:1.0
// Revision 0.01 - File Created
// Additional Comments:
//
module float_add_sub_tb();
reg clk;
reg a_tvalid;
reg [31:0] a_tdata;
reg b_tvalid;
reg [31:0] b_tdata;
reg operation_tvalid;
reg [7:0] operation_tdata;
wire result_tvalid;
wire [31:0] result_tdata;
float_add_sub u1_float_add_sub(
.clk(clk),
.a_tvalid(a_tvalid),
.a_tdata(a_tdata),
.b_tvalid(b_tvalid),
.b_tdata(b_tdata),
.operation_tvalid(operation_tvalid),
.operation_tdata(operation_tdata),
.result_tvalid(result_tvalid),
.result_tdata(result_tdata)
);
always #5 clk=~clk;
initial begin
clk=1'b0;
#10; a_tvalid<=1'b1;
a_tdata<=32'b1100_0000_1101_0011_0011_0011_0011_0011;
b_tvalid<=1'b1;
b_tdata<=32'b0100_0001_0000_1100_1100_1100_1100_1101;
operation_tvalid<=1'b1;
operation_tdata<=8'b0000_0000; //加法
#400; a_tvalid<=1'b1;
b_tvalid<=1'b1;
operation_tvalid<=1'b1;
operation_tdata<=8'b0000_0001; //减法
end
always @(posedge clk) begin
if (result_tvalid == 1'b1) begin
a_tvalid <=1'b0;
b_tvalid<=1'b0;
operation_tvalid <= 1'b0;
end
end
endmodule
五、仿真分析
仿真结果如图6所示,对比前面所列举浮点数加减法的例子,可知该模块成功实现了浮点数的加减法。

总结
本次介绍了怎么使用vivado中的Floating-point IP核实现浮点数的加减法。
边栏推荐
- Redshift restore SP effect - SP map export settings and map import configuration
- Markdown and typora
- Leetcode scribble notes 763. Divide the letter range (medium)
- 电脑系统没有standard tcp/ip port端口的处理操作
- [leetcode skimming] array 2 - binary search
- leetcode刷题笔记 605. Can Place Flowers (Easy) 605.种花问题
- Unity中简单的cubecap+fresnel shader的实现
- [beauty of software engineering - column notes] 20 | how to deal with the headache of requirement change?
- Eight sorts ------------- heap sort
- STP生成树原理及选举规则举例
猜你喜欢

虹科分享 | 带您全面认识“CAN总线错误”(一)——CAN总线错误与错误帧

Install MySQL from scratch (MySQL installation document - unzipped version)
![[beauty of software engineering - column notes] 14 | project management tools: all management problems should be considered whether they can be solved by tools](/img/b6/290f5719bf226213f926fb26433c06.png)
[beauty of software engineering - column notes] 14 | project management tools: all management problems should be considered whether they can be solved by tools

【Leetcode刷题】数组2——二分查找

Official tutorial redshift 09 camera

官方教程 Redshift 08 Light

虹科分享 | FPGA 实现的直通与存储转发切换延迟

Leetcode 557. reverse word III in string

Add time series index to two-dimensional table

Leetcode 14. longest public prefix
随机推荐
V-ray 5 ACEScg 工作流程设置
Official tutorial redshift 05 system parameter detailed explanation
SQL Developer图形化窗口创建数据库(表空间和用户)
Leetcode 283. move zero
Overview and summary of GI engine in redshift 024, the official tutorial
虹科Automation softPLC | 虹科KPA MoDK运行环境与搭建步骤(3)——MoDK例程测试
Noi online 2022 popular group problem solving & personal understanding
JVM内存结构
官方教程 Redshift 04 渲染参数
MySQL interview questions
OSPF理论介绍
练习:存放部门信息
虹科分享 | 如何测试与验证复杂的FPGA设计(1)——面向实体或块的仿真
虹科分享 | 带你全面了解“CAN总线错误”(三)——CAN节点状态与错误计数器
什么是撞库及撞库攻击的基本原理
Single chain surface test questions
Eight sorts ------------- heap sort
JVM memory structure
Unity中简单的cubecap+fresnel shader的实现
Leetcode 26. delete duplicates in the ordered array