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.

TDA4VM: Running DSPLIB_fir codes from TI on DSP C7X on CCS

Part Number: TDA4VM

Tool/software:

Hello TI,

In order to assess the performance of the C7x, I first implemented my own FIR algorithm on CCS and collected the number of MAC operations generated while running this code.

Then, my goal is to use the code provided by TI concerning the implementation of a FIR algorithm in a CCS project. To do so, I tried to use the same code as DSPLIB_fir_example.cpp; however, it failed. The issue is that my compiler cannot find the dsplib.h library.

Is there anyone who knows how to solve this issue?

Regards, 

Mélanie

  • Hi,

    The issue is that my compiler cannot find the dsplib.h library

    Could you please confirm which cgt version are you using?

    Regards,
    Shabary

  • Hi Sharaby, 

    I'm using ti-cgt-c7000_4.1.0.LTS

    Regards, 

    Mélanie

  • Hi,

    The issue is that my compiler cannot find the dsplib.h library.

    Could you please add DSPLIB_C7120.lib from the path  "ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/dsplib/lib/Release/" to the File Search Path under the C7000 Linker settings in the project properties.
    Also, can you add the path "ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/dsplib/src" to the Include Options of the project.
    After making these changes, try building the project.

    Regards,
    Shabary

  • Hi, 

    Now, the compiler is able to find the librairies. 
    However, I do not understand which code from DSPLIB_fir use in order to implement the FIR algorithm ? 
    Also, is it mandatory to set kernel properties before using any fucntions of TI from DSPLIB_fir ? 

    Regards, 

    Mélanie ESTEVES 

  • I tried to implement the DSPLIB_fir_example.cpp on CCS:

    
    /**
     * main.cpp
     */
    
    #include "dsplib.h"
    #include <stdint.h>
    
    
    
    int main(void){
    
    
    
        /* --- Vecteurs d entree - sortie du filtre FIR --- */
    
        /* x(t) : vecteur de complexe en entree */
        //pour le moment on ut vect passe par TI
        float in[] = {0.0075269,  0.42490765, 0.5737673,  0.2208442,  0.09775102, 0.24138574, 0.04012135, 0.74615402,
                         0.08575411, 0.02825585, 0.0394516,  0.53011919, 0.8855483,  0.64490047, 0.43757865, 0.9008144,
                         0.88742952, 0.5273014,  0.15618296, 0.2486165,  0.73751811, 0.80145564, 0.00925736, 0.61880944,
                         0.01848634, 0.78157248, 0.29912587, 0.34630224, 0.28394529, 0.16470226, 0.03790734, 0.05151005,
                         0.93717938, 0.93691852, 0.85173587, 0.99901312, 0.72999805, 0.07310897, 0.68994449, 0.80322511,
                         0.59070248, 0.52609875, 0.8837833,  0.43461102, 0.29789329, 0.8795983,  0.08831519, 0.25615793,
                         0.57545443, 0.76529679, 0.7559087,  0.60065098, 0.93648813, 0.9509784,  0.33040872, 0.07305676,
                         0.79920768, 0.03319901, 0.90727184, 0.59441656, 0.42762858, 0.92020711, 0.80031864, 0.01848634};
    
       /* h(t) : vecteur coefficients filtre FIR */
       float filter[] = {0.68517633, 0.62932418, 0.40943144, 0.83713068, 0.32060292, 0.92259115, 0.96543234, 0.63864105,
                             0.82545659, 0.20080124, 0.85765419, 0.21333606, 0.04969507, 0.87302331, 0.13975056, 0.94914013,
                             0.97427525, 0.18113375, 0.65753913, 0.64872713, 0.65282617, 0.81546733, 0.22026294, 0.85940409,
                             0.21061344, 0.31353881, 0.27924398, 0.53946946, 0.86391542, 0.94781037, 0.73137234, 0.01975425};
    
       /* y(t)*/
       float out[] = {
               0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
               0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
               0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,};
    
    
       /* Tailles des @ du filtre FIR */
       uint32_t dataSize = 64;  //x(t) contient 64 elements
       // in bytes
       uint32_t dataPitchInSize = 64 * 4; //taille x(t) en bytes
        // in bytes
       uint32_t dataPitchOutSize = 64 * 4;
       uint32_t batchSize        = 1;
       uint32_t filterSize       = 32;
       // float data type
       uint32_t shift = 1;
    
    
       /* --- Caracteristiques du kernel --- */
       DSPLIB_STATUS       status;
       DSPLIB_fir_InitArgs kerInitArgs;
       int32_t             handleSize = DSPLIB_fir_getHandleSize(&kerInitArgs);
       DSPLIB_kernelHandle handle     = malloc(handleSize);
    
       /* Types des buffers d entree et sortie */
       DSPLIB_bufParams2D_t bufParamsIn, bufParamsOut;
       DSPLIB_bufParams1D_t bufParamsFilter;
    
       /* Remplissages des buffers avec les valeurs des vecteurs */
       /* Buffer contenant x(t) */
       bufParamsIn.data_type = DSPLIB_FLOAT32;
       bufParamsIn.dim_x     = dataSize;
       bufParamsIn.stride_y  = dataPitchInSize;
       bufParamsIn.dim_y     = batchSize;
    
       /* Buffer contenant y(t) */
       bufParamsOut.data_type = DSPLIB_FLOAT32;
       bufParamsOut.dim_x     = dataSize;
       bufParamsOut.stride_y  = dataPitchOutSize;
       bufParamsOut.dim_y     = batchSize;
    
       /* Buffer contenant h(t) */
       bufParamsFilter.data_type = DSPLIB_FLOAT32;
       bufParamsFilter.dim_x     = filterSize;
    
       /* Remplissage des champs de la structure des @ du kernel */
       kerInitArgs.dataSize   = dataSize;
       kerInitArgs.batchSize  = batchSize;
       kerInitArgs.filterSize = filterSize;
       kerInitArgs.shift      = shift;
       kerInitArgs.funcStyle  = DSPLIB_FUNCTION_OPTIMIZED;   //indicateur d'optimisation
    
       /* Statut initial de l algo */
       status = DSPLIB_SUCCESS;
    
       /* --- Initialisation de l'algo FIR */
       if (status == DSPLIB_SUCCESS){
    
           status = DSPLIB_fir_init(handle, &bufParamsIn, &bufParamsFilter, &bufParamsOut, &kerInitArgs);
       }
    
       return 0;
    }
    

    However there is an error message when compiling : 

    "../main.cpp", line 94: error #169: argument of type "DSPLIB_bufParams1D_t *" is incompatible with parameter of type "DSPLIB_bufParams2D_t *"

  • Hi Mélanie,

    1. "DSPLIB_bufParams1D_t bufParamsFilter;" (line no:60) should be DSPLIB_bufParams2D_t bufParamsFilter ; (see the function definition of DSPLIB_fir_init() in DSPLIB_fir.cpp at line no:139)

    2. Set the filter coefficient params as follows: 

    bufParamsFilter.data_type = DSPLIB_FLOAT32;
    bufParamsFilter.dim_x = filterSize;
    bufParamsFilter.dim_y = batchSize;
    bufParamsFilter.stride_y = filterPitch;
    and Initialize 
    uint32_t filterPitch = 0; (Refer idat.c , TEST_CASE == 1, at line no:63)
    Regards,
    Betsy Varughese
  • Hi Betsy, 

    I used the corrections you gave me. It solved the previous error message. 
    However, there are some things I don't understand:

    - Why choosing a value of 0 for the filterPitch ? What is the meaning behind this parameter ? 

    Can we only use the DSPLIB_fir functions with the parameter sets defined in DSPLIB_fir_idat.c? Or can we also use them with custom parameters?

    Regards, 

    Mélanie 

  • Also, I'm encoutering another issue : 
    In order to assess the performances of the C7X DSP in terms of execution time, I want to compile/run my code in Realease mode. However, whenever I try to do that, it generates a compilation failure with the following error messages : 

    >> Compilation failure
    subdir_rules.mk:9: recipe for target 'DSPLIB_fir.obj' failed
    "../DSPLIB_fir.cpp", line 23: fatal error #1965: cannot open source file "DSPLIB_fir/DSPLIB_fir_priv.h"
    1 catastrophic error detected in the compilation of "../DSPLIB_fir.cpp".
    Compilation terminated.
    gmake: *** [DSPLIB_fir.obj] Error 1
    Building file: "../main.cpp"
    Invoking: C7000 Compiler
    "C:/Users/MyApp/Packages/ti-cgt-c7000_4.1.0.LTS/bin/cl7x" -O2 --include_path="C:/Users/MyApp/depots/stage_jacinto7/Benchmark Algo FIR" --include_path="C:/Users/MyApp/Packages/ti-cgt-c7000_4.1.0.LTS/include" --diag_warning=225 --diag_wrap=off --display_error_number --preproc_with_compile --preproc_dependency="main.d_raw"  "../main.cpp"
     
    >> Compilation failure
    subdir_rules.mk:9: recipe for target 'main.obj' failed
    "..\dsplib.h", line 37: fatal error #1965: cannot open source file "DSPLIB_add/DSPLIB_add.h"
    1 catastrophic error detected in the compilation of "../main.cpp".
    Compilation terminated.
    gmake: *** [main.obj] Error 1
    gmake: Target 'all' not remade because of errors.

    I added all the include/linker paths and librairies when I was in debug mode (default mode whenever I create a project). When I tried to compile in Debug mode, it worked. However, I noticed that when I switch in Release mode, all the paths I added disappear, is that normal ? 

  • Hi,

    Why choosing a value of 0 for the filterPitch ? What is the meaning behind this parameter ? 

    The filterPitch refers to the number of bytes between the start of one row of filter coefficients and the start of the next row in memory.

     Can we only use the DSPLIB_fir functions with the parameter sets defined in DSPLIB_fir_idat.c? Or can we also use them with custom parameters?

    You can use a custom parameter also.

    Regards,
    Shabary.

     

  • Hi,

    However, I noticed that when I switch in Release mode, all the paths I added disappear, is that normal ? 

    Yes it is an expected behaviour. 
    Debug/release configuration has its own set of compiler/linker settings. So if you add paths/libraries under "Debug", they only apply to that configuration. When you switch to "Release", CCS uses the settings defined for "Release", which by default are minimal and independent of "Debug".

    Regards,
    Shabary.

  • Hi, 

    Thank you for your explanation

    I tried to use a custom parameter by creating a structure that represents a complex number :

    #ifndef NOMBRE_COMPLEXE_HPP_
    #define NOMBRE_COMPLEXE_HPP_
    
    struct Complexe{
    
        float re;    //partie reelle d un nombre complexe
        float im;    //partie imaginaire d un nombre complexe
    
    };
    
    #endif /* NOMBRE_COMPLEXE_HPP_ *

    However, when I replace the float type of the original input and output with a Complexe type, the outputs of the FIR algorithm aren’t correct. Since my complex type is 8 bytes, I believe I need to make some changes to certain function? 

    Here is the code fo my main.cpp, in which I did some changes:

    
    /**
     * main.cpp
     */
    
    #include "dsplib.h"
    #include <stdint.h>
    #include <iostream>
    #include "Nombre_complexe.hpp"
    
    using namespace std;
    
    int main(void){
    
    
    
        /* --- Vecteurs d entree - sortie du filtre FIR --- */
    
        /* Utilisation petits vecteurs */
        /* x(t) : vecteur de complexe en entree, appele in(t) ici */
    
        Complexe in[] = { {1.0, 1.0},
                          {-2.0,-1.0},
                          {0.0,1.0},
                          {-4.0,0.0} };
    
       /* h(t) : vecteur coefficients filtre FIR */
       float filter[] = {-1.0, 4.0, 1.0};
    
       /* y(t)*/
       /* Conformement au benchmark de TI, on met y(t) de meme taille que x(t) */
       Complexe out[] = {{0.0, 0.0},
                      {0.0,0.0},
                      {0.0,0.0},
                      {0.0,0.0} };
    
    
       /* Tailles des @ du filtre FIR */
       uint32_t dataSize = 8;  //x(t) contient 8 elements
       // in bytes
       uint32_t dataPitchInSize = 8 * 8; //taille x(t) en bytes, pour rappel pour notre architecture, 1 float = 4 octet et 1 Complexe = 8 octets
        // in bytes
       uint32_t dataPitchOutSize = 8 * 8;
       uint32_t batchSize        = 1;
       uint32_t filterSize       = 3;
       // float data type
       uint32_t shift = 1;
       //ajout pour compenser erreur DSPLIB_bufParams1D_t
       uint32_t dataPitchFilterSize = 3 * 4;
       //ajout pour compenser erreur DSPLIB_bufParams1D_t. Initialisation d'un @ prop par TI
       uint32_t filterPitch = 0;   //cf fichier DSPLIB_fir_idat.c
    
    
    
       /* --- Caracteristiques du kernel --- */
       DSPLIB_STATUS       status;
       DSPLIB_fir_InitArgs kerInitArgs;
       int32_t             handleSize = DSPLIB_fir_getHandleSize(&kerInitArgs);
       DSPLIB_kernelHandle handle     = malloc(handleSize);
    
       /* Types des buffers d entree et sortie */
       DSPLIB_bufParams2D_t bufParamsIn, bufParamsOut;
    //   DSPLIB_bufParams1D_t bufParamsFilter;  //modification car cree erreur
       DSPLIB_bufParams2D_t bufParamsFilter;
    
       /* Remplissages des buffers avec les valeurs des vecteurs */
       /* Buffer contenant x(t) */
    //   bufParamsIn.data_type = DSPLIB_FLOAT32;
       bufParamsIn.data_type = DSPLIB_FLOAT64;  //@ modif car on manip des complexes
       bufParamsIn.dim_x     = dataSize;
       bufParamsIn.stride_y  = dataPitchInSize;
       bufParamsIn.dim_y     = batchSize;
    
       /* Buffer contenant y(t) */
    //   bufParamsOut.data_type = DSPLIB_FLOAT32;
       bufParamsIn.data_type = DSPLIB_FLOAT64;
       bufParamsOut.dim_x     = dataSize;
       bufParamsOut.stride_y  = dataPitchOutSize;
       bufParamsOut.dim_y     = batchSize;
    
       /* Buffer contenant h(t) */
       bufParamsFilter.data_type = DSPLIB_FLOAT32;
       bufParamsFilter.dim_x     = filterSize;
       bufParamsFilter.stride_y  = dataPitchFilterSize;
       bufParamsFilter.dim_y     = batchSize;
    
       /* Remplissage des champs de la structure des @ du kernel */
       kerInitArgs.dataSize   = dataSize;
       kerInitArgs.batchSize  = batchSize;
       kerInitArgs.filterSize = filterSize;
       kerInitArgs.shift      = shift;
       kerInitArgs.funcStyle  = DSPLIB_FUNCTION_OPTIMIZED;   //indicateur d'optimisation
    
       /* Statut initial de l algo */
       status = DSPLIB_SUCCESS;
    
       /* --- Initialisation de l'algo FIR */
        if (status == DSPLIB_SUCCESS){
    //        status = DSPLIB_fir_init_checkParams(handle, &bufParamsIn, &bufParamsOut, &kerInitArgs); //modifie car erreur pour moi, manque un @
            status = DSPLIB_fir_init_checkParams(handle, &bufParamsIn, &bufParamsOut, &bufParamsFilter, &kerInitArgs);
        }
    
       if (status == DSPLIB_SUCCESS){
    
           status = DSPLIB_fir_init(handle, &bufParamsIn, &bufParamsFilter, &bufParamsOut, &kerInitArgs);
       }
    
    
       /* --- Execution de l'algo FIR --- */
    
        if (status == DSPLIB_SUCCESS){
    
           status = DSPLIB_fir_exec_checkParams(handle, in, filter, out);
        }
    
    
       if (status == DSPLIB_SUCCESS){
    
           status = DSPLIB_fir_exec(handle, in, filter, out);
       }
    
       //boucle for avec un itérateur sur la taille du vecteur x(t)
    
       for (size_t c = 0; c < dataSize ; c++) {
    
    //      printf("%10g (*) %10g = %10g\n", in[c], filter[c], out[c]);
           cout << (in[c]).re << " * " << filter[c] << "= " << (out[c]).re << endl;
           cout << (in[c]).im << " * " << filter[c] << "= " << (out[c]).im << endl;
    
       }
    
    
       return 0;
    }
    

    Regards, 

    Mélanie

  • Hi,

    Could you please share the linker script you used to build the code in Code Composer Studio (CCS)?

    Can you confirm why dataPitchInSize and dataPitchOutSize are set to 8×8?

    However, when I replace the float type of the original input and output with a Complexe type, the outputs of the FIR algorithm aren’t correct. Since my complex type is 8 bytes, I believe I need to make some changes to certain function? 

    I will check internally whether the API  DSPLIB_fir_exec(handle, in, filter, out); is applicable for complex numbers, or if there are any alternative APIs specifically designed for complex data.

    Regards,
    Shabary.

  • Hi, 

    Sure, here it is :

     

    /****************************************************************************/
    /*  --- ADAPTATION DU LINKER POUR CARTE JACINTO7 J721E ---                  */
    /*                                                                          */
    /*  --- MEMORY INTERFACES ---                                               */
    /*  DDR MEMORY : 4GB of LPDDR4                                             	*/
    /* 				MAPPING : mapped from 0x80000000 to 0x180000000				*/
    /*  OPSI MEMORY : 512 Mbit                                                  */
    /*  UFS MEMORY : 32GB                                                       */
    /*  2 MMC PORTS (MCC0 and MCC1) : MMC0 = connected to  16GB eMMC Flash      */
    /*                                MMC1 = interfaced with Micro SD Socket    */ 
    /*  --- THE FOLLOWING ONES ARE OPTIONAL ---                                 */   
    /*  Hyper Flash = 512 Mb flash                                              */ 
    /*  Hyper RAM   = 64 Mb DRAM                                                */
    /*                                                                          */
    /*  --- MEMORY LAYOUT OF DSP C7X ---                                        */
    /*                                                                          */
    /*  L1 CACHE :                                                              */
    /*		L1 PRORAM MEMORY CONTROLLER (PMC) : 32KB L1P MEMORY                 */
    /*		L1 DATA MEMORY CONTROLLER (DMC) :   48KB L1D MEMORY                 */
    /* 												- 32KB OF CACHE             */
    /* 												- 16KB OF SRAM              */
    /*	L2 CACHE :																*/
    /*		L2 UNIFIED MEMORY CONTROLLER (UMC) : 512KB L2 MEMORY                */
    /*												- 64KB OF CACHE 			*/
    /*												- 448KB OF SRAM             */
    /*       																    */
    /*                                                                          */
    /*                                                                          */
    /****************************************************************************/
    
    // On met les tailles de la stack et du segment de heap à 20MB ici car on manip on fichier au max de 3MB 
    -stack		0x1400000
    -heap 		0x1400000
    
    
    
    MEMORY
    {
        
      /*448KB of L2 SRAM */
      L2SRAM_C7x_0           (RWIX)   : org = 0x64800000, len = 0x70000
      
      /*16KB of L1 DSRAM */
      L1DSRAM_C7x_0          (RWIX)   : org = 0x64E00000, len = 0x4000
      
      /*7.78MB of MSMC */
      MSMC_C7x_0			 (RWIX)   : org = 0x70020000, len = 0x7C7FFF
      
      //DDR_C7x_0				 (RWIX)   : org = 0xA0000000, len = 0x80000000			// attention : la taille mise pour 2MB est incorrecte,on a 264MB la 
      /*64MB of DDR */ 
      DDR_C7x_0				 (RWIX)   : org = 0xA0000000, len = 0x4000000
    												
    }
    
    
    
    SECTIONS
    {
    	.ss_vectors 					> DDR_C7x_0 
    	
    	/*CONTAINS BINARY CODES */
    	.text 							 > DDR_C7x_0 
    	/*ENTRY POINT FOR THE PROGRAM EXECUTION */ 
    	/*BY DEFAULT IT IS NAMMED _c_init00 FOR C7x */ 
    	/*A VOIR MAIS JE PENSE UTILE QUE POUR BOOT */ 
    	.text:_c_init00: 				 > DDR_C7x_0 
    	
    	/*CONTAINS DYNAMIC ALLOCATION/HEAP */ 
    	.sysmem   						 > DDR_C7x_0 
    	
    	/*CONTAINS GLOBAL AND STATIC VARIABLES INITIALIZED */
    	.data 							 > DDR_C7x_0
    	
    	/*CONTAINS GLOBAL AND STATIC VARIABLES UNINITIALIZED */
    	.bss 							 > DDR_C7x_0
    	
    	/*CONTAINS LOCAL VARIABLES */
    	.stack 							 > DDR_C7x_0 
    	
    	/*CONTAINS ARGC/ARGV */ 
    	.args 							 > DDR_C7x_0 
    	
    	/*COULD BE PART OF CONST */ 
    	.cinit 						     > DDR_C7x_0
    	
    	/*C++ INITIALIZATION */
    	.init_array 					 > DDR_C7x_0
    	
    	/*ADDING SECTIONS CIO AND CONST AFTER 1ST BUILDING */
    	.cio 							 > DDR_C7x_0
    	.const 							 > DDR_C7x_0
    	
    	/* BUFFER FROM DDR TO L1DSRAM */
    	.zone1_L1DSRAM					 > L1DSRAM_C7x_0 
    	
    	/* BUFFER FROM DDR TO L2SRAM */
    	.zone2_L2SRAM 					 > L2SRAM_C7x_0 
    	
    	/* BUFFER FROM DDR TO MSMC */ 
    	.zone3_MSMC 					 >  MSMC_C7x_0
    	
    	
    }
    

    I don't quite understand your second question... Yes, you can see that dataPitchInSize and dataPitchOutSize are set to 8×8 if you look at lines 40 and 42 of the previously shared code.

    Okay, thank you, keep me updated then

    Regards, 

    Mélanie

  • Hi,

    I don't quite understand your second question... Yes, you can see that dataPitchInSize and dataPitchOutSize are set to 8×8 if you look at lines 40 and 42 of the previously shared code.

    Can you confirm why dataPitchInSize and dataPitchOutSize are set to 8×8?

    Okay, thank you, keep me updated then


    The FIR filter in DSPLIB is not optimized for complex-type inputs. This is why you are getting incorrect results.

    Regards,
    Shabary

  • Hi,

    Sorry, Sharaby, I didn't read it correctly the first time. I decided to set it up that way because there is an array containing 8 elements if I sum up all the elements in each row: 2 elements per row and there are 4 rows. The same reasoning applies to the columns for the other 8. Maybe it isn’t the right way of thinking?

        Complexe in[] = { {1.0, 1.0},
                          {-2.0,-1.0},
                          {0.0,1.0},
                          {-4.0,0.0} };
    
       /* h(t) : vecteur coefficients filtre FIR */
       float filter[] = {-1.0, 4.0, 1.0};
    
       /* y(t)*/
       /* Conformement au benchmark de TI, on met y(t) de meme taille que x(t) */
       Complexe out[] = {{0.0, 0.0},
                      {0.0,0.0},
                      {0.0,0.0},
                      {0.0,0.0} };

    About the use of the FIR filter in DSPLIB with the complex type, you said it isn’t optimized for that type. However, is it possible to use that type by making some changes to the DSPLIB code? I really need to use that type...

    Regards, 

    Mélanie 

  • Hi,

    However, is it possible to use that type by making some changes to the DSPLIB code?

    Yes,I will check on that and update you.

    Regards,
    Shabary.

  • Hi, 

    Okay thanks

    Could you confirm whether my reasoning is correct for the values I put in the dataPitchSize parameters according to the input and filter arrays I mentioned in the previous answer?

    Regards, 

    Mélanie

  • Hi,

    Could you confirm whether my reasoning is correct for the values I put in the dataPitchSize parameters according to the input and filter arrays I mentioned in the previous answer?

    Since you are using a Complex data type, where both the real and imaginary parts are stored as float, each complex number occupies:
                     - 4 bytes (real) + 4 bytes (imag) = 8 bytes per complex input.
    In your case, there are 4 complex inputs, so the total size of one batch is:
                     - 4 complex inputs × 8 bytes = 32 bytes.

    Regards,
    Shabary

  • Hi,
    Since the issue related to running DSPLIB code on CCS has been resolved,can we close this ticket and please start a new thread for implementation of FIR using complex input?


    Regards,
    Shabary

  • Hi, 

    Could you tell me which TI linker script to use while running DSPLIB_fir functions 

    Regards, 

    Mélanie

  • Also, how can I get the MAC number of the DSPLIB fir algorithm ?

  • Hi Melanie,

    The engineer responsible is currently out of office. Please expect a one-day delay in response.

    Regards,

    Betsy Varughese

  • Hi,

    Could you tell me which TI linker script to use while running DSPLIB_fir functions 

    You can use linker script from "dsplib\cmake\linkers\C7120" for running DSPLIB_fir functions.

    how can I get the MAC number of the DSPLIB fir algorithm ?

    Did you mean the number of MAC cycles required for the FIR operation?
    .

    Regards,
    Shabary

     

  • Hi, 

    Could you tell me why there are several sections in the linker script you suggested me to use that aren't mentionned in the datasheet ? I'm talking about .ddrData, l2dmemory, ..... 

    Yes I do mean that

    Regards, 

    Mélanie

  • Hi,

    Could you tell me why there are several sections in the linker script you suggested me to use that aren't mentionned in the datasheet ? I'm talking about .ddrData, l2dmemory, ..... 

    The linker script used in DSPLIB is provided as part of the SDK and is generic for all kernels and test cases within DSPLIB.

    how can I get the MAC number of the DSPLIB fir algorithm ?

    You can use the _TSC  to measure the MAC cycles of the algorithm.
    Below  I have attached on how to configure the _TSC.




    Regards,
    Shabary.

  • HI Sharaby, 

    I do need the number of MAC in order to check if we can reach the 80 GLOPS mentionned in the TDA4VM processors datasheet  

  • Hi Melanine,
    Since you've started a new thread regarding the number of MACs and the DSPLIB status issue, can we close this thread?

    Regards,
    Shabary.