@@ -33,22 +33,17 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
33
33
ready_deassertion_counter = 0 ;
34
34
endfunction
35
35
36
- protected virtual function void save_segment_by_index (uvm_lbus :: sequence_item item, int unsigned segment_index, bit full_segment = 0 );
37
- logic [128 - 1 : 0 ] data = item.data[128 * (segment_index+ 1 )- 1 - : 128 ];
38
- logic [4 - 1 : 0 ] mty = (full_segment ? 0 : item.mty[4 * (segment_index+ 1 )- 1 - : 4 ]);
39
- save_segment (data, mty);
40
- endfunction
41
-
42
36
protected virtual function void save_segment (logic [128 - 1 : 0 ] data, logic [4 - 1 : 0 ] mty = 0 );
43
- int unsigned valid_byte_count = (128 / 8 )- mty;
44
-
45
- for (int unsigned i = 0 ; i < valid_byte_count; i++ ) begin
37
+ for (int unsigned i = (128 / 8 ); i > mty; ) begin
38
+ i-- ;
46
39
bytes.push_back (data[8 * (i+ 1 )- 1 - : 8 ]);
47
40
end
48
41
endfunction
49
42
50
43
protected virtual function void send_packet ();
51
- uvm_logic_vector_array :: sequence_item # (8 ) item = uvm_logic_vector_array :: sequence_item # (8 ):: type_id :: create (" item" );
44
+ uvm_logic_vector_array :: sequence_item # (8 ) item;
45
+
46
+ item = uvm_logic_vector_array :: sequence_item # (8 ):: type_id :: create (" item" );
52
47
item.data = bytes;
53
48
bytes.delete ();
54
49
analysis_port.write (item);
@@ -80,32 +75,38 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
80
75
81
76
if (! inside_frame) begin
82
77
if (t.sop[i] === 1'b1 && t.eop[i] === 1'b1 ) begin
83
- save_segment_by_index (t, i );
78
+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], t.mty[ 4 * (i + 1 ) - 1 - : 4 ] );
84
79
end
85
80
else if (t.sop[i] === 1'b1 ) begin
86
81
inside_frame = 1 ;
87
- save_segment_by_index (t, i, 1 );
82
+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], 0 );
88
83
end
89
84
else begin
90
85
assert (t.eop[i] !== 1'b1 )
91
86
else begin
92
- `uvm_error (this .get_full_name (), " \n\t The EOP was set before a new packet transfer started. A SOP wasn't set before this EOP" )
87
+ string msg;
88
+ // verilog_lint: waive line-length
89
+ msg = " \n\t The EOP was set before a new packet transfer started. A SOP wasn't set before this EOP" ;
90
+ `uvm_error (this .get_full_name (), msg);
93
91
end
94
92
end
95
93
end
96
94
else begin
97
95
if (t.eop[i] === 1'b1 ) begin
98
96
inside_frame = 0 ;
99
- save_segment_by_index (t, i );
97
+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], t.mty[ 4 * (i + 1 ) - 1 - : 4 ] );
100
98
send_packet ();
101
99
end
102
100
else begin
103
- save_segment_by_index (t, i, 1 );
101
+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], 0 );
104
102
end
105
103
106
104
assert (t.sop[i] !== 1'b1 )
107
105
else begin
108
- `uvm_error (this .get_full_name (), " \n\t The SOP was before the last packet transfer correctly ended. A EOP wasn't set at the end of the packet transfer" )
106
+ string msg;
107
+ // verilog_lint: waive line-length
108
+ msg = " \n\t The SOP was before the last packet transfer correctly ended. A EOP wasn't set at the end of the packet transfer" ;
109
+ `uvm_error (this .get_full_name (), msg);
109
110
end
110
111
end
111
112
end
@@ -157,7 +158,9 @@ class monitor_logic_vector extends uvm_logic_vector::monitor #(1);
157
158
158
159
for (int unsigned i = 0 ; i < 4 ; i++ ) begin
159
160
if (t.ena[i] === 1'b1 && t.eop[i] === 1'b1 ) begin
160
- uvm_logic_vector :: sequence_item # (1 ) item = uvm_logic_vector :: sequence_item # (1 ):: type_id :: create (" item" );
161
+ uvm_logic_vector :: sequence_item # (1 ) item;
162
+
163
+ item = uvm_logic_vector :: sequence_item # (1 ):: type_id :: create (" item" );
161
164
item.data = t.err[i];
162
165
analysis_port.write (item);
163
166
end
0 commit comments