What components are part of Open Virtual Platforms?

There are three main components of OVP: Open Source models, OVPsim simulator, Modeling APIs.

With these components it is very easy to put together advanced multi-core heterogeneous or homogeneous platforms with complex memory hierarchies, cache systems and layers of embedded software - that run at 100s of MIPS on standard desktop PCs.

In the downloads area are many examples of components, and complete platforms - these are being added to all the time. For example you can download a simple example of a MIPS32-4KEm platform as source or executable, download an example program like the Dhrystone benchmark as source or executable, download the appropriate MIPS toolchain to compile and debug - and within a few minutes - get it running on your own Windows PC try it - experience for yourself what a Software Virtual Platform running at 300MIPS feels like... Download it now... touch the new world of embedded software development using OVP.

If you have questions about the OVP technology, please browse the forums for information.

If you are interested in using OVP technology with OSCI SystemC then please look at the SystemC page or the SystemC TLM2.0 page.

If you are interested in using OVP technology with SPIRIT Consortiums IP-XACT or SystemRDL then please look at the SPIRIT page.

If you have a bug or other issue please visit the forums to raise the issue and in the first instance check that others have not already had an answer to the same question.

Open Source Models (more)

Within OVP there are several different model categories. These models are provided as both pre-compiled object code, and as source files.
Currently there are processor models of ARC, ARM, MIPS, PowerPC, NEC v850, and OpenRisc families. There will be other families in due course.
There are also models of many different types of system components including ram, rom, trap, cache, bridge, etc.
There are also peripheral models including dma, uart, fifo, etc.
There are also models of several different pre-built platforms including software like ucLinux to run on them.

Currently the models are hosted on this OVP site, though it is the intention to move these to source forge in due course. When they move to source forge we will endeavor to keep binary models on this site.
Please visit the model download area for up-to-date listings and to download.

OVPsim simulator (more)

A very fast simulator - OVPsim is provided in the download area. OVPsim is currently released on Windows XP SP2 and Linux FC4. OVPsim provides the simulation capabilities to run platforms of OVP processor and peripheral models at blisteringly fast speeds - please download an example to experience how fast Software Virtual Platforms can run with OVP. A typical 32 bits RISC processor will boot an OS at 2-500MIPS on a desktop PC. Peak speeds of up to 2200MIPS have been experienced...

OVPsim is a Just-In-Time Code Morphing (binary translation) simulator engine that dynamically translates target instructions to x86 host instructions. OVPsim has been specifically architected for the fastest simulation throughput and includes many optimizations enabling simulation of platforms utilizing many homogeneous and heterogeneous processors with many complex memory hierarchies. OVPsim includes very efficient modeling of MMU/TLBs.

Platforms of over 1000 processors have been simulated efficiently on desktop PCs.

For more information please visit the OVPsim area of the downloads area for a detailed explanation.

OVPsim can be wrapped and called from within other simulation environments and comes as standard with wrappers for C, C++, and SystemC.

Another key technology component of OVPsim is that it can encapsulate existing binary models of processors and behavioral models. It therefore easy to utilize existing legacy processor models in an OVP simulation. (Though of course the overall speed of the simulation may be limited by the speed of these encapsulated models.)

OVPsim comes with a GDB RSP interface and is easy to use with standard debuggers that support this GDB RSP interface.

Modeling APIs (more)

Within OVP, models are created by writing code calling functions in a specific modeling API. These APIs are based around C and are normally used with C, though there are templates available for use with C++ and SystemC.

To model an embedded system there are several main items to be modeled: Platforms, Processors, Peripherals and environment. The platform purely connects and configures the behavioral components. The processors fetch and execute object code instructions from the memories, and the peripherals model the components and environment that the operating system and application software interacts with.

OVP modeling comprises several APIs; ICM, VMI, BHM/PPM.

In the downloads area are the very complete reference documentation, application notes, online documents, header files and examples of all of the different functions in each API. Please view these documents for full explanation and reference.

ICM (more)

For platforms there is the ICM API for controlling, connecting, and observing platforms. This API can be called from C, C++, or SystemC. The platform provides the basic structure of the design and creates, connects, and configures the components. The platform also specifies the address mapping, and software that is loaded on the processors. It is very easy with ICM to specify very complex and complete platforms of many different processors, local and shared memories, caches, bus bridges, peripherals and all their complex address maps, interrupts and operating systems and application software.

VMI (more)

For processor modeling there is the VMI API. These API functions are called from your C code and provide the ability to easily describe the behavior of the processor. A processor model written in C using the VMI basically decodes the target instruction to be simulated, translates this to x86 instructions that are then executed on the PC. VMI can be used for modeling 8, 16, 32, and 64 bit architectures and has extensions for VLIW, DSP etc. There is an interception mechanism enabling the trapping of calls to functions in the application runtime libraries such as printf without requiring the modifying of processor models.

PPM & BHM (more)

Behavioral components, peripherals, and the overall environment is modeled using C code and calls to these two APIs. Underlying these APIs is an event based scheduling mechanism to enable modeling of time, events, and concurrency - it is normally very easy to model functionality of embedded system components. Peripheral models provide callbacks that are called when the application software running on processors modeled in the platform access memory locations where the peripheral is enabled. These APIs provide extremely efficient behavioral modeling capabilities.