N310 Digital Radio Controller (drc_n310)

OpenCPI Digital Radio Controller (DRC) for n310 platform.

Design

drc_n310 architecture consists of the following primary layers:

  • DRC_N310: Implementation Layer of the OpenCPI DRC Finite-State Machine (FSM) Operations

  • DAUGHTERBOARD (DB): Configuration Layer for each N310 daughterboard, which utilizes the API controllers for each hardware chip.

  • PROXY/SLAVE: Communication Layer between the API controllers and the device workers

N310 Digital Radio Controller Architecture

Figure 22: N310 Digital Radio Controller Architecture

Interface

<ComponentSpec>
  <Property Name="configurations" Type="struct" Writable="true" SequenceLength='MAX_CONFIGURATIONS_p'
            Description="Each structure configures the radio for requested settings.">
    <Member Name='description' type='string' stringlength='MAX_STRING_LENGTH_p'
	    Description='A brief description of the configuration, useful for property dumps'/>
    <Member Name='recoverable' type='bool'
	    Description='If recoverable, the configuration will not cause a fatal program error if
			 it fails when enabled.  The error (if it occurs) will be queryable in the
			 status property.'/>
    <Member Name='channels' type='struct' sequencelength='MAX_CHANNELS_p'
	    Description='The channels that will be simultaneously enabled when this configuration
			 is enabled.'>
      <Member Name='description' type='string' stringlength='MAX_STRING_LENGTH_P'
	      Description='A brief description of the channel configuration, useful for property
			   dumps. E.g. what is this channel being used for?'/>
      <Member Name="rx"    Type="bool"
	      Description='Indicates a receive channel if true, otherwise a transmit (TX) channel'/>
      <Member Name="tuning_freq_MHz"              Type="double"/>
      <Member Name="bandwidth_3dB_MHz"            Type="double"/>
      <Member Name="sampling_rate_Msps"           Type="double"/>
      <Member Name="samples_are_complex"          Type="bool"/>
      <Member Name="gain_mode"                    Type="String"
                                                  StringLength="MAX_STRING_LENGTH_p"
                                                  Description='Set to empty-string, "auto", "manual", or
							       possibly something worker-specific.'/>
      <Member Name="gain_dB"                      Type="double"/>
      <Member Name="tolerance_tuning_freq_MHz"    Type="double"
                                                  Description="Tolerance which will determine lock success."/>
      <Member Name="tolerance_bandwidth_3dB_MHz"  Type="double"
                                                  Description="Tolerance which will determine lock success."/>
      <Member Name="tolerance_sampling_rate_Msps" Type="double"
                                                  Description="Tolerance which will determine lock success."/>
      <Member Name="tolerance_gain_dB"            Type="double"
                                                  Description="Tolerance which will determine lock success."/>
      <Member Name='rf_port_name' Type='string' stringlength='MAX_STRING_LENGTH_p'
	      Description='Optional RF port name for this channel, defaults to using the
	                   RF ports of the radio in order of their definition in this configuration,
			   within RX-capable and TX-capable ports.
			   If an RX channel has the rf-port name of "loopback" then it receives
			   from the tx channel with the same TX ordinal in the configuration'/>
      <Member Name='rf_port_num' Type='uchar'
	      Description='Optional RF port number for this channel, defaults to using the
	                   RF ports in the radio in order of their definition, within RX and TX.
			   Ignored if rf_port_mame is specified.'/>
      <Member Name='app_port_num' Type='uchar'
	      Description='Optional app port number for this channel, defaults to using the
	                   app ports in numerical order, within RX and TX'/>
    </Member>
  </Property>
</ComponentSpec>

