⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speed2003.s

📁 sc2410测试程序
💻 S
📖 第 1 页 / 共 2 页
字号:
 AREA |C$$code|, CODE, READONLY


  MACRO
       MOV_PC_LR
       [ THUMBCODE
           bx lr
       |
           mov pc,lr
       ]
   MEND

INDEX         EQU 0x31000000
SEGMENT     EQU 0x31000004
WORD         EQU 0x31000008

; MMU Parameter set
LOCK_BASE_LSB	EQU	0x1A
LOCK_VICT_LSB	EQU	0x14
P_STATE_LSB	       EQU	0x0
P_ENTRY_LSB	       EQU	0x4
VATAG_LSB	       EQU	0xA
VASIZE_LSB	       EQU	0x6
VALID_LSB	       EQU	0x5
DOMAIN8_LSB	EQU	0xE
DOMAIN_LSB	       EQU	0x6
NCACHE_LSB	       EQU	0x5
NBUFF_LSB	       EQU	0x4
ACCESS_LSB	       EQU	0x0
PATAG_LSB	       EQU	0xA
PASIZE_LSB	       EQU	0x6

; Cache Parameter set
TAG_LSB		EQU	0x8
SEG_LSB		EQU	0x5
VLD_LSB		EQU	0x4 ; Valid bit
DE_LSB		EQU	0x3 ; Dirty Even bit
DO_LSB		EQU	0x2 ; Dirty Odd bit
WB_LSB		EQU	0x1 ; Write Back bit
WORD_LSB	EQU	0x2  
LOCK_LSB	EQU	0x1A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dcache Test ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  EXPORT DCache_Test
DCache_Test	   
              stmfd sp!,{r1-r12}
				; MAIN PROGRAM HERE
		;///////////////////////////////////////////////////
		; Variable initialize
		; R4 : Next Pattern	[~PAT or PAT]
		; R5 : Current Pattern	[PAT or ~PAT]
		; R6 : INC/DEC Value
		; R7 : Index		; 0x0 <-> 0x63
		; R8 : Seg 		; 0x0 <-> 0x7
		; R9 : Word 		; 0x0 <-> 0x7
		; R10 : PAT
		; R11 : ~PAT
		; R12 : LOOP4		[ INC(PAT)->INC(~PAT)->DEC(PAT)->DEC(~PAT) ]
		; R3 : Pattern Type Select [ 0 - 5 ]

		;/////////////////////////
		; Program Variables
		;/////////////////////////
		MOV	R3, #0		; Pattern Select
		;/////////////////////////
StartComp

StartPat
		MOV	R8, #0 
		CMP	R3, #0
		LDREQ	R10, =0x00000000
		LDREQ	R11, =0xFFFFFFFF
		CMP	R3, #1
		LDREQ	R10, =0x0000FFFF
		LDREQ	R11, =0xFFFF0000
		CMP	R3, #2
		LDREQ	R10, =0x00FF00FF
		LDREQ	R11, =0xFF00FF00
		CMP	R3, #3
		LDREQ	R10, =0x0F0F0F0F
		LDREQ	R11, =0xF0F0F0F0
		CMP	R3, #4
		LDREQ	R10, =0x33333333
		LDREQ	R11, =0xCCCCCCCC
		CMP	R3, #5
		LDREQ	R10, =0xAAAAAAAA
		LDREQ	R11, =0x55555555

		;//////////////////////////
		; PRE WRITE RAM DATA
		;//////////////////////////
StartSeg
		MOV	R12, #0 
		MOV	R7, #0 
PStartIndex
		MOV	R9, #0 
		MOV	R5, R10 ; Pattern Set
PStartWord
		;///////////////////////////////////////////////////
		; Load DCache victim and lockdown base 
		MOV	R0, R7, LSL #LOCK_LSB
		MCR	p15,0,r0,c9,c0,0 ; D
		;MCR	p15,0,r0,c9,c0,1 ; I

		; Do DCache CAM write to 
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB
		ORR	R0, R0, R8,LSL #SEG_LSB	; Segment
		ORR	R0, R0, #0x1E
		MCR	p15,2,R0,c15,c6,6 	; D CAM write
		;MCR	p15,2,R0,c15,c5,6 	; I CAM write

		; Reload DCache lock-down pointer because it will have incremented
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		MCR	p15,0,R0,c9,c0,0	; D Write victim & lockdown
		;MCR	p15,0,R0,c9,c0,1	; I Write victim & lockdown

		; Do DCache RAM write 
		MOV	R0, R5			; RAM data
		MCR	p15,3,R0,c15,c2,0	; Write RAM data to c15.C.D
		;MCR	p15,3,R0,c15,c1,0	; Write RAM data to c15.C.I

		MOV	R0, R8, LSL #SEG_LSB	;Segment
		ORR	R0, R0, R9,LSL #WORD_LSB ; Word
		MCR	p15,2,R0,c15,c10,6	; RAM write from c15.C.D
		;MCR	p15,2,R0,c15,c9,6	; RAM write from c15.C.D

		; Variable Update	
		CMP	R9, #7
		BEQ	PEndWord	
		ADD	R9, R9, #1 		; Word ++
		B	PStartWord
