enhanced test cases

This commit is contained in:
Paul Pan 2021-09-24 20:45:55 +08:00
parent a5192eb4d8
commit 4facc2dd10
4 changed files with 237 additions and 31 deletions

View File

@ -30,7 +30,7 @@ Our awesome `MIPS` CPU written in `SystemVerilog` for Loongson Cup
- [ ] 浮点运算指令报`Coprocessor Unusable`,同时`CP0`中新增`Cause.CE` :clock3: - [ ] 浮点运算指令报`Coprocessor Unusable`,同时`CP0`中新增`Cause.CE` :clock3:
- [x] 新增指令 - [x] 新增指令
- [ ] `Cache`指令修正 - [ ] `Cache`指令修正
- [ ] 完善 Test Cases - [x] 完善 Test Cases
- [ ] 重新阻止流水线结构 `TLB`转换) - [ ] 重新阻止流水线结构 `TLB`转换)
## `Cache`指令 ## `Cache`指令

View File

@ -222,6 +222,87 @@ TEST_CACHE_DCACHE_HIT(0xa00d0028, 0x800d0028, 4, 0xF0F0F0F0, 0xABCDEFAB)
.n98_done: .n98_done:
nop nop
## CACHE 1 D-Cache Index Writeback Invalid
## Enforced test on writeback whole line
li t0, 0xa00d0000
li t1, 0xa00d0800
li t2, 0xa00d1000
li t3, 0xa00d1800
li v0, 0xa00d000c
.n98_en_rst:
beq t0, v0, .n98_en_w_bgn
nop
sw zero, 0(t0)
sw zero, 0(t1)
sw zero, 0(t2)
sw zero, 0(t3)
addi t0, t0, 4
addi t1, t1, 4
addi t2, t2, 4
addi t3, t3, 4
j .n98_en_rst
nop
.n98_en_w_bgn:
li t0, 0x800d0000
li t1, 0x800d0800
li t2, 0x800d1000
li t3, 0x800d1800
li v0, 0x800d000c
li a0, 0xa5a50000
.n98_en_w:
beq t0, v0, .n98_en_chk_bgn
nop
sw a0, 0(t0)
sw a0, 0(t1)
sw a0, 0(t2)
sw a0, 0(t3)
addi t0, t0, 4
addi t1, t1, 4
addi t2, t2, 4
addi t3, t3, 4
addi a0, a0, 1
j .n98_en_w
nop
.n98_en_chk_bgn:
li t0, 0xa00d0000
li t1, 0xa00d0800
li t2, 0xa00d1000
li t3, 0xa00d1800
li v0, 0xa00d000c
li a0, 0xa5a50000
cache 1, 0(zero)
.n98_en_chk:
beq t0, v0, .n98_en_end
nop
lw a1, 0(t0)
bne a0, a1, inst_error
nop
lw a1, 0(t1)
bne a0, a1, inst_error
nop
lw a1, 0(t2)
bne a0, a1, inst_error
nop
lw a1, 0(t3)
bne a0, a1, inst_error
nop
addi t0, t0, 4
addi t1, t1, 4
addi t2, t2, 4
addi t3, t3, 4
addi a0, a0, 1
j .n98_en_chk
nop
.n98_en_end:
nop
###detect exception ###detect exception
bne s2, zero, inst_error bne s2, zero, inst_error
nop nop

View File

