LimeSDR XTRX v1.3 Reference Clock and PPS

Hi!

I have a limeSDR XTRX v1.3 and would like to use an external 10MHz clock and the GPS antenna for PPS.

Can please someone provide the information or link to the documentation if this is even possible? Really these are basic features and i cannot find e.g. C API calls to adjust it.

Best regards

It is quite easy to use the features on GW 3.4+, since it is integrated into LimeSuiteNG (undocumented), you only have to poke registers for external clock and sync type AFAIK:

limeSPI write --chip=FPGA --stream=02810002 # trigger RX with pps after gps lock
limeSPI write --chip=FPGA --stream=02820002 # trigger TX with pps after gps lock

Take a look at `syncPPS` option in limeTRX source for how to do this in code.

But I have no information if it is working as designed on RX, and I have proven that currently it does not work for TX.

Lets hope that the gateware developers on it.

I could be wrong, but I suspect you can use 10 MHz external reference OR on-board GNSS/GPSDO. Can you clarify what you are trying to achieve.

@bl4h4j what you’re suggesting is triggering streaming based on PPS, which is different to the more common scenario of using integrated GNSS for GPSDO, or an external reference input.

Yes you’re right.

I have 2 Full LimeFEA PCI boards with one XTRX v1.3 and one XTRX v1.2. My primary goal would be to provide the 10MHZ clock of a GPSDO to the v1.3 and pass it through to the second, i.e. daisy chain. So therefore, the boards are already setup.

But I cannot find any reference where and how to activate the use of external refernce clock source. And in the best case get a verification via C API or SPI that it is switched on.

I’d be very glad if you could pin-point me where or even if it is possible with the current state of the FPGA gateway/firmware.

Another question is about the GPS. If I just want the onboard GPS antenna. How can i verify GPS is locked?

Thanks!

Wouldn’t it make more sense to either:

  1. Connect a GNSS antenna to one, use it as GPSDO and feed reference out from that to the second board;

  2. Feed 10 MHz external reference via a 1:2 splitter and into the external reference in on both boards.

Tagging @VytautasB to confirm gateware version support and @ricardas for software config.

  1. Depends on the GPSDO accuracy. In the days, I already used the Fairwave XTRX GPSDO and it never reached that level (approx. 0.1ppb) of the external one’s.
  2. So the LimeFEA Ref in/out ports are unnecessary :wink:

I mean, there are many ways, but for now I would appreciate to know about the software/API/SPI. If there is any possibility on how to switch it on/use it.

I need to check with that board, but it’s usually ref. in OR ref. out and the purpose is not to facilitate daisy chaining, which would result in an ever increasing phase difference as you connect more boards. Clock distribution structure should be more tree like.

Working code example for the litex GW for external clock source:

constexpr uint16_t REG_REF_CLK = 0x0018; // offs=1 : tcxo_en, offs=2 : ext_clk

const uint16_t clk_config_word = use_external 
        ? 0x0004  // tcxo_en = false, ext_clk = true
        : 0x0002; // tcxo_en = true,  ext_clk = false


const lime::OpStatus reg_wr = device->WriteRegister(0, REG_REF_CLK, clk_config_word, true); //set for external reference clock

(we used a 10MHz clock, and verified usage by tuning base and observing LO move on SA)

Thank you for the hint! I’ll dig into it and just hope there is also some GW version for v1.2 :crossed_fingers:

I can confirm that these are the registers needed to select external clock source. @mind GW for v1.2 and v1.3 are the same.