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.

TCI6630K2L: K2L

Part Number: TCI6630K2L
Other Parts Discussed in Thread: RFSDK, , 66AK2L06, DAC38J84, ADC14X250, ADC32RF80, ADC12J4000

Hello.  Keep fighting with your RFSDK and can see *.tgtcfg files with DFE configuration.

Inside we can find addreses and some values we want to store in but these addresses are not physical apparently. How do these addresses correspond to physical memory?

  • Hi,

    I've notified the factory team.

    Best Regards,
    Yordan
  • Hello,

    Within the context of the 66Ak2L06 / TCI6630K2L devices, there is a Digital Front End (DFE) block for the radio.

    The RFSDK concept for programming DFE, is based on:

        a) selecting the radio select - that corresponds to the desired number of Tx, Rx streams, and Baseband channels

        b) the use case, related to the radio select, has a fixed register configuration, xxx.tgtcfg

        c) once the registers are loaded, and initialized, only DFE registers that have dynamic update capability are programmed through the RFSDK DFE commands.

    In the device datasheet,  Table 7-1 Device memory map lists the DFE base address.  The .tgtcfg address is the offset address to this physical address.   

    00 2400 0000 00 25FF FFFF 32M DFE configuration DFE configuration DFE configuration

    The .tgtcfg fixed configuration is based on a prebuilt configuration file, for wireless LTE, WCDMA with AFE7500, and adjacent market data converters DAC38J84, ADC12J4000, ADC14x250, ADC32RF80.

    More details about the DFE sections, can be seen in the DFE User Guide, "www.ti.com/.../spruhx8a.pdf"

     In a script environment for RFSDK, you can combine the RFSDK commands for static configuration, dynamic reconfiguration, along with memory write and read registers, if you have the specific registers addressing.

    Normally register based programming is not needed for using DFE with the RFSDK.

    an example

    # run_l_dfetest_lte20_lab1f
    # this lab shows the generate test script radio framework.
    # it requires file management, to update specific files, and scripts
    # we load BBTx data with a specific gain, we adjust the digital gains using the dfe set
    # commands. We then have frequency translation in the various sections
    # TxDDUC - channel NCO, frequency translation
    # sumchain channel -> stream selects which channels are in a Tx stream
    # CDFR Tx - stream NCO, used in digital combiner not in RFSDK controlled in TGTCFG
    # Tx - stream NCO, used for Tx stream IF translation
    # JESD Tx Transport - can modify Tx stream order to JESD
    # JESD Rx Transport - can modify Rx/Fb stream order to Rx and Fb
    # Rx RealtoComplex - if real input, translates by Fs/4, or 3Fs/4# not in RFSDK, controlled in TGTCFG
    # Rx switch - can translate JESD rx to Rx stream number not in RFSDK, controlled in TGTCFG
    # Rx - stream NCO, used for Rx stream iF translation *
    # Fb - stream select - selects one of two Fb stream inputs
    # Fb - RealtoComplex - if real input, translates by Fs/4, or 3Fs/4# not in RFSDK, controlled in TGTCFG
    # Fb - stream NCO, used for Fb stream iF translation *
    # RxDDUC Distributor - can select which Rx out stream or Fb stream for Rx DDUC channel
    # RxDDUC - channel NCO, frequency translation *
    # the JESD loopback have xxxx and xxxx_Rxlb for small cell configurations, xxxx Tx1 -> Fb, xxxx_Rxlb Tx0/Tx1 -> Rx0/Rx1
    # this modifies the scripting to output 4 Axc to 1 Tx stream, use Feedback path for Rx, currently uses AFE7500 need Tx1 -> Rx3 connect
    echo Start 4Axc LTE20 test, with AFE7500

    RFSDK_UPLINK_CN=2600.0
    RFSDK_DOWNLINK_CN=2600.0

    # erase previous test results
    cd /usr/share/radio/tests/rf-verif
    rm -f dsp_psd_dfe*.csv
    rm -f dsp_dfe*.csv

    cd /srv/www/data/
    rm -f dsp_psd_dfe*.csv
    rm -f dsp_dfe*.csv

    cd /usr/share/radio/tests/rf-verif/
    if [ -f report_result.dat ]
    then
    rm report_result.dat
    fi

    # copy the Tx BBIQ patterns to the /usr/share/radio/patterns folder
    read -p "use some tool to copy the .bin files to the folder, then press ENTER"

    # start the test, note this JESD loopback has decimated Tx and Rx in Tx block, and different JESD format to meet JESDRx loopback
    radio reset
    echo selecting 2x2-4xLTE20-SC-JESD3b-SD using AFE7500
    radio select 2x2-4xLTE20-SC-JESD3b-SD
    radio init

    echo Starting the DSP
    playback program
    playback start
    sleep 3

    echo Turning the radio on with AFE7500 RF loopback..
    radio on $RFSDK_UPLINK_CN $RFSDK_DOWNLINK_CN

    echo load LTE20 for 4Axc
    playback load 1 1 /usr/share/radio/patterns/LTE20_TM1p1_C1_m6.bin
    playback load 1 2 /usr/share/radio/patterns/LTE20_TM1p1_C2_m6.bin
    playback load 2 1 /usr/share/radio/patterns/LTE20_TM3p1_C1_m6.bin
    playback load 2 2 /usr/share/radio/patterns/LTE20_TM3p1_C2_m6.bin
    sleep 1

    echo set BBTx gain, sumshift gain, preCFR gain, postCFR gain as appropriate for CFR use
    radio set dfe.baseband.tx[0].gain -3.0
    radio set dfe.baseband.tx[1].gain -3.0
    radio set dfe.baseband.tx[2].gain -3.0
    radio set dfe.baseband.tx[3].gain -3.0

    radio set dfe.baseband.rx[0].gain 3.0
    radio set dfe.baseband.rx[1].gain 3.0
    radio set dfe.baseband.rx[2].gain 3.0
    radio set dfe.baseband.rx[3].gain 3.0

    radio set dfe.stream[0].summerGain 0.0
    radio set dfe.stream[1].summerGain 0.0
    # no CFR action
    radio set dfe.stream[0].cfr.preGain -6.0
    radio set dfe.stream[1].cfr.preGain -6.0
    radio set dfe.stream[0].cfr.postGain 6.0
    radio set dfe.stream[1].cfr.postGain 6.0

    echo 4Axc 2xLTE20 Tx1, 2xLTE20 Tx2
    echo Rx, Fb, RxDDUC values multiply by -1
    radio set dfe.baseband.tx[0].nco -10.0
    radio set dfe.baseband.tx[0].streamMask 1
    radio set dfe.baseband.tx[1].nco 10.0
    radio set dfe.baseband.tx[1].streamMask 1

    radio set dfe.baseband.tx[2].nco -10.0
    radio set dfe.baseband.tx[2].streamMask 2
    radio set dfe.baseband.tx[3].nco 10.0
    radio set dfe.baseband.tx[3].streamMask 2

    radio set dfe.stream[0].txNco 20.0
    radio set dfe.stream[1].txNco -20.0

    # note Rx Fdbk stream NCO frequencies are negated
    radio set dfe.stream[0].rxNco 20.0
    radio set dfe.stream[1].rxNco -20.0
    radio set dfe.feedback[0].nco 0.0

    # note Rx DDUC NCO frequencies are negated, stream IDs are 0,1 Rx, 2,3 unused Rx, 4 Fb
    radio set dfe.baseband.rx[0].nco -10.0
    radio set dfe.baseband.rx[0].streamId 0
    radio set dfe.baseband.rx[1].nco 10.0
    radio set dfe.baseband.rx[1].streamId 0

    radio set dfe.baseband.rx[2].nco -10.0
    radio set dfe.baseband.rx[2].streamId 0
    radio set dfe.baseband.rx[3].nco 10.0
    radio set dfe.baseband.rx[3].streamId 0

    read -p "use RFSDK webpage to look at the Tx, Rx stream, and BBRx 2carLTE20 Tx1, Tx2"

    echo read Tx register that combines Tx0 and Tx1 to Tx0; Tx2, Tx3 on stream Tx1
    devmem2 0x2560002c | grep Read | sed 's/.*: //'

    read -p "attempt to add Tx1 to Tx2, through register read (0x2aa0) OR with bit 12=1, x1000"
    devmem2 0x2560002c w 0x00003aa0 > /dev/null

    read -p "use RFSDK webpage to look at the Tx, Rx stream, this should be Axc Tx0,1,2,3 on stream Tx0, Axc2,3 on stream Tx1"
    playback stop
    radio off

    Regards,

    Joe Quintal

  • Thanks for your detailed explanation.

    Question 1:
    What if i want to change parameters in TGTCFG. What am i supposed to do to achieve it? As far as i know there is no document where registers are described well.

    Question 2:

    There is a way to control DFE via LLD if got it right and there is a function to control NCO freq

    DFE_Err Dfe_progDducMixerNCO
    (
    DFE_Handle hDfe,
    Uint32 rxDev,
    float refClock,
    float freq
    );

    freq is expressed in Mhz or what?

    Thanks a lot for your help

    Best regards, Eugene
  • Hello Eugene,
    Question 1 - no, you are supposed to select the functions for the DFE that you want from the .tgtcfg that is loaded. Typically the radio select and use case are setup to call a specific .tgtcfg. You can write down what you are trying to achieve in general terms:
    1.1 how many Tx and Rx streams
    1.2 what JESD data converter is being used, AFE7500, DAC38J84, ADC12J4000, ADC 14x250, ADC32RF80
    1.3 what Baseband sample rate rate is being processed LTE5, LTe10, LTE20, LTE40 (61.44), LTE60 (92.16), LTE80 (122.88)
    1.4 there are two different DFE PLL settings 245.76, 368.64Mhz
    1.5 other special processing

    Question 2 - the existing RFSDK (see RFSDK user guide, has a very simple linux control interface, command name and argument, that is in the last email I sent you. Normally NCO has the tuning frequency, and sample rate, for Receive Rx stream, Receive RxDDUC channel, the value is multiplied by -1 for downconversion.

    Regards,
    Joe Quintal
  • "A DFE configuration is designed for a specific RFSDK use case. Within the DFE configuration, once the signal processing is understood, the PFIR filter, currently can be replaced by patching the TGTCFG file coefficients. This is not a standard RFSDK feature currently."

    So if i'd like to use my own filter coeff. set i should patch TGTCFG file. But i'm not aware about DFE memory map and particular registers to be modified.

    Best regards, Eugene
  • Hello Eugene,
    One of the third party developers can assist you with custom PFIR coefficients, this involves knowing the PFIR coefficient map which is not linear.
    There are multiple banks, in Design 4, there is a PFIR coef select example. You can write coefficients to an unused bank in the desired DDUC. Then swap the PFIR select to the bank you have updated. There are no examples in the RFSDK for fully dynamic PFIR configuration, normally we have an odd symmetric filter that has 79 PFIR taps. The PFIR taps are divided into 4 banks, where the upper 16bits are in one memory offset, and the lower 2 bits are in the other memory offset.
    In the final version of design 4 for the Rx DDUC #3, you can select 1 of 4 preinstalled PFIRs.
    This could be customized with either Azcom - Italy, or Commagility - England, it is not in the standard RFSDK or its support.
    Regards
    Joe QUintal
  • Hi, thanks for your response. Is it possible to enable JESD204 without involving DFE processing  (bypass mode)?  How to achieve it?

    Best regards, Eugene

  • Hello Eugene,
    There is no DFE bypassed JESD mode, without DFE programming. There is adjacent market design 2 with the 14x250 JESDADC and DAC38J84. In this existing design, there is 1 stream with 122.88Msps complex stream rate. This 1Axc from IQN to DFE to DAC out, to ADC in to DFE back to IQN and back to memory is the closest example, to a functional bypass (it is not a complete DFE bypass).
    Regards,
    Joe Quintal
  • Please see TIDUB94A. User Guide for adjacent market design #2.
    Regards,
    Joe Quintal