You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »


Common ATCA driver introduction

The common ATCA driver is responsible for the following:

  • Connect to CPSW driver and establish communication with the registers of the firmware common structure and are
  • Provide API class, once instantiated using static function, the user is permitted to control the registers and create and read streams

Operation

The common ATCA driver uses the common platform software driver (establishes connections with hardware based on protocols and addresses described in YAML files). The API assumes that the CPSW YAML files were already read and parsed successfully. The API requires a path the denote where all the registers will reside. 

The YAMLs necessary for the correct operation of the common ATCA API are shown as follows

  • AppTop.yaml
  • AxiSysMonUltraScale.yaml
  • AppCore.yaml
  • AmcCarrierBsi.yaml
  • DaqMuxV2.yaml
  • AppTopJesd.yaml
  • AmcCarrierCore.yaml
  • AxiVersion.yaml
  • AmcCarrierBsa.yaml
  • BsaWaveformEngine.yaml
  • AxiStreamDmaRingWrite.yaml

Some of these YAMLs call one another, so the YAMLs that actually contain the registers are just some of them. The paths that are required for the registers are as follows

  • AmcCarrierCore/AxiVersion

  • AmcCarrierCore/AxiSysMonUltraScale

  • AmcCarrierCore/AmcCarrierBsi

  • AppTop/AppTopJesd(0/[0])

  • AppTop/AppTopJesd(1/[1])

  • AppTop/DaqMuxV2[0]

  • AppTop/DaqMuxV2[1]

  • AmcCarrierCore/AmcCarrierBsa/BsaWaveformEngine[0]/WaveformEngineBuffers

  • AmcCarrierCore/AmcCarrierBsa/BsaWaveformEngine[1]/WaveformEngineBuffers



atca Common API class

This class is responsible for DaqMux 0 and 1 configurations, JESD Top (AMC) 0 and 1, Waveform engine, Build information, and temperature information. 


Driver class diagram


API Instantiation

The static function if the parent class ATCACommonFw allows the instantiation of API class. It seems to return an instantiation of the child class as follows:

Instantiation function
ATCACommonFw IATCACommonFw::create(Path p)
{
    return IEntryAdapt::check_interface<ATCACommonFwAdapt, DevImpl>(p);
}


The code to instantiate the API is as follows

Instantiation
atcaCommon = IATCACommonFw::create(p_atcaCommon);


Stream instantiation

The stream can be created using the createStream method in the API. Streams can be instantiated separately by calling the CPSW stream creation function directly as follows

Stream instantiation
    try {
        _stream[0] = IStream::create(p_root->findByName(stream0));
    } 
    catch (InvalidArgError &e) {
        // Don't print error if the stream name is empty, as the user didn't
        // want to create this channel anyway.
    }
    catch (CPSWError &e) {
        fprintf(stderr, "CPSW Error: %s, file: %s, line: %d\n", e.getInfo().c_str(), __FILE__, __LINE__);
    }


YAML string mapping


CrossbarControlYaml API class

This class is responsible for configuring the timing cross bar. The timing cross bar is nothing more than four multiplexers configuring four outputs. The four outputs and the four inputs are as follows:

  • 0: NC TPG timing
  • 1: Mini TPG
  • 2: Back plane
  • 3: SC TPG timing

The UML diagram is shown as follows.

CrossbarControlYaml Class

The functions available are simply to instantiate a crossbar, and to configure and read current configuration. 

Exception handling


The driver does not throw any exceptions. Nonetheless, CPSW throws CPSWError errors and the driver propagates these exceptions. In these contexts the driver prints to stderr. Upper layers should catch exceptions of type CPSWError.




  • No labels