@@ -33,22 +33,17 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
3333 ready_deassertion_counter = 0 ;
3434 endfunction
3535
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-
4236 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-- ;
4639 bytes.push_back (data[8 * (i+ 1 )- 1 - : 8 ]);
4740 end
4841 endfunction
4942
5043 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" );
5247 item.data = bytes;
5348 bytes.delete ();
5449 analysis_port.write (item);
@@ -80,32 +75,38 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
8075
8176 if (! inside_frame) begin
8277 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 ] );
8479 end
8580 else if (t.sop[i] === 1'b1 ) begin
8681 inside_frame = 1 ;
87- save_segment_by_index (t, i, 1 );
82+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], 0 );
8883 end
8984 else begin
9085 assert (t.eop[i] !== 1'b1 )
9186 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);
9391 end
9492 end
9593 end
9694 else begin
9795 if (t.eop[i] === 1'b1 ) begin
9896 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 ] );
10098 send_packet ();
10199 end
102100 else begin
103- save_segment_by_index (t, i, 1 );
101+ save_segment (t.data[ 128 * (i + 1 ) - 1 - : 128 ], 0 );
104102 end
105103
106104 assert (t.sop[i] !== 1'b1 )
107105 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);
109110 end
110111 end
111112 end
@@ -157,7 +158,9 @@ class monitor_logic_vector extends uvm_logic_vector::monitor #(1);
157158
158159 for (int unsigned i = 0 ; i < 4 ; i++ ) begin
159160 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" );
161164 item.data = t.err[i];
162165 analysis_port.write (item);
163166 end
0 commit comments