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.

ECU performance.

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

  • Hi merol,

    As the ECU module provided in VoLIB is pre-built optimized library, so even if you upgrade your compiler to v7.x, you might still not able to gain more channel density.
    The MIPS is mostly consumed by internal filter processing in ECU.

    Which version of VoLIB are you using? and which document you are referring to? It seems only C55x MIPS consumption is listed in volib_C64P_2_0_0_3 user manual. I will try to locate an OMAP L138 EVM to measure the MIPS.

    Regards,
    Garrett

  •  Hi Garret,

    I'm using VoLIB version 2.0.0.3. I found  MIPS consumption in ecuapi.chm in VoLIB package.  (ti/volib/packages/ti/mas/ecu/docs/doxygen/ecuapi.chm and in this doc Home->Integration->MIPS Requirements->C64x+ Target).

    Maybe I  should do better buffer allocation or something?

     

     Regards

    merol

     

     

     

  • merol,

    The 2.1 MIPS on C64x+ is obtained when assuming ECU is placed in internal L2 memory and cache is enabled (256MB), see ECU test project link command file. This should not be applicable to your project as the L2 memory size is limited to 256MB on C674x of OMAP L138. You can try to scheudle the L2 memory for cache and ECU section differently to see if it helps reduce MIPS.

    The discussion on "OMAP L138 clock on 450 MHz instead of 300 MHz" (http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/97324.aspx) may help you verify if your 85us processing time was measured on the OMAP L138 with clock 456MHz.

    Regards,

    Garrett