@ -29,8 +29,8 @@ LEAF(n99_cache_icache_test)
cache 16, 0(v0) # I-Cache Hit Invalid cache 16, 0(v0) # I-Cache Hit Invalid
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_1 j .n99_1
nop nop
@ -65,8 +65,8 @@ LEAF(n99_cache_icache_test)
.n99_2_check: .n99_2_check:
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_2 j .n99_2
nop nop
@ -101,8 +101,8 @@ LEAF(n99_cache_icache_test)
.n99_3_check: .n99_3_check:
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_3 j .n99_3
nop nop
@ -129,8 +129,8 @@ LEAF(n99_cache_icache_test)
cache 0, 0(v0) # I-Cache Hit Invalid cache 0, 0(v0) # I-Cache Hit Invalid
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_4 j .n99_4
nop nop
@ -157,8 +157,8 @@ LEAF(n99_cache_icache_test)
cache 8, 0(v0) # I-Cache Index Store Tag cache 8, 0(v0) # I-Cache Index Store Tag
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_5 j .n99_5
nop nop
@ -261,8 +261,8 @@ LEAF(n99_cache_icache_test)
.n99_con_loop_end: .n99_con_loop_end:
# TODO: clear Datapath on CACHE # TODO: clear Datapath on CACHE
# using enough nop to stop prefetch # using enough nop to stop prefetch
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop nop;nop;nop;nop;nop;nop;
j .n99_con j .n99_con
nop nop
@ -304,6 +304,128 @@ LEAF(n99_cache_icache_test)
148 00000000 nop 148 00000000 nop
*/ */
/*
Enhanced test:
1. fill 800d0000, 800D0800, 800D1000, 800D1800 with instructions
2. jump to 800d0000, 800D0800, 800D1000, 800D1800 and execute
3. return back to here and check registers
4. modify 800d0000, 800D0800, 800D1000, 800D1800
5. same as 2 3
20050000 addi $a1, $zero, 0
03e00008 jr $ra
20a5000[] addi $a1, $a1, [case]
*/
.n99_en_bgn:
move a0, ra
li t0, 0x800d0000
li t1, 0x800d0800
li t2, 0x800d1000
li t3, 0x800d1800
li a1, 0x20050000
li a2, 0x03e00008
li a3, 0x20a50000
.n98_en_step1:
sw a1, 0(t0)
sw a1, 0(t1)
sw a1, 0(t2)
sw a1, 0(t3)
sw a2, 4(t0)
sw a2, 4(t1)
sw a2, 4(t2)
sw a2, 4(t3)
sw a3, 8(t0)
addi a3, a3, 1
sw a3, 8(t1)
addi a3, a3, 1
sw a3, 8(t2)
addi a3, a3, 1
sw a3, 8(t3)
addi a3, a3, 1
cache 1, 0(zero)
cache 0, 0(zero)
.n98_en_step23:
li a1, 0
li a2, 0
jalr t0
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 1
jalr t1
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 2
jalr t2
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 3
jalr t3
nop
bne a1, a2, inst_error
nop
.n98_en_step4:
sw a3, 8(t0)
addi a3, a3, 1
sw a3, 8(t1)
addi a3, a3, 1
sw a3, 8(t2)
addi a3, a3, 1
sw a3, 8(t3)
addi a3, a3, 1
cache 1, 0(zero)
cache 0, 0(zero)
.n98_en_step5:
li a1, 0
li a2, 4
jalr t0
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 5
jalr t1
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 6
jalr t2
nop
bne a1, a2, inst_error
nop
li a1, 0
li a2, 7
jalr t3
nop
bne a1, a2, inst_error
nop
.n98_en_rst:
move ra, a0
###detect exception ###detect exception
bne s2, zero, inst_error bne s2, zero, inst_error
nop nop

View File

@ -320,6 +320,27 @@ inst_test:
jr t9 #kseg0 -> kseg1 jr t9 #kseg0 -> kseg1
nop ##### nop #####
kseg0_kseg1: kseg0_kseg1:
jal n98_cache_dcache_test
nop
jal wait_1s
nop
la t1, n99_kseg1_kseg0
li t2, 0x20000000
subu t9, t1, t2
jr t9
nop
n99_kseg1_kseg0:
jal n99_cache_icache_test
nop
jal wait_1s
nop
la t9, n99_kseg0_kseg1
jr t9
nop
n99_kseg0_kseg1:
jal n2_addu_test #addu jal n2_addu_test #addu
nop nop
jal wait_1s jal wait_1s
@ -704,25 +725,7 @@ kseg0_kseg1:
nop nop
jal wait_1s jal wait_1s
nop nop
jal n98_cache_dcache_test
nop
jal wait_1s
nop
la t1, n99_kseg1_kseg0
li t2, 0x20000000
subu t9, t1, t2
jr t9
nop
n99_kseg1_kseg0:
jal n99_cache_icache_test
nop
jal wait_1s
nop
la t9, n99_kseg0_kseg1
jr t9
nop
n99_kseg0_kseg1:
jal n100_movz_movn_test jal n100_movz_movn_test
nop nop