Applications and software services are the main differentiators for mobile devices like smartphones and tablets. Prototyping, development, debug, and validation of complex multifunction software applications is a major endeavor that is especially challenging when the software depends on hardware functions still under development and boards are not yet available.
Today’s hardware is defined and configured based on software demands. The bring-up of applications based on a variety of software and hardware services such as audio/video, GPS, sensors, and radio poses major debugging challenges. Debugging does not end at the boundary of a single software module, library, or software layer; it involves analyzing the interactions between multiple software entities. Similarly, validation needs to cover functional performance as well as power requirements.
For prototyping, development, debug, and validation of complex software services, Synopsys provides a prototyping environment that addresses both software and hardware architecture. The core of this environment is a virtual prototype (Figure 1) of the ARM Cortex-A9x4 quad-core Versatile Express board, which is bundled with a complete Android 2.1 port. Software developers can take full advantage of the four-way Symmetric Multi-Processing (SMP) enabled by the Cortex-A9 CPU as well as Android and the Linux 2.6 kernel.
Integrating with Google’s Eclipse-based software development kit via the Android Debug Bridge through a virtualized Ethernet connection, the virtual prototype can be used for general Android application development. It provides dedicated support to ease native code analysis and debugging inside Java applications. An increasing amount of performance-critical code as well as legacy C code is compiled into native libraries for the ARM CPU. The challenge is to debug those libraries along with the Java applications, Android runtime environment, middleware libraries, and OS. This is even harder with SMP Linux, as each process and thread needed to form a complex multifunction software service might execute on a different CPU and change the CPU when being rescheduled.
The virtual prototype is complemented with a software analysis environment that visualizes the scheduling of those processes per CPU over time. The ability to perform this analysis is based on dedicated OS-aware monitors inside the virtual prototype. Thus, embedded software instrumentation is not required. Each process can be analyzed down to the function and even instruction level.
Scripting enables fully automated control and inspection of all hardware and software aspects. This is crucial for the functional, performance, and power validation. Complex scenarios with environmental interaction such as touch-screen, keyboard, or radio events can be easily recorded and repeated in a deterministic fashion. A system-level software-centric assertion framework allows the software engineer to easily hook assertions into the replay scenario. Those assertions can validate if the actions taken by the user through the application are correctly propagated through the different software layers down to the hardware. Together with functional aspects, power states are analyzed over time, providing information about consumed energy.
The virtual prototype is based on Synopsys model libraries and Fast Models from ARM. Users can extend the virtual prototype with custom SystemC TLM-2.0 compliant models.