Over the last 10 years, the use of software across a gamut of products and applications has increased exponentially — and this trend shows no signs of slowing down. Everyday consumer staples such as cellphones, TVs, and smart home appliances already rely heavily on software to operate and provide us with many functions we love and use daily. This is also true for automotive applications. In fact, modern vehicles contain up to 150 million lines of code, and with an expected annual growth of automotive software of over 15% to over $100B by 2030, we are now clearly in the software-defined, software-first era.
As software continues to become a dominant component in many products, its quality, performance, and safety requirements will only continue to increase. Developers are facing many challenges to deliver efficient software that can meet these demands, and numerous methodologies have emerged in recent years to help streamline the design process. While certainly not a new concept, physical prototyping (a simulation of how a product will work) has been a key cornerstone of DevOps teams to gauge software functionality. But, as with all technologies, it’s quickly becoming outdated and in need of more advanced capabilities attuned to today’s fast-paced environment.
Read on to learn more about the history of physical prototyping, the emergence of virtual prototyping, its synergy with continuous integration and development setups, and the many benefits these disciplines provide when combined.
Before virtual prototyping tools came into existence, embedded software developers had to wait until silicon designs were completed to integrate and test their code on the system’s physical prototypes in labs. This traditional prototyping method incurred significant delays in finalizing products as teams had to work around the clock to debug and examine their code’s performance after waiting for the physical prototypes to arrive.
Beyond the slow time-to-market (TTM), this method was also expensive and highly inconvenient. For one, replicating prototypes across a large software team came with a hefty price tag. Secondly, these systems had to be continuously maintained and managed, which often meant programmers would need to work in shifts to maximize hardware utilization. The emergence of highly networked systems alleviated some of this inconvenience by allowing programmers to work from their offices instead of the lab, but costs remained the same.
As with most technologies, embedded processors were also constantly evolving, straying away from parts within a system to full-on system-on-chip (SoC) devices. This marked a turning point in the way prototyping was carried out. Since custom chips can take many months to design and produce and physical prototypes can’t be built until the chips arrive, physical prototyping eventually became obsolete; projects were simply taking too long and costing too much.
Cue the emergence of virtual prototyping.
Virtual prototyping emerged as a response to this industry need. A pre-silicon platform for embedded programmers to develop, integrate, test, and debug their codes became critical in addressing TTM and expense issues. Consisting of abstract software simulation models for SoC and hardware systems, virtual prototyping has provided programmers with the unique ability to replace hardware with software-equivalent models to enable earlier software development.
In essence, virtual prototypes are fully functional software models of complete systems that can execute embedded software code. They contain fast instruction set simulators (ISSs) that can execute the same code that will run in finalized production systems and enable a myriad of benefits, including:
However, one of their key benefits is a virtual prototype’s ability to speed up TTM considerably. Since virtual prototypes don’t need many implementation details, they can be developed simultaneously with the register-transfer-level (RTL) hardware design for the SoC, allowing a shift-left approach that positively impacts the project schedule.
In parallel, software development has seen a steady evolution. Driven by the scale of software content in everyday applications, continuous integration (CI) has become absolute necessary for software development teams to meet products’ performance requirements. CI refers to the practice of software developers merging their code changes into a shared mainline code base, or a main repository, often multiple times a day to test their performance.
Traditionally, DevOps teams had to merge the code changes from all the programmers at designated checkpoints. By that time, individual portions of the code often deviated drastically, which in turn resulted in a challenging integration step to debug and fix any problems. In contrast, CI allows teams to view and fix incompatibility issues early on, therefore resolving them more easily and cost-efficiently.
A robust, highly automated build and test cycle is needed for CI to work properly. This system quickly ensures that the changes being submitted are tested in the context of the latest software stack and that they don’t break existing functionality. It can also provide quick feedback to software developers on key areas such as code coverage, quality, and effectiveness.
CI is also often coupled with continuous deployment (CD), a process in which any code build that has successfully passed through all automated tests is deployed into production. CD takes the practice of CI one step further to automate the code release process so that once new codes are merged into the main repository and have passed all automated testing, they can be pushed into production in a streamlined process.
SoC design teams can benefit from using virtual prototypes in their CI/CD setups to boost productivity by allowing the timely dispersion of builds to all programmers and systems. When coupled with containerization techniques, virtual prototypes can also help create productive CI/CD pipelines that can enable deeper analysis of hardware and software activity as well as run automated regression tests while still maintaining their role as interactive development platforms.
The Synopsys family of virtual prototyping solutions offers an array of tools and services that enable early software development and ensure project success, including pre-validated Synopsys Virtualizer Development Kits (VDKs) which contain design-specific virtual prototypes suitable for all types of software development. Synopsys VDKs also include powerful debug and analysis tools and have no dependency on the RTL design, meaning they can enable software development up to 12 months before hardware availability.
Synopsys VDKs are easily integrated into existing CI/CD setups. With extensive capabilities, including “build once, run anywhere” executable software packages, checkpoint and restore functions, and containerization techniques to help regression testing and deployment, VDKs can streamline a more productive pipeline for embedded software development. Additionally, Synopsys VDKs integrate seamlessly with some of the leading software development and test technologies, including GitLab and Jenkins DevOps platforms, Docker containers, and the Kubernetes container orchestration system.
For a more detailed view into how Synopsys VDKs can use containers to run extensive regression tasks and speed up test cycles, watch our on-demand webinar “Turbo-Charge Your Embedded CI/CD Setup Using Virtual Prototypes.”
To learn more about virtual prototyping, catch up on other recent blog posts: