5
5
// -- SPDX-License-Identifier: BSD-3-Clause
6
6
7
7
8
- class driver # (CHANNELS , PKT_SIZE_MAX ) extends uvm_component ;
9
- `uvm_component_param_utils (uvm_dma_ll_rx :: driver# (CHANNELS , PKT_SIZE_MAX ))
8
+ class driver # (ITEM_WIDTH , CHANNELS , PKT_SIZE_MAX ) extends uvm_component ;
9
+ `uvm_component_param_utils (uvm_dma_ll_rx :: driver# (ITEM_WIDTH , CHANNELS , PKT_SIZE_MAX ))
10
10
11
11
localparam MFB_META_WIDTH = 24 + $clog2 (PKT_SIZE_MAX + 1 ) + $clog2 (CHANNELS );
12
12
13
- uvm_seq_item_pull_port # (uvm_byte_array :: sequence_item, uvm_byte_array :: sequence_item) seq_item_port_byte_array ;
13
+ uvm_seq_item_pull_port # (uvm_logic_vector_array :: sequence_item# ( ITEM_WIDTH ), uvm_logic_vector_array :: sequence_item# ( ITEM_WIDTH )) seq_item_port_logic_vector_array ;
14
14
15
- mailbox # (uvm_byte_array:: sequence_item) byte_array_export;
16
- mailbox # (uvm_logic_vector:: sequence_item# (MFB_META_WIDTH )) logic_vector_export;
17
- local semaphore sem;
15
+ mailbox # (uvm_logic_vector_array:: sequence_item# (ITEM_WIDTH )) logic_vector_array_export;
16
+ mailbox # (uvm_logic_vector:: sequence_item# (MFB_META_WIDTH )) logic_vector_export;
18
17
19
18
// ------------------------------------------------------------------------
20
19
// Constructor
21
20
function new (string name, uvm_component parent);
22
21
super .new (name, parent);
23
22
24
- seq_item_port_byte_array = new (" seq_item_port_byte_array " , this );
23
+ seq_item_port_logic_vector_array = new (" seq_item_port_logic_vector_array " , this );
25
24
26
- byte_array_export = new (1 );
27
- logic_vector_export = new (1 );
28
- sem = new (1 );
25
+ logic_vector_array_export = new (1 );
26
+ logic_vector_export = new (1 );
29
27
endfunction
30
28
31
29
function int unsigned used ();
32
30
int unsigned ret = 0 ;
33
- ret | = (byte_array_export .num () != 0 );
31
+ ret | = (logic_vector_array_export .num () != 0 );
34
32
ret | = (logic_vector_export.num () != 0 );
35
33
return ret;
36
34
endfunction
37
35
38
36
// ------------------------------------------------------------------------
39
37
// Starts driving signals to interface
40
38
task run_phase (uvm_phase phase);
41
- uvm_byte_array :: sequence_item byte_array_req ;
42
- uvm_byte_array :: sequence_item byte_array_new ;
43
- uvm_logic_vector :: sequence_item # (MFB_META_WIDTH ) logic_vector_new;
39
+ uvm_logic_vector_array :: sequence_item # ( ITEM_WIDTH ) logic_vector_array_req ;
40
+ uvm_logic_vector_array :: sequence_item # ( ITEM_WIDTH ) logic_vector_array_new ;
41
+ uvm_logic_vector :: sequence_item # (MFB_META_WIDTH ) logic_vector_new;
44
42
45
43
logic [$clog2 (PKT_SIZE_MAX + 1 )- 1 : 0 ] packet_size;
46
44
int unsigned channel;
@@ -49,12 +47,12 @@ class driver#(CHANNELS, PKT_SIZE_MAX) extends uvm_component;
49
47
50
48
forever begin
51
49
// Get new sequence item to drive to interface
52
- seq_item_port_byte_array .get_next_item (byte_array_req );
50
+ seq_item_port_logic_vector_array .get_next_item (logic_vector_array_req );
53
51
54
52
msg = { msg, $sformatf (" -------------------------------------------------------\n " )} ;
55
53
msg = { msg, $sformatf (" DRIVER: Got new transaction:\n " )} ;
56
54
msg = { msg, $sformatf (" -------------------------------------------------------\n " )} ;
57
- msg = { msg, $sformatf (" %s \n " , byte_array_req .convert2string ())} ;
55
+ msg = { msg, $sformatf (" %s \n " , logic_vector_array_req .convert2string ())} ;
58
56
59
57
60
58
assert (std:: randomize (channel) with { channel >= 0 ; channel < CHANNELS ;} );
@@ -63,21 +61,19 @@ class driver#(CHANNELS, PKT_SIZE_MAX) extends uvm_component;
63
61
msg = { msg, $sformatf (" \n Channel: %0d \n " , channel)} ;
64
62
msg = { msg, $sformatf (" Meta: 0x%x \n " , meta)} ;
65
63
66
- $cast (byte_array_new, byte_array_req .clone ());
64
+ $cast (logic_vector_array_new, logic_vector_array_req .clone ());
67
65
logic_vector_new = uvm_logic_vector :: sequence_item# (MFB_META_WIDTH ):: type_id :: create (" logic_vector_new" );
68
- packet_size = byte_array_new .data.size ();
66
+ packet_size = logic_vector_array_new .data.size ();
69
67
logic_vector_new.data = { packet_size, channel, meta} ;
70
68
msg = { msg, $sformatf (" Pkt size: %0d \n " , packet_size)} ;
71
69
72
70
`uvm_info (this .get_full_name (), msg, UVM_HIGH );
73
71
74
- wait (byte_array_export.num () == 0 || logic_vector_export.num () == 0 );
75
- sem.get (1 );
76
- byte_array_export.put (byte_array_new);
72
+ wait (logic_vector_array_export.num () == 0 || logic_vector_export.num () == 0 );
73
+ logic_vector_array_export.put (logic_vector_array_new);
77
74
logic_vector_export.put (logic_vector_new);
78
- sem.put (1 );
79
75
80
- seq_item_port_byte_array .item_done ();
76
+ seq_item_port_logic_vector_array .item_done ();
81
77
end
82
78
endtask
83
79
0 commit comments