##############################################################################
## This file is part of 'LCLS2 Common Carrier Core'.
## It is subject to the license terms in the LICENSE.txt file found in the 
## top-level directory of this distribution and at: 
##    https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 
## No part of 'LCLS2 Common Carrier Core', including this file, 
## may be copied, modified, propagated, or distributed except according to 
## the terms contained in the LICENSE.txt file.
##############################################################################
#schemaversion 3.0.0
#once AmcGenericAdcDacCore.yaml
#include JesdRx.yaml
#include JesdTx.yaml
#include Lmk04828.yaml
#include Adc16Dx370.yaml
#include Dac38J84.yaml
#include AmcGenericAdcDacCtrl.yaml
#include GenericMemory.yaml
#include Gthe3Channel.yaml

AmcGenericAdcDacCore: &AmcGenericAdcDacCore 
  description: Generic ADC/DAC AMC Core
  class: MMIODev
  configPrio: 1
  size: 0x00800000
  ########
  children:
  ########
    JesdRx:
      <<: *JesdRx
      at:
        offset: 0x00000000  
    ##################################################     
    JesdTx:
      <<: *JesdTx
      at:
        offset: 0x00100000 
    ##################################################     
    Lmk04828:
      <<: *Lmk04828
      at:
        offset: 0x00200000 
    ##################################################     
    Adc16Dx370:
      <<: *Adc16Dx370
      at:
        offset: 0x00300000 
        nelms: 2
        stride: 0x00100000              
    ##################################################     
    Dac38J84:
      <<: *Dac38J84
      at:
        offset: 0x00500000 
    ##################################################     
    AmcGenericAdcDacCtrl:
      <<: *AmcGenericAdcDacCtrl
      at:
        offset: 0x00600000       
    ##################################################
    Gthe3Channel:
      <<: *Gthe3Channel
      at:
        offset: 0x00700000   
        nelms: 4
        stride: 0x10000         
    ##################################################
    AxiLiteRingBuffer:
      at:
        offset: 0x00610000       
        nelms: 6
        stride: 0x10000      
      size: 0x10000   
      class: MMIODev
      configPrio: 1  
      children:
        MemoryArray:
          <<: *MemoryArray
          at:
            offset: 0x0
            nelms: 0x4000        
          mode: RO 
      instantiate: false          
    ##################################################
    InitAmcCard:
      description: Initialization for AMC card's JESD modules
      at:
        offset: 0x0
      class: SequenceCommand
      sequence:
        # Reset the RX's GTs
        - entry: JesdRx/ResetRxGTs
          value: 0x1  
          
        # Reset the TX's GTs
        - entry: JesdTx/ResetTxGTs
          value: 0x1            
          
        # Calibrate the JESD ADCs
        - entry: Adc16Dx370/CalibrateAdc
          value: 0x1       
        # 100 ms sleep
        - entry: usleep
          value: 100000       

        # Power up the LMK's SYSREF
        - entry: Lmk04828/PwrUpSysRef
          value: 0x1       
        # 1000 ms sleep
        - entry: usleep
          value: 1000000          

        # Clear the Alarms
        - entry: Lmk04828/InitLmk          
          value: 0x1 
          
        # Init the DACs
        - entry: Dac38J84/InitDac     
          value: 0x1       
        # 100 ms sleep
        - entry: usleep
          value: 100000
          
        # Clear the Alarms
        - entry: Dac38J84/ClearAlarms  
          value: 0x1       
        # 100 ms sleep
        - entry: usleep
          value: 100000  
          
        # Reset status counters
        - entry: AmcGenericAdcDacCtrl/CntRst          
          value: 0x1           
    ##################################################
