As we said in the first blog post on Simics 4.8, a really big new
feature is the System Editor function. The system editor combines two functions
into a single view, both the exploration of an existing target as well as the
modification and even construction of a new target from existing pieces. A demo video is available on the Wind River channel on Youtube, and read on for more information on how it works.
The basic view that the System Editor provides is the Simics
component hierarchy of a target system. The components are used to organize a
target in a manner that is very similar to how the target hardware system is
organized, including the encapsulation of chips on boards, PCI cards into PCI
slots, and functional clusters inside SoCs.
In this example, we look at a Simics IA target model based
on a Nehalem processor and the X58-ICH10 chipset. We can see how the “viper”
board contains quite a few pieces that would sit in a typical PC box. The
motherboard contains the processor, GPU, and the X58 MCH and the ICH10 IOH.
We have opened up the connectors of the ICH10 to show the many
connections that this IOH has, including PCI, SATA, IDE, serial, Ethernet, and
on-board buses like LPC. If we added components that could connect to these
buses, that connection could be made right in this view.
Another small but nice feature added in Simics 4.8 is the
ability of the register viewer in Eclipse to display the bit fields of a
register. This makes it a bit easier to understand the state of a device
compared to the previous version where only the aggregated value of the entire
register was shown. Here is an example showing the old familiar NS16550
PC-style serial port and one of its registers:
The System Editor also lets you take a closer look at each object and
component. In the below example, we check the properties of the COM0
serial port found inside the ICH10. We are looking at the list of actual
simulation objects in the ICH10, while above we were looking at the component level, which shows a hierarchical abstraction of the system setup. Keeping the functional simulation objects inside the hierarchical components is a fundamental part of how
Simics simulations are structured (and without this abstraction, a user would very quickly get lost in any modern machine where it is not rare to have many hundreds or even thousands of different device objects – you can fit a lot of functionality into a modern SoC).
Simics would not be Simics if it did not also handle
arbitrarily large systems. In the example shown below, we look at the network
used in the Simics networking debug demo.
We see the four machines, the network connecting them, and the little service
node that provides network services to the fully encapsulated virtual network. We
also see the many connections from the network, since each target machine
actually has two network controllers attached to this virtual network.
The System Editor has many little hooks to make it easy to
navigate the target system structure and to copy values from various parts of
the configuration. It can copy the full name of the currently selected item to
use it in scripting, and it has a quick and powerful filtering option to make
it easy to find a certain component, object, or connection in a large and
complex system. The picture below shows an example of looking for everything PCI in a target setup:
The System Editor is also integrated with scripted actions
and user commands from the Simics command-line. Any change made to the running
system, regardless of how it was achieved, is displayed in the System Editor. In
the screenshot below, we used the Simics command-line to create a new i82546bg
PCI Gigabit Ethernet card in the target system, and attached it to a PCI slot
and the Ethernet network. Using the filter function we can then quickly see how
it fits into the target system: