commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7309 - usrp2/trunk/fpga/timing


From: matt
Subject: [Commit-gnuradio] r7309 - usrp2/trunk/fpga/timing
Date: Sun, 30 Dec 2007 16:56:21 -0700 (MST)

Author: matt
Date: 2007-12-30 16:56:20 -0700 (Sun, 30 Dec 2007)
New Revision: 7309

Modified:
   usrp2/trunk/fpga/timing/time_receiver.v
   usrp2/trunk/fpga/timing/time_sync.v
Log:
moved some functionality around, renamed pps to tick internally, demonstrated 
working time sync


Modified: usrp2/trunk/fpga/timing/time_receiver.v
===================================================================
--- usrp2/trunk/fpga/timing/time_receiver.v     2007-12-30 23:54:40 UTC (rev 
7308)
+++ usrp2/trunk/fpga/timing/time_receiver.v     2007-12-30 23:56:20 UTC (rev 
7309)
@@ -1,8 +1,8 @@
 
 module time_receiver
   (input clk, input rst,
-   output reg [31:0] master_time,
-   output reg sync_rcvd,
+   output [31:0] master_time,
+   output sync_rcvd,
    input exp_pps_in);
 
    wire       code_err, disp_err, dispout, complete_word;
@@ -88,20 +88,7 @@
           state <= STATE_IDLE;
        endcase // case(state)
 
-   always @(posedge clk)
-     if(rst)
-       begin
-         master_time <= 0;
-         sync_rcvd <= 0;
-       end
-     else if(complete_word & (state == STATE_T3))
-       begin
-         master_time <= {clock_a, clock_b, clock_c, dataout_reg[7:0]};
-         sync_rcvd <= 1;
-       end
-     else
-       begin
-         master_time <= master_time + 1;
-         sync_rcvd <= 0;
-       end
+   assign master_time =  {clock_a, clock_b, clock_c, dataout_reg[7:0]};
+   assign sync_rcvd = (complete_word & (state == STATE_T3));
+
 endmodule // time_sender

Modified: usrp2/trunk/fpga/timing/time_sync.v
===================================================================
--- usrp2/trunk/fpga/timing/time_sync.v 2007-12-30 23:54:40 UTC (rev 7308)
+++ usrp2/trunk/fpga/timing/time_sync.v 2007-12-30 23:56:20 UTC (rev 7309)
@@ -7,24 +7,29 @@
    input sys_clk_i, output [31:0] master_time_o,
    input pps_in, input exp_pps_in, output exp_pps_out,
    output int_o );
-
-   // Generate Internal master time if we are the master
-   reg [31:0] master_time;
+   
    wire [31:0] master_time_rcvd;
-
+   reg [31:0]  master_time;
+   wire        sync_rcvd, internal_tick, pps_ext;
+   reg [31:0]  tick_time, tick_time_wb;
+   wire        tick_free_run;
+   reg                tick_int_enable, tick_source, external_sync;
+   reg [31:0]  tick_interval;
+   
+   // Generate master time
    always @(posedge sys_clk_i)
      if(rst_i)
        master_time <= 0;
+     else if(external_sync & sync_rcvd)
+       master_time <= master_time_rcvd;
      else
        master_time <= master_time + 1;
-   assign     master_time_o = master_time;
-
-   wire       send_sync, sync_rcvd;
+   assign      master_time_o = master_time;
    
    time_sender time_sender
      (.clk(sys_clk_i),.rst(rst_i),
       .master_time(master_time),
-      .send_sync(send_sync),
+      .send_sync(internal_tick),
       .exp_pps_out(exp_pps_out) );
 
    time_receiver time_receiver
@@ -33,71 +38,57 @@
       .sync_rcvd(sync_rcvd),
       .exp_pps_in(exp_pps_in) );
 
-
-   
-   reg [31:0] pps_time, pps_time_wb;
-   reg [1:0]  pps_source;
-   reg               pps_in_d1, pps_in_d2;
-   wire       pps_free_run;
-   reg               pps_int_enable;
-   reg               exp_pps_in_decoded;
-   wire       pps_ext, pps_internal;
-   
    assign     ack_o = stb_i;
 
    always @(posedge wb_clk_i)
      if(rst_i)
        begin
-         pps_source <= 0;
-         pps_int_enable <= 0;
+         tick_source <= 0;
+         tick_int_enable <= 0;
+         external_sync <= 0;
+         tick_interval <= 100000-1;  // default to 1K times per second
        end
      else if(stb_i & we_i)
-       begin
-         pps_source <= dat_i[1:0];
-         pps_int_enable <= dat_i[2];
-       end
+       if(adr_i[2])
+        tick_interval <= dat_i;
+       else
+        begin
+           tick_source <= dat_i[0];
+           tick_int_enable <= dat_i[1];
+           external_sync <= dat_i[2];
+        end
    
    always @(posedge sys_clk_i)
-     if(pps_internal)
-       pps_time <= master_time;
+     if(internal_tick)
+       tick_time <= master_time;
 
    always @(posedge wb_clk_i)
-     pps_time_wb <= pps_time;
+     tick_time_wb <= tick_time;
    
-   assign dat_o = pps_time_wb;
-   assign int_o = pps_int_enable & pps_internal;
+   assign dat_o = tick_time_wb;
 
-   assign pps_internal = 
-         (pps_source == 1) ? pps_ext :
-         (pps_source == 2) ? exp_pps_in_decoded :
-         pps_free_run;
+   assign internal_tick = (tick_source == 0) ? tick_free_run : pps_ext;
 
-   // Generate internal free-runnning PPS clock
-   localparam ONE_SECOND = 100000000-1;  // 100 million minus 1
    reg [31:0] counter;
    always @(posedge sys_clk_i)
      if(rst_i)
        counter <= 0;
-     else if(counter == ONE_SECOND)
+     else if(tick_free_run)
        counter <= 0;
      else
        counter <= counter + 1;
-   assign pps_free_run = (counter == ONE_SECOND);
+   assign     tick_free_run = (counter >= tick_interval);
    
-   // Decode Expansion PPS Input
-   reg           exp_pps_in_d1;
-   always @(posedge sys_clk_i) 
-     begin
-       exp_pps_in_d1 <= exp_pps_in;
-       exp_pps_in_decoded <= (exp_pps_in_d1 == exp_pps_in);
-     end
-   
    // Properly Latch and edge detect External PPS input
+   reg               pps_in_d1, pps_in_d2;
    always @(posedge sys_clk_i)
      begin
        pps_in_d1 <= pps_in;
        pps_in_d2 <= pps_in_d1;
      end
    assign pps_ext = pps_in_d1 & ~pps_in_d2;
+
+   // Need to register this?
+   assign int_o = tick_int_enable & internal_tick;
    
 endmodule // time_sync





reply via email to

[Prev in Thread] Current Thread [Next in Thread]