@@ -14,20 +14,65 @@ class avalon_rq_monitor extends sv_common_pkg::Monitor;
14
14
logic [31 : 0 ] data[$];
15
15
PcieRequest hl_tr;
16
16
17
+ protected sv_common_pkg :: stats speed;
18
+ protected int unsigned speed_curr;
17
19
18
- function new (string inst = " " );
19
- super .new (inst);
20
- avalon_rq_cbs = new ();
21
- endfunction
20
+ function new (string inst = " " );
21
+ super .new (inst);
22
+ avalon_rq_cbs = new ();
23
+ speed = new ();
24
+ endfunction
22
25
23
26
function void verbosity_set (int unsigned level);
24
27
verbosity = level;
25
28
endfunction
26
29
30
+ task run_meter ();
31
+ speed_curr = 0 ;
32
+ while (enabled) begin
33
+ time speed_start_time;
34
+ time speed_end_time;
35
+ const int unsigned mesures = 100 ;
36
+ string msg;
37
+
38
+ speed_end_time = $time ();
39
+ forever begin
40
+ time step_speed_end_time = speed_end_time;
41
+ time step_speed_start_time;
42
+
43
+ for (int unsigned it = 0 ; it < mesures; it++ ) begin
44
+ step_speed_start_time = step_speed_end_time;
45
+
46
+ # (1us );
47
+ step_speed_end_time = $time ();
48
+ speed.next_val (real '(speed_curr)/ ((step_speed_end_time- step_speed_start_time)/ 1ns ));
49
+
50
+ speed_curr = 0 ;
51
+ end
52
+
53
+ begin
54
+ real min, max, avg, std_dev;
55
+
56
+ speed_start_time = speed_end_time;
57
+ speed_end_time = step_speed_end_time;
58
+ speed.count (min, max, avg, std_dev);
59
+ msg = $sformatf (" \n\t Speed [%0d ns:%0d ns]\n\t\t Average : %0.2f Gb/s std_dev %0.2f Gb/s\n\t\t min : %0.2f Gb/s max %0.2f Gb/s" ,
60
+ speed_start_time/ 1ns , speed_end_time/ 1ns , avg* 32 , std_dev* 32 , min* 32 , max* 32 );
61
+ $write ({ " \n " , this .inst , " \n " , msg, " \n " } );
62
+ speed.reset ();
63
+ end
64
+ end
65
+ end
66
+ endtask
67
+
27
68
virtual task run ();
28
69
sv_common_pkg :: Transaction common_tr;
29
70
avst_rx :: transaction tr;
30
71
72
+ fork
73
+ run_meter ();
74
+ join_none ;
75
+
31
76
while (enabled) begin
32
77
avalon_rq_cbs.get (common_tr);
33
78
$cast (tr, common_tr);
@@ -84,6 +129,7 @@ class avalon_rq_monitor extends sv_common_pkg::Monitor;
84
129
for (int i = 0 ; i < m_end; i++ ) begin
85
130
data.push_back (tr.data[(i+ 1 )* 32 - 1 - : 32 ]);
86
131
end
132
+ speed_curr + = m_end;
87
133
end
88
134
89
135
if (tr.eop == 1'b1 ) begin
0 commit comments