By Jakob Engblom
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:
For additional information from Wind River, visit us on Facebook.