74 lines
3.9 KiB
Plaintext
74 lines
3.9 KiB
Plaintext
*** 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
|
|
[Tags] instructions_counting
|
|
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
|
|
[Tags] instructions_counting
|
|
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 block ended: PC 0x1020 timeout=0
|
|
Wait For Log Entry IRQ timeout=0
|
|
|
|
Should Tick At Exact Time
|
|
[Tags] instructions_counting
|
|
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
|