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.

c6670芯片中,FFTC和TCP3d测试工程中的IPC_start()函数问题?

各位老师你们好,

        在C6670芯片中,FFTC和TCP3d的测试工程中都有IPC_start()函数,为什么在FFTC测试工程中需要把四个核组在一起跑才能正常运行,而TCP3d则不需要,可以单核运行呢?还有在FFTC测试工程中如果我只需要某一个核运行是否可以做到,如果可以的话,请问是需要修改代码还是配置文件,怎样修改?以上两个问题希望哪位老师能给出详细解释说明。非常感谢!

  • wenzheng liu您好,

    1. MCSDK中的FFTC工程是针对多核做的一个验证性例子,你可以参考其中的readme说明理解其基本的工作原理;因为例子做的多核代码比较复杂,如果需要修改到一个核上运行的话,需要首先理解example,以及FFTC与Navigator,然后再进行修改;

    2. IPC_start是对共享内存中heap做一个初始化。具体需要参考Bios相关文档。

    请问您目前对keystone的Navigator有多少的了解?谢谢

  • Andy Yin你好,

    1、对FFTC这个模块,我大概看了以下三个文档,分别为FFTC User Guide,Multicore Navigator和FFTC-SDS.pdf,再结合FFTC的multicore-testProject工程代码,已基本理解FFTC的example,只是对某些局部不是很理解。比如说,我想在multicore-testProject工程上修改为我自己的驱动程序(希望在两个核上同时运行,并得到正确结果),目前,通过对该工程的剥离和修改,只能在核0上得到正确结果,在核1上只有发送,没有接受,请问这个是否与中断服务程序有关?

    2、FFTC的所有工程实例全是基于多核设计,是否核间通信与函数IPC-start有关?如果与它无关,在代码中怎样体现的?

    3、在配置文件中,可以修改核数(core0,core1,core2,core3),可以使它不再四个核上同时运行,不知这样修改是否正确?

  • wenzheng liu您好,

    1. 对于FFTC multi-core example: 我看了一下代码,基本的数据流为core0/1/2/3分别提交FFTC到TxQ,输出的结果分别由core1/2/3/0处理,并且其中使用了hardware semphore达到多核同步。如果要修改为2个核上处理,如core0的结果由core1处理,而core1的结果由core0处理,则只需要修改multicore.c中line825->line857为如下:

       switch (coreNum)

       {

           case 0:

           {

               myQNum      =   708;

               destQNum    =   709;

               accChanNum  =   4;

               break;

           }

           case 1:

           {

               myQNum      =   709;                

               destQNum    =   708;

               accChanNum  =   5;

               break;

           }

           default:

               goto error;

       }

    其他的地方没有太多需要修改的。如果要修改只在一个核上运行,如在core0上,则修改为如下即可。

       switch (coreNum)

       {

           case 0:

           {

               myQNum      =   708;

               destQNum    =   708;

               accChanNum  =   4;

               break;

           }

           default:

               goto error;

       }

    2. multi-core FFTC工程中IPC只是用在了多核之间的同步,核间通信使用了Navigator。

    3. 对的。

    请参考并反馈一下你的测试结果,谢谢

  • Andy Yin老师你好,

    首先,你的建议很好,使我受到了很大程度的启发,在此非常感谢你。其次,对于我的FFTC硬件加速器驱动,还有以下两个个问题不清楚:

    1.在multicore_example工程上按你说的建议修改,经测试,确是没有问题。但是,我想做的驱动是想把多实例与多核的工程进行融合(即MultiInst_testProject和multicore_exampleProject),使其具有多实例和多核运行的功能(比如说core0上用实例A,core1上用实例B,且在两个核上也要同时运行。)。目前,我的驱动是以多实例工程为模板进行的修改的(发送和接受分别用两个任务完成),在你的建议启发下,再次进行了修改,目前还未实现两核同时运行的状况,求指教?另外,对于我以上要求的驱动,请老师给些具体建议,在哪个例子工程上修改比较好?如何才能达到我的要求?

    2.在multicore_example工程中,如果是3个核运行的话,为什么是core0的结果由core1处理,core1的结果由core2处理,core2的结果由core0处理?假设在pHY层我有3处要用到FFT/IFFT,它们分别对应到core0,core1,core2上运行,它们的关系是否是core0的结果由core1处理,core1的结果由core2处理,core2的结果由core0处理?

  • wenzheng liu您好,

    1. 在FFTC_MultiInst_testProject工程上修改就好了。该工程默认是在core0上测试multiInst,根据你的需求涉及到如下几个修改点:

    a) 将test_main.c中line1129~1136注释掉,保证core0上只测试FFTCA;

    b) 将test_main.c中line1156修改为fftcInstNum = CSL_FFTC_B,保证core1上只测试FFTCB;

    c) 将test_main.c中函数test_fftc.c中的line949 (if (coreNum == SYS_INIT_CORE))注释掉,保证core0与core1均可运行到此处;

    d) 将test_main.c中函数test_fftc.c中的line952注释  //test_host_singlecore_queueshare (fftcInstNum, hFFTC);

    e) 修改test_singlecore_multipleinst.c 函数fftc_rx中line216与line224分别修改如下,保证产生的QM_HIGH_PRIO中断映射到正确的核上。

    rxCfg.accumCfg.drvCfg.accChannelNum =   FFTC_RX_ACC_CHANNEL_NUM + coreNum;

    rxCfg.accumCfg.drvCfg.accChannelNum =   FFTC_RX_ACC_CHANNEL_NUM + 8 + coreNum;

    f) 修改fftc_test.cfg中line37为MultiProc.setConfig(null, ["CORE0", "CORE1"]);保证core0与core1同步工作。

    修改完上述几点后,编译工程后再次运行就能达到你的需求,即core0与core1同步运行,core0上运行FFTCA,core1上运行FFTCB。

    2. multicore_example中的数据处理流只是个简单的multi-core示例,具体数据流的处理可以根据需求灵活管理配置,对于FFTC输出结果的后续处理没有任何的限制。

    wenzheng liu您好,方便透露你目前基于6670 FFTC做的是什么方面的应用么?

    目前MCSDK中给出的FFTC封装了很多LLD,提供了很多对外灵活的接口,考虑的很全面,但是相应也就变的比较复杂,如果你对FFTC及Navigator理解的比较好的话,我建议你后续可以尝试根据自己的具体需求进行简化。

    请参考并反馈一下你的测试结果与意见,谢谢!

  • Andy Yin老师你好,

    1.非常感谢你提的六点宝贵意见,目前,我的有关问题已完全解决。

    2.根据你的建议,我发现其中有五点建议我已修改,但是最关键的一点未能注意到,那就是对QM_HIGH_PRIO中断映射到正确核上理解未能到位,没有保证产生的QM_HIGH_PRIO中断映射到正确的核上。先前,因是默认在core0上运行,所以core0能正常运行,而不能在core1上正常接收FFT结果,现在加上corenum,在core1上也能正确运行。

    3.主要是基于6670芯片上做链状网通信项目,在phy层用到FFTC。

    4.Andy Yin老师你好,我接触6670芯片时间不是很长,以后如有问题(可能有些问题比较肤浅)还请多多指教。

    最后,对老师的详细回答非常满意,再次感谢你,谢谢!

  • wenzheng liu您好,

    不用客气,有问题尽管提出,我们共同探讨解决!

    同时也非常欢迎共享你宝贵的经验,谢谢!