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.

AWR2944P: Issue of HWA 2D Max Advanced statistics

Part Number: AWR2944P

Tool/software:

Hi TI teams,

We want to use the 2D Max function of HWA to perform a log2 conversion on a Doppler FFT result (already magnitude processed, format: uint32_t) and calculate the maximum value. Due to the HWA's 2D Max format limitations, the A count is restricted to 1–255, and the B count is limited to less than 1023.

The following diagram illustrates the expected execution flow we aim to achieve.

Therefore, we designed it to process bin 0 and bin 1 in a single operation, with Bidx set to 4 (offset by 1 bin), and cycle when exceeding the range. We expect the Per-sample max value [0] and Per-sample max value [1] to be identical, both representing the maximum value of this dataset.

However, we found that the output values represent the maximum values of even and odd indices separately, while the Log2 results match our expectations.

The diagram below shows our configuration.

Could you help us identify where the issue in the configuration might be?

    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_IMMEDIATE;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_FFT;

    /* PREPROC CONFIG */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcEstResetMode = HWA_DCEST_INTERFSUM_RESET_MODE_NOUPDATE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcSubEnable = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.complexMultiply.cmultMode = HWA_COMPLEX_MULTIPLY_MODE_DISABLE;

    /* ACCELMODE CONFIG (FFT) */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftEn = HWA_FEATURE_BIT_DISABLE;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.magLogEn = HWA_FFT_MODE_MAGNITUDE_LOG2_ENABLED;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.fftOutMode = HWA_FFT_MODE_OUTPUT_DEFAULT;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.max2Denable = HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.histogramMode = HWA_HISTOGRAM_MODE_CDF_THRESHOLD;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.histogramScaleSelect = 10; /* init region : 0 ~ 2^10-1 */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.histogramSizeSelect = 6; /* 2^6 bin */

    /* SOURCE CONFIG */
    hwaParamCfg[paramsetIdx].source.srcAddr = DPU_DOPPLERHWADDMA_ADDR_TXNCC_HIST_PING_IN;

    hwaParamCfg[paramsetIdx].source.srcAcnt = 2 - 1;

    hwaParamCfg[paramsetIdx].source.srcAIdx = sizeof(uint32_t);
    hwaParamCfg[paramsetIdx].source.srcBIdx = sizeof(uint32_t);
    hwaParamCfg[paramsetIdx].source.srcBcnt = obj->numDopplerBins - 1;
    hwaParamCfg[paramsetIdx].source.srcRealComplex = 1; /* Real */
    hwaParamCfg[paramsetIdx].source.srcScale = 8;

    hwaParamCfg[paramsetIdx].source.srcWidth = HWA_SAMPLES_WIDTH_32BIT;
    hwaParamCfg[paramsetIdx].source.srcSign = 0; /* Unsigned */
    hwaParamCfg[paramsetIdx].source.srcConjugate = 0;
    hwaParamCfg[paramsetIdx].source.wrapComb = obj->numDopplerBins * sizeof(uint32_t);

    /* DEST CONFIG */
    hwaParamCfg[paramsetIdx].dest.dstAddr = DPU_DOPPLERHWADDMA_ADDR_TXNCC_HIST_PING_OUT;
    hwaParamCfg[paramsetIdx].dest.dstAcnt = 2 - 1;
    hwaParamCfg[paramsetIdx].dest.dstAIdx = sizeof(uint16_t);
    hwaParamCfg[paramsetIdx].dest.dstBIdx = sizeof(uint16_t);

    hwaParamCfg[paramsetIdx].dest.dstRealComplex = 1; /* Real */
    hwaParamCfg[paramsetIdx].dest.dstWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].dest.dstSign = 0; /* Unsigned */
    hwaParamCfg[paramsetIdx].dest.dstConjugate = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].dest.dstScale = 0;
    hwaParamCfg[paramsetIdx].dest.dstSkipInit = 0;

    errCode = HWA_configParamSet(obj->hwaHandle,
                                 hwParamsetIdx,
                                 &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
        goto exit;
    }

Thank you for your help in advance.

John