As noted before, one common use case for Simics is doing fault injection. Fault injection is typically added to an existing system without changing it, since the goal is to maintain a fundamentally fast simulator when not injecting faults. There are a range of mechanisms available in Simics to implement fault injection. This blog post will take a look at two such mechanisms and how they are used in the context of injecting faults on a serial port.
Continue reading "Making a Faulty Serial Port" »

Networked systems is one of the primary application areas for Simics. Simics can run many machines inside a single Simics simulation, and apply all Simics features to the system, not just to a single machine inside the system. This is something that Dan Poirot from Real-Time Innovations, RTI, has made quite extensive use of recently. It is a pretty cool use-case for Simics, so we arranged to interview Dan about his use of Simics.
Continue reading "Simics for Networked Systems: An Interview with Dan Poirot" »
Emulating old computer gaming systems is a popular consumer-market application of simulation technology similar to Wind River Simics. There are a large number of emulators out there, emulating everything from old arcade games to the home computers of the 1980's to gaming consoles. These emulators might seem quite similar to Simics on the surface, but in practice, the simulation technology employed is quite different. You will never see Simics simulate an old Super NES running Super Mario Bros.
It all comes down to the level of timing accuracy required.
Continue reading "Why Simics won't Run Super Mario " »
I was sent a link to a past TED talk about how to tie your shoes. It is worth watching, and from the discussions I have seen on Facebook around the video, it seems that most people do it the "wrong" way. I have actually started to try to do it the "right" way, and the result is real improvement.
Tying the "right" way does make the bands look better. However, it did require a little bit of practice and a conscious effort to change.
Shoe tying is admittedly somewhat away from embedded systems development, but the principle is general. Doing things in a better way requires three things: understanding that there is an issue with how things are done today (bad knots), knowledge of a better way of doing it (good knots), and the time and effort to change your habits (dedication).
Continue reading "Stop, Think, and Tie Your Shoes Right" »
While looking into our old SPARC server targets for our new SPARC legacy offering, I opened up a Simics demo checkpoint that we have had around for a long time (at least eight years). This demo is an UltraSPARC II running Solaris 9, and it shows how web browsers looked around 2001. I used real-network to connect the machine to the Internet, and tried the default webbrowser - Netscape 4.78, built in June of 2001.

Continue reading "Surfing the Web with Netscape 4" »
A while after I woke up my laptop today, I realized that the fan was pretty noisy. That typically indicates that the processor is working busy on something, and then I spotted Simics in the task bar. Checking in on that Simics showed that it was indeed running, and pausing it did lower the load on machine to the point that the fans calmed down. Turned out that while I was doing other things, Simics had been busily simulating away on one of my cores. Indeed, it had simulated what was almost a complete year.
Continue reading "A Virtual Year" »
My blog posts about Simics tend to focus on how virtual platforms are used and what you can do with them. However, underlying all Simics use is the issue of getting a virtual platform in place. You need some kind of platform to run your software on in order to get the full benefit of Simics. Thus, creating virtual platforms is an important part of practical Simics use for many of our users.
We have been working with Simics for more than a decade, and we have learnt a lot about modeling along the way. The approach we have ended up with is a top-down methodology, where we start by investigating the target system as a whole from the perspective of the intended use cases, and then explore the details of each subsystem in order to determine how best to model it. We then switch to bottom-up, applying an iterative modeling flow that delivers something useful as quickly as possible. During development, the goal is to always keep a useful (albeit probably incomplete) platform available at all times.
Continue reading "How to Get Virtual" »
Developing software is an adventure where you explore the unknown, one line of code at a time. At some point, the program reaches the stage where you can actually run it and try it - and that's where the real fun begins. The software will sometimes behave as expected, but more often than not it will not. It will do something else, or crash, or generally do the wrong thing. It is very much like a toddler - you can rely on it to some extent, but you never know when it will decide to do something unexpected, funny, or just throw a fit over something that would have seemed inconsequential.
Continue reading "Software at the Toddler Stage" »
They just upgraded our coffee machine in the office. When I came out into the kitchen to get another cup, a service technician was there with a laptop perched on the sink and a USB cable running into the innards of the coffee machine, into the back of its open front panel. When I asked what was going on, he said that he was updating the coffee machine. In particular, he was adding the feature of selecting the strength of the coffee being brewed.
A software update to add features to a coffee machine? It is a bit weird, but also a perfect illustration of how pervasive embedded software has become in all manners of systems.
Continue reading "They Just Upgraded our Coffee Machine" »
Simics 4.6 is now out, and I would like to share some of my initial impressions of the new Simics version.
Continue reading "Simics 4.6 Initial Impressions" »