Final RTL
diff --git a/verilog/rtl/gps_engine/gps_multichannel.v b/verilog/rtl/gps_engine/gps_multichannel.v
index 4b50c21..56a419e 100644
--- a/verilog/rtl/gps_engine/gps_multichannel.v
+++ b/verilog/rtl/gps_engine/gps_multichannel.v
@@ -19,7 +19,7 @@
 	input        wb_rst_i,     // synchronous active high reset
 	input  [31:0] wb_adr_i,     // lower address bits
 	input  [31:0] wb_dat_i,     // databus input
-	output [31:0] wb_dat_o,     // databus output
+	output reg [31:0] wb_dat_o,     // databus output
 	input        wb_we_i,      // write enable input
 	input        wb_stb_i,     // stobe/core select signal
 	input        wb_cyc_i,     // valid bus cycle input
@@ -50,6 +50,7 @@
 
 wire [31:0] ch1_wb_dat_o, ch2_wb_dat_o, ch3_wb_dat_o, ch4_wb_dat_o;
 wire [31:0] ch5_wb_dat_o, ch6_wb_dat_o, ch7_wb_dat_o, ch8_wb_dat_o;
+reg [31:0] count32;
 
    // Module Address Select Logic
    assign ch1_select = (wb_adr_i[31:8] == 24'h00000A) ;
@@ -94,7 +95,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch1_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch1_wb_ack_o)
+	.wb_ack_o(ch1_wb_ack_o),
+	.count32(count32)
 );
 
 gps_single_channel ch2(
@@ -116,7 +118,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch2_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch2_wb_ack_o)
+	.wb_ack_o(ch2_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch3(
 	.mclr(mclr),
@@ -137,7 +140,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch3_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch3_wb_ack_o)
+	.wb_ack_o(ch3_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch4(
 	.mclr(mclr),
@@ -158,7 +162,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch4_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch4_wb_ack_o)
+	.wb_ack_o(ch4_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch5(
 	.mclr(mclr),
@@ -179,7 +184,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch5_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch5_wb_ack_o)
+	.wb_ack_o(ch5_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch6(
 	.mclr(mclr),
@@ -200,7 +206,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch6_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch6_wb_ack_o)
+	.wb_ack_o(ch6_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch7(
 	.mclr(mclr),
@@ -221,7 +228,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch7_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch7_wb_ack_o)
+	.wb_ack_o(ch7_wb_ack_o),
+	.count32(count32)
 );
 gps_single_channel ch8(
 	.mclr(mclr),
@@ -242,7 +250,8 @@
 	.wb_we_i(wb_we_i), 
 	.wb_stb_i(ch8_wb_stb_i), 
 	.wb_cyc_i(wb_cyc_i), 
-	.wb_ack_o(ch8_wb_ack_o)
+	.wb_ack_o(ch8_wb_ack_o),
+	.count32(count32)
 );
 
 
@@ -261,4 +270,13 @@
 	endcase
 end
 
+always @(negedge mclk or negedge mclr) begin
+	if (mclr==1'b0) begin
+		count32 <= 32'd0 ;
+	end
+	else begin
+		count32 <= count32 + 32'd1 ;
+	end
+end
+
 endmodule
diff --git a/verilog/rtl/gps_engine/gps_single_channel.v b/verilog/rtl/gps_engine/gps_single_channel.v
index f90341a..0dff273 100644
--- a/verilog/rtl/gps_engine/gps_single_channel.v
+++ b/verilog/rtl/gps_engine/gps_single_channel.v
@@ -28,7 +28,8 @@
 dll_sel1,
 fll_enabl,
 costas_enabl,
-select_qmaxim
+select_qmaxim,
+count32
 );
 
 input mclr, mclk;
@@ -51,6 +52,7 @@
 input fll_enabl;
 input costas_enabl;
 input select_qmaxim; // to be given as GPIO
+input [31:0] count32 ;
 
 wire mclr;
 wire mclk;
@@ -64,6 +66,8 @@
 wire costas_enabl;
 wire irnss_sel;
 wire [10:1] irnss_code;
+wire [31:0] count32 ;
+reg [31:0] timestamp_latch;
 
 
 wire [29:0] code_frequency ;
@@ -85,6 +89,7 @@
 
 
 reg [29:0] coffset; 
+reg sat_change;
 wire [29:0] coffset_costas;
 
 
@@ -134,7 +139,6 @@
 wire [2:0] adc3bit_qsel;
 
 reg enable = 1'b 0;
-reg sat_change;
 
 wire nco_car_clk1p4m;
 wire nco_cod_clk1p0m;
@@ -205,7 +209,8 @@
 	.acq_complete (acq),
   .irnss_sel(irnss_sel),
   .irnss_code(irnss_code),
-  .sat_change(sat_change)
+  .sat_change(sat_change),
+  .timestamp_latch(timestamp_latch)
  ); 
 
 // 2 to 3 bit conv for I-channel IF Input
@@ -465,22 +470,31 @@
   end
 
   integer count_sat = 0;
+  //reg sat_change;
 
   always @(posedge tr_epoclk_clk1ms or negedge mclr) begin
     if(mclr==1'b0) begin
-      count_sat = 0 ;
-      sat_change = 1'b0;
+      count_sat <= 0 ;
+      sat_change <= 1'b0;
     end
     else begin
       if (acq==1'b0 && count_sat<40920) begin
-        count_sat = count_sat + 1;
+        count_sat <= count_sat + 1;
       end else if(acq==1'b0 && count_sat==40920) begin
-        sat_change = ~sat_change ;
-        count_sat = 0;
+        sat_change <= ~sat_change ;
+        count_sat <= 0;
       end
     end
   end
 
+  always @(negedge tr_epoclk_clk1ms or negedge mclr) begin
+    if(mclr==1'b0) begin
+      timestamp_latch <= 32'd0 ;
+    end else begin
+      timestamp_latch <= count32;
+    end
+  end
+
   assign satellite_id = sat_change == 1'b0 ? satellite_id1 : satellite_id2;
 
 
diff --git a/verilog/rtl/gps_engine/wb_interface.v b/verilog/rtl/gps_engine/wb_interface.v
index 8205b62..7e89e06 100644
--- a/verilog/rtl/gps_engine/wb_interface.v
+++ b/verilog/rtl/gps_engine/wb_interface.v
@@ -20,7 +20,8 @@
 	acq_complete,
 	irnss_sel,
 	irnss_code,
-	sat_change
+	sat_change,
+	timestamp_latch
 );
 
 
@@ -54,6 +55,7 @@
 input acq_complete;
 output reg [10:1] irnss_code;
 output reg irnss_sel;
+input [31:0] timestamp_latch ;
 
 parameter CODE_FREQUENCY_REG_ADDR = 8'h00 ;
 parameter CARR_FREQUENCY_REG_ADDR = 8'h04 ;
@@ -70,6 +72,7 @@
 parameter STATUS_REG_ADDR      = 8'h30;
 parameter IRNSS_REG_ADDR       = 8'h34;
 parameter SAT_REG_ADDR         = 8'h38;
+parameter TIMESTAMP_LATCH_ADDR = 8'h3C;
 
 reg intg_ready_reg ;	
 reg intg_ready_ff1 ,intg_ready_ff2 ,intg_ready_ff3 ;	
@@ -158,6 +161,7 @@
 			EARLY_QDATA_REG_ADDR : wb_dat_o <=  { {12{1'b0}},early_qdata};
 			STATUS_REG_ADDR      : wb_dat_o <= { {30{1'b0}},acq_complete,intg_ready_reg};  
 			SAT_REG_ADDR         : wb_dat_o <= {{26{1'b0}},sat_change,satellite_id2};
+			TIMESTAMP_LATCH_ADDR : wb_dat_o <= timestamp_latch ;
 			default: ;
 		endcase
 	end