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.

关于C28X FPU的问题 , benchmark 的 cycle count对应时间是什么?

是不是SYSCLKOUT? 即CPU 时钟数? 我的一个FFT程序如下

    rfft_adc.Tail = &rfft.OutBuf;        // Link the RFFT_ADC_F32_STRUCT to
                                                   // RFFT_F32_STRUCT. Tail pointer of
                                                   // RFFT_ADC_F32_STRUCT is passed to
                                                   //  the OutBuf pointer of RFFT_F32_STRUCT
    rfft.FFTSize   = nRFFT_SIZE;
    rfft.FFTStages = nRFFT_STAGES;
    rfft_adc.InBuf = Signal_In;                     // Input buffer
    //rfft.InBuf     = Signal_In;                // Input buffer
    rfft.OutBuf    = &RFFT_Out_Buf[0];           // Output buffer
    rfft.CosSinBuf = &RFFT_Coef_Buf[0];          // Twiddle factor buffer
    rfft.MagBuf    = Signal_Mag;                 // Magnitude buffer
    rfft.PhaseBuf =  Signal_Phase;

    RFFT_f32_sincostable(&rfft);        // Calculate twiddle factor
    RFFT_adc_f32(&rfft_adc);            // Calculate real FFT with 12-bit ADC input

这段程序的执行时间 TI 给出的benchmark是 29466 cycle count, 我的系统是28335, 运行时钟是150M, RAM 使用片外RAM,测量下来所需时间是2508380*6.67ns = 16.7ms, 为什么会相差这么大? 我想了想,除了使用 片外RAM外,差别在哪里? 怎么会这样慢? 我在程序中使用了c28x   fast 库的。

  • 你是使用 哪种总线连接片外RAM的?如何测试FFT的运行时间的?片外的RAM会受到总线通信时间的限制。

  • 片外RAM使用XD0~XD15 连 ISSI 公司的 256 k 16 BIT RAM,测试是使用28335自身带的CPUTIMER0,进去时读一个CPUTIMER0的值,出来时再读一次CPUTIMER0的值,两个值相减,就认为是执行FFT所要的时间,同时,也用示波器观察28335 I/O翻转,两种方法的结果是一致的。

     

     

  • 16BIT数据总线连接到ISSI公司的256K RAM

    FFT执行时间测量:1,用CPUTIMER0计数,进出FFT程序相减, 2,示波器观察I/O翻转,两者基本一致。

  • 16BIT数据总线连接到ISSI公司的256K RAM

    FFT执行时间测量:1,用CPUTIMER0计数,进出FFT程序相减, 2,示波器观察I/O翻转,两者基本一致。

  • 主要原因可能还是在外部RAM的限制。由于通信等时间延迟。