Compatibility with Previous Releases

The Communications Toolbox™ Support Package for Xilinx® Zynq®-Based Radio updated the technology underpinning its features and workflows in release R2018b. Before release R2018b, the support package used Analog Devices® no-OS drivers to control the RF device. As of release R2018b and later, the support package adopted Analog Devices industrial I/O (IIO) drivers and the corresponding libiio library for interfacing with Linux® IIO devices. This transition gives access to more advanced device properties through new objects and blocks.

In R2018b and later, during the Guided Host-Radio Hardware Setup or Manual Host-Radio Hardware Setup, you have the option of setting up host-hardware communication for either the old or the updated infrastructure, but not both. You can reconfigure your hardware for either of these options at any time by starting the hardware setup again.

To run a design that uses objects or blocks released before R2018b, you must set up the hardware with the old infrastructure. However, it is strongly recommended to set up the hardware with the new infrastructure and to update your design by replacing old objects and blocks with the new ones. All objects and blocks released before R2018b will be removed in a future release. Since the functionality of the old and new infrastructure is very similar, updating your design requires only minor changes.

The next sections highlight compatibility considerations and describe how to update a design based on features released before R2018b.

How to Replace Radio Objects?

Before R2018b, interfacing with a supported AD9361/AD9364-based radio hardware was through a dedicated object specific to the platform.

For example:

% Before R2018b
devADI = sdrdev('ADI RF SOM');
devZC706 = sdrdev('ZC706 and FMCOMMS2/3/4');
devZedBoard = sdrdev('ZedBoard and FMCOMMS2/3/4');
In this code, devADI is a comm.SDRDevADIRFSOM radio object, devZC706 is a comm.SDRDevZC706FMC234 radio object, and devZedBoard is a comm.SDRDevZedBoardFMC234 radio object.

From R2018b, you can interface with a supported AD9361/AD9364-based radio hardware by using the comm.SDRDevAD936x radio object. To create this object, use 'AD936x' for any of the platforms in calls to sdrdev.

For example:

% From R2018b on
dev = sdrdev('AD936x');
Starting in R2018b and later, a radio hardware name identifier is required only when calling the downloadImage function.

For example:

% From R2018b on
downloadImage(dev,'BoardName','ADI RF SOM')

Replace old radio objects by following these guidelines.

Feature to be RemovedResultCompatibility Considerations
comm.SDRDevADIRFSOM radio objectWarns
comm.SDRDevZC706FMC234 radio object
comm.SDRDevZedBoardFMC234 radio object

How to Replace System Objects?

Before R2018b, sending and receiving data with an AD9361/AD9364-based radio hardware in MATLAB® was through a dedicated transmitter or receiver System object™.

For example:

% Before R2018b
rxADI = sdrrx('ADI RF SOM');
rxZC706 = sdrrx('ZC706 and FMCOMMS2/3/4');
rxZedBoard = sdrrx('ZedBoard and FMCOMMS2/3/4');
In this code, rxADI is a comm.SDRRxADIRFSOM receiver System object, rxZC706 is a comm.SDRRxZC706FMC234 receiver System object, and rxZedBoard is a comm.SDRRxZedBoardFMC234 receiver System object.

Starting in R2018b and later, to receive data from a supported AD9361/AD9364-based radio hardware in MATLAB, use the comm.SDRRxAD936x receiver System object. To send data to a supported AD9361/AD9364-based radio hardware from MATLAB, use the comm.SDRTxAD936x transmitter System object. To create the corresponding System objects, use 'AD936x' for any of the platforms in calls to sdrrx and sdrtx.

For example:

% From R2018b on
rx = sdrrx('AD936x');
tx = sdrtx('AD936x');

Replace old System objects by following these guidelines.

Feature to be RemovedResultCompatibility Considerations

comm.SDRRxADIRFSOM receiver System object

Warns
  • In calls to sdrrx, replace any AD9361/AD9364-based radio hardware name with 'AD936x', and use comm.SDRRxAD936x receiver System object instead.

  • In System object calls, the second output argument is now a valid data indicator of logical data type and not the length of data. Update your code accordingly.

  • Remove references to removed property ByPassUserLogic. If you have a custom bitstream loaded and you want to receive data directly from the RF card, you must reload the default bitstream.

  • Replace references to property EnableQuadratureTracking by EnableQuadratureCorrection

  • Replace references to property EnableRFDCTracking by EnableRFDCCorrection

  • Replace references to property EnableBasebandDCTracking by EnableBasebandDCCorrection

  • Consider using new functionalities:

