Custom (Embedded) Software Development

One of our greatest strengths is the methodology we apply in the development process.

We know:

  • Analyze the algorithm to be implemented. Potential mistakes or corner-cases overlooked by the algorithm designers are   sometimes discovered at this step and we cooperate with them to find the best solutions.

  • Analyze the inputs, outputs and requirements.

  

  

  • Evaluate the potential target platforms trying to keep the code modular and flexible to allow easy porting and optimization.
  • Starting from either an implemented algorithm (Matlab, etc.) or from a paper / standard, we create the reference implementation using the agreed software architecture.
  • In most cases this will be a fixed-point reference requiring proper tailoring of applied operations, as well as input, intermediate and output ranges.
  • Once the fixed-point reference sees its first iteration, based on the performance evaluation we identify potential shortcuts in the algorithm, operation simplification and other tweaks allowing us to reduce the complexity of the implementation.
  • We iterate with the algorithm designers finding ways to reach a sweet spot between quality and performance.
  • We iterate with the integrators to find the best tradeoffs between memory, complexity and quality, and we tune the implementation to suit the desired platform(s).
  • The last iteration of the implementation is a polished modular code ready to be ported and optimized for the chosen target platform.
  • If requested, we perform porting and optimizations for a specific target platform following all the restrictions identified in previous steps.

  

  

We offer:

  • We turn your algorithm into a first of a kind component or solution, and we take pride in bridging the gap between research and final product, understanding both the algorithmic world with its multiple complexities and as well the real platform restrictions, finding the place where they come together.

What we did:

  • The key selling point to our customers is the high quality of the components and solutions we deliver, the easiness to integrate, as well as the added value we bring to their algorithms. Those are achieved following the methodology above.