emulator_ram: Memory.MappedMemory @ {
        sysbus 0x20000000
    }
    size: 0x10000000

ddr: Memory.MappedMemory @ {
        sysbus 0xc0000000
    }
    size: 0x10000000

uart: UART.LiteX_UART @ {
        sysbus 0xf0001000
    }
    -> cpu@0

eth: Network.LiteX_Ethernet @ {
        sysbus 0xF0003800;

        sysbus new Bus.BusMultiRegistration { address: 0x30000000; size: 0x2000; region: "buffer" };
        sysbus new Bus.BusMultiRegistration { address: 0xB0000000; size: 0x2000; region: "buffer" }
    }
    -> cpu@2

spi: SPI.LiteX_SPI @ {
    sysbus 0xF0006800
}

spi_loopback: SPI.SPILoopback @ spi

i2c: I2C.LiteX_I2C @ {
    sysbus 0xF0007000
}

si7021: Sensors.SI70xx @ i2c 5
    model: Model.SI7021

gpio_out: GPIOPort.LiteX_GPIO @ {
    sysbus 0xF0005800
}
    type: Type.Out
    0 -> led@0

gpio_in: GPIOPort.LiteX_GPIO @ {
    sysbus 0xF0006000
}
    type: Type.In

cpuTimer: Timers.LiteX_CPUTimer @ {
        sysbus 0xF0000800
    }
    // according to the LiteX Configuration this should be 10.000.000 Hz, but I modified it in order to obtain 10ms tick
    frequency: 40000000
    // IRQ #100 is Machine Timer Interrupt
    -> cpu@100

cpu: CPU.VexRiscv @ sysbus
    cpuType: "rv32ima_zicsr_zifencei"
    privilegedArchitecture: PrivilegedArchitecture.Priv1_10
    timeProvider: cpuTimer

led : Miscellaneous.LED @ gpio_out 0

button: Miscellaneous.Button @ gpio_in 0
    -> gpio_in@0
