blob: 3450abee37876878533256905df2056764b62c5c [file] [log] [blame]
*** Variables ***
${starting_pc} 0x1000
*** Keywords ***
Create Machine
Execute Command using sysbus
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString 'clint: IRQControllers.CoreLevelInterruptor @ sysbus 0x02000000 { frequency: 1000000 }'
Execute Command machine LoadPlatformDescriptionFromString 'cpu: CPU.RiscV32 @ sysbus { cpuType: "rv32ic"; timeProvider: clint }'
Execute Command machine LoadPlatformDescriptionFromString 'clint: { [0,1] -> cpu@[3,7] }'
Execute Command machine LoadPlatformDescriptionFromString 'mem: Memory.MappedMemory @ sysbus 0x1000 { size: 0x1000000 }'
Execute Command cpu PerformanceInMips 1
Execute Command cpu PC ${starting_pc}
Execute Command cpu SetRegister 1 0x02004000 # address of MTimeCmpHart0Lo register
Execute Command cpu SetRegister 3 0x02004004 # address of MTimeCmpHart0Hi register
Execute Command cpu SetHookAtBlockEnd "self.DebugLog('block ended: ' + 'PC '+ str(self.PC))"
Execute Command cpu SetHookAtBlockBegin "self.DebugLog('block started: ' + 'PC '+ str(self.PC))"
# setting compare value surrounded by nop instructions
Execute Command sysbus WriteDoubleWord 0x1000 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1004 0x00000013 # nop
# set Compare to the value that is in x2 register
Execute Command sysbus WriteDoubleWord 0x1008 0x0020A023 # sw x2, 0(x1)
Execute Command sysbus WriteDoubleWord 0x100C 0x0001A023 # sw x0, 0(x3)
Execute Command sysbus WriteDoubleWord 0x1010 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1014 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1018 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x101C 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1020 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1024 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x1028 0x00000013 # nop
Execute Command sysbus WriteDoubleWord 0x102C 0x00000013 # nop
Create Log Tester 0.01 defaultPauseEmulation=true
Execute Command logLevel -1
*** Test Cases ***
Should Tick Between Chained Blocks
Create Machine
Execute Command cpu MaximumBlockSize 1
Execute Command cpu SetRegister 2 5 # new Compare value = 5
Execute Command emulation RunFor "0.000012"
Wait For Log Entry block ended: PC 0x1014 timeout=0
Wait For Log Entry IRQ timeout=0
Wait For Log Entry block started: PC 0x1014 timeout=0
Should Tick In The Same Block
Create Machine
Execute Command cpu MaximumBlockSize 8
Execute Command cpu SetRegister 2 6 # new Compare value = 6
Execute Command emulation RunFor "0.000008"
Wait For Log Entry block started: PC 0x1000 timeout=0
Should Not Be In Log block ended: PC 0x100 timeout=0
Should Not Be In Log block ended: PC 0x101 timeout=0
Wait For Log Entry IRQ timeout=0
Wait For Log Entry block ended: PC 0x1020 timeout=0
Should Tick At Exact Time
Create Machine
Execute Command cpu MaximumBlockSize 8
Execute Command cpu SetRegister 2 6 # new Compare value = 6
Execute Command emulation RunFor "0.000005"
Should Not Be In Log IRQ timeout=0
Execute Command emulation RunFor "0.000001"
Wait For Log Entry IRQ timeout=0