|
31 | 31 | * - Fault -> U = 0, in U-Mode |
32 | 32 | * - No Fault -> Level != 0, sv32 = 0, should NEVER EVER happen in RV32 |
33 | 33 | * - Fault -> Level != 0, sv32 = 1, pte_sv32.ppn[9:0] != 0 |
| 34 | +* - Fault -> Access bit not set |
34 | 35 | * - No Fault -> U = 1, in S-Mode, and mstatus.sum = 1 |
35 | 36 | * - No Fault -> U = 1, in U-Mode |
36 | 37 | * - No Fault -> Level != 0, sv32 = 1, pte_sv32.ppn[9:0] == 0 |
|
56 | 57 | * - Fault -> R = 1, W = 0, X = 1 |
57 | 58 | * - No Fault -> R = 1, W = 1, X = 0 |
58 | 59 | * - No Fault -> R = 1, W = 1, X = 1 |
| 60 | +* - Fault -> Dirty bit not set |
59 | 61 | * Instructions: |
60 | 62 | * - Fault -> R = 0, W = 0, X = 0 |
61 | 63 | * - No Fault -> R = 0, W = 0, X = 1 |
@@ -326,6 +328,25 @@ initial begin : MAIN |
326 | 328 | complete_test(); |
327 | 329 |
|
328 | 330 |
|
| 331 | + /************************** |
| 332 | + * Fault -> Access bit not set |
| 333 | + **************************/ |
| 334 | + begin_test("All", "Fault -> Access bit not set"); |
| 335 | + |
| 336 | + // non test related inputs |
| 337 | + set_level('0); |
| 338 | + set_satp(1, '1, '1); |
| 339 | + set_priv_level(S_MODE); |
| 340 | + |
| 341 | + // test related inputs |
| 342 | + set_pte('1, RWXV_PERMS, 0, 1); |
| 343 | + |
| 344 | + // check outputs |
| 345 | + check_all_fault(); |
| 346 | + |
| 347 | + complete_test(); |
| 348 | + |
| 349 | + |
329 | 350 | /************************** |
330 | 351 | * No Fault -> U = 1, in S-Mode, and mstatus.sum = 1 |
331 | 352 | **************************/ |
@@ -774,6 +795,25 @@ initial begin : MAIN |
774 | 795 | complete_test(); |
775 | 796 |
|
776 | 797 |
|
| 798 | + /************************** |
| 799 | + * Fault -> Dirty bit not set |
| 800 | + **************************/ |
| 801 | + begin_test("Stores", "Fault -> Dirty bit not set"); |
| 802 | + |
| 803 | + // non test related inputs |
| 804 | + set_priv_level(S_MODE); |
| 805 | + set_level(0); |
| 806 | + set_satp(1, '1, '1); |
| 807 | + |
| 808 | + // test related inputs |
| 809 | + set_pte('1, PAGE_PERM_VALID | PAGE_PERM_READ | PAGE_PERM_WRITE | PAGE_PERM_EXECUTE, 1, 0); |
| 810 | + |
| 811 | + // check outputs |
| 812 | + check_store_fault(); |
| 813 | + |
| 814 | + complete_test(); |
| 815 | + |
| 816 | + |
777 | 817 | /************************** |
778 | 818 | * Instructions: |
779 | 819 | * Fault -> R = 0, W = 0, X = 0 |
@@ -968,11 +1008,15 @@ task set_access; |
968 | 1008 | access = new_access; |
969 | 1009 | endtask |
970 | 1010 |
|
971 | | -task set_pte; |
972 | | - input logic [SV32_PPNLEN-1:0] new_ppn; |
973 | | - input logic [9:0] new_perms; |
| 1011 | +task set_pte ( |
| 1012 | + input logic [SV32_PPNLEN-1:0] new_ppn, |
| 1013 | + input logic [9:0] new_perms, |
| 1014 | + input logic set_accessed = 1, |
| 1015 | + input logic set_dirty = 1 |
| 1016 | +); |
| 1017 | + |
974 | 1018 | pte_sv32.ppn = new_ppn; |
975 | | - pte_sv32.perms = pte_perms_t'(new_perms); |
| 1019 | + pte_sv32.perms = pte_perms_t'(new_perms | (set_accessed ? PAGE_PERM_ACCESSED : 0) | (set_dirty ? PAGE_PERM_DIRTY : 0)); |
976 | 1020 | endtask |
977 | 1021 |
|
978 | 1022 | task set_priv_level; |
|
0 commit comments