Diljith Thodi, Texas Instruments
Embedded systems are becoming increasingly complex, but their time to market is shrinking. It is becoming increasingly common, at least in the audio markets, to provide OEMs with a user interface as well as the embedded software to simplify the tuning of their systems. That interface is often repurposed for verification and characterization of these complex algorithms on real-world hardware to measure and benchmark performance against the design predictions.
Generating “production-ready” software by meeting these constraints is a challenge that calls for design using high-level tools and automated code generation techniques. In this session, we present our experience building a platform to address these challenges and describe the considerations that went into designing the system and its features. The platform includes a design environment that can graphically model the solution, an automated tool flow to generate the embedded RAM/ROM image from the model, and the ability to prototype both embedded software and its interface. The development of the system was done in the Simulink modeling environment to take advantage of its library of DSP components and a large suite of tools for “visual” debugging. The automated code generation from the model was achieved by defining the hardware-specific replacement libraries. This paved the way for a “pushbutton” solution from algorithm definition to evaluation on a real-time target with no handwritten code. The interface was developed using the GUIDE framework in MATLAB® to control the model parameters both in simulation and the hardware. This architecture allowed us to go from algorithm definition to “golden-ear” evaluation with a single click, thus enabling fast iteration between users and designers. The two-way exchange of configuration between hardware and simulation also makes it easier to reproduce real-world issues observed in the hardware in the simulation environment, where it is easier to debug.
We have seen that this new platform improves the solution development process—faster evaluation of ideas, as well as efficient code generation. Despite the constraints on the target DSP, we have found that the generated code is as efficient as handwritten code. Migration between architectures is also easier as the solution is developed and maintained at the model level.