x393  1.0
FPGAcodeforElphelNC393camera
freq_meter.v
Go to the documentation of this file.
1 
26 `timescale 1ns/1ps
27 
28 module freq_meter#(
29  parameter WIDTH = 12, // width of the result
30  parameter PRESCALE = 1 // 0 same frequency, +1 - xclk is tvice faster, -1 - twice slower
31 )(
32  input rst,
33  input clk,
34  input xclk,
35  output reg [WIDTH - 1:0] dout
36 );
37  localparam TIMER_WIDTH = WIDTH - PRESCALE;
38  reg [TIMER_WIDTH - 1 :0] timer;
39  reg [WIDTH - 1 :0] counter;
40 
41  wire restart;
42  reg [3:0] run_xclk;
43 
44  always @ (posedge clk) begin
45  if (rst || restart) timer <= 0;
46  else if (!timer[TIMER_WIDTH - 1]) timer <= timer + 1;
47 
48  if (restart) dout <= counter; // it is stopped before copying
49 
50  end
51  always @ (posedge xclk) begin
52  run_xclk <= {run_xclk[2:0], ~timer[TIMER_WIDTH - 1] & ~rst};
53 
54  if (run_xclk[2]) counter <= counter + 1;
55  else if (run_xclk[1]) counter <= 0;
56 
57  end
58 
60  .EXTRA_DLY(0)
61  ) xclk2clk_i (
62  .rst (rst), // input
63  .src_clk (xclk), // input
64  .dst_clk (clk), // input
65  .in_pulse (!run_xclk[2] && run_xclk[3]), // input
66  .out_pulse (restart), // output
67  .busy () // output
68  );
69 
70 
71 endmodule
72 
14204WIDTH12
Definition: freq_meter.v:29
reg [WIDTH - 1:0] 14209dout
Definition: freq_meter.v:35
xclk2clk_i pulse_cross_clock
Definition: freq_meter.v:59
14211timerreg[TIMER_WIDTH-1:0]
Definition: freq_meter.v:38
14210TIMER_WIDTHWIDTH - PRESCALE
Definition: freq_meter.v:37
14214run_xclkreg[3:0]
Definition: freq_meter.v:42
14213restartwire
Definition: freq_meter.v:41
14205PRESCALE1
Definition: freq_meter.v:30
14212counterreg[WIDTH-1:0]
Definition: freq_meter.v:39