-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtestdistbool.d
76 lines (69 loc) · 2.84 KB
/
testdistbool.d
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
import esdl;
class riscv_page_table_exception_cfg
{
mixin randomization;
bool enable_exception;
// Knobs for each type of exception
@rand bool allow_page_access_control_exception;
@rand bool allow_superpage_misaligned_exception;
@rand bool allow_leaf_link_page_exception;
@rand bool allow_invalid_page_exception;
@rand bool allow_privileged_mode_exception;
@rand bool allow_zero_access_bit_exception;
@rand bool allow_zero_dirty_bit_exception;
// Exception ratio control
uint page_access_fault_ratio = 10;
uint misaligned_superpage_ratio = 10;
uint leaf_link_page_ratio = 10;
uint invalid_page_ratio = 10;
uint privl_mode_fault_ratio = 10;
uint zero_access_fault_ratio = 5;
uint zero_dirty_fault_ratio = 5;
constraint!q{
if (! enable_exception) {
allow_page_access_control_exception dist [ true := page_access_fault_ratio,
false := 100 - page_access_fault_ratio ];
allow_superpage_misaligned_exception dist [ true := misaligned_superpage_ratio,
false := 100 - misaligned_superpage_ratio ];
allow_leaf_link_page_exception dist [ true := leaf_link_page_ratio,
false := 100 - leaf_link_page_ratio ];
allow_invalid_page_exception dist [ true := invalid_page_ratio,
false := 100 - invalid_page_ratio ];
allow_privileged_mode_exception dist [ true := privl_mode_fault_ratio,
false := 100 - privl_mode_fault_ratio ];
allow_zero_access_bit_exception dist [ true := zero_access_fault_ratio,
false := 100 - zero_access_fault_ratio ];
allow_zero_dirty_bit_exception dist [ true := zero_dirty_fault_ratio,
false := 100 - zero_dirty_fault_ratio ];
}
else {
allow_page_access_control_exception == false;
allow_superpage_misaligned_exception == false;
allow_leaf_link_page_exception == false;
allow_invalid_page_exception == false;
allow_privileged_mode_exception == false;
allow_zero_access_bit_exception == false;
allow_zero_dirty_bit_exception == false;
}
} exception_ratio_c;
void display() {
import std.stdio;
writeln(
" allow_page_access_control_exception: ", allow_page_access_control_exception,
" allow_superpage_misaligned_exception: ", allow_superpage_misaligned_exception,
" allow_leaf_link_page_exception: ", allow_leaf_link_page_exception,
" allow_invalid_page_exception: ", allow_invalid_page_exception,
" allow_privileged_mode_exception: ", allow_privileged_mode_exception,
" allow_zero_access_bit_exception: ", allow_zero_access_bit_exception,
" allow_zero_dirty_bit_exception: ", allow_zero_dirty_bit_exception
);
}
}
void main()
{
riscv_page_table_exception_cfg cfg = new riscv_page_table_exception_cfg();
for (size_t i=0; i!=100; ++i) {
cfg.randomize();
cfg.display();
}
}