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

📄 two_float_align.v

📁 IEEE754 floating point adder
💻 V
字号:
/* ------------------------------------------------------------// MODULE: Two_Float_Align (no clock , two floating inputs alignment, for SM-Floating point)// Edition: one// Matlab Code:  None// C Code: None// Architecture Diagram: add_sub_floating.ppt// Date: 2008/01/30
// Update: 2008/01/30	   // ------------------------------------------------------------ */

module Two_Float_Align(data_1_in,data_2_in,data_1_sgnfc_out,data_2_sgnfc_out,exp_out);

/* ------------------------------------------------------------// Parameters definition// ------------------------------------------------------------ */

parameter data_lng=32,//data_in length
	  exp_lng=7,//data_in exponent part length
	  sgnfc_lng=25,//data_in significant part length
	  out_lng=30;//data_out signifcant part length
	  
/* ------------------------------------------------------------// I/O declaration// ------------------------------------------------------------ */

input [data_lng-1:0]data_1_in,data_2_in; //include sgnfc and exp part

output [out_lng-1:0]data_1_sgnfc_out,data_2_sgnfc_out; // sgnfc part

output [exp_lng-1:0]exp_out;

/* ------------------------------------------------------------// Connection wire declaration// ------------------------------------------------------------ */

wire [exp_lng:0]ext_exp_1,ext_exp_2,exp1_sub_exp2;//signed extension exp parts for operation

wire [exp_lng-1:0]exp_1,exp_2,exp2_sub_exp1,
                  shitf_bit_numb;//shifter bit nubmer for alignment two data

wire swap_ctrl,//control signal for swapping data1 and data2
     zero_ctrl; //control signal for minizal value of shifted data
     
wire [sgnfc_lng-1:0]swap_data_A,swap_data_B,swap_data_A_back,swap_data_B_back,//swap sgnfc part 
                  sgnfc_1,sgnfc_2;
                  
                  

wire [2*sgnfc_lng-1:0]ext_swap_data_B; //only shift swap_data_B for low complexity


wire [sgnfc_lng-1:0]shift_data_B,real_shift_data_B;  //shift for alignment
wire [out_lng-1:0]ext_swap_data_A_back; //extent swap_data_A_back
wire [out_lng-1:0]ext_swap_data_B_back; //extent swap_data_B_back
/* ------------------------------------------------------------// Module instance// ------------------------------------------------------------ */

//get the sgnfc parts
assign sgnfc_1=data_1_in[data_lng-1:exp_lng];
assign sgnfc_2=data_2_in[data_lng-1:exp_lng];

//get the exp parts
assign exp_1=data_1_in[exp_lng-1:0];
assign exp_2=data_2_in[exp_lng-1:0];


//signed extension
assign ext_exp_1={exp_1[exp_lng-1],exp_1};//use two adder is due to high-speed issue
assign ext_exp_2={exp_2[exp_lng-1],exp_2};
//compute alignment number
assign exp1_sub_exp2=ext_exp_1-ext_exp_2;
assign exp2_sub_exp1=exp_2-exp_1; //dont need to do sign-extension

assign swap_ctrl=exp1_sub_exp2[exp_lng];//control swap data1 and data2 or not

//swap data1 and data2 for low complexity
assign swap_data_A=(swap_ctrl)?sgnfc_2:sgnfc_1;
assign swap_data_B=(swap_ctrl)?sgnfc_1:sgnfc_2;


//choose aligned exp 
assign exp_out=(swap_ctrl)?exp_2:exp_1;

//choose correct align value of exp part
assign shitf_bit_numb=(swap_ctrl)?exp2_sub_exp1:exp1_sub_exp2[exp_lng-1:0];

//signed extension for shifter


assign ext_swap_data_B={{(sgnfc_lng){swap_data_B[sgnfc_lng-1]}},swap_data_B};

//data shift (only shift B side)
assign shift_data_B=ext_swap_data_B>>shitf_bit_numb;

//minimal value control
//if shitf_bit_numb is bigger than sgnfc_lng, set the data value to zero

assign zero_ctrl=shitf_bit_numb>sgnfc_lng;


assign real_shift_data_B=(zero_ctrl)?{sgnfc_lng{1'b0}}:shift_data_B;

//swap back
assign swap_data_A_back=(swap_ctrl)?real_shift_data_B:swap_data_A;
assign swap_data_B_back=(swap_ctrl)?swap_data_A:real_shift_data_B;

assign ext_swap_data_A_back={{(out_lng-sgnfc_lng){swap_data_A_back[sgnfc_lng-1]}},swap_data_A_back};
assign ext_swap_data_B_back={{(out_lng-sgnfc_lng){swap_data_B_back[sgnfc_lng-1]}},swap_data_B_back};

assign data_1_sgnfc_out=ext_swap_data_A_back;
assign data_2_sgnfc_out=ext_swap_data_B_back;



endmodule

⌨️ 快捷键说明

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