Specifying and validating embedded systems and chips becomes increasingly challenging as feature sets and non-functional constraints grow. It's especially difficult when the system involves a multicore programmable platform, which includes several processing engines such as microprocessors, microcontrollers or DSPs, that run application software distributed across the various cores.
The development of the hardware (HW) platform system-on-chip (SoC) or board and the application software (SW) is usually done by separate teams, and often by separate companies. In general, the hardware platform development team includes software engineers in charge of developing low-level platform-dependent software also called firmware (FW) including boot loaders, C runtime and libraries, operating systems and device drivers. Software engineers also usually develop middleware (MW), including protocol stacks and various libraries, providing specific application programming interfaces (API) to application software developers the platform users.
One of the biggest challenges for such projects lies in the interdependency between application software and hardware platform development. In order to design an efficient platform that accurately serves the needs of one or several applications, platform developers must have a good understanding of the target applications. And, in order to develop their software, application developers need to understand and make the best use out of the hardware platform. Waiting for the completion of hardware before starting the software design has two major drawbacks:
1) The final system validation happens at the end of the project, after many man-years of efforts have been invested. This leaves the engineers with limited flexibility for optimization and addressing potential product defects.
2) The time-to-market objectives cannot be met since the software development effort requires the majority of the project schedule, and hence a large monetary investment.
Therefore, the following needs have risen on both platform and application sides:
1. Platform developers need to specify, architect, develop and validate their programmable board or chip for specific uses before the embedded application software code is available.
2. Application developers need to specify, architect, develop and validate their software before the real platform hardware is available.
Hardware virtualization for early software development
The hardware industry has been addressing the second need for many years in different ways. As opposed to software production, hardware production requires heavy manufacturing efforts. Software production requires a compilation step: from software programming language such as C or C++ to machine code. Programming the execution platform is simple and consists of loading machine code into a persistent data storage device such as flash or programmable memory. Hardware production goes through two synthesis steps, each of equivalent importance: front-end from hardware description language such as VHDL or Verilog at register transfer level (RTL) to gates, and back-end from gates to silicon. Still, an actual physical device has to be manufactured.
Since producing hardware requires more steps and is much less flexible than software production (a hardware re-spin of a large chip can cost more than a million dollars), the hardware industry has developed ways to accelerate the availability of a programmable hardware platform so hardware/software (HW/SW) joint execution can be verified and validated as early as possible. This way, software developers don't need to wait for production chips to start programming and hardware developers avoid costly manufacturing cycles. Hardware developers use techniques to provide a virtual software execution environment that can run the embedded software in a similar manner than the real hardware platform. Virtual software execution environments may not be as fast or as accurate as the real hardware, but they can be obtained earlier at lower cost. They are also more flexible and less expensive to adapt or fix.
The first step towards virtualization is to provide pre-silicon prototypes, like reference implementations for off-the-shelf silicon, field-programmable gate array (FPGA) prototypes, emulators or RTL simulators. Today, the EDA industry, particularly electronic-system level (ESL) vendors, is working on the second step: providing pre-RTL/pre-gate prototypes, called virtual platforms. In this paper, a virtual platform refers to a transaction-level (TL) or cycle-accurate (CA) model of the hardware platform, and virtual prototype refers to a RTL model of the hardware platform.