Continuous Integration And Deployment Flows With Virtual Prototypes

Providing embedded programmers with a pre-silicon platform to develop, integrate, test, and debug code.


Not so long ago, embedded software developers huddled side by side in chilly bring-up labs, integrating and testing their code on physical prototypes of the final systems. Beyond the inconvenience, there were two major issues with this approach. The cost of replicating prototypes across a large software team was considerable, and these systems had to be maintained and managed. It became common for the programmers to work in shifts to maximize hardware utilization, compounding the inconvenience. Moving to highly networked systems meant that the programmers could work from their offices rather than the lab, but that did nothing to reduce the costs involved.

The biggest issue with physical prototypes arose when embedded processors moved from discrete parts to system-on-chip (SoC) devices. Custom chips take many months to design and fabricate. Physical prototypes can’t be built until the chips arrive from the foundry, which is much too late in the project schedule for software integration and test to begin. Embedded programming is one of the dominant tasks in the schedule for an SoC-based system, so time to market (TTM) is delayed. Further, subtle design bugs might not be found until hardware and software are running together. If the chip must be turned before production to fix these bugs, TTM will slip even further, and the project cost will balloon.

The only way to avoid these problems is to provide embedded programmers with a pre-silicon platform to develop, integrate, test, and debug their code. Virtual prototypes, abstract software simulation models for the SoC and hardware system, provide just such a solution. These contain fast instruction set simulators (ISSs) for the embedded processors, capable of executing the same code that will run in production systems. Virtual prototypes can interact with both virtual and real-world I/O devices, an important part of system test. They also enable better testing of abnormal conditions, including injecting virtual faults that might cause damage to actual hardware. They can be deployed across the embedded software team without the costs to build and maintain physical prototypes.

Best of all, virtual prototypes shrink TTM. Because they do not need to include many of the implementation details, virtual prototypes can be developed and used in parallel with the register-transfer-level (RTL) hardware design for the SoC. This enables true hardware-software co-development and “shifts left” the project schedule dramatically. Inconsistencies between the design and the embedded code are detected early, greatly reducing the chance of a chip turn due to functional problems.

In parallel with the emergence of virtual prototypes for hardware, software development has been undergoing its own evolution. Many programming projects today use continuous integration (CI), in which code changes are checked into the main repository frequently—sometimes several times a day—and the software executable is rebuilt and tested immediately. The CI method contrasts sharply with the traditional practice of merging code from all programmers only at designated checkpoints. By that time, the individual portions of code may have diverged significantly, leading to a challenging integration step and a big debug effort to sort out problems. CI reveals such issues right away, so that they can be resolved quickly and easily. CI is sometimes coupled with continuous deployment (CD), in which a successful build that has passed all automated tests is released into production on all systems.

The embedded code for virtual prototypes is in many ways a typical software project, so SoC teams would also like to benefit from CI and CD. The virtual prototypes can run the automated integration regression tests in addition to their role as interactive development platforms. Propagating successful builds to all programmers and all systems keeps the entire project team in sync and boosts productivity. CI/CD flows drive adoption of virtual prototypes in regression and further automate the embedded software development process.

Synopsys Virtualizer provides a solution for the development and use of virtual prototypes. This solution includes a family of pre-validated Virtualizer Development Kits (VDKs) for popular processor and microcontroller architectures. VDKs contain design-specific virtual prototypes, debug and analysis tools, and sample software. They are ideal for all types of software development, including device drivers, operating systems, and middleware. VDKs are assembled and debugged inside the Virtualizer Studio integrated development environment (IDE), enabling deep insight into any issues.

VDKs can be integrated into advanced CI/CD flows to create a productive pipeline for embedded software development and test. Regression testing and deployment benefit from the use of containers, “build once, run anywhere” executable software packages that include everything needed to run quickly and reliably in multiple computing environments. In addition, checkpoint/restore capabilities vastly speed up test cycles by avoiding redundant work. VDKs provide additional value through extensive analysis and debug facilities, and integrate seamlessly with a wide range of leading-edge software development and test technologies, including:

  • GitLab or Jenkins DevOps platforms
  • Docker containers
  • Kubernetes open-source container orchestration system
  • Rancher software stack for managing Kubernetes clusters

The upcoming webinar “Turbo-Charge Your Embedded CI/CD Setup Using Virtual Prototypes” provides much more information on this solution. It will highlight how using Synopsys virtual prototypes in place of physical hardware can accelerate your test cycles, provide deeper analysis of hardware and software activity, and enable extensive and safe fault injection. Watch live on May 26, or later on-demand at your convenience. We invite you to attend!

Leave a Reply

(Note: This name will be displayed publicly)