System Object Usage
When you program the RFSoC bitstream, a configuration file is uploaded to the board. This file configures the sampling rates and RF settings specified in the HDL Workflow Advisor. By default, this configuration is enough to get the board running at the correct settings that match the intended design. Properties might need run-time adjustment, such as the center frequency of a mixer or the sampling rate for a digital-to-analog converter (DAC) or analog-to-digital converter (ADC).
The HDL Workflow Advisor generates an example script for you to either use or modify the
script as needed. Typically, this script has a name of
Name>_setup_rfsoc.m and looks like this example script.
% This script was auto-generated from the HDL Coder % Workflow Advisor for the ZCU111 and ZCU216 % Edit this script as necessary to conform to your % design specification or settings %% Instantiate object and basic settings IPAddr = '192.168.1.101'; rfobj = soc.RFDataConverter('ZU49DR',IPAddr); PLLSrc = 'Internal'; ReferenceClock = 245.76; % MHz ADCSamplingRate = 2048; % MHz DACSamplingRate = 2048; % MHz DecimationFactor = 4; InterpolationFactor = 4; %% User FPGA-logic settings rfobj.FPGASamplesPerClock = 4; rfobj.ConverterClockRatio = 1;
If you do not modify this script, it is an exact replica of the configuration file used for the RF data converter. This script applies the main parameters, such as sampling rates, PLL settings, interpolation mode, and decimation mode, on every tile and channel across the ADC and DAC.
%% 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
Object functions that require tile ID and channel ID input arguments, such as
configureDACChannel, must be zero-based indexed.
The script establishes connection by using the setup routine. When you alter the
properties of the object, changes do not actually get applied to the board until you run the
applyConfiguration object function.
%% Apply settings to RFTool applyConfiguration(rfobj)
applyConfiguration object function applies only these properties
to the board:
Inverse Sync Mode
Mixer Mode (LO, data path type)
Enabling MTS SysRef
These object functions handle additional functionality that the
applyConfiguration object function does not handle.
To assist in changing the local oscillator (LO) center frequency, use the
configureADCLocalOscillator object functions. This code shows an example of the
general syntax for
configureADCLocalOscillator object functions:
%% DAC Tiles rfobj.configureDACLocalOscillator(1,3,LO_VALUE+10); % Create a shift in DAC RF NCO of 10 MHz %% ADC Tiles rfobj.configureADCLocalOscillator(0,0,-LO_VALUE);
In this code, the arguments represent the tile ID, channel ID, and LO value and arguments use zero-based indexing. For an example, see IQ Mixer Mode Capture.
Object functions such as
applyNyquistZone require an active connection to the board. Before using these
object functions, ensure that you run the