*** Variables *** &{mtvec_write_opcodes} 0x10=0x30585073 0x11=0x3058d073 0x12=0x30595073 0x13=0x3059d073 0x14=0x305a5073 &{stvec_write_opcodes} 0x10=0x10585073 0x11=0x1058d073 0x12=0x10595073 0x13=0x1059d073 0x14=0x105a5073 *** Keywords *** Create Machine [Arguments] ${interrupt_mode} Execute Command using sysbus Execute Command mach create Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV32 @ sysbus { cpuType: \\"rv32imac\\"; timeProvider: empty; privilegedArchitecture: PrivilegedArchitecture.Priv1_10; interruptMode: InterruptMode.${interruptMode} }" Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x10000000 }" Execute Command cpu TbCacheEnabled false MTVEC Should Be Equal [Arguments] ${value} ${reg}= Execute Command cpu MTVEC Should Be Equal ${reg.strip()} ${value} STVEC Should Be Equal [Arguments] ${value} ${reg}= Execute Command cpu STVEC Should Be Equal ${reg.strip()} ${value} Set MTVEC By Software [Arguments] ${value} Execute Command cpu PC 0x0 ${opcode}= Get From Dictionary ${mtvec_write_opcodes} ${value} Execute Command sysbus WriteDoubleWord 0x0 ${opcode} Execute Command cpu Step # this is a hack giving time for the logger to handle all messages # (including the one generated by setting the MTVEC value) Sleep 1s Set STVEC By Software [Arguments] ${value} Execute Command cpu PC 0x0 ${opcode}= Get From Dictionary ${stvec_write_opcodes} ${value} Execute Command sysbus WriteDoubleWord 0x0 ${opcode} Execute Command cpu Step # this is a hack giving time for the logger to handle all messages # (including the one generated by setting the STVEC value) Sleep 1s *** Test Cases *** Should Not Correct MTVEC From Monitor in Auto Mode Create Log Tester 0 Create Machine Auto MTVEC Should Be Equal 0x1010 Execute Command cpu MTVEC 0x50 MTVEC Should Be Equal 0x50 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x51 MTVEC Should Be Equal 0x51 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x52 MTVEC Should Be Equal 0x52 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x53 MTVEC Should Be Equal 0x53 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x54 MTVEC Should Be Equal 0x54 Should Not Be In Log modifying MTVEC Should Not Correct STVEC From Monitor in Auto Mode Create Log Tester 0 Create Machine Auto STVEC Should Be Equal 0x0 Execute Command cpu STVEC 0x50 STVEC Should Be Equal 0x50 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x51 STVEC Should Be Equal 0x51 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x52 STVEC Should Be Equal 0x52 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x53 STVEC Should Be Equal 0x53 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x54 STVEC Should Be Equal 0x54 Should Not Be In Log modifying STVEC Should Not Correct MTVEC Written By Software in Auto Mode Create Log Tester 0 Create Machine Auto MTVEC Should Be Equal 0x1010 Set MTVEC By Software 0x10 MTVEC Should Be Equal 0x10 Should Not Be In Log MTVEC value written to CSR corrected Set MTVEC By Software 0x11 MTVEC Should Be Equal 0x11 Should Not Be In Log MTVEC value written to CSR corrected Set MTVEC By Software 0x12 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x10 Set MTVEC By Software 0x13 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x11 Set MTVEC By Software 0x14 MTVEC Should Be Equal 0x14 Should Not Be In Log MTVEC value written to CSR corrected Should Not Correct STVEC Written By Software in Auto Mode Create Log Tester 0 Create Machine Auto STVEC Should Be Equal 0x0 Set STVEC By Software 0x10 STVEC Should Be Equal 0x10 Should Not Be In Log STVEC value written to CSR corrected Set STVEC By Software 0x11 STVEC Should Be Equal 0x11 Should Not Be In Log STVEC value written to CSR corrected Set STVEC By Software 0x12 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x10 Set STVEC By Software 0x13 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x11 Set STVEC By Software 0x14 STVEC Should Be Equal 0x14 Should Not Be In Log STVEC value written to CSR corrected Should Correct MTVEC From Monitor in Direct Mode Create Log Tester 0 Create Machine Direct MTVEC Should Be Equal 0x1010 Execute Command cpu MTVEC 0x50 MTVEC Should Be Equal 0x50 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x51 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x50 Execute Command cpu MTVEC 0x52 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x50 Execute Command cpu MTVEC 0x53 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x50 Execute Command cpu MTVEC 0x54 MTVEC Should Be Equal 0x54 Should Not Be In Log modifying MTVEC Should Correct STVEC From Monitor in Direct Mode Create Log Tester 0 Create Machine Direct STVEC Should Be Equal 0x0 Execute Command cpu STVEC 0x50 STVEC Should Be Equal 0x50 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x51 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x50 Execute Command cpu STVEC 0x52 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x50 Execute Command cpu STVEC 0x53 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x50 Execute Command cpu STVEC 0x54 STVEC Should Be Equal 0x54 Should Not Be In Log modifying STVEC Should Correct MTVEC Written By Software in Direct Mode Create Log Tester 0 Create Machine Direct MTVEC Should Be Equal 0x1010 Set MTVEC By Software 0x10 MTVEC Should Be Equal 0x10 Should Not Be In Log MTVEC value written to CSR corrected Set MTVEC By Software 0x11 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x10 Set MTVEC By Software 0x12 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x10 Set MTVEC By Software 0x13 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x10 Set MTVEC By Software 0x14 MTVEC Should Be Equal 0x14 Should Not Be In Log MTVEC value written to CSR corrected Should Correct STVEC Written By Software in Direct Mode Create Log Tester 0 Create Machine Direct STVEC Should Be Equal 0x0 Set STVEC By Software 0x10 STVEC Should Be Equal 0x10 Should Not Be In Log STVEC value written to CSR corrected Set STVEC By Software 0x11 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x10 Set STVEC By Software 0x12 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x10 Set STVEC By Software 0x13 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x10 Set STVEC By Software 0x14 STVEC Should Be Equal 0x14 Should Not Be In Log STVEC value written to CSR corrected Should Correct MTVEC From Monitor in Vectored Mode Create Log Tester 0 Create Machine Vectored Wait For Log Entry Vectored interrupt mode set - updating MTVEC MTVEC Should Be Equal 0x1011 Execute Command cpu MTVEC 0x50 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x51 Execute Command cpu MTVEC 0x51 MTVEC Should Be Equal 0x51 Should Not Be In Log modifying MTVEC Execute Command cpu MTVEC 0x52 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x51 Execute Command cpu MTVEC 0x53 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x51 Execute Command cpu MTVEC 0x54 Wait For Log Entry modifying MTVEC MTVEC Should Be Equal 0x55 Should Correct STVEC From Monitor in Vectored Mode Create Log Tester 0 Create Machine Vectored Wait For Log Entry Vectored interrupt mode set - updating STVEC STVEC Should Be Equal 0x1 Execute Command cpu STVEC 0x50 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x51 Execute Command cpu STVEC 0x51 STVEC Should Be Equal 0x51 Should Not Be In Log modifying STVEC Execute Command cpu STVEC 0x52 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x51 Execute Command cpu STVEC 0x53 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x51 Execute Command cpu STVEC 0x54 Wait For Log Entry modifying STVEC STVEC Should Be Equal 0x55 Should Correct MTVEC Written By Software in Vectored Mode Create Log Tester 0 Create Machine Vectored MTVEC Should Be Equal 0x1011 Set MTVEC By Software 0x10 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x11 Set MTVEC By Software 0x11 MTVEC Should Be Equal 0x11 Should Not Be In Log MTVEC value written to CSR corrected Set MTVEC By Software 0x12 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x11 Set MTVEC By Software 0x13 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x11 Set MTVEC By Software 0x14 Wait For Log Entry MTVEC value written to CSR corrected MTVEC Should Be Equal 0x15 Should Correct STVEC Written By Software in Vectored Mode Create Log Tester 0 Create Machine Vectored STVEC Should Be Equal 0x1 Set STVEC By Software 0x10 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x11 Set STVEC By Software 0x11 STVEC Should Be Equal 0x11 Should Not Be In Log STVEC value written to CSR corrected Set STVEC By Software 0x12 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x11 Set STVEC By Software 0x13 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x11 Set STVEC By Software 0x14 Wait For Log Entry STVEC value written to CSR corrected STVEC Should Be Equal 0x15