Contenido principal

serdes.AMI

Test AMI models and mimic EDA workflows

Since R2025a

Description

Use the serdes.AMI object to run and test statistical and time-domain simulations of AMI models in MATLAB®. You can also use the object to create a workflow that mimics the workflow of an EDA tool.

Note

You need licenses for SerDes Toolbox™ and Signal Integrity Toolbox™ to use this System object™.

To create the EDA-like workflow in MATLAB:

  1. Create the serdes.AMI object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Note

If you want to run AMI models in Simulink®, use the AMI block.

To mimic the transmitter-to-channel-to-receiver EDA workflow:

  • Create a TX AMI, channel, and RX AMI object.

  • Provide the TX AMI object with a channel impulse input from the channel object for statistical analysis and a stimulus waveform for time-domain analysis.

  • The channel object then modifies the returned TX time-domain waveform to create the channel output waveform.

  • The RX AMI object uses the returned TX impulse containing the channel and TX behavior for the statistical analysis.

  • For time-domain analysis, the RX AMI object uses the channel output waveform, which is generated from the TX time-domain behavior and channel operation.

For more information, see Running AMI Models in MATLAB (Signal Integrity Toolbox).

Creation

Description

AMI = serdes.AMI returns a serdes.AMI object that you can use to run AMI models in a workflow that resembles the EDA workflow.

AMI = serdes.AMI(Name=Value) sets properties using one or more name-value arguments. Unspecified properties have default values.

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Name of the DLL or SO file without the file extension, specified as a character array.

Path to the directory containing the DLL or SO files, specified as a character array.

Text representation of the settings and parameters of the AMI model per IBIS-AMI standard, specified as a character array. The input string defines how to run the DLL or SO executable files.

You can generate the input string from the AMI file using the generateDefaultInputString method.

For more information about the content and format of the input string, see the IBIS-AMI standard located at IBIS Specifications.

Example: (serdes_tx(Modulation_Levels 2)(FFE(Mode 2)(TapWeights(-1 0)(0 1)(1 0))))

Time of a single symbol duration, specified as a real scalar in seconds.

Data Types: double

Uniform time step of the waveform, specified as a real scalar in seconds.

Data Types: double

Size of the block of samples to pass to each call to the time-domain (GetWave) portion of the IBIS-AMI models, specified as a real scalar.

Length of the impulse response, specified as a real scalar.

Number of aggressors in the impulse response, specified as a real scalar. The impulse response must begin with a single victim impulse and optionally end with one or more aggressor impulses. Each victim and aggressor must be of the same length as RowSize.

Option to turn on pass-through mode, specified as either true or false. When you set PassThrough to true, the object bypasses any statistical or time-domain processing.

Option to turn on Init-only mode, specified as either true or false. When you set InitOnly to true, the object bypasses time-domain processing.

Option to ignore first block (BlockSize) of incoming time-domain signals, specified as true or false.

MATLAB workspace variable name to save the AMI data, specified as a character vector or a string. This is only valid for Simulink and is ignored in MATLAB workflow.

AMI results and data output, specified as a structure. The AMIData structure contains the input and output impulse responses, clock times, and Init (statistical domain) and GetWave (time-domain) outputs.

Usage

Description

[waveOut,impulseOut] = AMI(waveIn,impulseIn,clockIn) returns an output wave and impulse response from the input wave, input impulse response, and input clock times.

Input Arguments

expand all

Input waveform, specified as a scalar or vector of BlockSize length. The object uses this input for the time-domain analysis (GetWave).

For an AMI System object representing a transmitter, waveIn represents the stimulus input.

For an AMI System object representing a receiver, waveIn represents the time-domain waveform at the channel output.

Input impulse response, specified as an array. The object uses this input for statistical analysis (Init).

For AMI System object representing a transmitter, impulseIn represents the channel impulse response.

For AMI System object representing a receiver, impulseIn represents the combined channel and transmitter impulse response at the transmitter output.

The impulseIn argument should contain at minimum the victim channel impulse of RowSize length. To account for crosstalk, it can contain Aggressors number of aggressor impulses each RowSize in length. The victim and aggressor impulses are contained in a serialized single array of length RowSize*(1+Aggressors).

Input clock signal, specified as either -1 or an array. The object uses this input for clock forwarding. When used for clock forwarding, the array should contain clock times and end with a -1. For more information about how you can use clock forwarding, see Design IBIS-AMI Models to Support Clock Forwarding.

If you do not need to forward the clock, set clockIn to -1

Output Arguments

expand all

Output waveform, returned as a scalar or vector.

Output impulse response, returned as an array.

The impulseOut argument should contain at minimum the victim channel impulse of RowSize length. To account for crosstalk, it can contain Aggressors number of aggressor impulses each RowSize in length. The victim and aggressor impulses are contained in a serialized single array of length RowSize*(1+Aggressors).

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

generateDefaultInputStringGenerate input string from AMI file
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Create the TX AMI System object.

txAMI = serdes.AMI;
txAMI.LibraryPath = 'C:\serdes';                        % Path to the directory containing the DLL/SO file
txAMI.LibraryName = ['serdes_tx_' computer('arch')];    % Name of the DLL or SO file
txAMI
txAMI = 
  serdes.AMI with properties:

       LibraryName: 'serdes_tx_glnxa64'
       LibraryPath: 'C:\serdes'
       InputString: ''
        SymbolTime: 1.0000e-10
    SampleInterval: 6.2500e-12
         BlockSize: 1024
           RowSize: 7065
        Aggressors: 0
       PassThrough: false
          InitOnly: true
    SkipFirstBlock: true
        OutputName: 'AMIOut'
           AMIData: [1×1 struct]

Generate the input string from the AMI file for the transmitter attached with this example. You can also use your custom AMI file, but it must be available in the present working directory.

txInputString = txAMI.generateDefaultInputString('serdes_tx.ami');

Observe the generated input string. This transmitter contains an FFE operating in fixed mode and the modulation scheme is set to 3.

disp(serdes.AMI.generateDefaultInputString('serdes_tx.ami'));
(serdes_tx(Modulation_Levels 3)(FFE(Mode 1)(TapWeights(-1 0)(0 1)(1 0)(2 0))))

You can modify the input string to set the modulation scheme to 2 and bypass the FFE by setting FFE mode to 0.

txInputString = '(serdes_tx(Modulation_Levels 2)(FFE(Mode 0)(TapWeights(-1 0)(0 1)(1 0)(2 0))))';

Recreate the TX AMI system object with the updated input string.

txAMI.InputString = txInputString;
txAMI
txAMI = 
  serdes.AMI with properties:

       LibraryName: 'serdes_tx_glnxa64'
       LibraryPath: 'C:\serdes'
       InputString: '(serdes_tx(Modulation_Levels 2)(FFE(Mode 0)(TapWeights(-1 0)(0 1)(1 0)(2 0))))'
        SymbolTime: 1.0000e-10
    SampleInterval: 6.2500e-12
         BlockSize: 1024
           RowSize: 7065
        Aggressors: 0
       PassThrough: false
          InitOnly: true
    SkipFirstBlock: true
        OutputName: 'AMIOut'
           AMIData: [1×1 struct]

Version History

Introduced in R2025a

See Also

| | | |

Topics

External Websites