Properties

  • MAX_STRING_LENGTH_p: Length of all string struct members.

    • Type: ushort

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 256

  • MAX_CONFIGURATIONS_p: Number of configurations supported.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 2

  • MAX_CHANNELS_p: Total number of channels supported at one time. Maximum number of channels in a radio configuration.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 2

  • MAX_RX_CHANNELS_p: Total number of RX channels supported at one time. Maximum number of RX channels connected to application.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 1

  • MAX_TX_CHANNELS_p: Total number of TX channels supported at one time. Maximum number of TX channels connected to application.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 1

  • MAX_RX_RF_PORTS_p: Number of RF Ports that can receive.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 1

  • MAX_TX_RF_PORTS_p: Number of RF Ports that can transmit.

    • Type: uchar

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: 1

  • rf_ports_rx: Names of all RF Ports that can receive.

    • Type: string

      • Sequence length: MAX_RX_RF_PORTS_p

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • rf_ports_tx: Names of all RF Ports that can transmit.

    • Type: string

      • Sequence length: MAX_TX_RF_PORTS_p

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_rx_tuning_freq_mhz: Minimum achievable tuning frequency in MHz for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_rx_tuning_freq_mhz: Maximum achievable tuning frequency in MHz for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_rx_bandwidth_3db_mhz: Minimum achievable bandwidth 3dB for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_rx_bandwidth_3db_mhz: Maximum achievable bandwidth 3dB for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_rx_sampling_rate_msps: Minimum achievable sampling rate for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_rx_sampling_rate_msps: Maximum achievable sampling rate for all RX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_rx_samples_complex: True if complex (IQ) samples are supported by any RX channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_rx_samples_real: True if real samples are supported by any RX channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_rx_gain_mode_auto: True if auto gain mode is supported by any RX data channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_rx_gain_mode_manual: True if manual gain mode is supported by any RX data channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_achievable_tx_tuning_freq_mhz: Minimum achievable tuning frequency in MHz for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_achievable_tx_tuning_freq_mhz: Maximum achievable tuning frequency in MHz for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_achievable_tx_bandwidth_3db_mhz: Minimum achievable bandwidth 3dB for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_achievable_tx_bandwidth_3db_mhz: Maximum achievable bandwidth 3dB for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • min_achievable_tx_sampling_rate_msps: Minimum achievable sampling rate for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • max_achievable_tx_sampling_rate_msps: Maximum achievable sampling rate for all TX channels.

    • Type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_tx_samples_complex: True if complex (IQ) samples are supported by any TX channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • is_supported_tx_samples_real: True if real samples are supported by any TX channel.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

  • enable_rx_resampling: True if resampling on RX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • enable_rx_digital_tuning: True if digital tuning on RX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • enable_rx_timestamping: True if timestamping on RX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • enable_tx_resampling: True if resampling on TX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • enable_tx_digital_tuning: True if digital tuning on TX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • enable_tx_timegating: True if timegating on TX channels are enabled.

    • Type: bool

    • Access:

      • Parameter: True

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: false

  • configurations: Each structure configures the radio for requested settings.

    • Type: struct

      • Sequence length: MAX_CONFIGURATIONS_p

      • Members:

        • description:

          • data_type: string

          • stringlength: MAX_STRING_LENGTH_p

        • recoverable:

          • data_type: bool

        • channels:

          • description:

            • data_type: string

            • stringlength: MAX_STRING_LENGTH_P

          • rx:

            • data_type: bool

          • tuning_freq_MHz:

            • data_type: double

          • bandwidth_3dB_MHz:

            • data_type: double

          • sampling_rate_Msps:

            • data_type: double

          • samples_are_complex:

            • data_type: bool

          • gain_mode:

            • data_type: string

            • stringlength: MAX_STRING_LENGTH_p

          • gain_dB:

            • data_type: double

          • tolerance_tuning_freq_MHz:

            • data_type: double

          • tolerance_bandwidth_3dB_MHz:

            • data_type: double

          • tolerance_sampling_rate_Msps:

            • data_type: double

          • tolerance_gain_dB:

            • data_type: double

          • rf_port_name:

            • data_type: string

            • stringlength: MAX_STRING_LENGTH_p

          • rf_port_num:

            • data_type: uchar

          • app_port_num:

            • data_type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: None

  • prepare: Writing a configuration ordinal to this property prepares it. Errors are fatal unless configuration is recoverable.

    • Type: ushort

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: None

  • start: Writing a configuration ordinal to this property enables it, putting it into an operational state, with samples flowing. If not already prepared, preparation is implied. Errors are fatal unless configuration is recoverable.

    • Type: ushort

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: None

  • stop: Writing a configuration ordinal to this property stops it. This returns a configuration to the prepared state.

    • Type: ushort

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: None

  • release: Writing a configuration ordinal to this property disables it. This returns a configuration to the initial state with no resources used for it.

    • Type: ushort

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: None

  • status: The status of all the defined configurations.

    • Type: struct

      • Sequence length: MAX_CONFIGURATIONS_p

      • Members:

        • state:

          • data_type: enum

          • enums: ['inactive', 'prepared', 'operating', 'error']

        • error:

          • data_type: string

          • stringlength: MAX_STRING_LENGTH_p

        • channels:

          • tuning_freq_MHz:

            • data_type: double

          • bandwidth_3dB_MHz:

            • data_type: double

          • sampling_rate_Msps:

            • data_type: double

          • gain_dB:

            • data_type: double

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: True

    • Default value: None

  • constraints

    • Type: struct

      • Sequence length: MAX_RX_RF_PORTS_p+MAX_TX_RF_PORTS_p

      • Members:

        • rf_port:

          • data_type: string

          • stringlength: MAX_STRING_LENGTH_p

        • RX:

          • data_type: bool

        • tuning_freq_MHz:

          • min:

            • data_type: double

          • max:

            • data_type: double

        • bandwidth_3dB_MHz:

          • min:

            • data_type: double

          • max:

            • data_type: double

        • sampling_rate_Msps:

          • min:

            • data_type: double

          • max:

            • data_type: double

        • sample_type:

          • real:

            • data_type: bool

          • complex:

            • data_type: bool

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

    • Default value: None