PEndWord
		CMP	R7, #63
		BEQ	PEndIndex	
		ADD	R7, R7, #1 		; Index ++
		B	PStartIndex
PEndIndex

		;////////////////////////////////
		; MAIN READ-COMPARE-WRITE RAM DATA
		;////////////////////////////////
              
StartLoop4
		
               
		CMP	R12, #0
		LDREQ	R6, =0x00000001
		MOVEQ	R7, #0
		CMP	R12, #1
		LDREQ	R6, =0x00000001
		MOVEQ	R7, #0
		CMP	R12, #2
		LDREQ	R6, =0xFFFFFFFF
		MOVEQ	R7, #63
		CMP	R12, #3
		LDREQ	R6, =0xFFFFFFFF
		MOVEQ	R7, #63
StartIndex
		
		CMP	R12, #0
		MOVEQ	R5, R10
		MOVEQ	R4, R11
		MOVEQ	R9, #0
		CMP	R12, #1
		MOVEQ	R5, R11
		MOVEQ	R4, R10
		MOVEQ	R9, #0
		CMP	R12, #2
		MOVEQ	R5, R10
		MOVEQ	R4, R11
		MOVEQ	R9, #7
		CMP	R12, #3
		MOVEQ	R5, R11
		MOVEQ	R4, R10
		MOVEQ	R9, #7
StartWord
		;///////////////////////////////////////////////////
		; Load DCache victim and lockdown base 
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		MCR	p15,0,r0,c9,c0,0 	; D Write victim & lockdown
		;MCR	p15,0,r0,c9,c0,1	; I Write victim & lockdown

		; Do DCache CAM write to 
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB
		ORR	R0, R0, R8,LSL #SEG_LSB	; Segment
		ORR	R0, R0, #0x1E
		MCR	p15,2,R0,c15,c6,6 	; D CAM write
		;MCR	p15,2,R0,c15,c5,6 	; I CAM write

		; Reload DCache lock-down pointer because it will have incremented
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		MCR	p15,0,R0,c9,c0,0	; D Write victim & lockdown
		;MCR	p15,0,R0,c9,c0,1	; I Write victim & lockdown

		; Clear c15.C.D to prove that data comes back from DCache
		MOV	R0, #0
		MCR	p15,3,R0,c15,c2,0	; Write c15.C.D
		;MCR	p15,3,R0,c15,c1,0	; Write c15.C.I

		; Do a CAM match, RAM read to c15.C.[D/I]
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB	; TAG
		ORR	R0,R0,R8,LSL #SEG_LSB	; Segment
		ORR	R0,R0,R9, LSL #WORD_LSB	; Word
		MCR	p15,2,R0,c15,c6,5	; CAM match, D. RAM read
		;MCR	p15,2,R0,c15,c5,5	; CAM match, I. RAM read

		; Read c15.C.D and compare with expected data.
		; Note that the top 2 bits of the RAM Data returned from the CAM match
		; give the Hot and Miss information [31:30] = [Miss,Hit]
		MRC	p15,3,R0,c15,c2,0	; Read c15.C.D
		;MRC	p15,3,R0,c15,c1,0	; Read c15.C.I

		;MOV	R2, #0			; Var. Init.
		;LDR	R3, =0x08000FF0		; BANK2 Addr.
		;ORR	R2,R2,R7, LSL #16	; Index	
		;ORR	R2,R2,R8, LSL #8	; Seg	
		;ORR	R2,R2,R9, LSL #0	; Word
		;STR	R2, [R3]		; Monitor Out

		; Check the RAM data	--------------
		MOV	R0, R0, LSL #2		; Remove bits [31:30]
		MOV	R1, R5			; Expected data
		MOV	R1, R1, LSL #2		; Remove bits [31:30]
		CMP	R0, R1
		BNE	ERROR

		; Reload DCache lock-down pointer because it will have incremented
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		MCR	p15,0,R0,c9,c0,0	; D Write victim & lockdown
		;MCR	p15,0,R0,c9,c0,1	; I Write victim & lockdown

		; Do DCache RAM write	--------------
		MOV	R0, R4			; RAM data (R4: Next PAT)
		MCR	p15,3,R0,c15,c2,0	; Write RAM data to c15.C.D
		;MCR	p15,3,R0,c15,c1,0	; Write RAM data to c15.C.I

		MOV	R0, R8, LSL #SEG_LSB	;Segment
		ORR	R0, R0, R9,LSL #WORD_LSB ; Word
		MCR	p15,2,R0,c15,c10,6	; RAM write from c15.C.D
		;MCR	p15,2,R0,c15,c9,6	; RAM write from c15.C.D

		;--------------------
		; Variables Update	
		;--------------------
		
		CMP	R12, #0
		CMPEQ	R9, #7
		BEQ	EndWord
		CMP	R12, #1
		CMPEQ	R9, #7
		BEQ	EndWord
		CMP	R12, #2
		CMPEQ	R9, #0
		BEQ	EndWord
		CMP	R12, #3
		CMPEQ	R9, #0
		BEQ	EndWord
		ADD	R9, R9, R6 ; Word ++/-- 	[0<->7]
		B	StartWord
