You are on page 1of 2

//******************************************************************************************************//

// Author
:IncMimi
// Module_name
:sign_mag_add.v
// Created_Date
: 25/08/2013
// Revision
: 00.01
// Description
:
//
//
//
//*******************************************************************************************************//
module sign_mad_add
#(
parameter N=4
)
(
// Inputs
input wire [N-1:0] inp1 ,
input wire [N-1:0] inp2 ,
// Outputs
output reg [N-1:0] sign_mag_sum
// InOuts
);
// Local Wires Decleration

// Local Registers Decleration


reg [N-2:0] mag_inp1
reg [N-2:0] mag_inp2
reg
sign_inp1
;
reg
sign_inp2
;
reg [N-2: 0]
reg [N-2: 0]
reg

max
min

;
;

mag_sign

;
;

// Code Starts Here


always @(*) begin
mag_inp1
= inp1[N-2:0] ;
mag_inp2
= inp2[N-2:0] ;
sign_inp1
sign_inp2

= inp1[N-1] ;
= inp2[N-1] ;

// extract the max and min numbers


if(mag_inp1 > mag_inp2) begin

max
= mag_inp1 ;
min
= mag_inp2 ;
mag_sign
= sign_inp1 ;
end
else begin
max
= mag_inp2 ;
min
= mag_inp1 ;
mag_sign
= sign_inp2 ;
end
// do addition or subtraction based on sign
if(sign_inp1 == sign_inp2) begin
mag_sum
= max+min ;
end
else begin
mag_sum
= max-min ;
end
sign_mag_sum = {mag_sign,mag_sum} ;
end // always end
endmodule