Final Files Added
diff --git a/verilog/dv/hex/uart.hex b/verilog/dv/hex/uart.hex
index 1eb3375..819378a 100755
--- a/verilog/dv/hex/uart.hex
+++ b/verilog/dv/hex/uart.hex
@@ -1,21 +1,18 @@
 @00000000

-00 00 42 B7 49 A2 82 93 F4 02 80 D3 00 00 62 B7

-82 32 82 93 F4 02 81 53 00 00 32 B7 04 22 82 93

-F4 02 81 D3 00 00 42 B7 C5 F2 82 93 F4 02 82 53

-00 00 52 B7 91 E2 82 93 F4 02 82 D3 00 00 62 B7

-A4 02 82 93 F4 02 83 53 00 00 62 B7 A9 22 82 93

-F4 02 83 D3 00 00 62 B7 9E E2 82 93 F4 02 84 53

-00 00 E2 B7 CB 02 82 93 F4 02 84 D3 00 00 E2 B7

-C8 72 82 93 F4 02 85 53 00 00 E2 B7 CD 92 82 93

-F4 02 85 D3 00 00 B2 B7 03 E2 82 93 F4 02 86 53

-00 00 E2 B7 F0 92 82 93 F4 02 86 D3 00 00 C2 B7

-CF 02 82 93 F4 02 87 53 00 00 C2 B7 D7 82 82 93

-F4 02 87 D3 00 00 C2 B7 C6 82 82 93 F4 02 88 53

-24 20 88 D3 24 41 89 53 24 62 89 D3 24 83 9A 53

-24 A4 9A D3 24 C5 9B 53 24 E6 AB D3 24 07 AC 53 

-24 20 AC D3 00 00 41 B7 49 A1 81 93 00 00 E2 37

-CB 02 02 13 00 00 62 B7 82 32 82 93 00 00 E3 37

-C8 73 03 13 00 00 33 B7 04 23 83 93 00 00 E4 37

-CD 94 04 13 D4 01 FD 53 D4 02 7D D3 D4 02 FE 53

-D4 13 7E D3 D4 13 FF 53 D4 14 7F D3 00 00 00 10

-00 00 0F FF

+40 B6 12 B7 EB F2 82 93 F0 02 80 53 42 08 F2 B7

+D9 12 82 93 F0 02 80 D3 3F F7 92 B7 D5 02 82 93

+F0 02 81 53 C0 AD D2 B7 2F 22 82 93 F0 02 81 D3

+C6 B9 82 B7 C0 02 82 93 F0 02 82 53 46 3C 12 B7

+87 B2 82 93 F0 02 82 D3 41 58 F2 B7 5C 32 82 93

+F0 02 83 53 C3 F7 A2 B7 99 A2 82 93 F0 02 83 D3

+C2 36 B2 B7 02 12 82 93 F0 02 84 53 41 47 F2 B7

+B8 52 82 93 F0 02 84 D3 44 54 52 B7 33 32 82 93

+F0 02 85 53 C2 09 62 B7 C2 92 82 93 F0 02 85 D3

+3E B3 32 B7 33 32 82 93 F0 02 86 53 BB 19 62 B7

+AA F2 82 93 F0 02 86 D3 38 0F E2 B7 D5 82 82 93

+F0 02 87 53 BC A7 62 B7 DB 82 82 93 F0 02 87 D3

+00 00 F8 53 00 21 F8 D3 00 42 F9 53 00 63 F9 D3

+00 84 FA 53 00 A5 FA D3 00 C6 FB 53 00 E7 FB D3

+08 10 7C 53 08 00 FC D3 08 21 FD 53 08 42 FD D3

+08 63 FE 53 08 84 FE D3 08 A5 FF 53 08 C6 FF D3

+00 00 00 10 00 00 0F FF

diff --git a/verilog/rtl/FPU/Execution.v b/verilog/rtl/FPU/Execution.v
index 104b133..50fa917 100644
--- a/verilog/rtl/FPU/Execution.v
+++ b/verilog/rtl/FPU/Execution.v
@@ -1,6 +1,6 @@
-module Execution(clk,rst_l,RS1_d,RS2_d,result,Flag_ADDI,Flag_LI,Activation_Signal,Flag_Reset,fpu_active,illegal_config,valid_execution,fs1_data,fs2_data,fs3_data,sfpu_op,fpu_pre,fpu_rounding,float_control,fpu_result_1,S_flag,dec_i0_rs1_en_d,dec_i0_rs2_en_d,IV_exception,fpu_complete,fpu_sel,fpu_result_rd_w,fpu_complete_rd);
-    input clk,rst_l,Flag_ADDI,Flag_LI,Flag_Reset,fpu_active,illegal_config,valid_execution,dec_i0_rs1_en_d,dec_i0_rs2_en_d;
-    input [31:0]RS1_d,RS2_d;
+module Execution(clk,rst_l,RS1_d_w,RS2_d_w,result,Flag_ADDI_w,Flag_LI_w,Activation_Signal,Flag_Reset_w,fpu_active,illegal_config,valid_execution,fs1_data,fs2_data,fs3_data,sfpu_op,fpu_pre,fpu_rounding,float_control,fpu_result_1,S_flag,dec_i0_rs1_en_d,dec_i0_rs2_en_d,IV_exception,fpu_complete,fpu_sel,fpu_result_rd_w,fpu_complete_rd);
+    input clk,rst_l,Flag_ADDI_w,Flag_LI_w,Flag_Reset_w,fpu_active,illegal_config,valid_execution,dec_i0_rs1_en_d,dec_i0_rs2_en_d;
+    input [31:0]RS1_d_w,RS2_d_w;
     input [31:0]fs1_data,fs2_data,fs3_data;
     input [23:0]sfpu_op;
     input [2:0]fpu_pre,fpu_rounding;
@@ -15,9 +15,33 @@
     output [31:0]fpu_result_rd_w;
     output fpu_complete_rd;
 
+    reg [31:0]RS1_d,RS2_d;
+    reg Flag_ADDI,Flag_LI,Flag_Reset;
+
     wire [31:0]result_w;
     wire complete; 
 
