Hello,
I'm using ECU module from VoLIB and it's working very well, but I can't reach performance like in documentation.
I have some numbers: 10ms frame is processing in 85us so I can run ~117 channels in real time (10/0,085=117,65). I can't find information about MIPS of DSP in OMAP L138 but when I assume MIPS=MHz=456 and from documentation 2,1MIPS for 8ms tail ECU, it's give 217 real time channels (456/2,1=217,14). Is that correct?
Is it possible to optimise ECU in my system to get more channels?
My environment is:
- omap L138
- C6000CGT6.1.9
- dsplink 1.63
- bios_5_41_00_06
- I'm not using CCS - I have Makefile in linux
- compile witch options "ti_targets_C64P"
This is my buffers configuration (this is for one channel because it's still in test phase):
#pragma DATA_ALIGN(my_buf0,1<<3);
#pragma DATA_ALIGN(my_buf2,1<<3);
#pragma DATA_ALIGN(my_buf7,1<<2);
#pragma DATA_ALIGN(my_buf8,1<<1);
#pragma DATA_ALIGN(my_buf9,1<<1);
#pragma DATA_ALIGN(my_buf10,1<<2);
#pragma DATA_ALIGN(my_buf11,1<<2);
#pragma DATA_SECTION(my_buf1, "IRAM")
#pragma DATA_SECTION(my_buf2, "IRAM")
#pragma DATA_SECTION(my_buf3, "IRAM")
#pragma DATA_SECTION(my_buf4, "IRAM")
#pragma DATA_SECTION(my_buf5, "IRAM")
#pragma DATA_MEM_BANK (my_buf1 ,0) // Different bank from 2
#pragma DATA_MEM_BANK (my_buf3 ,0) // Different bank from 2,4
#pragma DATA_MEM_BANK (my_buf4 ,4) // Different bank from 2,3
#pragma DATA_MEM_BANK (my_buf5 ,6) // Different bank from 2,4
tUChar my_buf0[664];
tUChar my_buf1[128];
tUChar my_buf2[128];
tUChar my_buf3[80];
tUChar my_buf4[464];
tUChar my_buf5[452];
tUChar my_buf7[12];
tUChar my_buf8[16];
tUChar my_buf9[16];
tUChar my_buf10[12];
tUChar my_buf11[12];
ECU module configuration:
#define SAMPLES_PER_FRAME 80
ecuContext_t ecuContext = {
(vfnptr)my_exception_fcn, /* Debug streaming function pointer */
NULL, /* Debug streaming function pointer */
NULL,
NULL, /* Search filter swapping function */
NULL, /* Send out function pointer */
NULL, /* Receive out function pointer */
SAMPLES_PER_FRAME, /* Maximum number of samples per frame */
64, /* Maximum filter length in taps */
64, /* Maximum filter segment buffer length in taps */
3, /* Maximum allowed active filter segments */
SAMPLES_PER_FRAME+(SAMPLES_PER_FRAME/2), /* Maximum y2x delay in samples */
0L, /* Bitfield representing those portions of the
* delay line already expanded. */
NULL, /* Pointer to base of the scratch delay line */
NULL, /* TDM aligned pointer within scratch delay line */
NULL, /* TDM aligned pointer within packed delay line */
};
ecuCfg.cfgParam = &cfgParam;
ecuCfg.y2x_delay = 0;
ecuCfg.samples_per_frame = SAMPLES_PER_FRAME;
ecuCfg.pcm_expand_tbl = &muaTblAlaw[0];
ecuCfg.pcm_zero = 0x55D5;
cfgParam.filter_length = 64;
cfgParam.noise_level = 0; /* Use default (-70) if fixed */
cfgParam.config_bitfield = ecu_ENABLE_ECHO_CANCELLER |
ecu_ENABLE_UPDATE |
ecu_ENABLE_NLP |
ecu_ENABLE_CNG_ADAPT ;
cfgParam.config_bitfield1 = 0;
cfgParam.nlp_aggress = 0; /* balance performance */
cfgParam.cn_config = 0; /* pink noise */
Any help would be greatly appreciated.
merol