comm.SDRRxZC706FMC234 receiver System object

comm.SDRRxZedBoardFMC234 receiver System object

comm.SDRTxADIRFSOM transmitter System objectWarns
  • In calls to sdrtx, replace any AD9361/AD9364-based radio hardware name with 'AD936x', and use comm.SDRTxAD936x transmitter System object instead.

  • Remove references to removed property ByPassUserLogic. If you have a custom bitstream loaded and you want to receive data directly from the RF card, you must reload the default bitstream.

  • Remove references to removed properties EnableBurstMode and NumFramesInBurst. For alternative methods, see Detect Underruns and Overruns.

  • Update references to DDS properties by replacing them with new ones: DDSTone1Freq, DDSTone2Freq, DDSTone1Scale, DDSTone2Scale.

  • Consider using new functionalities:

comm.SDRTxZedBoardFMC234 transmitter System object
comm.SDRTxZC706FMC234 transmitter System object

How to Replace Blocks?

Before R2018b, sending and receiving data with an AD9361/AD9364-based radio hardware in Simulink® was through a dedicated transmitter or receiver block. From R2018b, to receive data from a supported AD9361/AD9364-based radio hardware in Simulink, use the AD936x Receiver block. To send data to a supported AD9361/AD9364-based radio hardware from Simulink, use the AD936x Transmitter block.

Replace old blocks by following these guidelines.

Feature to be RemovedResultCompatibility Considerations
ADI RF SOM Receiver blockWarns
  • Replace receiver block for any AD9361/AD9364-based radio hardware with an AD936x Receiver block.

    1. Add a new AD936x Receiver to your model.

    2. Port the parameter values from the old block mask to the corresponding parameter fields on the new block mask. The Simulate using and Bypass user logic parameters are not available in the new block. If you have a custom bitstream loaded and you want to receive data directly from the RF card, you must reload the default bitstream.

    3. Match the lost samples port of the old block to the overflow port of the new block.

    4. Match the data length port of the old block to the data valid of the new block. The data valid port is disabled by default. Also note the data type difference.

  • Consider using new functionalities:

ZC706 and FMCOMMS2/3/4 Receiver block
ZedBoard and FMCOMMS2/3/4 Receiver block
ADI RF SOM Transmitter blockWarns
  • Replace transmitter block for any AD9361/AD9364-based radio hardware with an AD936x Transmitter block.

    1. Add a new AD936x Transmitter to your model.

    2. Port the parameter values from the old block mask to the corresponding parameter fields on the new block mask. Note that DDS parameters have a different configuration on the block mask. The Simulate using and Bypass user logic parameters are not available in the new block mask. If you have a custom bitstream loaded and you want to receive data directly from the RF card, you must reload the default bitstream. The Enable burst mode parameter is not available in the new block either. For alternative methods, see Detect Underruns and Overruns.

    3. Match the lost samples port of the old block to the underflow port of the new block.

  • Consider using new functionalities:

ZC706 and FMCOMMS2/3/4 Transmitter block
ZedBoard and FMCOMMS2/3/4 Transmitter block

Hardware-Software Co-Design Considerations

To enable hardware-software co-design, follow the updated instructions in Installation for Hardware-Software Co-Design.

HDL Code Generation

Because the underlying FPGA image changed in R2018b, you must regenerate your FPGA bitstreams for your updated model. For FPGA targeting, follow the instructions in Step 4. Generate HDL IP Core Using HDL Workflow Advisor. For hardware-software co-design, follow the instructions in Step 7. Generate FPGA Bitstream and Program Zynq Hardware.

Software Interface Models

If you want to deploy a new hardware-software co-design model, follow the instructions in Hardware-Software Co-Design Workflow. The workflow auto-generates a template software interface model containing the new receiver and transmitter blocks.

If you have a software interface model generated in a release before R2018b, you can update the generated software model by following these steps.

  1. Replace the old blocks by the new ones, see How to Replace Blocks?.

  2. On the advanced tab of the AD936x Receiver block mask, select Override automatic sample time. Then specify the value of the ARM Frame Rate block in the Sample time parameter. Delete the ARM Frame Rate block.

  3. Reconfigure the software interface model. In the model configuration panel, select Hardware Implementation, and for Hardware board, select Xilinx Zynq-Based IIO Radio.

See Also

Objects

System Objects

Blocks