Previous - Up - Next

20.1   Introduction

Simics models a PCI bus using several objects of various kinds:

Let us look at a more concrete example from the simulated Ebony board:

OBJECT pcibus0 TYPE pci-bus {
        conf_space: pciconf0
        memory_space: pcimem0
        io_space: pciio0
        bridge: pci0
        interrupt: (pci0)
        pci_devices: ((0, 0, pci0, 1), (3, 0, dec0, 1))
}
OBJECT pciconf0 TYPE memory-space {
}
OBJECT pciio0 TYPE memory-space {
}
OBJECT pcimem0 TYPE memory-space {
}
OBJECT pci0 TYPE ppc440gp-pci {
        pci_bus: pcibus0
        ...
}
OBJECT dec0 TYPE DEC21140A-dml {
        pci_bus: pcibus0
        ...
}

Once the configuration presented above is loaded into Simics, a number of parameters will be configured automatically. Let us look at the result of this automatic configuration. The PCI bus object now reports the devices that are connected:

simics> pcibus0.info
Information about pcibus0 [class pci-bus]
=========================================

                 Bridge device : pci0
             Interrupt devices : pci0
                PCI Bus Number : 0x0

                  Config space : pciconf0
                      IO space : pciio0
                  Memory space : pcimem0

Connected devices:
             Slot 0 function 0 : pci0
             Slot 3 function 0 : dec0

The configuration memory-space has been automatically configured to include the configuration registers defined by the devices connected on the bus. The exact addresses where the configuration registers are mapped are determined using the PCI configuration address described in the next section.

simics> pciconf0.map
base               object               fn offs               length
0x0000000000000000 pci0                 255 0x0                0x100
0x0000000000001800 dec0                 255 0x0                0x100

The PCI I/O and memory spaces are empty since no base address registers have been configured yet. The bridge, however, catches all unmapped accesses in the PCI memory space to redirect them towards the main memory. This enables PCI devices to perform DMA accesses to and from other PCI devices or main memory.

simics> pciio0.map
base               object               fn offs               length
simics> pcimem0.map
base               object               fn offs               length
- default -        pci0                  5 0x0                -
            target -> plb

Previous - Up - Next