Open Component Portability Infrastructure (OpenCPI) is an open source software (OSS) framework for developing and executing component-based applications on heterogeneous embedded systems.
As a framework for development and execution, OpenCPI supports defining, implementing, building and testing components, as well as executing applications based on those components in the targeted embedded systems. By targeting heterogeneous systems, the framework supports development and execution across diverse processing technologies including GPPs (general purpose processors), FPGA (field programmable gate arrays), GPUs (graphics processing units) assembled into mixed systems. Component implementations (a.k.a. workers) are written in the language commonly used to target the type of processor being used. Thus workers for GPPs are written in C or C++, workers for FPGAs are written in VHDL or Verlog, and workers for GPUs are written in the OpenCL dialect of C.
OpenCPI was developed and is being maintained with these guiding principles:
- Open Source for all tools and runtime software, and all FPGA coding.
- Component-based design assembling applications from components.
- Heterogeneous processing using languages targeted to each technology.
- Design tradeoffs appropriate for lean embedded systems.
OpenCPI applications target systems comprised of a mix of platforms, each based on some processor (GPP/FPGA/GPU), attached to each other with some interconnect technology. When an application executes, its components execute on platforms based on the available platforms in the system, and the available compiled binary artifacts of those components. All supported technologies are developed using the same concepts, work flow, and tools.
The differences between technologies is minimized except for the fact that the source code is written in a language typically used by practitioners of the technology, and compiled using tools optimized for that purpose. This allows existing code to be integrated and deployed in an OpenCPI system. This is in contrast to frameworks that aspire to use a common language and compiler technology to deploy a common source code across diverse processing technologies. Thus performance is never compromised by using compilation tools not optimized for the targeted technology.
These attributes produce the following benefits for embedded systems developers:
- Technology agility to select, change, upgrade, mix processing technologies to stay with best of breed technologies, meet SWAP constraints, and fit the technology to the application(s).
- Diversity of component/algorithm authoring models to exploit existing external modules (e.g. FPGA or OpenCL primitives), and anticipate technology migration of algorithms.
- Improve risk and time-to-deployment when integrating capabilities developed by different organizations, or reused from previous deployments.
OpenCPI is currently available as a source code package. The getting started page describes how to obtain, install and use it. The documentation page provides descriptions and links to the available documents.