Importance of abstraction in embedded design
The ability to disregard information is crucial to the human condition; without this inherent function (a defensive mechanism known as Latent Inhibition) our brains could easily be overwhelmed by sensory stimuli; the inability to do so can even lead to mental disorders.
Evidence shows that abstracting only that information needed to make decisions, from the constant torrent fed to our brains, has been elemental in the evolution of all mammals and the same is true for the evolution of technology.
Abstraction essentially removes detail in favour of a functioning description, and has been necessary and apparent in electronic design since the first digital computer was created in 1946; the ENIAC, commissioned by the US Army. Its development, of course, also marked the first programming language, necessary to convey instructions in order for it to carry out meaningful actions.
Increasing levels of abstraction follow the trend of greater design complexity.
Higher levels of abstraction are apparent throughout the industry; machine code can be described in assembly code, which can be written in C and can be specified in plain English, for example. With each level of abstraction it becomes necessary to develop a translation layer; an automated and repeatable method for moving between higher and lower levels of abstraction until, eventually, the concept is rendered in terms that can be executed or implemented.
As abstraction is intended to increase productivity and efficiency when describing and implementing a concept, it is imperative that the languages used at each abstraction layer are comprehensive yet simpler than any subordinate level.
Arguably, the translation stages between levels may introduce misinterpretation of the original concept, invoking features not intended when describing the concept at the highest level of abstraction; it can be shown that a compiled C program may be less efficient than the same program written in assembly code, for instance, but writing in C offers much higher productivity.
This illustrates the trade-off often present when adopting a higher level of abstraction. Moving from concept to execution without misinterpretation or loss of performance can be achieved by preserving a seamless path through those levels of abstraction, ideally using a single tool chain.
Just as C is universally used for developing software, hardware description languages such as Verilog and VHDL provide a higher level of abstraction when developing ICs. Efforts to raise abstraction even higher and remove the differentiation between hardware and software — at least at a very high level — continue in the hope that it will expedite system design. Increasingly, those systems are intended to reside on a single piece of silicon; a system-on-chip (SoC).
Developing a tool chain that targets SoC design and encompasses both hardware and software development at a high level of abstraction is becoming imperative in order to continue to meet demand for greater productivity and design efficiency.
Design teams are already using C and its derivatives, such as SystemC, to describe system-level functionality, some of which they want to accelerate by implementing algorithms in the hardware domain. However, the conversion of these algorithms into a hardware implementation has traditionally been a manual process, involving re-writing the code in RTL and resulting in lengthy conversion and verification times. New high level synthesis tools offer a way to automate this process and return significantly faster verification cycle times.
High Level Synthesis (HLS) allows a concept described in a high level language to be synthesised down to gates on a chip in an automated process; it represents a significant step forward in productivity.
This is supported by industry standard algorithm libraries, such as OpenCV, which offer over 2,500 algorithms for embedded vision systems. Xilinx has already synthesised 30 of the most popular algorithms in the library using HLS in the company’s Vivado Design Suite.
We are also working to integrate and support OpenCL (Computing Language), the language intended to allow programs to run across heterogeneous platforms without necessarily targeting a specific processing architecture or core. This level of abstraction could also support the synthesis of algorithms to an FPGA fabric to deliver even higher performance.
The industry needs to continue to raise the level of design abstraction, by developing and supporting standards that allow abstraction, as well as creating high level design flows.
Author is Giles Peckham, EMEA marketing director at Xilinx