|
Abstract : |
Software programming languages, such as C/C++, have been used as means for specifying hardware for quite a while. Different design methodologies have exploited the advantages of flexibility and fast simulation of models described with programming languages. At the same time, the mismatch (of software languages) in expressing power (for hardware systems) has caused several difficulties. In the recent past, novel approaches have helped in reducing the semantic gap, and in easing the creation of design flows that support system-level specifications in C/C++. Hardware Synthesis from C/C++ Models The current and future design of electronic circuits and systems is characterized by several features and constraints. First, the system complexity is increasing, and at the same time the design time has to shrink. Thus, design methodologies and tool flows must support synthesis from highlevel specifications and fast means of verification. Second, most electronic design will target embedded systems, with an increasingly larger component of software. Efficient design and optimal implementation require exploiting hardware/software co-design strategies. Balancing the hardware and software components in the search of on optimal implementation may require the migration of software blocks to hardware or vice versa. Third, design of complex circuits and systems will leverage more and more the re-use of existing hardware and software components. Efficient component re-use requires specification at a high-level of abstraction as well as the ability of mapping the specifications to different targets. Programming language models in C/C++ can be compiled into object code for several architectures, and it is highly desirable to be able to compile them into hardware as well. Within this context, it is clearly obvious why designers write functional models of hardware/software systems, as well as of hardware circuits, using familiar programming languages. Functional models can be evaluated quickly by simulation, and can be directly compiled when a software solution is sought. At the same time, legacy models of software functions written in programming languages can be, |