56 lines
2.8 KiB
Plaintext
56 lines
2.8 KiB
Plaintext
*** Variables ***
|
|
${riscv_start_pc} 0x2000
|
|
${armv8_start_pc} 0x40000000
|
|
|
|
*** Keywords ***
|
|
Create RiscV Machine
|
|
[Arguments] ${bitness}
|
|
Execute Command using sysbus
|
|
Execute Command mach create "risc-v"
|
|
|
|
Execute Command machine LoadPlatformDescriptionFromString "clint: IRQControllers.CoreLevelInterruptor @ sysbus 0x44000000 { frequency: 66000000 }"
|
|
Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV${bitness} @ sysbus { timeProvider: clint; cpuType: \\"rv${bitness}g\\"; interruptMode: 1 }"
|
|
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x1000 { size: 0x40000 }"
|
|
|
|
Execute Command cpu PC ${riscv_start_pc}
|
|
|
|
Write One Plus One Program RiscV32
|
|
Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x00150513 # addi a0, a0, #1
|
|
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0x00150513
|
|
|
|
Write Store Load Program RiscV32
|
|
# Does not work yet, missing op_qemu_st32
|
|
# Program: li a0, 0xdead; auipc a1 0x40; sw a0, 0(a1); lw a2, 0(a1)
|
|
Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x0000e537
|
|
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0xead50513
|
|
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 8 } 0x00040597
|
|
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 12 } 0x00a5a023
|
|
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 16 } 0x0005a603
|
|
|
|
Create ARMv8A Machine
|
|
Execute Command using sysbus
|
|
Execute Command mach create "armv8"
|
|
Execute Command machine LoadPlatformDescription @platforms/cpus/cortex-a53-gicv2.repl
|
|
Execute Command cpu PC ${armv8_start_pc}
|
|
|
|
Write One Plus One Program ARMv8
|
|
Execute Command sysbus WriteDoubleWord ${armv8_start_pc} 0x91000400 # add x0, x0, #0x1
|
|
Execute Command sysbus WriteDoubleWord ${ ${armv8_start_pc} + 4 } 0x91000400
|
|
|
|
*** Test Cases ***
|
|
Should Calculate One Plus One RiscV32
|
|
Create RiscV Machine bitness=32
|
|
Write One Plus One Program RiscV32
|
|
Execute Command cpu Step
|
|
Register Should Be Equal 10 0x1
|
|
Execute Command cpu Step
|
|
Register Should Be Equal 10 0x2
|
|
|
|
Should Calculate One Plus One ARMv8
|
|
Create ARMv8A Machine
|
|
Write One Plus One Program ARMv8
|
|
Execute Command cpu Step
|
|
Register Should Be Equal 0 0x1
|
|
Execute Command cpu Step
|
|
Register Should Be Equal 0 0x2
|