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:在 CCS 上的 DSP C7X 上运行 TI 的 DSPLIB_fir 代码

Guru**** 2347060 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1516996/tda4vm-running-dsplib_fir-codes-from-ti-on-dsp-c7x-on-ccs

器件型号:TDA4VM

工具/软件:

您好 TI、

为了评估 C7x 的性能、我首先在 CCS 上实现了自己的 FIR 算法、并收集了运行此代码时生成的 MAC 运算数量。

然后、我的目标是使用 TI 提供的代码在 CCS 工程中实现 FIR 算法。 为此、我尝试使用与相同的代码 DSPLIB_fir_example.cpp 然而,它失败了。 问题是我的编译器找不到 dsplib.h 软件库。

是否有人知道如何解决此问题?

此致、  

M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    问题是我的编译器找不到 dsplib.h

    您能否确认使用的 CGT 版本?

    此致、
    Shabary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sharaby、  

    我将使用 ti-cgt-c7000_4.1.0.LTS

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    问题是我的编译器找不到 dsplib.h 库。

    您是否可以将 DSPLIB_C7120.lib 从 工程属性中的路径“ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/DSPLIB/lib/Release/"添加“添加到 C7000 链接器设置下的文件搜索路径中。
    此外、您是否可以将路径“ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/DSPLIB/DSPLIB"添加“添加到工程的 Include src 中。
    进行这些更改后、请尝试编译工程。

    此致、
    Shabary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    现在、编译器能够找到库仑。  
    但是、我不明白 DSPLIB_fir 使用哪种代码来实现 FIR 算法?  
    此外、在使用 DSPLIB_FIR 中的 TI 函数之前、是否必须设置内核属性?  

    此致、  

    M é lanie ESTEVES  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试实施  DSPLIB_fir_example.cpp  在 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;
    }
    

    但是、 编译时出现错误消息:  

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、M é lanie、

    1.“DSPLIB_bufParams1D_t bufParamsFilter;“(行号:60)应为  DSPLIB_bufParams2D_t bufParamsFilter;(请参见  DSPLIB_fir.cpp 中 DSPLIB_fir_init () 的函数定义、行号:139)

    2.按如下方式设置滤波器系数参数:  

    bufParamsFilter.data_type = DSPLIB_FLOAT32
    bufParamsFilter.dim_x = filterSize
    bufParamsFilter.dim_y = batchSize
    bufParamsFilter.strip_y = filterSpitch
    和初始化  
    uint32_t filterpitch = 0;(请参阅 idat.c、test_case = 1、行号:63)  
    此致、
    Betsy Varughese.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Betsy、  

    我用了你给我的修正。 它解决了上一个错误消息。  
    但是、我有一些不明白的事情:

    -为什么选择一个值 0 的过滤器间距? 此参数背后的含义是什么?  

    我们只能将 DSPLIB_fir 函数与 DSPLIB_FIR_idat.c 中定义的参数集一起使用吗? 也可以将它们与自定义参数结合使用吗?

    此致、  

    M é lanie  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另外,我还在解决另一个问题:  
    为了评估 C7X DSP 在执行时间方面的性能、我希望在中编译/运行代码 realease 模式 。 但是,每当我尝试这样做时,它会生成编译失败,并显示以下错误消息:  

    >> 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.

    我添加了我进去时的所有包含/链接器路径和库 调试模式 (每次创建工程时默认模式)。 当我尝试在调试模式下编译时、它是有效的。 然而,我注意到,当我切换在释放模式时,我添加的所有路径都消失了,这是正常的吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    为什么选择 0 作为过滤器间距? 此参数背后的含义是什么?  [/报价]

    filterSpitch 是指从一个滤波器系数的开头到存储器中下一行的开头之间的字节数。

     我们是否只能将 DSPLIB_fir 函数与 DSPLIB_fir_idat.c 中定义的参数集一起使用? 或者我们是否也可以将它们与自定义参数一起使用?

    您也可以使用自定义参数。

    此致、
    Shabary.

     

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    [引述 userid=“647126" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1516996/tda4vm-running-dsplib_fir-codes-from-ti-on-dsp-c7x-on-ccs/5839633 #5839633“] 然而,我注意到,当我切换在释放模式时,我添加的所有路径都消失了,这是正常的吗?  [/报价]

    是的、这是预期行为。  
    调试/发布配置具有自己的一组编译器/链接器设置。 因此、如果您在“Debug"下“下添加路径/库、它们只适用于该配置。 切换到“Release"时“时、CCS 使用为“Release"定义“定义的设置、该设置默认为最小值且与“Debug"无关“无关。

    此致、
    Shabary.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    感谢您的解释

    我尝试通过创建一个表示复数的结构来使用自定义参数:

    #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_ *

    但是、当我替换时 悬空 具有 A 的原始输入和输出的类型 复合类型 、FIR 算法的输出不正确。 因为我的复数类型是什么 8 字节 、我认为我需要对某些功能进行一些更改?  

    下面是用于 main.cpp 的代码、我在其中进行了一些更改:

    /**
     * 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;
    }
    

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否分享您在 Code Composer Studio (CCS) 中用于构建代码的链接器脚本?

    您能否确认为什么 dataPitchInSize 和 dataPitchOutSize 设置为 8×8?

    但是、当我替换时 悬空 具有 A 的原始输入和输出的类型 复合类型 、FIR 算法的输出不正确。 因为我的复数类型是什么 8 字节 、我认为我需要对某些功能进行一些更改?  [/报价]

    我将在内部检查 API DSPLIB_FIR_exec (handle、in、filter、out) 是否适用于复数、或者是否有任何专门为复杂数据设计的替代 API。

    此致、
    Shabary.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    当然,这里是:

     

    /****************************************************************************/
    /*  --- 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
    	
    	
    }
    

    我不太理解您的第二个问题... 是的、如果您查看先前共享代码的第 40 行和第 42 行、则可以看到 dataPitchInSize 和 dataPitchOutSize 设置为 8×8。

    好的、谢谢、让我及时更新

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我不太理解您的第二个问题... 是的、如果您查看先前共享代码的第 40 行和第 42 行、您可以看到 dataPitchInSize 和 dataPitchOutSize 设置为 8×8。

    您能否确认为什么 dataPitchInSize 和 dataPitchOutSize 设置为 8×8?

    好的、谢谢您、让我更新一下、然后


    DSPLIB 中的 FIR 滤波器未针对复数型输入进行优化。 这就是您获得错误结果的原因。

    此致、
    Shabary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    “对不起,我不是第一次看到你。“ 我决定这样设置,因为有一个包含 8 个元素的数组,如果我总结每行中的所有元素:每行 2 个元素,有 4 行。 同样的推理也适用于其他 8 的列。 也许这不是正确的思维方式?

        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} };

    关于在 DSPLIB 中使用 FIR 滤波器和复数类型、您说没有针对该类型进行优化。 但是、是否可以通过对 DSPLIB 代码进行一些更改来使用该类型? 我真的需要使用这种类型...

    此致、  

    M é lanie  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    但是、是否可以通过对 DSPLIB 代码进行一些更改来使用该类型? [/报价]

    是的、我将检查并更新您。

    此致、
    Shabary.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    好的、谢谢

    您能否根据我在上一个答案中提到的输入和滤波器数组、确认我的推理是否对我在 dataPitchSize 参数中输入的值正确?

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    根据我在上一个答案中提到的输入和过滤器数组、您能否确认我的推理是否正确?

    由于您使用的是复数数据类型、其中实部和虚部都存储为浮点数、因此每个复数占用:
             - 4 字节 (real)+ 4 字节 (imag)=每个复数输入 8 个字节。
    在您的案例中、有 4 个复杂输入、因此一个批次的总大小为:
             - 4 个复数输入× 8 个字节= 32 个字节。

    此致、
    Shabary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    由于与在 CCS 上运行 DSPLIB 代码相关的问题已经解决、我们能否关闭此票证、并请启动使用复杂输入来实施 FIR 的新线程?


    此致、
    Shabary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    您能告诉我在运行 DSPLIB_fir 函数时要使用哪个 TI 链接器脚本吗  

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外,如何获得 DSPLIB fir 算法的 MAC 编号?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Melanie、

    负责的工程师目前不在办公室。 请预计响应将延迟一天。

    此致、

    Betsy Varughese.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能告诉我在运行 DSPLIB_fir 函数时要使用哪个 TI 链接器脚本吗? 

    您可以使用“DSPLIB\cmakes\linkers\C7120"中“中的链接器脚本运行  DSPLIB_fir 函数。

    如何获取 DSPLIB fir 算法的 MAC 编号?

    您是指 FIR 操作所需的 MAC 周期数吗?


    此致、
    Shabary

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    您能告诉我为什么您建议我使用的链接器脚本中有几个没有在数据表中找到的部分吗? 我说的是 .ddrData、 l2dmemory  

    是的、我是这样说的

    此致、  

    M é lanie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能告诉我为什么链接器脚本中有几个您建议我使用的部分在数据表中没有改进吗? 我说的是 .ddrData、 l2dmemory  [/报价]

    DSPLIB 中使用的链接器脚本作为 SDK 的一部分提供、适用于 DSPLIB 内的所有内核和测试用例。

    如何获取 DSPLIB fir 算法的 MAC 编号?

    您可以使用_TSC 来测量算法的 MAC 周期。
    下面 我附上了如何配置_TSC。




    此致、
    Shabary.

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sharaby、  

    我确实需要 MAC 数量才能检查是否可以到达 80GLOPS 有所改进   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Melanine:
    既然您已经启动了关于 MAC 数量和 DSPLIB 状态问题的新线程、我们可以关闭该线程吗?

    此致、
    Shabary.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我们可以