-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathstatistics.v
67 lines (60 loc) · 1.26 KB
/
statistics.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
module statistics(
input wire i_clk,
input wire i_rst,
input wire i_config_start,
input wire i_cap_en,
input wire i_dma_done,
output reg [19:0] o_icap_clk_cnt,
output wire [19:0] o_total_clk_cnt
);
reg icap_en_rise = 0;
reg icap_en_sync1 = 0;
reg icap_en_sync2 = 0;
reg delayed_i_cap_en = 0;
reg clock_run;
reg icap_en_fall = 0;
reg [18:0] total_clk_cnt;
assign o_total_clk_cnt = total_clk_cnt + o_icap_clk_cnt;
always @(posedge i_clk)
begin
icap_en_sync1 <= i_cap_en;
icap_en_sync2 <= icap_en_sync1;
delayed_i_cap_en <= icap_en_sync2;
icap_en_rise <= icap_en_sync2 & ~delayed_i_cap_en;
icap_en_fall <= ~icap_en_sync2 & delayed_i_cap_en;
end
always @(posedge i_clk)
begin
if(i_rst)
o_icap_clk_cnt <= 0;
else
begin
if(~icap_en_sync2)
o_icap_clk_cnt <= o_icap_clk_cnt + 1;
end
end
always @(posedge i_clk)
begin
if(i_rst)
begin
clock_run <= 1'b0;
end
else
begin
if(i_config_start)
clock_run <= 1'b1;
else if(icap_en_fall)
clock_run <= 1'b0;
end
end
always @(posedge i_clk)
begin
if(i_rst)
total_clk_cnt <= 0;
else
begin
if(clock_run)
total_clk_cnt <= total_clk_cnt +1;
end
end
endmodule