i2c0: I2C.EFR32_I2CController @ {
        sysbus <0x4B000000, +0x4000>; // I2C0_S
        sysbus <0x5B000000, +0x4000>  // I2C0_NS
    }
    -> nvic@27
    
usart0: UART.EFR32xG2_USART_0 @ {
        sysbus <0x4005C000, +0x4000>; // USART0_S
        sysbus <0x5005C000, +0x4000>  // USART0_NS
    }
    clockFrequency: 39000000
    ReceiveIRQ -> nvic@9
    TransmitIRQ -> nvic@10
    RxDataAvailableRequest -> ldma@0x0040
    RxDataAvailableSingleRequest -> ldma@0x1040
    RxDataAvailableGpioSignal -> gpioPort@0x1201
    TxBufferLowRequest -> ldma@0x0042
    TxBufferLowSingleRequest -> ldma@0x1042
    TxEmptyRequest -> ldma@0x0044

eusart0: UART.EFR32xG2_EUSART_2 @ {
        sysbus <0x4B010000, +0x4000>; // EUSART0_S
        sysbus <0x5B010000, +0x4000>  // EUSART0_NS
    }
    clockFrequency: 39000000
    ReceiveIRQ -> nvic@11
    TransmitIRQ -> nvic@12
    RxFifoLevel -> ldma@0x00F0
    RxFifoLevelGpioSignal -> gpioPort@0x1202
    TxFifoLevel -> ldma@0x00F1

eusart1: UART.EFR32xG2_EUSART_2 @ {
        sysbus <0x400A0000, +0x4000>; // EUSART1_S
        sysbus <0x500A0000, +0x4000>  // EUSART1_NS
    }
    clockFrequency: 39000000
    ReceiveIRQ -> nvic@13
    TransmitIRQ -> nvic@14
    RxFifoLevel -> ldma@0x0100
    RxFifoLevelGpioSignal -> gpioPort@0x1203
    TxFifoLevel -> ldma@0x0101

