CMP EMBEDDED.COM

Login | Register     Welcome Guest  
HOME DESIGN PRODUCTS COLUMNS E-LEARNING CONFERENCES CODE FORUMS/BLOGS NEWSLETTERS CONTACT FEATURES RSS RSS

Using simulation tools for embedded systems software development: Part 1



Embedded.com
Simulation as a tool has been used for a long time in many areas of science and technology. The use of weather system simulation to predict the weather and mechanical system simulation to predict the behavior of aircraft in flight are assumed as given today. In car design, the use of virtual crash testing improves the safety of cars while radically reducing the number of physical prototypes that need to be built and tested.

Simulation is used whenever trying things in the physical world would be inconvenient, expensive, impractical or plain impossible. Simulation allows experimenters to try things with more control over parameters and better insight into the results. It reduces the cost of experiments, and makes it possible to work with systems that do not yet exist in physical form. It cuts lead times and improves product quality. In a sense, we use simulation and virtual systems because reality sucks.

Ironically, while simulation is almost universally implemented as software on computers, the use of simulation to develop computer software itself is still quite rare.

In this three-part series, we will discuss how simulation technology can be used to develop embedded systems and the software component of these projects in particular.

Part 1 will cover simulation of the world around a computer board, while Part 2 will cover the particulars of simulating a computer board and its software, as well as how to bring all the pieces together to form a complete solution. Finally, Part 3 will delve into some more concrete examples of simulation solutions in actual use and the benefits obtained from them.

Simulating a Computer System
An embedded computer system can be broken down into five main parts:

* The computer board itself: the piece of hardware containing one or more processors, executing the embedded software.

* The software running on this computer board. This includes not just the user applications, but also the boot ROM or BIOS, hardware drivers, operating system, and various libraries and middleware frameworks used to implement the software functions.

* The communications network or networks that the board is connected to, and over which the software communicates with software on other computers.

* The environment in which the computer operates and that it measures using sensors and affects using actuators.

* The user interface exposed to a human user of the system.

Figure 1

For the rest of this series of articles, we will refer to the system being simulated as the target system (common with traditional cross-compilation nomenclature), and the development PC or workstation as the host.

Obviously, not all target systems feature all of the parts listed above, but most feature most of them. A simulation effort for an embedded system can focus on just one of the parts. It is quite common to mix simulated and physical parts, to achieve "partial reality."

Abstraction vs. Detail
A key insight in building simulations is that you must always make a trade-off between simulator detail and the scope of the simulated system.
 Looking at some extreme cases, you cannot use the same level of abstraction when simulating the evolution of the universe on a grand scale as when simulating protein folding.

You can always trade execution time for increased detail or scope, but assuming you want a result in a reasonable time scale, compromises are necessary.

A corollary to the abstraction rule is that simulation is a workload that can always use maximum computer performance (unless it is limited by the speed of interaction from the world or users).

A faster computer or less detailed model lets you scale up the size of the system simulated or reduce simulation run times. In general, if the processor in your computer is not loaded to 100%, you are not making optimal use of simulation.

The high demands for computer power used to be a limiting factor for the use of simulation, requiring large, expensive, and rare supercomputers to be used.

Today, however, even the cheapest PC has sufficient computation power to perform relevant simulations in reasonable time. Thus, the availability of computer equipment is not a problem anymore, and simulation should be a tool considered for deployment to every engineer in a development project.

Simulating the Environment
Simulation of the physical environment is often done for its own sake, without regard for the eventual use of the simulation model by embedded software developers. It is standard practice in mechanical and electrical engineering to design with computer aided tools and simulation.

For example, control engineers developing control algorithms for physical systems such as engines or processing plants often build models of the controlled system in tools such as MatLab/Simulink and Labview.

These models are then combined with a model of the controller under development, and control properties like stability and performance evaluated. From a software perspective, this is simulating the specification of the embedded software along with the controlled environment.

For a space probe, the environment simulation could comprise a model of the planets, the sun, and the probe itself. This model can be used to evaluate proposed trajectories, since it is possible to work through missions of years in length in a very short time.

