-
Notifications
You must be signed in to change notification settings - Fork 0
/
ahb_mux_sequencer.svh
155 lines (134 loc) · 4.92 KB
/
ahb_mux_sequencer.svh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import uvm_pkg::*;
`include "uvm_macros.svh"
`include "ahb_mux_transaction_v2.svh"
`include "dutMUX_params.svh"
import ahb_pkg::*;
class trialSequence extends uvm_sequence #(ahb_mux_transaction_v2);
`uvm_object_utils(trialSequence)
function new(input string name = "");
super.new(name);
endfunction : new
task body();
ahb_mux_transaction_v2 req_item;
req_item = ahb_mux_transaction_v2::type_id::create("req_item");
start_item(req_item);
`uvm_info(this.get_name(), "I am running the trial sequence", UVM_NONE);
req_item.reset_unit = 0;
req_item.num_active_managers = 0;
req_item.idle = 1;
finish_item(req_item);
endtask : body
endclass : trialSequence
class resetSequence extends uvm_sequence #(ahb_mux_transaction_v2);
`uvm_object_utils(resetSequence)
function new(input string name = "");
super.new(name);
endfunction : new
task body();
ahb_mux_transaction_v2 req_item;
req_item = ahb_mux_transaction_v2::type_id::create("req_item");
start_item(req_item);
`uvm_info(this.get_name(), "I am running the reset sequence", UVM_NONE);
req_item.reset_unit = 1;
finish_item(req_item);
endtask : body
endclass : resetSequence
class writeNONSEQM1 extends uvm_sequence #(ahb_mux_transaction_v2);
`uvm_object_utils(writeNONSEQM1)
HTRANS_t my_seq;
int i;
function new(input string name = "");
super.new(name);
my_seq = NONSEQ;
endfunction : new
virtual task body();
ahb_mux_transaction_v2 dummy_item;
dummy_item = ahb_mux_transaction_v2::type_id::create("dummy_item");
for(i= 0; i<`AHB_MUX_NMANAGERS; i++) begin
ahb_mux_transaction_v2 req_item;
req_item = ahb_mux_transaction_v2::type_id::create("req_item");
start_item(req_item);
req_item.randomize();
req_item.reset_unit = 0;
req_item.num_active_managers = 1;
req_item.index_active_managers = '0;
req_item.index_active_managers[i] = 1;
req_item.htrans = my_seq;
req_item.rw = `WRITE;
req_item.hsize = 2'h2;
req_item.burstSize = '0;
req_item.burstType = 3;
req_item.hwstrb[i] = 4'hF;
req_item.idle = '0;
`uvm_info(this.get_name(), $sformatf("1 mamager request a non seq write Manager_Index=%0b",req_item.index_active_managers), UVM_NONE);
finish_item(req_item);
end
start_item(dummy_item);
dummy_item.reset_unit = 0;
dummy_item.num_active_managers = 1;
dummy_item.index_active_managers = '0;
dummy_item.index_active_managers[0] = 1;
// dummy_item.rw = `WRITE;
// dummy_item.hsize = 2'h2;
// dummy_item.burstSize = '0;
// dummy_item.burstType = '0;
// dummy_item.hwstrb[0] = 4'hF;
dummy_item.idle = 1;
`uvm_info(this.get_name(), "NON SEQ sequence finished; sending an idle sequence", UVM_NONE);
finish_item(dummy_item);
endtask : body
endclass : writeNONSEQM1
class writeNONSEQM3 extends uvm_sequence #(ahb_mux_transaction_v2);
`uvm_object_utils(writeNONSEQM3)
HTRANS_t my_seq;
int i;
function new(input string name = "");
super.new(name);
my_seq = NONSEQ;
endfunction : new
virtual task body();
ahb_mux_transaction_v2 dummy_item;
ahb_mux_transaction_v2 req_item;
dummy_item = ahb_mux_transaction_v2::type_id::create("dummy_item");
req_item = ahb_mux_transaction_v2::type_id::create("req_item");
start_item(req_item);
req_item.randomize();
req_item.reset_unit = 0;
req_item.num_active_managers = 3;
req_item.index_active_managers = 3'b111;
req_item.htrans = my_seq;
req_item.rw = `WRITE;
req_item.hsize = 2'h2;
req_item.burstSize = '0;
req_item.burstType = 3;
req_item.hwstrb[0] = 4'hF;
req_item.hwstrb[1] = 4'hF;
req_item.hwstrb[2] = 4'hF;
req_item.idle = '0;
`uvm_info(this.get_name(), $sformatf("Manager requests a non seq write Manager_Index=%0b",req_item.index_active_managers), UVM_NONE);
`uvm_info(this.get_name(), $sformatf("Req item manager 0=%0h",req_item.haddr[0]), UVM_NONE);
finish_item(req_item);
start_item(dummy_item);
dummy_item.haddr[0] = req_item.haddr[0];
`uvm_info(this.get_name(), $sformatf("Copied Dummy Item Manager 0=%0h",dummy_item.haddr[0]), UVM_NONE);
dummy_item.reset_unit = 0;
dummy_item.num_active_managers = 1;
dummy_item.index_active_managers = '0;
dummy_item.index_active_managers[0] = 1;
dummy_item.rw = `WRITE;
dummy_item.hsize = 2'h2;
dummy_item.burstSize = '0;
dummy_item.burstType = 3;
dummy_item.hwstrb[0] = 4'hF;
dummy_item.idle = 1;
dummy_item.htrans = IDLE;
`uvm_info(this.get_name(), "NON SEQ sequence finished; sending an idle sequence", UVM_NONE);
finish_item(dummy_item);
endtask : body
endclass : writeNONSEQM3
class sequencer extends uvm_sequencer #(ahb_mux_transaction_v2);
`uvm_component_utils(sequencer)
function new(input string name = "sequencer", uvm_component parent = null);
super.new(name, parent);
endfunction : new
endclass : sequencer