radio: Wireless.EFR32xG24_Radio @ {
        sysbus new Bus.BusMultiRegistration { address: 0x40098000; size: 0x4000; region: "hostmailbox" };
        sysbus new Bus.BusMultiRegistration { address: 0x50098000; size: 0x4000; region: "hostmailbox_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xA8004000; size: 0x4000; region: "frc" };
        sysbus new Bus.BusMultiRegistration { address: 0xA800C000; size: 0x4000; region: "agc" };
        sysbus new Bus.BusMultiRegistration { address: 0xA8010000; size: 0x4000; region: "crc" };
        sysbus new Bus.BusMultiRegistration { address: 0xA8014000; size: 0x4000; region: "modem" };
        sysbus new Bus.BusMultiRegistration { address: 0xA8018000; size: 0x4000; region: "synth" };
        sysbus new Bus.BusMultiRegistration { address: 0xA801C000; size: 0x4000; region: "protimer" };
        sysbus new Bus.BusMultiRegistration { address: 0xA8020000; size: 0x4000; region: "rac" };
        sysbus new Bus.BusMultiRegistration { address: 0xA802C000; size: 0x4000; region: "rfmailbox" };
        sysbus new Bus.BusMultiRegistration { address: 0xAA000000; size: 0x4000; region: "bufc" };
        sysbus new Bus.BusMultiRegistration { address: 0xB8004000; size: 0x4000; region: "frc_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB800C000; size: 0x4000; region: "agc_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB8010000; size: 0x4000; region: "crc_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB8014000; size: 0x4000; region: "modem_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB8018000; size: 0x4000; region: "synth_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB801C000; size: 0x4000; region: "protimer_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB8020000; size: 0x4000; region: "rac_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xB802C000; size: 0x4000; region: "rfmailbox_ns" };
        sysbus new Bus.BusMultiRegistration { address: 0xBA000000; size: 0x4000; region: "bufc_ns" }
    }
    ram: sram
    sequencer: seqcpu
    // Main CPU interrupts
    AutomaticGainControlIRQ -> nvic@30
    BufferControllerIRQ -> nvic@31
    FrameControllerPrioritizedIRQ -> nvic@32
    FrameControllerIRQ -> nvic@33
    ModulatorAndDemodulatorIRQ -> nvic@34
    ProtocolTimerIRQ -> nvic@35
    RadioControllerRadioStateMachineIRQ -> nvic@36
    RadioControllerSequencerIRQ -> nvic@37
    HostMailboxIRQ -> nvic@38
    SynthesizerIRQ -> nvic@39
    // Sequencer CPU interrupts
    SeqOffIRQ ->seqnvic@0
    SeqRxWarmIRQ ->seqnvic@1
    SeqRxSearchIRQ ->seqnvic@2
    SeqRxFrameIRQ ->seqnvic@3
    SeqRxPoweringDownIRQ ->seqnvic@4
    SeqRx2RxIRQ ->seqnvic@5
    SeqRxOverflowIRQ ->seqnvic@6
    SeqRx2TxIRQ ->seqnvic@7
    SeqTxWarmIRQ ->seqnvic@8
    SeqTxIRQ ->seqnvic@9
    SeqTxPoweringDownIRQ ->seqnvic@10
    SeqTx2RxIRQ ->seqnvic@11
    SeqTx2TxIRQ ->seqnvic@12
    SeqShutdownIRQ ->seqnvic@13
    SeqRadioControllerIRQ ->seqnvic@14
    SeqFrameControllerIRQ ->seqnvic@15
    SeqFrameControllerPriorityIRQ ->seqnvic@16
    SeqModulatorAndDemodulatorIRQ ->seqnvic@17
    SeqBufferControllerIRQ ->seqnvic@18
    SeqAutomaticGainControlIRQ ->seqnvic@19
    SeqProtocolTimerIRQ -> seqnvic@20
    SeqSynthesizerIRQ -> seqnvic@22
    SeqRfMailboxIRQ -> seqnvic@23

msc: Miscellaneous.SiLabs.EFR32xG2_MSC_3 @ {
        sysbus <0x40030000, +0x4000>; // MSC_S
        sysbus <0x50030000, +0x4000>  // MSC_NS
    }
    cpu: cpu
    IRQ -> nvic@50
    flashSize: 0x180000
    flashPageSize: 0x2000

gpioPort: GPIOPort.EFR32xG2_GPIO_3 @ {
        sysbus <0x4003C000, +0x4000>; // GPIO_S
        sysbus <0x5003C000, +0x4000>  // GPIO_NS
    }
    EvenIRQ -> nvic@26
    OddIRQ -> nvic@25

bitclear: Miscellaneous.BitAccess
    address: 0x2000
    mode: BitAccessMode.Clear

bitset: Miscellaneous.BitAccess
    address: 0x1000
    mode: BitAccessMode.Set

sram: Memory.MappedMemory @ sysbus 0x20000000
    size: 0x40000

seqram: Memory.MappedMemory @ {
        sysbus 0xA0000000;
        sysbus 0xB0000000;

        sysbus new Bus.BusPointRegistration {
            address: 0x0;
            cpu: seqcpu
        }
    }
    size: 0x4000

frcram: Memory.MappedMemory @ {
        sysbus 0xA0004000;
        sysbus 0xB0004000;

        sysbus new Bus.BusPointRegistration {
            address: 0x00004000;
            cpu: seqcpu
        }
    }
    size: 0x1000

nvic: IRQControllers.NVIC @ sysbus new Bus.BusPointRegistration {
        address: 0xE000E000;
        cpu: cpu
    }
    -> cpu@0
    systickFrequency: 39000000

seqnvic: IRQControllers.NVIC @ sysbus new Bus.BusPointRegistration {
        address: 0xE000E000;
        cpu: seqcpu
    }
    -> seqcpu@0

cpu: CPU.CortexM @ sysbus
    nvic: nvic
    cpuType: "cortex-m33"
    cpuId: 0

seqcpu: CPU.CortexM @ sysbus
    nvic: seqnvic
    cpuType: "cortex-m0+"
    cpuId: 1
    IsHalted: true

timer0: Timers.EFR32xG2_TIMER_1 @ {
        sysbus <0x40048000, +0x4000>; // TIMER0_S
        sysbus <0x50048000, +0x4000>  // TIMER0_NS
    }
    frequency: 20000000 //expected frequency for power manager HW tests
    width: 16
    -> nvic@4

timer1: Timers.EFR32_Timer @ {
        sysbus <0x4004C000, +0x4000>; // TIMER1_S
        sysbus <0x5004C000, +0x4000>  // TIMER1_NS
    }
    frequency: 0x1000000 //bogus
    width: TimerWidth.Bit16
    -> nvic@5

ldma: DMA.EFR32MG24_LDMA @ {
        sysbus new Bus.BusMultiRegistration { address: 0x40040000; size: 0x4000; region: "ldma" };     // LDMA_S
        sysbus new Bus.BusMultiRegistration { address: 0x50040000; size: 0x4000; region: "ldma" };     // LDMA_NS
        sysbus new Bus.BusMultiRegistration { address: 0x40044000; size: 0x4000; region: "ldmaxbar" }; // LDMAXBAR_S
        sysbus new Bus.BusMultiRegistration { address: 0x50044000; size: 0x4000; region: "ldmaxbar" }  // LDMAXBAR_NS
    }
    -> nvic@21

wtimer0: Timers.EFR32_Timer @ {
        sysbus <0x4B004000, +0x4000>; // WDOG0_S
        sysbus <0x5B004000, +0x4000>  // WDOG0_NS
    }
    frequency: 0x1000000 //bogus
    width: TimerWidth.Bit32
    -> nvic@42

wtimer1: Timers.EFR32_Timer @ {
        sysbus <0x4B008000, +0x4000>; // WDOG1_S
        sysbus <0x5B008000, +0x4000>  // WDOG1_NS
    }
    frequency: 0x1000000 //bogus
    width: TimerWidth.Bit32
    -> nvic@43

deviceInformation: Miscellaneous.SiLabs.EFR32xG2_DeviceInformation @ sysbus 0x0FE08000
    deviceFamily: DeviceFamily.EFR32MG24
    deviceNumber: 0x1
    flashDevice: flash
    sramDevice: sram

DCDC_IF: Python.PythonPeripheral @ sysbus 0x50094028
    size: 0x4
    initable: true
    script: "request.Value = 0xffffffff"

flash: Memory.MappedMemory @ sysbus 0x08000000
    size: 0x17E000

cmu: Miscellaneous.SiLabs.EFR32xG2_CMU_3 @ {
        sysbus <0x40008000, +0x4000>; // CMU_S
        sysbus <0x50008000, +0x4000>  // CMU_NS
    }
    hfxo: hfxo
    dpll: dpll

lfxo: Miscellaneous.SiLabs.EFR32xG2_LFXO_1 @ {
        sysbus <0x40020000, +0x4000>; // LFXO_S
        sysbus <0x50020000, +0x4000>  // LFXO_NS
    }

hfrco0: Miscellaneous.SiLabs.EFR32xG2_HFRCO_2 @ {
        sysbus <0x40010000, +0x4000>; // HFRCO_S
        sysbus <0x50010000, +0x4000>  // HFRCO_NS
    }

dpll: Miscellaneous.SiLabs.EFR32xG2_DPLL_1 @ {
        sysbus <0x4001C000, +0x4000>; // DPLL0_S
        sysbus <0x5001C000, +0x4000>  // DPLL0_NS
    }

lfrco: Miscellaneous.SiLabs.EFR32xG2_LFRCO_2 @ {
        sysbus <0x40024000, +0x4000>; // LFRCO_S
        sysbus <0x50024000, +0x4000>  // LFRCO_NS
    }

hfxo: Miscellaneous.SiLabs.EFR32xG2_HFXO_3 @ {
        sysbus <0x4A004000, +0x4000>; // HFXO0_S
        sysbus <0x5A004000, +0x4000>  // HFXO0_NS
    }
    startupDelayTicks: 3   //should remain <= 20 to pass early wakeup conditions
    IRQ -> nvic@44

hfrco1: Miscellaneous.SiLabs.EFR32xG2_HFRCO_2 @ {
        sysbus <0x4A000000, +0x4000>; // HFRCOEM23_S
        sysbus <0x5A000000, +0x4000>  // HFRCOEM23_NS
    }

emu: Miscellaneous.SiLabs.EFR32xG2_EMU_3 @ {
        sysbus <0x40004000, +0x4000>; // EMU_S
        sysbus <0x50004000, +0x4000>  // EMU_NS
    }

syscfg: Miscellaneous.SiLabs.EFR32xG2_SYSCFG_3 @ {
        sysbus <0x4007C000, +0x4000>; // SYSCFG_S
        sysbus <0x5007C000, +0x4000>  // SYSCFG_NS
    }

sysrtc: Miscellaneous.SiLabs.EFR32xG2_SYSRTC_1 @ {
        sysbus <0x400A8000, +0x4000>; // SYSRTC0_S
        sysbus <0x500A8000, +0x4000>  // SYSRTC0_NS
    }   
    frequency: 32768
    IRQ -> nvic@67

semailbox: Miscellaneous.SiLabs.EFR32xG2_SEMAILBOX_1 @ {
        sysbus <0x4C000000, +0x4000>; // SEMAILBOX_S
        sysbus <0x5C000000, +0x4000>  // SEMAILBOX_NS
    }
    RxIRQ -> nvic@65
    TxIRQ -> nvic@66

prs: Miscellaneous.SiLabs.EFR32xG2_PRS_3 @ {
        sysbus <0x40038000, +0x4000>; // PRS_S
        sysbus <0x50038000, +0x4000>  // PRS_NS
    }
    hfxo: hfxo
    sysrtc: sysrtc

radioaes: Miscellaneous.SiLabs.EFR32xG2_AES_1 @ {
        sysbus <0x44000000, +0x4000>; // RADIOAES_S
        sysbus <0x54000000, +0x4000>  // RADIOAES_NS
    }
    IRQ -> nvic@48

flashuserdata: Miscellaneous.SiLabs.EFR32xG24_FlashUserData @ sysbus <0x0FE00000, +0x7F>

itm : Miscellaneous.SiLabs.EFR32xG2_SLAB_ITM @ sysbus 0xE0000000

sysbus:
    init add:
        Tag <0x40000000, 0x40003FFF> "SCRATCHPAD_S"
        Tag <0x40004000, 0x40007FFF> "EMU_S"
        Tag <0x40008000, 0x4000BFFF> "CMU_S"
        Tag <0x40010000, 0x40013FFF> "HFRCO0_S"
        Tag <0x40018000, 0x4001BFFF> "FSRCO_S"
        Tag <0x4001C000, 0x4001FFFF> "DPLL0_S"
        Tag <0x40020000, 0x40023FFF> "LFXO_S"
        Tag <0x40024000, 0x40027FFF> "LFRCO_S"
        Tag <0x40028000, 0x4002BFFF> "ULFRCO_S"
        Tag <0x40030000, 0x40033FFF> "MSC_S"
        Tag <0x40034000, 0x40037FFF> "ICACHE0_S"
        Tag <0x40038000, 0x4003BFFF> "PRS_S"
        Tag <0x4003C000, 0x4003FFFF> "GPIO_S"
        Tag <0x40040000, 0x40043FFF> "LDMA_S"
        Tag <0x40044000, 0x40047FFF> "LDMAXBAR_S"
        Tag <0x40048000, 0x4004BFFF> "TIMER0_S"
        Tag <0x4004C000, 0x4004FFFF> "TIMER1_S"
        Tag <0x40050000, 0x40053FFF> "TIMER2_S"
        Tag <0x40054000, 0x40057FFF> "TIMER3_S"
        Tag <0x40058000, 0x4005BFFF> "TIMER4_S"
        Tag <0x4005C000, 0x4005FFFF> "USART0_S"
        Tag <0x40064000, 0x40067FFF> "BURTC_S"
        Tag <0x40068000, 0x4006BFFF> "I2C1_S"
        Tag <0x40078000, 0x4007BFFF> "SYSCFG_S_CFGNS"
        Tag <0x4007C000, 0x4007FFFF> "SYSCFG_S"
        Tag <0x40080000, 0x40083FFF> "BURAM_S"
        Tag <0x40088000, 0x4008BFFF> "GPCRC_S"
        Tag <0x40094000, 0x40097FFF> "DCDC_S"
        Tag <0x40098000, 0x4009BFFF> "HOSTMAILBOX_S"
        Tag <0x400A0000, 0x400A3FFF> "EUSART1_S"
        Tag <0x400A8000, 0x400ABFFF> "SYSRTC0_S"
        Tag <0x400B0000, 0x400B3FFF> "KEYSCAN_S"
        Tag <0x400B4000, 0x400B7FFF> "DMEM_S"
        Tag <0x44000000, 0x44003FFF> "RADIOAES_S"
        Tag <0x44008000, 0x4400BFFF> "SMU_S"
        Tag <0x4400C000, 0x4400FFFF> "SMU_S_CFGNS"
        Tag <0x49000000, 0x49003FFF> "LETIMER0_S"
        Tag <0x49004000, 0x49007FFF> "IADC0_S"
        Tag <0x49008000, 0x4900BFFF> "ACMP0_S"
        Tag <0x4900C000, 0x4900FFFF> "ACMP1_S"
        Tag <0x49024000, 0x49027FFF> "VDAC0_S"
        Tag <0x49028000, 0x4902BFFF> "VDAC1_S"
        Tag <0x49030000, 0x49033FFF> "PCNT0_S"
        Tag <0x4A000000, 0x4A003FFF> "HFRCOEM23_S"
        Tag <0x4A004000, 0x4A007FFF> "HFXO0_S"
        Tag <0x4B000000, 0x4B003FFF> "I2C0_S"
        Tag <0x4B004000, 0x4B007FFF> "WDOG0_S"
        Tag <0x4B008000, 0x4B00BFFF> "WDOG1_S"
        Tag <0x4B010000, 0x4B013FFF> "EUSART0_S"
        Tag <0x4C000000, 0x4C003FFF> "SEMAILBOX_S"
        Tag <0x4D000000, 0x4D003FFF> "MVP_S"
        Tag <0x50000000, 0x50003FFF> "SCRATCHPAD_NS"
        Tag <0x50004000, 0x50007FFF> "EMU_NS"
        Tag <0x50008000, 0x5000BFFF> "CMU_NS"
        Tag <0x50010000, 0x50013FFF> "HFRCO0_NS"
        Tag <0x50018000, 0x5001BFFF> "FSRCO_NS"
        Tag <0x5001C000, 0x5001FFFF> "DPLL0_NS"
        Tag <0x50020000, 0x50023FFF> "LFXO_NS"
        Tag <0x50024000, 0x50027FFF> "LFRCO_NS"
        Tag <0x50028000, 0x5002BFFF> "ULFRCO_NS"
        Tag <0x50030000, 0x50033FFF> "MSC_NS"
        Tag <0x50034000, 0x50037FFF> "ICACHE0_NS"
        Tag <0x50038000, 0x5003BFFF> "PRS_NS"
        Tag <0x5003C000, 0x5003FFFF> "GPIO_NS"
        Tag <0x50040000, 0x50043FFF> "LDMA_NS"
        Tag <0x50044000, 0x50047FFF> "LDMAXBAR_NS"
        Tag <0x50048000, 0x5004BFFF> "TIMER0_NS"
        Tag <0x5004C000, 0x5004FFFF> "TIMER1_NS"
        Tag <0x50050000, 0x50053FFF> "TIMER2_NS"
        Tag <0x50054000, 0x50057FFF> "TIMER3_NS"
        Tag <0x50058000, 0x5005BFFF> "TIMER4_NS"
        Tag <0x5005C000, 0x5005FFFF> "USART0_NS"
        Tag <0x50064000, 0x50067FFF> "BURTC_NS"
        Tag <0x50068000, 0x5006BFFF> "I2C1_NS"
        Tag <0x50078000, 0x5007BFFF> "SYSCFG_NS_CFGNS"
        Tag <0x5007C000, 0x5007FFFF> "SYSCFG_NS"
        Tag <0x50080000, 0x50083FFF> "BURAM_NS"
        Tag <0x50088000, 0x5008BFFF> "GPCRC_NS"
        Tag <0x50094000, 0x50097FFF> "DCDC_NS"
        Tag <0x50098000, 0x5009BFFF> "HOSTMAILBOX_NS"
        Tag <0x500A0000, 0x500A3FFF> "EUSART1_NS"
        Tag <0x500A8000, 0x500ABFFF> "SYSRTC0_NS"
        Tag <0x500B0000, 0x500B3FFF> "KEYSCAN_NS"
        Tag <0x500B4000, 0x500B7FFF> "DMEM_NS"
        Tag <0x54000000, 0x54003FFF> "RADIOAES_NS"
        Tag <0x54008000, 0x5400BFFF> "SMU_NS"
        Tag <0x5400C000, 0x5400FFFF> "SMU_NS_CFGNS"
        Tag <0x59000000, 0x59003FFF> "LETIMER0_NS"
        Tag <0x59004000, 0x59007FFF> "IADC0_NS"
        Tag <0x59008000, 0x5900BFFF> "ACMP0_NS"
        Tag <0x5900C000, 0x5900FFFF> "ACMP1_NS"
        Tag <0x59024000, 0x59027FFF> "VDAC0_NS"
        Tag <0x59028000, 0x5902BFFF> "VDAC1_NS"
        Tag <0x59030000, 0x59033FFF> "PCNT0_NS"
        Tag <0x5A000000, 0x5A003FFF> "HFRCOEM23_NS"
        Tag <0x5A004000, 0x5A007FFF> "HFXO0_NS"
        Tag <0x5B000000, 0x5B003FFF> "I2C0_NS"
        Tag <0x5B004000, 0x5B007FFF> "WDOG0_NS"
        Tag <0x5B008000, 0x5B00BFFF> "WDOG1_NS"
        Tag <0x5B010000, 0x5B013FFF> "EUSART0_NS"
        Tag <0x5D000000, 0x5D003FFF> "MVP_NS"
        Tag <0x54000000, 0x540007FF> "RADIOAES_NS"
        Tag <0x5C000000, 0x5C00007F> "SEMAILBOX_NS"
        Tag <0xA8004000, 0xA8007FFF> "FRC"
        Tag <0xA800C000, 0xA800FFFF> "AGC"
        Tag <0xA8010000, 0xA8013FFF> "CRC"
        Tag <0xA8014000, 0xA8017FFF> "MODEM"
        Tag <0xA8018000, 0xA801BFFF> "SYNTH"
        Tag <0xA801C000, 0xA801FFFF> "PROTIMER"
        Tag <0xA8020000, 0xA8023FFF> "RAC"
        Tag <0xA802C000, 0xA802FFFF> "RFMAILBOX"
        Tag <0xAA000000, 0xAA003FFF> "BUFC"
        Tag <0xB8004000, 0xB8007FFF> "FRC_NS"
        Tag <0xB800C000, 0xB800FFFF> "AGC_NS"
        Tag <0xB8010000, 0xB8013FFF> "CRC_NS"
        Tag <0xB8014000, 0xB8017FFF> "MODEM_NS"
        Tag <0xB8018000, 0xB801BFFF> "SYNTH_NS"
        Tag <0xB801C000, 0xB801FFFF> "PROTIMER_NS"
        Tag <0xB8020000, 0xB8023FFF> "RAC_NS"
        Tag <0xB802C000, 0xB802FFFF> "RFMAILBOX_NS"
        Tag <0xBA000000, 0xBA003FFF> "BUFC_NS"
        Tag <0xE0000000, 0xE0000FFF> "ITM"
        Tag <0x0FE00000, 0x0FE00009> "FLASH_USER_DATA"