At the Embedded Systems Conference (ESC) Boston in May, I moderated a panel titled, “Develop Software Earlier.” Joining me were Jason Andrews, Principal Solutions Architect in the Software Group at ARM; Mike Dini, Mike President of DINI Group; and Russ Klein, Technical Director in Mentor Graphics' Emulation Division.
What follows is an excerpt from our lively and open discussion on tools and methodologies to accelerate embedded software development.
Lauro: What are the technologies to develop software and what are the most effective ways to use them to start and finish software development earlier?
Russ: When people think about starting to develop software earlier, they often don’t think about emulation. Software can be developed on emulation. Emulation represents the earliest cycle-accurate representation of the design capable of running software. An emulator can be available very early in the design cycle, as soon as the hardware developers have their design to a point where it runs, albeit not fully verified, and not ready to tape-out. At that point, they can load memory images into the design and begin running it. Today’s emulators support powerful debug tools that give much better debug visibility into the system, and make it practical to start software development on emulation, sooner than ever before.
Jason: There are six techniques for pre-silicon software development: FPGA prototyping; Emulation; Cycle-Accurate/RTL simulation; Fast instruction set simulation; Fast models and an emulation hybrid; operating system simulation (instruction set abstracted away). Most projects adopt two or three since it is too difficult to learn, setup and maintain all of them.
When you start a project, you write code, and the first thing that occupies your mind is how to execute that code. Software developers are creative about finding ways to execute their software. It could be on the host machine, a model, or a prototype.
The next thing you need to think about is how to debug the software, because the code we write doesn’t always work the first time. There are various ways to perform early software debugging.
Then, less known, are performance analysis and quality of software.
You should try to get a good handle on performance as soon as possible. It could be done with the emulator, an FPGA prototype board, or other means. It is important to get some grasp on the performance of your code because often you are doing algorithm work and you need to get it under control as quickly as possible.
The last thing is the quality of the software. In pre-silicon software development, we always have milestones like system boots or test pads that don’t tell you much about the quality of your software.
You want to run, debug, get a handle on performance early on and try to do what you can for boosting software quality.
Mike: I’m the hardware guy, and I have to deal with software people. While early software development is fine and good, it’s too slow and too abstract. You find that software people tread water and until they get further along the hardware cycle and have something that gives blue