+    always @(posedge clk)
+    begin
+        if(rst_l == 1'b0)
+        begin
+            RS1_d <= 32'h00000000;
+            RS2_d <= 32'h00000000;
+            Flag_ADDI <= 1'b0;
+            Flag_LI <= 1'b0;
+            Flag_Reset <= 1'b0;
+        end
+        else
+        begin
+            RS1_d <= RS1_d_w;
+            RS2_d <= RS2_d_w;
+            Flag_ADDI <= Flag_ADDI_w;
+            Flag_LI <= Flag_LI_w;
+            Flag_Reset <= Flag_Reset_w;
+        end
+
+    end
+
     FPU_exu FPU_Execution(
                          .clk(clk),
                          .rst_l(rst_l),
@@ -29,8 +53,8 @@
                          .fpu_pre(fpu_pre),
                          .dec_i0_rs1_en_d(dec_i0_rs1_en_d),                               // Qualify GPR RS1 data
                          .dec_i0_rs2_en_d(dec_i0_rs2_en_d),                               // Qualify GPR RS2 data
-                         .gpr_i0_rs1_d(RS1_d),                                  // DEC data gpr
-                         .gpr_i0_rs2_d(RS2_d),                                  // DEC data gpr
+                         .gpr_i0_rs1_d(RS1_d_w),                                  // DEC data gpr
+                         .gpr_i0_rs2_d(RS2_d_w),                                  // DEC data gpr
                          .fs1_data(fs1_data),
                          .fs2_data(fs2_data),
                          .fs3_data(fs3_data),
diff --git a/verilog/rtl/FPU/FMADD_Add_Post_Normalization.v b/verilog/rtl/FPU/FMADD_Add_Post_Normalization.v
index 9b83be6..ad35cd7 100644
--- a/verilog/rtl/FPU/FMADD_Add_Post_Normalization.v
+++ b/verilog/rtl/FPU/FMADD_Add_Post_Normalization.v
@@ -56,7 +56,7 @@
 
 //additio lanse
 assign Post_Normaliaation_EFF_add_interim_Exponent = Post_Normalization_input_exponent + Post_Normalization_input_Carry ; 
-assign Post_Normalization_Shifter_input_add = (Post_Normalization_input_Eff_add) ? Post_Normalization_input_Mantissa : 48'h000000000000;
+assign Post_Normalization_Shifter_input_add = (Post_Normalization_input_Eff_add) ? Post_Normalization_input_Mantissa : {(man+man+4){1'b0}};
 assign Post_Normalization_Shifter_Output_add = (Post_Normalization_input_Carry) ? { Post_Normalization_input_Carry,Post_Normalization_Shifter_input_add[man+man+3:1] } : Post_Normalization_Shifter_input_add[man+man+3:0]  ;
 
 //Output Selestion and Round bits extarcion
@@ -66,7 +66,7 @@
 assign Post_Normalization_output_Round = Post_Normalization_Mantissa_interim_48[man] ;
 assign Post_Normalization_output_Guard = Post_Normalization_Mantissa_interim_48[man+1];
 assign Post_Normalization_output_Sticky = ( (|Post_Normalization_Mantissa_interim_48[man-1:0]) | Post_Normalization_input_Guard | Post_Normalization_input_Round | Post_Normalization_input_Sticky);
-assign Post_Normalization_output_exponent = (Post_Normalization_input_Eff_sub) ? {1'b0,Post_Normaliaation_EFF_Sub_interim_Exponent} : Post_Normaliaation_EFF_add_interim_Exponent;
+assign Post_Normalization_output_exponent = (Post_Normalization_input_Eff_sub) ? Post_Normaliaation_EFF_Sub_interim_Exponent : Post_Normaliaation_EFF_add_interim_Exponent;
 
 
 endmodule
diff --git a/verilog/rtl/FPU/FMADD_Mul_Post_Normalization.v b/verilog/rtl/FPU/FMADD_Mul_Post_Normalization.v
index cc7e802..c2398ab 100644
--- a/verilog/rtl/FPU/FMADD_Mul_Post_Normalization.v
+++ b/verilog/rtl/FPU/FMADD_Mul_Post_Normalization.v
@@ -104,9 +104,9 @@
 assign FMADD_PN_LZD_wire_direction_shifts = (FMADD_PN_MUL_wire_op_5 & PM_MUL_wire_sub_or_norm_op5) | FMADD_PN_MUL_wire_op_4 | (FMADD_PN_MUL_input_A_sub & FMADD_PN_MUL_input_B_sub);
 
 //DTRS = Data To Right Shift
-assign FMADD_PN_MUL_wire_DTRS =  FMADD_PN_LZD_wire_direction_shifts ? FMADD_PN_MUL_input_multiplied_man : 48'b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000 ;
+assign FMADD_PN_MUL_wire_DTRS =  FMADD_PN_LZD_wire_direction_shifts ? FMADD_PN_MUL_input_multiplied_man : {(man+man+4){1'b0}} ;
 //DTLS = Data To Left Shift
-assign FMADD_PN_MUL_wire_DTLS =  FMADD_PN_LZD_wire_direction_shifts ? 48'b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000 : FMADD_PN_MUL_input_multiplied_man ;
+assign FMADD_PN_MUL_wire_DTLS =  FMADD_PN_LZD_wire_direction_shifts ? {(man+man+4){1'b0}} : FMADD_PN_MUL_input_multiplied_man ;
 
 //RS == Right Shifted
 assign FMADD_PN_MUL_wire_RS_data = ({1'b0, FMADD_PN_MUL_wire_DTRS}) >> FMADD_PN_MUL_wire_shifts_final;
@@ -150,4 +150,4 @@
 
 
 
-endmodule
\ No newline at end of file
+endmodule
diff --git a/verilog/rtl/FPU/FMADD_Top_Single_Cycle.v b/verilog/rtl/FPU/FMADD_Top_Single_Cycle.v
index 8e9a69f..6a89bee 100644
--- a/verilog/rtl/FPU/FMADD_Top_Single_Cycle.v
+++ b/verilog/rtl/FPU/FMADD_Top_Single_Cycle.v
@@ -222,8 +222,8 @@
 wire [2+exp+2*(man+2):0] output_interim_post_normalization_IEEE;
 
 //inputs to the FMADD LANE
-assign input_interim_ADD_LANE_A = ( |(FMADD_SUBB_input_opcode[1:0] ) ) ? output_interim_Extender_A : (| FMADD_SUBB_input_opcode[6:3]) ? output_interim_post_normalization_IEEE : 57'h000000000000000 ;
-assign input_interim_ADD_LANE_B =  (|(FMADD_SUBB_input_opcode[1:0] ) ) ? output_interim_Extender_B : (| FMADD_SUBB_input_opcode[6:3]) ? output_interim_Extender_B : 57'h000000000000000;
+assign input_interim_ADD_LANE_A = (rst_l) ? (( |(FMADD_SUBB_input_opcode[1:0] ) ) ? output_interim_Extender_A : (| FMADD_SUBB_input_opcode[6:3]) ? output_interim_post_normalization_IEEE : {3+exp+2*(man+2){1'b0}} ) : {3+exp+2*(man+2){1'b0}} ;
+assign input_interim_ADD_LANE_B = (rst_l) ? ((|(FMADD_SUBB_input_opcode[1:0] ) ) ? output_interim_Extender_B : (| FMADD_SUBB_input_opcode[6:3]) ? output_interim_Extender_B : {3+exp+2*(man+2){1'b0}} ) : {3+exp+2*(man+2){1'b0}};
 
 //exponent_Matching
 wire output_interim_Exponent_Mathcing_Sign;
@@ -306,6 +306,7 @@
 defparam Post_Normalization_Add.std = std;
 defparam Post_Normalization_Add.exp = exp;
 defparam Post_Normalization_Add.man = man;
+defparam Post_Normalization_Add.lzd = lzd;	
 
 //Rounding Mode Module
 wire [exp:0] output_interim_Rounding_Block_Exp;
diff --git a/verilog/rtl/FPU/FMADD_exponent_addition.v b/verilog/rtl/FPU/FMADD_exponent_addition.v
index 4990447..1e64dcd 100644
--- a/verilog/rtl/FPU/FMADD_exponent_addition.v
+++ b/verilog/rtl/FPU/FMADD_exponent_addition.v
@@ -16,7 +16,7 @@
 wire [exp+1:0] Exponent_addition_wire_exp;
 
 //functionality 
-assign Exponent_addition_wire_exp = (Exponent_addition_input_Activation_Signal) ? (Exponent_addition_input_A[exp:0] + Exponent_addition_input_B[exp:0]): 9'b000000000;
+assign Exponent_addition_wire_exp = (Exponent_addition_input_Activation_Signal) ? (Exponent_addition_input_A[exp:0] + Exponent_addition_input_B[exp:0]): {(exp+2){1'b0}};
 assign output_underflow_check  = Exponent_addition_wire_exp < 103;
 assign Exponent_addition_output_exp = Exponent_addition_wire_exp;
 assign Exponent_addition_output_sign = (Exponent_addition_input_Activation_Signal) ? (Exponent_addition_input_A [exp+1] ^ Exponent_addition_input_B[exp+1]) : 1'b0;
diff --git a/verilog/rtl/FPU/FMADD_rounding_block_Multiplication.v b/verilog/rtl/FPU/FMADD_rounding_block_Multiplication.v
index e330e87..400fc07 100644
--- a/verilog/rtl/FPU/FMADD_rounding_block_Multiplication.v
+++ b/verilog/rtl/FPU/FMADD_rounding_block_Multiplication.v
@@ -52,8 +52,6 @@
 assign FMADD_ROUND_MUL_wire_rounded_exp = ((!FMADD_ROUND_MUL_input_no[man+man+3]) & (FMADD_ROUND_MUL_wire_rounded_man[man+1])) ?
 FMADD_ROUND_MUL_input_no[man+man+exp+4 : man+man+4]  + 1'b1 : FMADD_ROUND_MUL_input_no[man+man+exp+4 : man+man+4];
 
-wire [56:0] check;
-assign check = ({ FMADD_ROUND_MUL_input_no[man+man+exp+6], ({{exp{1'b1}}, 1'b0}), ({man+man+4{1'b1}}) });
 
 
 
diff --git a/verilog/rtl/FPU/FPU_CSR.v b/verilog/rtl/FPU/FPU_CSR.v
index fd3fa85..52f3fe5 100644
--- a/verilog/rtl/FPU/FPU_CSR.v
+++ b/verilog/rtl/FPU/FPU_CSR.v
@@ -33,8 +33,11 @@
         begin
             fflag <= (fflag_w & CSR_Write) ? CSR_Write_Data[4:0] : (fcsr_w & CSR_Write) ? CSR_Write_Data[4:0] : (fpu_complete) ? (fflag[4:0] | S_flag[4:0]) : fflag;
             frm <= (frm_w & CSR_Write) ? CSR_Write_Data[2:0] : (fcsr_w & CSR_Write) ? CSR_Write_Data[7:5] : frm;
-            fcsr <= (fcsr_w & CSR_Write) ? {24'h00000,CSR_Write_Data[7:0]} : (fpu_complete) ? ({24'h000000,frm,(fflag[4:0] | S_flag[4:0])}) : fcsr;
+            fcsr <= (fcsr_w & CSR_Write) ? {24'h00000,CSR_Write_Data[7:0]} : 
+                    (frm_w & CSR_Write) ? ({24'h000000,CSR_Write_Data[2:0],fflag[4:0]}) : 
+                    (fflag_w & CSR_Write) ? ({24'h000000,frm,CSR_Write_Data[4:0]}) : 
+                    (fpu_complete) ? ({24'h000000,frm,(fflag[4:0] | S_flag[4:0])}) : fcsr;
         end
     end
 
-endmodule
\ No newline at end of file
+endmodule
diff --git a/verilog/rtl/FPU/FPU_F2I.v b/verilog/rtl/FPU/FPU_F2I.v
index e698e05..7fa0943 100644
--- a/verilog/rtl/FPU/FPU_F2I.v
+++ b/verilog/rtl/FPU/FPU_F2I.v
@@ -50,7 +50,7 @@
 wire FLOAT_TO_INT_wire_hidden_bit_decision;
 
 //Setting the input to zero if rst_l or opcode_FI is low
-assign FLOAT_TO_INT_input_wire_float = (FLOAT_TO_INT_input_opcode_FI && rst_l) ? FLOAT_TO_INT_input_float : {32{1'b0}};
+assign FLOAT_TO_INT_input_wire_float = (FLOAT_TO_INT_input_opcode_FI && rst_l) ? FLOAT_TO_INT_input_float : {(std+1){1'b0}};
 
 //Mapping the data to 64bit precision std
 assign FLOAT_TO_INT_wire_float_mapped = {FLOAT_TO_INT_input_wire_float[std], (FLOAT_TO_INT_input_wire_float[std-1 : man+1] - bias[exp : 0] + 11'b011_1111_1111), ( {FLOAT_TO_INT_input_wire_float[man:0], {(51-man){1'b0}}} ) };
diff --git a/verilog/rtl/FPU/FPU_FSM_Control_Decode.v b/verilog/rtl/FPU/FPU_FSM_Control_Decode.v
index 9534432..53f200a 100644
--- a/verilog/rtl/FPU/FPU_FSM_Control_Decode.v
+++ b/verilog/rtl/FPU/FPU_FSM_Control_Decode.v
@@ -6,50 +6,26 @@
   output reg[31:0]PC;
   output [31:0]Instruction_out;
 
-  reg [1:0]State;
-  wire [1:0]Next_State;
+  reg [2:0]State;
+  wire [2:0]Next_State;
+  wire [4:0]Input_Opcode;
   wire Exception;
 
-  /*
-  sfpu[0] = Fadd
-  sfpu[1] = Fsubb
-  sfpu[2] = Fmul
-  sfpu[3] = Fdiv
-  sfpu[4] = Fsqrt
-  sfpu[5] = Fmin
-  sfpu[6] = Fmax
-  sfpu[7] = Fmvx
-  sfpu[8] = Fmvf
-  sfpu[9] = feq
-  sfpu[10] = flt
-  sfpu[11] = fle
-  sfpu[12] = Fmadd
-  sfpu[13] = Fmsubb
-  sfpu[14] = FCVT.W.P
-  sfpu[15] = FCVT.P.W
-  sfpu[16] = Fnmsubb
-  sfpu[17] = Fnmadd
-  sfpu[18] = fsgnj
-  sfpu[19] = fsgnjn
-  sfpu[20] = fsgnjx
-  sfpu[21] = fclass
-  sfpu[22] = unsign
-  sfpu[23] = sign
-  */
- 
-  //assign Multi_Cycle = 1'b0;
-  assign Memory_Activation = (((~Next_State[1]) & (Next_State[0])) & (Active_Process));
-  assign Next_State[0] = (((~State[0]) & (State[1] | Active_Process)) | ((State[1] & State[0]) & ((~Activation_Signal) | (Activation_Signal & (~Multi_Cycle)))));
-  assign Next_State[1] = (((~State[1]) & (State[0])) | ((State[1]) & (~State[0])) | (State[1] & State[0] & (~Activation_Signal)));
-  assign Instruction_out = (~rst_l) ? 32'h00000000 : (State == 2'b10) ? Instruction : 32'h00000000;
+  assign Memory_Activation = (((~Next_State[2]) & (~Next_State[1]) & (Next_State[0])) & (Active_Process));
+  assign Next_State[0] = ((((~State[2]) & (~State[0])) & (State[0] | Active_Process)) | ((State[2]) & (~State[1]) & (~State[0]) & (~Multi_Cycle) & (Activation_Signal)));
+  assign Next_State[1] = (((~State[2]) & (~State[1]) & (State[0])) | ((~State[2]) & (State[1]) & (~State[0])));
+  assign Next_State[2] = (((~State[2]) & (State[1]) & (State[0])) | ((State[2]) & (~State[1]) & (~State[0]) & (~Activation_Signal)));
+  assign Instruction_out = (~rst_l) ? 32'h00000000 : (State == 3'b010) ? Instruction : 32'h00000000;
   always @(posedge clk)
-    PC <= (~rst_l) ? 32'h00000000 : ((State == 2'b01) ? (PC[31:0] + 4'h4) : (Instruction == 32'h00000010) ? 32'h00000000 : PC);
+    PC <= (~rst_l) ? 32'h00000000 : ((State == 3'b001) ? (PC[31:0] + 4'h4) : (Instruction == 32'h00000010) ? 32'h00000000 : PC);
 
   //sequential State register block
   always @(posedge clk)
-    State <= (~rst_l) ? 2'b00 : Next_State;
+    State <= (~rst_l) ? 3'b000 : Next_State;
 
 
+   
+
   //combinational State assignment block  
   /*always @(posedge clk)
   begin
diff --git a/verilog/rtl/FPU/FPU_FSM_TOP.v b/verilog/rtl/FPU/FPU_FSM_TOP.v
index 92fc3f8..dd7cb3f 100644
--- a/verilog/rtl/FPU/FPU_FSM_TOP.v
+++ b/verilog/rtl/FPU/FPU_FSM_TOP.v
@@ -191,13 +191,13 @@
     Execution Excecution_Unit(
                             .clk(clk),
                             .rst_l(rst_l),
-                            .RS1_d(RS1_d),
-                            .RS2_d(RS2_d),
+                            .RS1_d_w(RS1_d),
+                            .RS2_d_w(RS2_d),
                             .result(result),
-                            .Flag_ADDI(Flag_ADDI),
-                            .Flag_LI(Flag_LI),
+                            .Flag_ADDI_w(Flag_ADDI),
+                            .Flag_LI_w(Flag_LI),
                             .Activation_Signal(Activation_Signal),
-                            .Flag_Reset(Flag_Reset),
+                            .Flag_Reset_w(Flag_Reset),
                             .fpu_active(fpu_active),
                             .illegal_config(illegal_config),
                             .valid_execution(valid_execution),
diff --git a/verilog/rtl/FPU/FPU_Input_Validation.v b/verilog/rtl/FPU/FPU_Input_Validation.v
index 08a577e..dced614 100644
--- a/verilog/rtl/FPU/FPU_Input_Validation.v
+++ b/verilog/rtl/FPU/FPU_Input_Validation.v
@@ -461,7 +461,7 @@
 assign INPUT_VALIDATION_Output_Flag_DZ = (rst_l) ? INPUT_VALIDATION_Bit_positive_infinity_Caught_Fdiv : 1'b0;
 
 // Mux for sleection of coresponding exceptional output and FLags (P.S: Refer to coments against each bolen check)
-assign INPUT_VALIDATION_Output_temp_storage = (rst_l) ? (INPUT_VALIDATION_Bit_SNAN_Caught ? 32'h7fa00000 : INPUT_VALIDATION_Bit_No_Comp_A_Caught ? INPUT_VALIDATION_input_ieee_A : INPUT_VALIDATION_Bit_Positive_No_Comp_A_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_A[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_A_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_A[std-1:0]} : INPUT_VALIDATION_Bit_No_Comp_B_Caught ? INPUT_VALIDATION_input_ieee_B: INPUT_VALIDATION_Bit_Positive_No_Comp_B_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_B[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_B_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_B[std-1:0]}: INPUT_VALIDATION_Bit_No_Comp_C_Caught ? INPUT_VALIDATION_input_ieee_C : INPUT_VALIDATION_Bit_Positive_No_Comp_C_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_C[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_C_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_C[std-1:0]} : INPUT_VALIDATION_Bit_negative_infinity_Caught ? 32'hff800000 : INPUT_VALIDATION_Bit_Positive_infinity_Caught ? 32'h7f800000 : INPUT_VALIDATION_Bit_positive_zero_Caught ? 32'h00000000 : INPUT_VALIDATION_Bit_negative_zero_Caught ? 32'h80000000 : INPUT_VALIDATION_Bit_Positive_One_Caught ? 32'h3f800000 : INPUT_VALIDATION_Bit_Negative_One_Caught ? 32'hbf800000 : 32'h00000000) : 32'h00000000 ;
+	assign INPUT_VALIDATION_Output_temp_storage = (rst_l) ? (INPUT_VALIDATION_Bit_SNAN_Caught ? { 1'b0, {(exp+1){1'b1}}, {1'b0,1'b1,{(man-1){1'b0}} } } : INPUT_VALIDATION_Bit_No_Comp_A_Caught ? INPUT_VALIDATION_input_ieee_A : INPUT_VALIDATION_Bit_Positive_No_Comp_A_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_A[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_A_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_A[std-1:0]} : INPUT_VALIDATION_Bit_No_Comp_B_Caught ? INPUT_VALIDATION_input_ieee_B: INPUT_VALIDATION_Bit_Positive_No_Comp_B_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_B[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_B_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_B[std-1:0]}: INPUT_VALIDATION_Bit_No_Comp_C_Caught ? INPUT_VALIDATION_input_ieee_C : INPUT_VALIDATION_Bit_Positive_No_Comp_C_Caught ? {1'b0,INPUT_VALIDATION_input_ieee_C[std-1:0]} : INPUT_VALIDATION_Bit_Negative_No_Comp_C_Caught ? {1'b1,INPUT_VALIDATION_input_ieee_C[std-1:0]} : INPUT_VALIDATION_Bit_negative_infinity_Caught ? { 1'b1, {(exp+1){1'b1}} , {(man+1){1'b0}} } : INPUT_VALIDATION_Bit_Positive_infinity_Caught ? { 1'b0, {(exp+1){1'b1}} , {(man+1){1'b0}} } : INPUT_VALIDATION_Bit_positive_zero_Caught ? {(std+1){1'b0}} : INPUT_VALIDATION_Bit_negative_zero_Caught ? { 1'b1,{(std){1'b0}} } : INPUT_VALIDATION_Bit_Positive_One_Caught ? { 1'b0, {1'b0 , { (exp){1'b1} } } , {(man+1){1'b0}} } : INPUT_VALIDATION_Bit_Negative_One_Caught ? { 1'b1, {1'b0 , { (exp){1'b1} } }, {man+1{1'b0}} } : {(std+1){1'b0}} ) : {(std+1){1'b0}} ;
 
 //interupt pin assignment, this will be High if at least one input is either SNAN or QNAN
 assign interupt_Pin = (rst_l) ? INPUT_VALIDATION_Bit_SNAN_Caught : 1'b0 ;
diff --git a/verilog/rtl/FPU/FPU_Top_Single_Cycle.v b/verilog/rtl/FPU/FPU_Top_Single_Cycle.v
index 8a4a61b..129663b 100644
--- a/verilog/rtl/FPU/FPU_Top_Single_Cycle.v
+++ b/verilog/rtl/FPU/FPU_Top_Single_Cycle.v
@@ -13,7 +13,7 @@
 `include "LZD_comb.v"

 `include "LZD_mux.v"*/

 

-module FPU_Top (Operand_A,Operand_B,Operand_C, clk,rst_l, frm, sfpu_op,vfpu_op,fpu_sel,FPU_resultant, S_Flags, Exception_flag, interupt_Pin,FPU_Result_rd,Operand_Int);

+module FPU_Top (Operand_A_w,Operand_B_w,Operand_C_w, clk,rst_l, frm_w, sfpu_op_w,vfpu_op_w,fpu_sel_w,FPU_resultant, S_Flags, Exception_flag, interupt_Pin,FPU_Result_rd,Operand_Int_w);

 

 parameter std= 31;

 parameter man = 22;

@@ -23,13 +23,13 @@
 

 

 //inputs

-input [std:0] Operand_A,Operand_B,Operand_C;

+input [std:0] Operand_A_w,Operand_B_w,Operand_C_w;

 input clk,rst_l;

-input [2:0] frm;

-input [23:0] sfpu_op;

-input [2:0]  fpu_sel;

-input [27:0] vfpu_op;

-input [31:0] Operand_Int;

+input [2:0] frm_w;

+input [23:0] sfpu_op_w;

+input [2:0]  fpu_sel_w;

+input [27:0] vfpu_op_w;

+input [31:0] Operand_Int_w;

 

 //output 

 output  [std:0]    FPU_resultant;

@@ -42,9 +42,40 @@
 reg [std:0]    FPU_resultant_reg;

 reg[31:0] FPU_Result_rd_reg;

 reg [4:0]   S_Flags_reg;

+reg [std:0] Operand_A,Operand_B,Operand_C;

+reg [2:0] frm;

+reg [23:0] sfpu_op;

+reg [2:0]  fpu_sel;

+reg [27:0] vfpu_op;

+reg [31:0] Operand_Int;

 

+  always @(posedge clk)

+  begin

+    if(rst_l == 1'b0)

+    begin

+      Operand_A <= {(std+1){1'b0}};

+      Operand_B <= {(std+1){1'b0}};

+      Operand_C <= {(std+1){1'b0}};

+      frm <= 3'b000;

+      sfpu_op <= 24'h000000;

+      fpu_sel <= 3'b000;

+      vfpu_op <= 28'h0000000;

+      Operand_Int <= 32'h00000000;

+    end

+    else

+    begin

+      Operand_A <= Operand_A_w;

+      Operand_B <= Operand_B_w;

+      Operand_C <= Operand_C_w;

+      frm <= frm_w;

+      sfpu_op <= sfpu_op_w;

+      fpu_sel <= fpu_sel_w;

+      vfpu_op <= vfpu_op_w;

+      Operand_Int <= Operand_Int_w;

+    end

+  end

 //assigment of interim register on outptu ports

-assign FPU_resultant = (rst_l) ? FPU_resultant_reg:32'h00000000;

+  assign FPU_resultant = (rst_l) ? FPU_resultant_reg:{std+1{1'b0}};

 assign S_Flags = (rst_l) ? S_Flags_reg:5'b00000 ;

 assign FPU_Result_rd = (rst_l) ? FPU_Result_rd_reg : 32'h00000000;

 

@@ -254,14 +285,14 @@
    

  if (~rst_l)

    begin

-   FPU_resultant_reg <= 32'h00000000;

+     FPU_resultant_reg <= {(std+1){1'b0}};

    FPU_Result_rd_reg <= 32'h00000000;

    S_Flags_reg <= 5'b00000;

    end

 else if (Exception_flag_interim) 

    begin

    FPU_resultant_reg <= output_interim_input_validation_temp_storage;

-   FPU_Result_rd_reg <= output_interim_input_validation_temp_storage;

+   FPU_Result_rd_reg <= (std==15) ? {16'h0000,output_interim_input_validation_temp_storage[15:0]} : output_interim_input_validation_temp_storage;

    S_Flags_reg  <= { output_interim_input_validation_invalid_flag , output_interim_input_validation_Divide_By_Zero , 3'b000 } ;

    end

 

@@ -306,14 +337,14 @@
 

   else if (sfpu_op[14] | vfpu_op[18])   //output selection logic for Float to int instruction FCVT.W.S

     begin

-    FPU_resultant_reg  <= 32'h00000000;

+      FPU_resultant_reg  <= {(std+1){1'b0}};

     FPU_Result_rd_reg <= output_interim_FLOAT_to_Int;

     S_Flags_reg <= {output_interim_Invalid_Flag_Float_To_Int,3'b000,output_interim_Inexact_Flag_Float_To_Int};

     end    

 

   else if (sfpu_op[9] | sfpu_op[10] | sfpu_op[11] | (|vfpu_op[10:5]))  //output selection for comparision instructions

     begin

-    FPU_resultant_reg  <= 32'h00000000;

+    FPU_resultant_reg  <= {(std+1){1'b0}};

     FPU_Result_rd_reg <= output_interim_Comparison;

     S_Flags_reg <= 5'b00000; 

     end

@@ -327,13 +358,13 @@
 

   else if (sfpu_op[21] | vfpu_op[25])               //output slection for Fclass instructions

     begin

-     FPU_resultant_reg <= 32'h00000000;

+     FPU_resultant_reg <= {(std+1){1'b0}};

      FPU_Result_rd_reg <= output_interim_Fclass;

      S_Flags_reg <= 5'b00000; 

     end

   else    

     begin

-     FPU_resultant_reg <= 32'h00000000;

+     FPU_resultant_reg <= {(std+1){1'b0}};

      FPU_Result_rd_reg <= 32'h00000000;

      S_Flags_reg <= 5'b00000;

     end  

diff --git a/verilog/rtl/FPU/FPU_exu.v b/verilog/rtl/FPU/FPU_exu.v
index 460216a..75915db 100644
--- a/verilog/rtl/FPU/FPU_exu.v
+++ b/verilog/rtl/FPU/FPU_exu.v
@@ -35,6 +35,8 @@
 wire [4:0] fpu_flags;
 wire [31:0]FPU_Result_rd,Operand_Int;
 
+reg [23:0] sfpu_op_r2;
+
 // sfpu_op [0]  = fadd
 // sfpu_op [1]  = fsub
 // sfpu_op [2]  = fmul
@@ -60,16 +62,18 @@
 // sfpu_op [22] = unsign
 // sfpu_op [23] = sign
 
-        rvdffe    #(24) sfpu_op_ff  (.*, .clk(clk), .en(valid_execution & fpu_sel[0]),   .din(sfpu_op),   .dout(sfpu_op_r));
-	//rvdffe    #(FPLEN) fpu_result_ff  (.*, .clk(clk), .en(fpu_complete),   .din(fpu_result_exu),   .dout(fpu_result_1));
+        rvdffsc    #(24) sfpu_op_ff (.clk(clk), .rst_l(rst_l), .en(valid_execution & fpu_sel[0]), .clear(fpu_complete), .din(sfpu_op), .dout(sfpu_op_r));  
+		
 	rvdffs    #(5)  fpu_flags_ff   (.*, .clk(clk), .en(fpu_complete),   .din(fpu_flags),        .dout(sflags));
 	
 	always @(posedge clk) begin
 		if(rst_l == 1'b0) begin
 			sfpu_alu_valid_r <= 1'b0;
+			sfpu_op_r2 <= 24'h000000;
 		end
 		else begin
-			sfpu_alu_valid_r <= (|sfpu_op[2:0]) | (|sfpu_op[17:5]) | (|sfpu_op[21:18]);
+			sfpu_alu_valid_r <= (|sfpu_op_r[2:0]) | (|sfpu_op_r[17:5]) | (|sfpu_op_r[21:18]);
+			sfpu_op_r2 <= sfpu_op_r;
 		end
 	end
 	
@@ -86,19 +90,19 @@
 	FPU_Top Floating_Top (
 				.clk(clk),
 				.rst_l(rst_l),
-				.frm(fpu_rnd),
-				.sfpu_op(sfpu_op),
-				.vfpu_op(28'h0000000),
-				.fpu_sel(fpu_sel),
-				.Operand_A(fs1_d),
-				.Operand_B(fs2_d),
-				.Operand_C(fs3_d),    
+				.frm_w(fpu_rnd),
+				.sfpu_op_w(sfpu_op),
+				.vfpu_op_w(28'h0000000),
+				.fpu_sel_w(fpu_sel),
+				.Operand_A_w(fs1_d),
+				.Operand_B_w(fs2_d),
+				.Operand_C_w(fs3_d),    
 				.FPU_resultant(fpu_result_top), 
 				.S_Flags(fpu_flags),
 				.Exception_flag(IV_exception),
 				.interupt_Pin(),
 				.FPU_Result_rd(FPU_Result_rd),
-				.Operand_Int(Operand_Int)
+				.Operand_Int_w(Operand_Int)
 			      );
 
 
@@ -106,11 +110,11 @@
 	assign fpu_complete = (rst_l == 1'b0) ? 1'b0 : (sfpu_alu_valid_r) ? 1'b1 : 1'b0;
 	
 	// FPU FPR Result
-	assign fpu_result_1 = (rst_l == 1'b0) ? {FPLEN{1'b0}} : (fpu_complete & (|sfpu_op_r[2:0] | (|sfpu_op_r[17:15]) | sfpu_op_r[7] | (|sfpu_op_r[20:18]) | (|sfpu_op_r[6:5]) | (|sfpu_op_r[13:12]))) ? fpu_result_top : {FPLEN{1'b0}};
+	assign fpu_result_1 = (rst_l == 1'b0) ? {FPLEN{1'b0}} : (fpu_complete & (|sfpu_op_r2[2:0] | (|sfpu_op_r2[17:15]) | sfpu_op_r2[7] | (|sfpu_op_r2[20:18]) | (|sfpu_op_r2[6:5]) | (|sfpu_op_r2[13:12]))) ? fpu_result_top : {FPLEN{1'b0}};
 								   
 	
 	// FPU GPR result
-	assign fpu_result_rd = (rst_l == 1'b0) ? {32{1'b0}} : (fpu_complete & ((|sfpu_op_r[11:9]) | sfpu_op_r[14] | sfpu_op_r[8] | sfpu_op_r[21])) ? FPU_Result_rd : 
+	assign fpu_result_rd = (rst_l == 1'b0) ? {32{1'b0}} : (fpu_complete & ((|sfpu_op_r2[11:9]) | sfpu_op_r2[14] | sfpu_op_r2[8] | sfpu_op_r2[21])) ? FPU_Result_rd : 
 								   {32{1'b0}};
-	assign fpu_complete_rd = (~rst_l) ? 1'b0 : (fpu_complete & ((|sfpu_op_r[11:8]) | sfpu_op_r[14] | sfpu_op_r[21])) ? 1'b1 : 1'b0;
+	assign fpu_complete_rd = (~rst_l) ? 1'b0 : (fpu_complete & ((|sfpu_op_r2[11:8]) | sfpu_op_r2[14] | sfpu_op_r2[21])) ? 1'b1 : 1'b0;
 endmodule
diff --git a/verilog/rtl/FPU/FPU_move.v b/verilog/rtl/FPU/FPU_move.v
index 59320b6..51c3d77 100644
--- a/verilog/rtl/FPU/FPU_move.v
+++ b/verilog/rtl/FPU/FPU_move.v
@@ -11,6 +11,6 @@
   wire [Std : 0] Move_Output_IEEE; // Define reg becuase it is Output of IEEE754 32 Move Instruction 
    
   // New logic will  be
-  assign Move_Output_IEEE = (rst_l == 1'b0) ? 32'h00000000 :  (opcode[0] == 1'b1) ? Move_Input_IEEE : (opcode[1] == 1'b1) ? Move_Input_IEEE : 32'h00000000;
+  assign Move_Output_IEEE = (rst_l == 1'b0) ? { (Std+1){1'b0} } :  (opcode[0] == 1'b1) ? Move_Input_IEEE : (opcode[1] == 1'b1) ? Move_Input_IEEE : { (Std+1){1'b0} } ;
   
 endmodule
diff --git a/verilog/rtl/FPU/FPU_sign_injection.v b/verilog/rtl/FPU/FPU_sign_injection.v
index 8110b58..9120f1c 100644
--- a/verilog/rtl/FPU/FPU_sign_injection.v
+++ b/verilog/rtl/FPU/FPU_sign_injection.v
@@ -19,8 +19,8 @@
   	// New logic
   	assign Sign_A = (rst_l == 1'b0) ? 1'b0 : IEEE_A[Std];
   	assign Sign_B = (rst_l == 1'b0) ? 1'b0 : IEEE_B[Std];
-  	assign Exp_A  = (rst_l == 1'b0) ? 8'h00 : IEEE_A[Std - 1 : Std - Exp - 1];
-  	assign Mantissa_A = (rst_l == 1'b0) ? 23'h0 : IEEE_A[Man : 0];
-  	assign  IEEE_out = (rst_l == 1'b0) ? 32'h0 : (op[0]) ?  {Sign_B,Exp_A,Mantissa_A} : (op[1]) ? {~Sign_B,Exp_A,Mantissa_A} : (op[2]) ? {(Sign_A ^ Sign_B),Exp_A,Mantissa_A} : 32'h0; 
+    assign Exp_A  = (rst_l == 1'b0) ? {(Exp+1){1'b0}} : IEEE_A[Std - 1 : Std - Exp - 1];
+    assign Mantissa_A = (rst_l == 1'b0) ? {(Man+1){1'b0}} : IEEE_A[Man : 0];
+    assign  IEEE_out = (rst_l == 1'b0) ? {(Std+1){1'b0}} : (op[0]) ?  {Sign_B,Exp_A,Mantissa_A} : (op[1]) ? {~Sign_B,Exp_A,Mantissa_A} : (op[2]) ? {(Sign_A ^ Sign_B),Exp_A,Mantissa_A} : {(Std+1){1'b0}}; 
  
 endmodule  
diff --git a/verilog/rtl/FPU/Main_Decode.v b/verilog/rtl/FPU/Main_Decode.v
index 8bb9e78..a80ab41 100644
--- a/verilog/rtl/FPU/Main_Decode.v
+++ b/verilog/rtl/FPU/Main_Decode.v
@@ -17,7 +17,7 @@
     wire [2:0] fpu_rnd,Fpu_Frm;
     wire [11:0]IMM_ADDI,CSR_Addr;
     wire [31:0]IMM_LI;
-    reg [4:0]rd;
+    reg [4:0]rd,rd_wb;
     wire [4:0] rd_address;
     wire [4:0]rs1,rs2,rs1_address,rs2_address;
     //reg [31:0]Instruction_reg;
@@ -32,20 +32,21 @@
     wire write_en;
     wire illegal_instr;
     wire [23:0]sfpu_op_w;
+    wire Flag_CSR_r1;
+    wire CSR_Read_r1;
+    wire [31:0] CSR_Read_Data_r1;
 
+    rvdffsc    #(1) CSR_Flag_ff (.clk(clk), .rst_l(rst_l), .en(Flag_CSR), .clear(~Flag_CSR), .din(Flag_CSR), .dout(Flag_CSR_r1));
+    rvdffsc    #(1) CSR_Read_ff (.clk(clk), .rst_l(rst_l), .en(Flag_CSR), .clear(~Flag_CSR), .din((CSR_Read & ~fpu_active)), .dout(CSR_Read_r1));
+    rvdffsc    #(32) CSR_Read_Data_ff (.clk(clk), .rst_l(rst_l), .en(Flag_CSR), .clear(~Flag_CSR), .din(CSR_Read_Data), .dout(CSR_Read_Data_r1));
+    
     always @(posedge clk)
     begin
-       /* if (rst_l)
-            Instruction_reg <= Instruction;
-        else
-            Instruction_reg <= 32'h00000000;
-        */
-
         if (rst_l)
         begin
-            CSR_Read_Data_r <= CSR_Read_Data;
-            CSR_Read_r <= (CSR_Read & ~fpu_active);
-            Flag_CSR_r <= Flag_CSR;
+            CSR_Read_Data_r <= CSR_Read_Data_r1;
+            CSR_Read_r <= CSR_Read_r1;
+            Flag_CSR_r <= Flag_CSR_r1;
         end
         else
         begin
@@ -54,12 +55,8 @@
             Flag_CSR_r <= 1'b0;
         end
 
-        rd = (~rst_l) ? 5'b00000 : (Instruction[11:7] != 5'b00000) ? Instruction[11:7] : 5'b00000;
-
-        //Flag_ADDI = (~rst_l) ? 1'b0 : (Instruction[6:0] == 7'b0010011) ? 1'b1 : 1'b0;
-        //Flag_LI = (~rst_l) ? 1'b0 : (Instruction[6:0] == 7'b0110111) ? 1'b1 : 1'b0;
-        //RS2_d = (~rst_l) ? 32'h00000000 : Flag_LI ? IMM_LI : (Flag_ADDI) ? {{20{IMM_ADDI[11]}},IMM_ADDI} : gpr_rs2;
-        //RS1_d = (~rst_l) ? 32'h00000000 : gpr_rs1;
+        rd <= (~rst_l) ? 5'b00000 : (Instruction[11:7] != 5'b00000) ? Instruction[11:7] : 5'b00000;
+        rd_wb <= (~rst_l) ? 5'b00000 : rd;
 
     end
 
@@ -71,7 +68,7 @@
                             .raddr0(rs1),
                             .raddr1(rs2),
                             .wen0(write_en),
-                            .waddr0(rd),
+                            .waddr0(rd_wb),
                             .wd0((CSR_Read_r) ? CSR_Read_Data_r : (fpu_complete_rd & (~Activation_Signal) & (~CSR_Read_r)) ? fpu_result_rd_w : result),
                             .rd0(gpr_rs1),
                             .rd1(gpr_rs2),
@@ -129,8 +126,8 @@
 
 
     // INTEGER REGISTER  FILE ASSIGNEMENTS
-    assign rs1_en = (~rst_l) ? 1'b0 : ((Instruction[11:7] != 5'b00000) & (~fpu_active)) ? 1'b1 : (fpu_active & ~illegal_instr) ? scalar_control[0] : 1'b0;
-    assign rs2_en = (~rst_l) ? 1'b0 : (Instruction[11:7] != 5'b00000) ? 1'b1 : (fpu_active & ~illegal_instr) ? scalar_control[1] : 1'b0;
+    assign rs1_en = (~rst_l) ? 1'b0 : ((Instruction[19:15] != 5'b00000) & (~fpu_active)) ? 1'b1 : (fpu_active & ~illegal_instr) ? scalar_control[0] : 1'b0;
+    assign rs2_en = (~rst_l) ? 1'b0 : ((Instruction[24:20] != 5'b00000) & (~fpu_active) & (~Flag_CSR)) ? 1'b1 : (fpu_active & ~illegal_instr) ? scalar_control[1] : 1'b0;
     assign rs1 = (~rst_l) ? 5'b00000 : (Flag_ADDI) ? Instruction[19:15] : ((Function_CSR == 3'b001) & Flag_CSR) ? Instruction[19:15] : (fpu_active & ~illegal_instr) ? rs1_address : 5'b00000;
     assign rs2 = (~rst_l) ? 5'b00000 : (fpu_active & ~illegal_instr) ? rs2_address : 5'b00000;
     assign RS2_d = (~rst_l) ? 32'h00000000 : Flag_LI ? IMM_LI : (Flag_ADDI) ? {{20{IMM_ADDI[11]}},IMM_ADDI} : gpr_rs2;
@@ -140,7 +137,7 @@
     // CSRRW & CSRRWI instructions ASSIGNEMENTS
     assign Flag_CSR = (~rst_l) ? 1'b0 : (Instruction[6:0] == 7'b1110011) ? 1'b1 : 1'b0;
     assign Function_CSR = (~rst_l) ? 3'b000 : (Flag_CSR) ? Instruction[14:12] : 3'b000;
-    assign CSR_Addr = (~rst_l) ? 12'h000 : (fpu_active & (~illegal_instr) & (~fpu_complete)) ? 12'h001 : Instruction[31:20];
+    assign CSR_Addr = (~rst_l) ? 12'h000 : (fpu_active & (~illegal_instr) & (~fpu_complete)) ? 12'h002 : Instruction[31:20];
     assign CSR_Read = (~rst_l) ? 1'b0 : ((Instruction[11:7] != 5'b00000) & Flag_CSR) ? 1'b1 : (fpu_active & (~illegal_instr) & (~fpu_complete)) ? 1'b1 : 1'b0;
     assign CSR_Write = (~rst_l) ? 1'b0 : (Flag_CSR) ? 1'b1 : (fpu_active & (~illegal_instr) & fpu_complete) ? 1'b1 : 1'b0;
     assign CSR_Write_Data = (~rst_l) ? 32'h00000000 : (Flag_CSR & (Function_CSR == 3'b101)) ? {27'h0000000,Instruction[19:15]} : RS1_d;