Skip to content

Commit 27b12e4

Browse files
committed
VER AVST: [MAINTENANCE] Add speed meter to AVST interface for PCIE
1 parent 0c275b5 commit 27b12e4

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

comp/ver/pcie/avalon_rq_monitor.sv

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,65 @@ class avalon_rq_monitor extends sv_common_pkg::Monitor;
1414
logic [31:0] data[$];
1515
PcieRequest hl_tr;
1616

17+
protected sv_common_pkg::stats speed;
18+
protected int unsigned speed_curr;
1719

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
2225

2326
function void verbosity_set(int unsigned level);
2427
verbosity = level;
2528
endfunction
2629

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\tSpeed [%0dns:%0dns]\n\t\tAverage : %0.2fGb/s std_dev %0.2fGb/s\n\t\tmin : %0.2fGb/s max %0.2fGb/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+
2768
virtual task run();
2869
sv_common_pkg::Transaction common_tr;
2970
avst_rx::transaction tr;
3071

72+
fork
73+
run_meter();
74+
join_none;
75+
3176
while(enabled) begin
3277
avalon_rq_cbs.get(common_tr);
3378
$cast(tr, common_tr);
@@ -84,6 +129,7 @@ class avalon_rq_monitor extends sv_common_pkg::Monitor;
84129
for (int i = 0; i < m_end; i++) begin
85130
data.push_back(tr.data[(i+1)*32-1 -:32]);
86131
end
132+
speed_curr += m_end;
87133
end
88134

89135
if(tr.eop == 1'b1) begin

0 commit comments

Comments
 (0)