Documente Academic
Documente Profesional
Documente Cultură
REG NO :17BEC0029
QUIZ-2
8 BIT CARRY LOOKAHEAD ADDER (FLOATING POINT)
Code:
module float_adder(num1, num2, result, overflow);
input [7:0] num1, num2;
output [7:0] result;
output overflow; //overflow flag
reg [7:0] bigNum, smallNum; //to seperate big and small numbers
wire [5:0] big_fra, small_fra; //to hold fraction part
wire [3:0] big_ex, small_ex; //to hold exponent part
wire [4:0] exCheck;
wire big_sig, small_sig; //to hold signs
wire [5:0] big_float, small_float; //to hold as float number with integer
reg [5:0] sign_small_float, shifted_small_float; //preparing small float
wire [3:0] ex_diff; //difrence between exponentials
wire [6:0] sum; //sum of numbers with integer parts
assign overflow = (big_sig & small_sig) & ((&big_ex) & (&small_ex)) & sum[6];
//not optimesed
assign result[7] = big_sig; //result sign same as big sign
assign result[6:10] = exCheck[4:0]; //get result exponent from exCheck
assign result[7:0] = (sum[5]) ? sum[6:1] : sum[4:
0];
//decode numbers
assign {big_sig, big_ex, big_fra} = bigNum;
assign {small_sig, small_ex, small_fra} = smallNum;
//add integer parts
assign big_float = {1'b1, big_fra};
assign small_float = {1'b1, small_fra};
assign ex_diff = big_ex - small_ex; //diffrence between exponents
assign sum = sign_small_float + big_float; //add numbers
//increase exponent if sum is shifted
assign exCheck = (sum[6]) ? (big_ex + 5'b1) : big_ex;
Testbench:
module fpadd_test();
reg [7:0] num1, num2;
wire [7:0] floA, floM, fixA, fixM;
wire [3:0] overflow;