Implementations

Example Application

<?xml version="1.0"?>
<application>
  <Instance component='ocpi.platform.drc' name='drc_n310'>
    <property name='dba_tx0_en' value='true'/>
    <property name='dba_tx1_en' value='false'/>
    <property name='dba_rx0_en' value='true'/>
    <property name='dba_rx1_en' value='false'/>
    <property name='dba_int0_up_sample_factor' value='24'/>
    <property name='dba_int0_scale_output' value='5'/>
    <property name='dba_dec0_down_sample_factor' value='24'/>
    <property name='dba_dec0_scale_output' value='5'/>
    <property name='dbb_en' value='true'/>
    <property name='dbb_tx0_en' value='false'/>
    <property name='dbb_tx1_en' value='true'/>
    <property name='dbb_rx0_en' value='false'/>
    <property name='dbb_rx1_en' value='true'/>
    <property name='dbb_int1_up_sample_factor' value='24'/>
    <property name='dbb_int1_scale_output' value='5'/>
    <property name='dbb_dec1_down_sample_factor' value='24'/>
    <property name='dbb_dec1_scale_output' value='5'/>
    <property name='configurations'
              Value="{description first,
                      channels {{rx false,
                                rf_port_num 0,
                                tuning_freq_MHz 2450,
                                bandwidth_3dB_MHz 70,
                                sampling_rate_Msps 96,
                                samples_are_complex true,
                                gain_dB 10,
                                tolerance_tuning_freq_MHz 0.01,
                                tolerance_sampling_rate_Msps 0.01,
                                tolerance_gain_dB 1,
                                tolerance_bandwidth_3dB_MHz 10},
                                {rx true,
                                rf_port_num 2,
                                tuning_freq_MHz 2450,
                                bandwidth_3dB_MHz 70,
                                sampling_rate_Msps 96,
                                samples_are_complex true,
                                gain_dB 0,
                                tolerance_tuning_freq_MHz 0.01,
                                tolerance_sampling_rate_Msps 0.01,
                                tolerance_gain_dB 1,
                                tolerance_bandwidth_3dB_MHz 10},
                                {rx false,
                                rf_port_num 5,
                                tuning_freq_MHz 2450,
                                bandwidth_3dB_MHz 70,
                                sampling_rate_Msps 96,
                                samples_are_complex true,
                                gain_dB 10,
                                tolerance_tuning_freq_MHz 0.01,
                                tolerance_sampling_rate_Msps 0.01,
                                tolerance_gain_dB 1,
                                tolerance_bandwidth_3dB_MHz 10 },
                                {rx true,
                                rf_port_num 7,
                                tuning_freq_MHz 2450,
                                bandwidth_3dB_MHz 70,
                                sampling_rate_Msps 96,
                                samples_are_complex true,
                                gain_dB 0,
                                tolerance_tuning_freq_MHz 0.01,
                                tolerance_sampling_rate_Msps 0.01,
                                tolerance_gain_dB 1,
                                tolerance_bandwidth_3dB_MHz 10}}}"/>
  </Instance>
</application>

Dependencies

The dependencies to other elements in OpenCPI are:

  • ocpi.platform - DRC Specifications

Limitations

Limitations of drc_n310 are:

  • NONE