This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Simulation Problem with C5416 when simulating on C55xx Rev 3.0 Cpu cycle accurate simulator

Hello, 

After making some research, I learnt that i can run C54x code on C55xx simulator. Simply, I would like to run FIR filter code on C5416 device. According to instruction that i got, I first tried C5509 code and run it which is seen on code window 1.

---------------------------------------------------------------------------------------------------------------------

CODE FOR C5509 

.mmregs
			.global _c_int00
STK_LEN 	.set 100
TEST_LEN 	.set 50
COEFF_LEN 	.set 22
stack 		.usect "stack", STK_LEN
coeff 		.usect "coeff", COEFF_LEN
y0 			.usect "output", TEST_LEN
y1 			.usect "output", TEST_LEN
y2 			.usect "output", TEST_LEN
.data
table 	.int 0xFF66, 0x00AD, 0x01DF, 0x01F5, 0xFF89
		.int 0xFB7E, 0xF99F, 0xFE4D, 0x0A9D, 0x1A27
		.int 0x2502, 0x2502, 0x1A27, 0x0A9D, 0xFE4D
		.int 0xF99F, 0xFB7E, 0xFF89, 0x01F5, 0x01DF
		.int 0x00AD, 0xFF66
		.space 16*TEST_LEN
x0 		.int 0x7FFF
		.space 16*TEST_LEN
x1 		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F, 0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191, 0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F, 0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191, 0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F, 0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191, 0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F, 0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191, 0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F, 0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191, 0xED31
		.int 0x0000
		.space 16*TEST_LEN
x2 		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31, 0xE191
		.int 0x0000
		.space 16*TEST_LEN
.text
_c_int00:	BSET C54CM
			BSET FRCT ; Fractional Mode
			BSET SXMD ; Sign Extension
			BSET M40 ; Overflow Mode
		AMOV #stack+STK_LEN, XSP ; Setup stack pointer
		CALL init
		AMOV #x0, XAR0
		AMOV #(x0+1), XAR1
		AMOV #y0, XAR2
		CALL fir

		AMOV #x1, XAR0
		AMOV #(x1+1), XAR1
		AMOV #y1, XAR2
		CALL fir

		AMOV #x2, XAR0
		AMOV #(x2+1), XAR1
		AMOV #y2, XAR2
		CALL fir
end: B end
; Initialise coefficients
init: 	AMOV #coeff, XAR1
		RPT	#COEFF_LEN
		MVPD #table, *AR1+
		AMOV #coeff, XCDP
		RET
; FIR subroutine does TEST_LEN iterations
fir: MOV #(TEST_LEN/2) - 1, BRC0
		RPTB fir_end-1
		MOV #0, AC0
		MOV #0, AC1
		RPT #COEFF_LEN-1
		MAC *AR0-, *CDP+, AC0
:: MAC *AR1-, *CDP+, AC1
		MACR *AR0, *CDP, AC0
:: MACR *AR1, *CDP, AC1
		MOV HI(AC0), *AR2+
		MOV HI(AC1), *AR2+
		MOV #coeff, CDP
		MAR *+AR0(COEFF_LEN+2)
		MAR *+AR1(COEFF_LEN+2)
fir_end: RET
------------------------------------------------------------------------------------------------------------------------------

After I converted the above code to implement into c5416. Even though I built up successfully, I cannot get any output y0, y1 and y2 result according to below code. I saw an instruction that I need to use accumulator A by writing AB and already set BSET C54CM. I cannot figure out where the mistake is. 

----------------------------------------------------------------------------------------------------------------------------------------------------

CODE for C5416 by choosing C55xx Rev 3.0 CPU cycle accurate simulator

			.mmregs
			.global _c_int00
STK_LEN 	.set 100
TEST_LEN 	.set 50
COEFF_LEN 	.set 22

stack 		.usect "stack", STK_LEN
coeff 		.usect "coeff", COEFF_LEN
y0 			.usect "output", TEST_LEN
y1 			.usect "output", TEST_LEN
y2 			.usect "output", TEST_LEN

.data

table 		.int 0xFF66, 0x00AD, 0x01DF, 0x01F5,0xFF89
		.int 0xFB7E, 0xF99F, 0xFE4D, 0x0A9D,0x1A27
		.int 0x2502, 0x2502, 0x1A27, 0x0A9D,0xFE4D
		.int 0xF99F, 0xFB7E, 0xFF89, 0x01F5,0x01DF
		.int 0x00AD, 0xFF66
		.space 16*TEST_LEN
x0 		.int 0x7FFF
		.space 16*TEST_LEN
x1 		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F,0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191,0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F,0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191,0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F,0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191,0xED31
		.int 0x0000, 0x12CF, 0x1E7F, 0x1E7F,0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191,0xED31
		.int 0x0000, 0x12CF, 0x1E6F, 0x1E6F,0x12CF
		.int 0x0000, 0xED31, 0xE191, 0xE191,0xED31
		.int 0x0000
		.space 16*TEST_LEN
x2 		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000, 0x1E6F, 0x12CF, 0xED31,0xE191
		.int 0x0000
		.space 16*TEST_LEN
.text
_c_int00:	BSET C54CM
			SSBX FRCT ; Fractional Mode
			SSBX SXMD ; Sign Extension Mode
			SSBX OVM ; Overflow Mode

			
               STM #stack+STK_LEN, SP ; Setup stack pointer

			CALL init
			STM #x0, AR3
			STM #y0, AR4
			CALL fir

			STM #x1, AR3
			STM #y1, AR4
			CALL fir

			STM #x2, AR3
			STM #y2, AR4
			CALL fir

end:		B end
; Initialize coefficients
init:		STM #coeff, AR1
			RPT #COEFF_LEN
			MVPD #coeff, *AR1+
			STM #coeff, AR2
			RET
; FIR subroutine does TEST_LEN iterations
fir: 	STM #TEST_LEN-1, BRC
		RPTB fir_end-1

		; Single Mac Code
		MPY *AR2+, *AR3-, A
		RPT #COEFF_LEN-2
		MAC *AR2+, *AR3-, A
		MACR *AR2, *AR3, A
		STH A, *AR4+
		STM #coeff, AR2
		MAR *+AR3(COEFF_LEN+1)

fir_end: RET

---------------------------------------------------------------------------------------------------------------------------------------

Additionally, I am using ccs v5.5 and for the linker command file for C5509 and C5416 are shown below. As I said, as C5509 works, C5416 is not working. 

C5509 LINKER COMMAND FILE

MEMORY
{
IPROG: origin = 100h, len = 500h
IDATA: origin = 600h, len = 500h
IVARS: origin = 1100h, len = 2000h
}
SECTIONS
{
.text: { } > IPROG
.data: { } > IDATA
output: { } > IVARS
stack: { } > IVARS
coeff: { } > IVARS
}

C5416 LINKER COMMAND FILE

MEMORY 
{ 
PAGE 0: 
IPROG: origin = 0x1000, len = 0x3000 
PAGE 1: 
IDATA: origin = 0x400, len = 0x1000 
IVARS: origin = 0x1400, len = 0x1000 
} 
SECTIONS 
{ 
 .text: > IPROG PAGE 0 
 .data: > IDATA PAGE 1 
 output: > IVARS PAGE 1 
 stack: > IVARS PAGE 1 
 coeff: > IVARS PAGE 1 
} 

 

Regards,

Samet