EndWord
		CMP	R12, #0
		CMPEQ	R7, #63
		BEQ	EndIndex
		CMP	R12, #1
		CMPEQ	R7, #63
		BEQ	EndIndex
		CMP	R12, #2
		CMPEQ	R7, #0
		BEQ	EndIndex
		CMP	R12, #3
		CMPEQ	R7, #0
		BEQ	EndIndex
		ADD	R7, R7, R6 ; Index ++/--	[0<->63]
		B	StartIndex
EndIndex
		CMP	R12, #3
		BEQ	EndLoop4
		ADD	R12, R12, #1 ; LOOP4 ++		[0->3]
		B	StartLoop4
EndLoop4
		CMP	R8, #7
		BEQ	EndSeg
		ADD	R8, R8, #1 ; Seg ++		[0->7]
		B	StartSeg
EndSeg
		CMP	R3, #5
		BEQ	EndPat
		ADD	R3, R3, #1 ; Pattern ++	[0->5]
		B	StartPat
EndPat		

EndComp
;Caching_Test_End	

    MOV R0, #1
            B  EndFunc
            
ERROR  MOV R0, #0
             ldr	r1,=INDEX       
	       mov r2,r7       
	       str	r2,[r1]

	       ldr	r1,=SEGMENT       
	      mov r2,r8       
	       str	r2,[r1]

	       ldr	r1,=WORD       
	       mov r2,r9         
	       str	r2,[r1]
EndFunc
              ldmfd sp!,{r1-r12}
              mov	pc,lr


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Icache Test ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  EXPORT ICache_Test
ICache_Test	   
              stmfd sp!,{r1-r12}
				; MAIN PROGRAM HERE
		;///////////////////////////////////////////////////
		; Variable initialize
		; R4 : Next Pattern	[~PAT or PAT]
		; R5 : Current Pattern	[PAT or ~PAT]
		; R6 : INC/DEC Value
		; R7 : Index		; 0x0 <-> 0x63
		; R8 : Seg 		; 0x0 <-> 0x7
		; R9 : Word 		; 0x0 <-> 0x7
		; R10 : PAT
		; R11 : ~PAT
		; R12 : LOOP4		[ INC(PAT)->INC(~PAT)->DEC(PAT)->DEC(~PAT) ]
		; R3 : Pattern Type Select [ 0 - 5 ]

		;/////////////////////////
		; Program Variables
		;/////////////////////////
		MOV	R3, #0		; Pattern Select
		;/////////////////////////
StartComp1

StartPat1
		MOV	R8, #0 
		CMP	R3, #0
		LDREQ	R10, =0x00000000
		LDREQ	R11, =0xFFFFFFFF
		CMP	R3, #1
		LDREQ	R10, =0x0000FFFF
		LDREQ	R11, =0xFFFF0000
		CMP	R3, #2
		LDREQ	R10, =0x00FF00FF
		LDREQ	R11, =0xFF00FF00
		CMP	R3, #3
		LDREQ	R10, =0x0F0F0F0F
		LDREQ	R11, =0xF0F0F0F0
		CMP	R3, #4
		LDREQ	R10, =0x33333333
		LDREQ	R11, =0xCCCCCCCC
		CMP	R3, #5
		LDREQ	R10, =0xAAAAAAAA
		LDREQ	R11, =0x55555555

		;//////////////////////////
		; PRE WRITE RAM DATA
		;//////////////////////////
StartSeg1
		MOV	R12, #0 
		MOV	R7, #0 
PStartIndex1
		MOV	R9, #0 
		MOV	R5, R10 ; Pattern Set
