Hi,
I’m encountering an issue while implementing the MTS feature on the ZCU208 using MATLAB. From what I can see in the RF_init.cfg file, there seems to be a configuration problem. The initial setup appears to be correct and the MTS function starts properly, but afterwards other functions are called with incorrect arguments. Specifically, ResetNCOPhase is being applied to DACs 0 and 1, whereas on the ZCU208 the active DACs are 0 and 2. As a result, the log reports an error stating digital datapath 1 is not active. Should I manually modify the init file, or is possible to fix the problem in the MATLAB script instead?
SetExtParentclk 0 2 SetExtpllClkRate 0 8 2 SetExtpllClkRate 0 4 2 SetExtpllClkRate 0 1 2 SetupFIFO 0 0 1 SetupFIFO 0 1 1 SetupFIFO 0 2 1 SetupFIFO 0 3 1 SetupFIFO 1 0 1 SetupFIFO 1 1 1 SetupFIFO 1 2 1 SetupFIFO 1 3 1 SetDataPathMode 0 0 1 SetDataPathMode 0 2 1 SetDataPathMode 1 0 1 SetDataPathMode 1 2 1 SetDataPathMode 2 0 1 SetDataPathMode 2 2 1 SetDataPathMode 3 0 1 SetDataPathMode 3 2 1 SetClkDistribution 3 1 245.760000 3932.160000 1 1 5 1 245.760000 3932.160000 1 0 3 1 245.760000 3932.160000 1 0 5 1 245.760000 3932.160000 1 0 3 1 245.760000 3932.160000 1 0 5 1 245.760000 3932.160000 1 1 3 1 245.760000 3932.160000 1 0 5 1 245.760000 3932.160000 1 0 MTS_Sysref_Config 0 15 15 PAUSE SetMixerSettings 1 0 0 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 0 0 SetMixerSettings 1 0 2 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 0 2 SetMixerSettings 1 1 0 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 1 0 SetMixerSettings 1 1 2 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 1 2 SetMixerSettings 1 2 0 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 2 0 SetMixerSettings 1 2 2 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 2 2 SetMixerSettings 1 3 0 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 3 0 SetMixerSettings 1 3 2 1250.000000 0.000000 3 2 0 2 1 ResetNCOPhase 1 3 2 SetMixerSettings 0 0 0 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 0 0 SetMixerSettings 0 0 1 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 0 1 SetMixerSettings 0 1 0 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 1 0 SetMixerSettings 0 1 1 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 1 1 SetMixerSettings 0 2 0 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 2 0 SetMixerSettings 0 2 1 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 2 1 SetMixerSettings 0 3 0 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 3 0 SetMixerSettings 0 3 1 -1250.000000 0.000000 3 2 0 3 1 ResetNCOPhase 0 3 1 SetDecimationFactor 0 0 2 SetDecimationFactor 0 1 2 SetDecimationFactor 1 0 2 SetDecimationFactor 1 1 2 SetDecimationFactor 2 0 2 SetDecimationFactor 2 1 2 SetDecimationFactor 3 0 2 SetDecimationFactor 3 1 2 SetInterpolationFactor 0 0 2 SetInterpolationFactor 0 2 2 SetInterpolationFactor 1 0 2 SetInterpolationFactor 1 2 2 SetInterpolationFactor 2 0 2 SetInterpolationFactor 2 2 2 SetInterpolationFactor 3 0 2 SetInterpolationFactor 3 2 2 SetInvSincFIR 0 0 0 SetInvSincFIR 0 2 0 SetInvSincFIR 1 0 0 SetInvSincFIR 1 2 0 SetInvSincFIR 2 0 0 SetInvSincFIR 2 2 0 SetInvSincFIR 3 0 0 SetInvSincFIR 3 2 0 PAUSE MTS_Sysref_Config 1 15 15 MultiConverter_Sync 1 -1 15 MultiConverter_Sync 0 -1 15 MTS_Sysref_Config 0 15 15 ResetNCOPhase 0 0 0 ResetNCOPhase 0 0 1 ResetNCOPhase 0 1 0 ResetNCOPhase 0 1 1 ResetNCOPhase 0 2 0 ResetNCOPhase 0 2 1 ResetNCOPhase 0 3 0 ResetNCOPhase 0 3 1 ResetNCOPhase 1 0 0 ResetNCOPhase 1 0 1 ResetNCOPhase 1 1 0 ResetNCOPhase 1 1 1 ResetNCOPhase 1 2 0 ResetNCOPhase 1 2 1 ResetNCOPhase 1 3 0 ResetNCOPhase 1 3 1 MTS_Sysref_Config 1 15 15 SetNyquistZone 1 0 0 1 SetNyquistZone 1 0 2 1 SetNyquistZone 1 1 0 1 SetNyquistZone 1 1 2 1 SetNyquistZone 1 2 0 1 SetNyquistZone 1 2 2 1 SetNyquistZone 1 3 0 1 SetNyquistZone 1 3 2 1 SetNyquistZone 0 0 0 1 SetNyquistZone 0 0 1 1 SetNyquistZone 0 1 0 1 SetNyquistZone 0 1 1 1 SetNyquistZone 0 2 0 1 SetNyquistZone 0 2 1 1 SetNyquistZone 0 3 0 1 SetNyquistZone 0 3 1 1
%%
% This script was auto-generated from SoC Builder on 22-Nov-2025 17:20:31
% for the model 'soc_model'.
% Edit this script as necessary to conform to your design specification or
% settings.
%% Instantiate object and basic settings
IPAddr = '169.254.0.2';
rfobj = soc.RFDataConverter('ZU48DR',IPAddr);
rfobj.MTSConfigure = true;
PLLSrc = 'Internal';
ReferenceClock = 245.76; % MHz
ADCSamplingRate = 3932.16; % MHz
DACSamplingRate = 3932.16; % MHz
DecimationFactor = 2;
InterpolationFactor = 2;
adcFineMixMode = true; % if set to false use coarse mixer
dacFineMixMode = true; % if set to false use coarse mixer
%% User FPGA-logic settings
rfobj.FPGASamplesPerClock = 8;
rfobj.ConverterClockRatio = 1;
% Check if FPGA clock-rate exceeds timing used during synthesis
FPGAClockRate = ADCSamplingRate/DecimationFactor/rfobj.FPGASamplesPerClock;
if FPGAClockRate > 245.76
warning(['Selected FPGA rate %3.3f MHz exceeds the timing that was used ' ...
'during synthesis (%3.3f MHz) for this design! Timing failures may ' ...
'occur which can lead to unexpected behavior. Re-synthesizing your ' ...
'design may be required to achieve faster rates.'],...
FPGAClockRate, 245.76);
end
%% Establish TCP/IP connection
setup(rfobj);
%% Set External Clocking Options
% Set required clocks for MTS
rfobj.LMKClkSelect = 'SYSREF';
rfobj.configureLMXPLL(ReferenceClock);
%% Setup ADC/DAC Tile sampling and PLL rates
for TileId = 0:(rfobj.TotalADCTiles-1)
rfobj.configureADCTile(TileId,PLLSrc,ReferenceClock,ADCSamplingRate);
for ChId = 0:(rfobj.ADCChannelsPerTile-1)
rfobj.configureADCChannel(TileId,ChId,DecimationFactor);
end
end
for TileId = 0:(rfobj.TotalDACTiles-1)
rfobj.configureDACTile(TileId,PLLSrc,ReferenceClock,DACSamplingRate);
for ChId = 0:(rfobj.DACChannelsPerTile-1)
rfobj.configureDACChannel(TileId,ChId,InterpolationFactor,'DUCMode','FullNyquistDUC');
end
end
%% ADC IQ mode settings
ADC_DDC_LO = [-1250 -1250 -1250 -1250 -1250 -1250 -1250 -1250];
ADC_MixingScale = '1';
ADC_MixerPhase = [0 0 0 0 0 0 0 0];
if rfobj.MTSConfigure
EventMode = 'Sysref';
else
EventMode = 'Tile';
end
for TileId = 0:(rfobj.TotalADCTiles-1)
for ChId = 0:(rfobj.ADCChannelsPerTile-1)
if adcFineMixMode %Fine Mixing Mode
chIndx = ChId + 1 + rfobj.ADCChannelsPerTile*TileId; % one-based index
configureADCMixer(rfobj, TileId, ChId, 'Fine', ADC_DDC_LO(chIndx), EventMode, ADC_MixerPhase(chIndx), ADC_MixingScale);
else %Coarse Mixing Mode
configureADCMixer(rfobj, TileId, ChId, 'Coarse', '-Fs/4', EventMode, ADC_MixerPhase, ADC_MixingScale);
end
end
end
%% DAC IQ mode settings
DAC_DDC_LO = [1250 1250 1250 1250 1250 1250 1250 1250];
DAC_MixingScale = '1';
DAC_MixerPhase = [0 0 0 0 0 0 0 0];
if rfobj.MTSConfigure
EventMode = 'Sysref';
else
EventMode = 'Immediate';
end
for TileId = 0:(rfobj.TotalDACTiles-1)
for ChId = 0:(rfobj.DACChannelsPerTile-1)
if dacFineMixMode %Fine Mixing Mode
chIndx = ChId + 1 + rfobj.DACChannelsPerTile*TileId; % one-based index
configureDACMixer(rfobj, TileId, ChId, 'Fine', DAC_DDC_LO(chIndx), EventMode, DAC_MixerPhase(chIndx), DAC_MixingScale);
else %Coarse Mixing Mode
configureDACMixer(rfobj, TileId, ChId, 'Coarse', 'Fs/4', EventMode, DAC_MixerPhase, ADC_MixingScale);
end
end
end
%% Apply settings to RFTool
applyConfiguration(rfobj);
applyNyquistZone(rfobj);
%% Perform MTS capture
rfobj.enableMTS();
%% Disconnect and clear system object
release(rfobj);