In conjunction with embedded computer simulations, such a simulator would provide data on the attitude and distance to the sun, the amount of power being generated from solar panels, and the positions of stars seen by the navigation sensors.

When the mechanical component of an embedded system is potentially dangerous or impractical to work with, you absolutely want to simulate the effects of the software before committing to physical hardware. For example, control software for heavy machinery or military vehicles are best tested in simulation.

Also, the number of physical prototypes available is fairly limited in such circumstances, and not something every developer will have at their desk. Such models can be created using modeling tools, or written in C or C++ (which is quite popular in practice).

In many cases, environment simulations can be simple data sequences captured from a real sensor or simply guessed by a developer.

It should be noted that a simulated environment can be used for two different purposes. One is to provide "typical" data to the computer system simulation, trying to mimic the behavior of the final physical system under normal operating conditions.

The other is to provide "extreme" data, corresponding to boundary cases in the system behavior, and "faulty" data corresponding to broken sensors or similar cases outside normal operating conditions. The ability to inject extreme and faulty cases is a key benefit from simulation.

Simulating the Human User Interface
The human interface portion of an embedded device is often also simulated during its development. For testing user interface ideas, rapid prototyping and simulation is very worthwhile and can be done in many different ways. One creative example is how the creator of the original Palm Pilot used a wooden block to simulate the effect of carrying the device.

Instead of building complete implementations of the interface of a TV, mobile phone, or plant control computer, mockups are built in specialized user interface (UI) tools, in Visual Studio GUI builder on a PC, or even PowerPoint or Flash.

Sometimes such simulations have complex behaviors implemented in various scripts or even simple prototype software stacks. Only when the UI design is stable do you commit to implementing it in real code for your real device, since this typically implies a greater programming effort.

In later phases of development, when the hardware user interface and most of the software user interface is done, a computer simulation of a device needs to provide input and output facilities to make it possible to test software for the device without hardware.

This kind of simulation runs the gamut from simple text consoles showing the output from a serial port to graphical simulations of user interface panels where the user can click on switches, turn knobs, and watch feedback on graphical dials and screens.

A typical example is Nokia's Series 60 development kit, which provides a virtual mobile phone with a keypad and small display. Another example is how virtual PC tools like VmWare, Parallels, and VirtualPC map the display, keyboard, and mouse of a PC to a target system.

In consumer electronics, PC peripherals are often used to provide live test data approximating that of a real system. For example, a webcam is a good test data generator for a simulated mobile phone containing a camera.

Even if the optics and sensors are different, it still provides something better than static predetermined images. Same for sound capture and playback " you want to hear the sound the machine is making, not just watch the waveform on a display.

Simulating the Network
Most embedded computers today are connected to one or more networks. These networks can be internal to a system; for example, in a rack-based system, VME, PCI, PCI Express, RapidIO, Ethernet, I2C, serial lines, and ATM can be used to connect the boards. In cars, CAN, LIN, FlexRay, and MOST buses connect body electronics, telematics, and control systems. Aircraft control systems communicate over special bus systems like MIL-STD-1553, ARINC 429, and AFDX.

Between the external interfaces of systems, Ethernet running internet standards like UDP and TCP is common. Mobile phones connect to headsets and PCs over Bluetooth, USB, and IR, and to cellular networks using UMTS, CDMA2000, GSM, and other standards.

Telephone systems have traffic flowing using many different protocols and physical standards like SS7, SONET, SDH, and ATM. Smartcards connect to card readers using contacts or contact-less interfaces. Sensor nodes communicate over standard wireless networks or lower-power, lower-speed interfaces like Zigbee.

Thus, existing in an internal or external network is a reality for most embedded systems. Due to the large scale of a typical network, the network part is almost by universally simulated to some extent.

You simply cannot test a phone switch or router inside its real deployment network, so you have to provide some kind of simulation for the external world. You don't want to test mobile phone viruses in the live network for very practical reasons.

Often, many other nodes on the network are being developed at the same time. Or you might just want to combine point simulations of several networked systems into a single simulated network.

Figure 2

Levels of Simulation
Network simulation can be applied at many levels of the networking stack. The picture in Figure 2 above shows the most common levels at which network simulation is being performed:

The most detailed modeling level is the physical signal level.
Here, the analog properties of the transmission medium and how signals pass through it is modeled.This makes it possible to simulate radio propagation, echoes, and signal degradation, or the electronic interference caused by signals on a CAN bus. It is quite rarely used in the setting of developing embedded systems software, since it complex and provides more details than strictly needed.

Bit stream simulation looks at the ones and zeroes transmitted on a bus or other medium.
It is possible to detect events like transmission collisions on Ethernet and the resulting back-off, priorities being clocked onto a CAN bus, and signal garbling due to simultaneous transmissions in radio networks. An open example of such a simulator is the VMNet simulator for sensor networks.

Considering the abstraction levels for computer system simulation discussed below, this is at an abstraction level similar to cycle-accurate simulation. Another example is the simulation of the precise clock- by-clock communication between units inside a system-on-a-chip.

Packet transmission passes entire packets around, where the definition of a packet depends on the network type.
In Ethernet, packets can be up to 65kB large, while serial lines usually transmit single bytes in each "packet". It is the network simulation equivalent of transaction-level modeling, as discussed below for computer systems.

The network simulation has no knowledge of the meaning of the packets. It just passes opaque blobs of bits around. The software on the simulated system interacts with some kind of virtual network interface, programming it just like a real network device.

This level is quite scalable in terms of simulation size, and is also an appropriate level at which to connect real and simulated networks. Common PC virtualization software like VMware operates at this level, as do embedded-systems virtualization tools from Virtutech, Virtio, and VaST. A deeper discussion can be found here.

Ignoring the actual structure of packets on the network.
Networks are often simulated at the level of network protocols like TCP/IP. The simulated nodes use some socket-style API to send traffic into a simulated network rather than a real network.

Such a simulation becomes independent of the actual medium used, and can scale to very large networks. The network research tool NS2 operates at this level, for example. It is also a natural network model when using API-level simulation of the software, as discussed below.

Application protocol simulation simulates the behavior of network services and other nodes.
Tools simulate both of the network protocols used and the application protocols built on top of them. Such simulation tools embody significant knowledge of the function of real-world network nodes or network subsystems. They offer the ability to test individual network nodes in an intelligent interactive environment, a concept often known as rest-of-network simulation. Vector Informatik's CAN tools are a typical example of such tools.

Some high-level simulations of networked systems work at the level of application actions.
In this context, we do not care about how network traffic is delivered, just about the activities they result in. It is a common mode when designing systems at the highest level, for example in UML models.

Figure 3

The level of abstraction to choose depends on your requirements, and it is often the case that several types of simulators are combined in a single simulation setup. The picture in Figure 3 above shows a complex setup that forms a superset of most real-world deployments and which includes:

* Some simulated nodes running the real software for the embedded system.

* A rest-of-network simulator providing the illusion of many more nodes on the network.

* A simple traffic generator that just injects packets according to some kind of randomized model.

* An instrumentation module that peeks on traffic without being visible on the network, showing the advantage of simulation in inspection.

* A connection to the real-world network on which some real systems are found, communicating with the simulated systems.

* Real-world network test machines are the types of specialized equipment used today to provide testing of physical network nodes. Thanks to a real-network bridge, they can also be used with simulated systems.

To read Part 2 go to Bringing all the pieces together
To read Part 3, go to Real world examples of software simulation

Jakob Engblom works as a business development manager at Virtutech. He has a PhD in Computer Systems from Uppsala University, and has worked with programming tools and simulation tools for embedded and real-time systems since 1997. You can contact him at jakob@virtutech.com. For other publications by Jakob Engblom, see www.engbloms.se/jakob.html.

1

Rate this article: Low High
Current rating
  • .
Embedded.com Career Center
Looking for a new job?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS





 :