PStartWord1
		;///////////////////////////////////////////////////
		; Load DCache victim and lockdown base 
		MOV	R0, R7, LSL #LOCK_LSB
		;MCR	p15,0,r0,c9,c0,0 ; D
		MCR	p15,0,r0,c9,c0,1 ; I

		; Do DCache CAM write to 
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB
		ORR	R0, R0, R8,LSL #SEG_LSB	; Segment
		ORR	R0, R0, #0x1E
		;MCR	p15,2,R0,c15,c6,6 	; D CAM write
		MCR	p15,2,R0,c15,c5,6 	; I CAM write

		; Reload DCache lock-down pointer because it will have incremented
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		;MCR	p15,0,R0,c9,c0,0	; D Write victim & lockdown
		MCR	p15,0,R0,c9,c0,1	; I Write victim & lockdown

		; Do DCache RAM write 
		MOV	R0, R5			; RAM data
		;MCR	p15,3,R0,c15,c2,0	; Write RAM data to c15.C.D
		MCR	p15,3,R0,c15,c1,0	; Write RAM data to c15.C.I

		MOV	R0, R8, LSL #SEG_LSB	;Segment
		ORR	R0, R0, R9,LSL #WORD_LSB ; Word
		;MCR	p15,2,R0,c15,c10,6	; RAM write from c15.C.D
		MCR	p15,2,R0,c15,c9,6	; RAM write from c15.C.D

		; Variable Update	
		CMP	R9, #7
		BEQ	PEndWord1	
		ADD	R9, R9, #1 		; Word ++
		B	PStartWord1
PEndWord1
		CMP	R7, #63
		BEQ	PEndIndex1	
		ADD	R7, R7, #1 		; Index ++
		B	PStartIndex1
PEndIndex1

		;////////////////////////////////
		; MAIN READ-COMPARE-WRITE RAM DATA
		;////////////////////////////////
StartLoop41
		CMP	R12, #0
		LDREQ	R6, =0x00000001
		MOVEQ	R7, #0
		CMP	R12, #1
		LDREQ	R6, =0x00000001
		MOVEQ	R7, #0
		CMP	R12, #2
		LDREQ	R6, =0xFFFFFFFF
		MOVEQ	R7, #63
		CMP	R12, #3
		LDREQ	R6, =0xFFFFFFFF
		MOVEQ	R7, #63
StartIndex1
		
		CMP	R12, #0
		MOVEQ	R5, R10
		MOVEQ	R4, R11
		MOVEQ	R9, #0
		CMP	R12, #1
		MOVEQ	R5, R11
		MOVEQ	R4, R10
		MOVEQ	R9, #0
		CMP	R12, #2
		MOVEQ	R5, R10
		MOVEQ	R4, R11
		MOVEQ	R9, #7
		CMP	R12, #3
		MOVEQ	R5, R11
		MOVEQ	R4, R10
		MOVEQ	R9, #7
StartWord1
		;///////////////////////////////////////////////////
		; Load DCache victim and lockdown base 
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		;MCR	p15,0,r0,c9,c0,0 	; D Write victim & lockdown
		MCR	p15,0,r0,c9,c0,1	; I Write victim & lockdown

		; Do DCache CAM write to 
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB
		ORR	R0, R0, R8,LSL #SEG_LSB	; Segment
		ORR	R0, R0, #0x1E
		;MCR	p15,2,R0,c15,c6,6 	; D CAM write
		MCR	p15,2,R0,c15,c5,6 	; I CAM write

		; Reload DCache lock-down pointer because it will have incremented
		MOV	R0, R7, LSL #LOCK_LSB	; Index
		;MCR	p15,0,R0,c9,c0,0	; D Write victim & lockdown
		MCR	p15,0,R0,c9,c0,1	; I Write victim & lockdown

		; Clear c15.C.D to prove that data comes back from DCache
		MOV	R0, #0
		;MCR	p15,3,R0,c15,c2,0	; Write c15.C.D
		MCR	p15,3,R0,c15,c1,0	; Write c15.C.I

		; Do a CAM match, RAM read to c15.C.[D/I]
		MOV	R1, R5, LSL #8		; CAM Tag
		ORR	R1, R1, R7		; Index ORed
		MOV	R0, R1, LSL #TAG_LSB	; TAG
		ORR	R0,R0,R8,LSL #SEG_LSB	; Segment
		ORR	R0,R0,R9, LSL #WORD_LSB	; Word
		;MCR	p15,2,R0,c15,c6,5	; CAM match, D. RAM read
		MCR	p15,2,R0,c15,c5,5	; CAM match, I. RAM read

		; Read c15.C.D and compare with expected data.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -