@@ -19,7 +19,39 @@ class sequence_simple #(int unsigned ITEM_WIDTH) extends uvm_common::sequence_ba
19
19
int unsigned transaction_count_max = 200 ;
20
20
rand int unsigned transaction_count;
21
21
22
+ rand int unsigned data_size_min;
23
+ rand int unsigned data_size_max;
24
+
22
25
constraint c1 { transaction_count inside { [transaction_count_min : transaction_count_max]} ;}
26
+ constraint c_data_size {
27
+ data_size_min <= data_size_max;
28
+ data_size_min dist {
29
+ cfg.array_size_min : / 5 ,
30
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
31
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
32
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
33
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
34
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
35
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
36
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
37
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
38
+ cfg.array_size_max : / 5
39
+ } ;
40
+
41
+ data_size_max dist {
42
+ cfg.array_size_min : / 5 ,
43
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
44
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
45
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
46
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
47
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
48
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
49
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
50
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
51
+ cfg.array_size_max : / 5
52
+ } ;
53
+
54
+ }
23
55
24
56
// Constructor - creates new instance of this class
25
57
function new (string name = " sequence_simple" );
@@ -43,7 +75,7 @@ class sequence_simple #(int unsigned ITEM_WIDTH) extends uvm_common::sequence_ba
43
75
while (it < transaction_count && (state == null || state.next ()))
44
76
begin
45
77
// Generate random request, which must be in interval from min length to max length
46
- `uvm_do_with (req, { data.size inside { [cfg.array_size_min : cfg.array_size_max ]} ; } );
78
+ `uvm_do_with (req, { data.size inside { [data_size_min : data_size_max ]} ; } );
47
79
it++ ;
48
80
end
49
81
endtask
@@ -63,7 +95,18 @@ class sequence_simple_const #(int unsigned ITEM_WIDTH) extends uvm_common::seque
63
95
rand int unsigned transaction_count;
64
96
65
97
constraint c1 { transaction_count inside { [transaction_count_min : transaction_count_max]} ;}
66
- constraint c2 { data_size inside { [cfg.array_size_min : cfg.array_size_max]} ;}
98
+ constraint c2 { data_size dist {
99
+ cfg.array_size_min : / 5 ,
100
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
101
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
102
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
103
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
104
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
105
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
106
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
107
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
108
+ cfg.array_size_max : / 5
109
+ } ;}
67
110
68
111
// Constructor - creates new instance of this class
69
112
function new (string name = " sequence_simple_const" );
@@ -112,7 +155,20 @@ class sequence_simple_gauss #(int unsigned ITEM_WIDTH) extends uvm_common::seque
112
155
int unsigned std_deviation_max = 32 ;
113
156
114
157
constraint c1 { transaction_count inside { [transaction_count_min : transaction_count_max]} ;}
115
- constraint c2 { mean inside { [cfg.array_size_min : cfg.array_size_max]} ;}
158
+ constraint c2 {
159
+ mean dist {
160
+ cfg.array_size_min : / 5 ,
161
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
162
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
163
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
164
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
165
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
166
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
167
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
168
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
169
+ cfg.array_size_max : / 5
170
+ } ;
171
+ }
116
172
constraint c3 { std_deviation inside { [std_deviation_min : std_deviation_max]} ;}
117
173
118
174
function int gaussian_dist ();
@@ -343,6 +399,39 @@ class sequence_inverted_gauss #(int unsigned ITEM_WIDTH) extends sequence_simple
343
399
`m_uvm_get_type_name_func (uvm_logic_vector_array :: sequence_inverted_gauss)
344
400
345
401
int unsigned mean;
402
+ rand int unsigned data_size_min;
403
+ rand int unsigned data_size_max;
404
+
405
+ constraint c_data_size {
406
+ data_size_min <= data_size_max;
407
+ data_size_min dist {
408
+ cfg.array_size_min : / 5 ,
409
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
410
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
411
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
412
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
413
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
414
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
415
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
416
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
417
+ cfg.array_size_max : / 5
418
+ } ;
419
+
420
+ data_size_max dist {
421
+ cfg.array_size_min : / 5 ,
422
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 0 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 ] : / 20 ,
423
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 1 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 ] : / 7 ,
424
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 2 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 ] : / 5 ,
425
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 3 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 ] : / 3 ,
426
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 4 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 ] : / 2 ,
427
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 5 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 ] : / 1 ,
428
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 6 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 ] : / 1 ,
429
+ [cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 7 : cfg.array_size_min + (cfg.array_size_max- cfg.array_size_min)/ 8 * 8 ] : / 3 ,
430
+ cfg.array_size_max : / 5
431
+ } ;
432
+
433
+ }
434
+
346
435
347
436
// Constructor
348
437
function new (string name = " sequence_inverted_gauss" );
@@ -359,14 +448,14 @@ class sequence_inverted_gauss #(int unsigned ITEM_WIDTH) extends sequence_simple
359
448
360
449
function int inverted_gaussian_dist ();
361
450
int value = $dist_normal ($urandom (), mean, mean/ 3 );
362
- value = math_min (value, cfg.array_size_max );
363
- value = math_max (value, cfg.array_size_min );
451
+ value = math_min (value, data_size_max );
452
+ value = math_max (value, data_size_min );
364
453
365
454
if (value < mean) begin
366
- return math_min (value+ mean, cfg.array_size_max );
455
+ return math_min (value+ mean, data_size_max );
367
456
end
368
457
else begin
369
- return math_max (value- mean, cfg.array_size_min );
458
+ return math_max (value- mean, data_size_min );
370
459
end
371
460
endfunction
372
461
@@ -376,7 +465,7 @@ class sequence_inverted_gauss #(int unsigned ITEM_WIDTH) extends sequence_simple
376
465
377
466
`uvm_info (m_sequencer.get_full_name (), " \n\t sequence_inverted_gauss is running" , UVM_DEBUG )
378
467
379
- mean = (cfg.array_size_max - cfg.array_size_min )/ 2 ;
468
+ mean = (data_size_max - data_size_min )/ 2 ;
380
469
381
470
repeat (transaction_count) begin
382
471
int unsigned data_size;
0 commit comments