summaryrefslogtreecommitdiffstats
path: root/timing/time_sync.v
diff options
context:
space:
mode:
Diffstat (limited to 'timing/time_sync.v')
-rw-r--r--timing/time_sync.v146
1 files changed, 0 insertions, 146 deletions
diff --git a/timing/time_sync.v b/timing/time_sync.v
deleted file mode 100644
index c0c8e195f..000000000
--- a/timing/time_sync.v
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-module time_sync
- (input wb_clk_i, input rst_i,
- input cyc_i, input stb_i, input [2:0] adr_i,
- input we_i, input [31:0] dat_i, output [31:0] dat_o, output ack_o,
- input sys_clk_i, output [31:0] master_time_o,
- input pps_posedge, input pps_negedge,
- input exp_pps_in, output exp_pps_out,
- output reg int_o,
- output reg epoch_o,
- output reg pps_o );
-
- wire [31:0] master_time_rcvd;
- reg [31:0] master_time;
- reg [31:0] delta_time;
-
- reg internal_tick;
- wire sync_rcvd, 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;
- reg sync_on_next_pps;
- reg sync_every_pps;
- reg pps_edge;
-
- // 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 + delta_time;
- else if(pps_ext & (sync_on_next_pps|sync_every_pps))
- master_time <= 0;
- else
- master_time <= master_time + 1;
- assign master_time_o = master_time;
-
- time_sender time_sender
- (.clk(sys_clk_i),.rst(rst_i),
- .master_time(master_time),
- .send_sync(internal_tick),
- .exp_pps_out(exp_pps_out) );
-
- time_receiver time_receiver
- (.clk(sys_clk_i),.rst(rst_i),
- .master_time(master_time_rcvd),
- .sync_rcvd(sync_rcvd),
- .exp_pps_in(exp_pps_in) );
-
- assign ack_o = stb_i;
- wire wb_write = cyc_i & stb_i & we_i;
- wire wb_read = cyc_i & stb_i & ~we_i;
- wire wb_acc = cyc_i & stb_i;
-
- always @(posedge wb_clk_i)
- if(rst_i)
- begin
- tick_source <= 0;
- tick_int_enable <= 0;
- external_sync <= 0;
- tick_interval <= 100000-1; // default to 1K times per second
- delta_time <= 0;
- pps_edge <= 0;
- sync_every_pps <= 0;
- end
- else if(wb_write)
- case(adr_i[2:0])
- 3'd0 :
- begin
- tick_source <= dat_i[0];
- tick_int_enable <= dat_i[1];
- external_sync <= dat_i[2];
- pps_edge <= dat_i[3];
- sync_every_pps <= dat_i[4];
- end
- 3'd1 :
- tick_interval <= dat_i;
- 3'd2 :
- delta_time <= dat_i;
- 3'd3 :
- ;
- // Do nothing here, this is to arm the sync_on_next
- endcase // case(adr_i[2:0])
-
- always @(posedge sys_clk_i)
- if(rst_i)
- sync_on_next_pps <= 0;
- else if(pps_ext)
- sync_on_next_pps <= 0;
- else if(wb_write & (adr_i[2:0] == 3))
- sync_on_next_pps <= 1;
-
- always @(posedge sys_clk_i)
- if(internal_tick)
- tick_time <= master_time;
-
- always @(posedge wb_clk_i)
- tick_time_wb <= tick_time;
-
- assign dat_o = tick_time_wb;
-
- always @(posedge sys_clk_i)
- internal_tick <= (tick_source == 0) ? tick_free_run : pps_ext;
-
- reg [31:0] counter;
- always @(posedge sys_clk_i)
- if(rst_i)
- counter <= 0;
- else if(tick_free_run)
- counter <= 0;
- else
- counter <= counter + 1;
- assign tick_free_run = (counter >= tick_interval);
-
- // 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_edge ? pps_posedge : pps_negedge;
- pps_in_d2 <= pps_in_d1;
- end
- assign pps_ext = pps_in_d1 & ~pps_in_d2;
-
- always @(posedge sys_clk_i)
- pps_o <= pps_ext;
-
- // Need to register this?
- reg internal_tick_d1;
- always @(posedge sys_clk_i) internal_tick_d1 <= internal_tick;
-
- always @(posedge wb_clk_i)
- if(rst_i)
- int_o <= 0;
- else if(tick_int_enable & (internal_tick | internal_tick_d1))
- int_o <= 1;
- else
- int_o <= 0;
-
- always @(posedge sys_clk_i)
- if(rst_i)
- epoch_o <= 0;
- else
- epoch_o <= (master_time_o[27:0] == 0);
-endmodule // time_sync