x393  1.0
FPGAcodeforElphelNC393camera
sim_frac_clk_delay.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
42  parameter FRAC_DELAY = 2.3, // periods of clock > 0.5
43  parameter SKIP_FIRST = 5 // skip first clock pulses
44  ) (
45  input clk,
46  input din,
47  output dout
48  );
49  localparam integer INT_DELAY = $rtoi (FRAC_DELAY);
50 // localparam [0:0] HALF_DELAY = $rtoi(2.0 *(FRAC_DELAY - INT_DELAY));
51  localparam [0:0] HALF_DELAY = (FRAC_DELAY - INT_DELAY) >= 0.5;
52  localparam RDELAY = (FRAC_DELAY - INT_DELAY) - 0.5 * HALF_DELAY;
53  integer num_period = 0;
54  reg en = 0;
55  real phase;
56  real prev_phase = 0.0;
57  real frac_period = 0.0;
58 
59  // measure period
60  always @ (posedge clk) begin
61  phase = $realtime;
62  if (num_period >= SKIP_FIRST) begin
64  en = 1;
65  end
66  prev_phase = phase;
67  if (!en) num_period = num_period + 1;
68  end
69  reg [INT_DELAY:0] sr = 0;
70  reg [INT_DELAY:0] sr_fract = 0;
71  wire [INT_DELAY+1:0] taps = {sr,din};
72  wire [INT_DELAY+1:0] taps_fract = {sr_fract,din};
73  reg dly_half;
74 // reg dly_int;
75  always @(posedge clk) if (en) begin
76  sr <= taps[INT_DELAY:0];
77 // #frac_period sr_fract <= taps[INT_DELAY:0];
79  end
80  always @(negedge clk) if (en) begin
82  end
83 // assign dout = dly_half;
84 // assign dout = HALF_DELAY ? dly_half : taps[INT_DELAY];
85 // assign #frac_period dout = HALF_DELAY ? dly_half : taps[INT_DELAY];
87 // assign #(RDELAY*period) dout = HALF_DELAY ? dly_half : taps[INT_DELAY];
88 endmodule
89 
8830taps_fractwire[INT_DELAY+1:0]
8827srreg[INT_DELAY:0]
integer 8819INT_DELAY$rtoi (FRAC_DELAY
[0:0] 8820HALF_DELAY(FRAC_DELAY - INT_DELAY) >= 0.5
8829tapswire[INT_DELAY+1:0]
8821RDELAY(FRAC_DELAY - INT_DELAY) - 0.5 * HALF_DELAY
8828sr_fractreg[INT_DELAY:0]