在上一篇博客单精度浮点数加法器FPGA实现------(同号相加)中笔者介绍了单精度浮点数同号相加的FPGA逻辑实现,本次笔者将继续介绍异号相加的逻辑,下面给出verilog代码:
module FP_ADD_diff_oper //不同符号的浮点数据相加
(
input wire MAIN_CLK,
input wire [31:0] a,
input wire [31:0] b,
output wire [31:0] ab
);
reg [7:0] pow_a;
reg [7:0] pow_b;
reg [22:0] val_a;
reg [22:0] val_b;
reg flag_a;
reg flag_b;
always @(*)
begin
flag_a = a[31]; //提取符号
flag_b= b[31];
pow_a = a[30:23];
pow_b = b[30:23];
val_a = a[22:0];
val_b = b[22:0];
end
//比较指数大小提取指数差值
reg [24:0] val_max;
reg [24:0] val_min;
reg [7:0] pow_diff;
reg [7:0] pow_ab1;
reg flag1;
always @(negedge MAIN_CLK)
begin
if(pow_a > pow_b)
begin
flag1 <= flag_a; //输出符号随a
pow_ab1 <= pow_a;
pow_diff <= pow_a - pow_b;
val_max <= {2'b01,val_a};
val_min <= {2'b01,val_b};
end
e