⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 float_built_bus26.v

📁 IEEE754 floating point adder
💻 V
字号:
/* ------------------------------------------------------------// MODULE: Float_Built_Bus26 (no clock)// Edition: one// Matlab Code:  None// C Code: None// Architecture Diagram: add_sub_floating.ppt// Date: 2008/01/30// Update: 2008/01/30//         2008/02/12 debug for zero// ------------------------------------------------------------ */module Float_Built_Bus26(data_sgnfc_in,data_exp_in,data_out);/* ------------------------------------------------------------// Parameters definition// ------------------------------------------------------------ *//* ------------------------------------------------------------// Unmodified arameters definition// ------------------------------------------------------------ */parameter in_sgnfc_lng=26,//data_in significant part length	  out_sgnfc_lng=25,//data_out significant part length	  exp_lng=7,//data_in(out) exponent part length	  out_data_lng=32;//data_out total length	  /* ------------------------------------------------------------// I/O declaration// ------------------------------------------------------------ */input [in_sgnfc_lng-1:0]data_sgnfc_in; //data_sgnfc_ininput [exp_lng-1:0]data_exp_in; //data_exp_inoutput [out_data_lng-1:0]data_out; //  data_out/* ------------------------------------------------------------// Connection wire declaration// ------------------------------------------------------------ */wire [in_sgnfc_lng-2:0]compl_data_sgnfc; //inv data_sgnfc_inwire [in_sgnfc_lng-2:0]decoder_in; //input for decoderreg [5:0]exp_shift_number; //shifter number for exp //must modified by handreg [4:0]shift_number; //shifter number for exp //must modified by handwire [in_sgnfc_lng-2:0]shifted_data;wire [exp_lng:0]exp_out;wire [out_sgnfc_lng-1:0]sgnfc_out;wire min_overflow;//only detect too small value for debug in total systemwire [exp_lng-1:0] exp_out_real;/* ------------------------------------------------------------// Module instance// ------------------------------------------------------------ *///assign compl_data_sgnfc=~data_sgnfc_in[in_sgnfc_lng-2:0];assign decoder_in=data_sgnfc_in[in_sgnfc_lng-2:0];//decoder for shift numberalways @(decoder_in)begin	if (decoder_in[in_sgnfc_lng-2])//copy until "in_sgnfc_lng-X=0"	begin		exp_shift_number<=6'b00_0001;//in_sgnfc_lng-out_sgnfc_lng=1//change here		shift_number<=5'd0;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-3])	begin		exp_shift_number<=6'b00_0000;//0//change here		shift_number<=5'd1;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-4])	begin		exp_shift_number<=6'b11_1111;//-1//change here		shift_number<=5'd2;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-5])	begin		exp_shift_number<=6'b11_1110;//-2//change here		shift_number<=5'd3;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-6])	begin		exp_shift_number<=6'b11_1101;//-3//change here		shift_number<=5'd4;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-7])	begin		exp_shift_number<=6'b11_1100;//-4//change here		shift_number<=5'd5;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-8])	begin		exp_shift_number<=6'b11_1011;//-5//change here		shift_number<=5'd6;//dont touch	end	else	if (decoder_in[in_sgnfc_lng-9])	begin		exp_shift_number<=6'b11_1010;//-6//change here		shift_number<=5'd7;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-10])	begin		exp_shift_number<=6'b11_1001;//-7//change here		shift_number<=5'd8;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-11])	begin		exp_shift_number<=6'b11_1000;//-8//change here		shift_number<=5'd9;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-12])	begin		exp_shift_number<=6'b11_0111;//-9//change here		shift_number<=5'd10;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-13])	begin		exp_shift_number<=6'b11_0110;//-10//change here		shift_number<=5'd11;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-14])	begin		exp_shift_number<=6'b11_0101;//-11//change here		shift_number<=5'd12;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-15])	begin		exp_shift_number<=6'b11_0100;//-12//change here		shift_number<=5'd13;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-16])	begin		exp_shift_number<=6'b11_0011;//-13//change here		shift_number<=5'd14;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-17])	begin		exp_shift_number<=6'b11_0010;//-14//change here		shift_number<=5'd15;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-18])	begin		exp_shift_number<=6'b11_0001;//-15//change here		shift_number<=5'd16;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-19])	begin		exp_shift_number<=6'b11_0000;//-16//change here		shift_number<=5'd17;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-20])	begin		exp_shift_number<=6'b10_1111;//-17//change here		shift_number<=5'd18;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-21])	begin		exp_shift_number<=6'b10_1110;//-18//change here		shift_number<=5'd19;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-22])	begin		exp_shift_number<=6'b10_1101;//-19//change here		shift_number<=5'd20;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-23])	begin		exp_shift_number<=6'b10_1100;//-20//change here		shift_number<=5'd21;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-24])	begin		exp_shift_number<=6'b10_1011;//-21//change here		shift_number<=5'd22;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-25])	begin		exp_shift_number<=6'b10_1010;//-22//change here		shift_number<=5'd23;//dont touch	end	else 	if (decoder_in[in_sgnfc_lng-26])	begin		exp_shift_number<=6'b10_1001;//-23//change here		shift_number<=5'd24;//dont touch	end	else //mean this number is zero	begin		exp_shift_number<=6'b0;//0//dont touch		shift_number<=in_sgnfc_lng;//dont touch	end		end//exp assign exp_out={{2{exp_shift_number[5]}},exp_shift_number}+{data_exp_in[6],data_exp_in};assign min_overflow=(exp_out[exp_lng]&~exp_out[exp_lng-1]); //1:0 for min overfloe//0:1 for max overflow//XOR for min and max overflow//shiftassign shifted_data=data_sgnfc_in[in_sgnfc_lng-2:0]<<shift_number;assign sgnfc_out=min_overflow?{out_sgnfc_lng{1'b0}}:{data_sgnfc_in[in_sgnfc_lng-1],shifted_data[in_sgnfc_lng-2:in_sgnfc_lng-out_sgnfc_lng]};//output resultsassign exp_out_real = ((min_overflow)||(~sgnfc_out[out_sgnfc_lng-2])) ? 7'b100_0000 : exp_out[exp_lng-1:0];assign data_out={sgnfc_out,exp_out_real};endmodule	  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -