Some customers have inquired if C-to-Silicon Compiler (CtoS) is a “Low Level” Synthesis tool. The question is usually based on the fact that SystemC is the input language for CtoS. It is partially correct. In reality, CtoS is both a High and a Low level synthesis tool.
On the High Level side CtoS can accept very high level constructs such as C++ “classes” and “templates”. A parameterized “High Level” description of a hardware block (a templetized class) can be instantiated inside the SystemC module and synthesized by CtoS.
On the other hand, SystemC, in general, and CtoS, in particular, can also accept very Low Level constructs when necessary. For example, a very complex I/O protocol with very specific timing requirements can be specified in SystemC and synthesized into hardware. Not every I/O protocol can be defined at a High Level. Trying to specify complex protocols at a High Level was the failure of the early High Level Synthesis tools.
Additionally, SystemC and CtoS provide other “Low Level” features such as the ability to describe multiple processes and various instances of the same hardware block running concurrently. The “Low Level” communication protocol between these multiple processes can also be specified. This is not possible in a single process C/C++ based design.
In conclusion, what makes CtoS a viable synthesis tool for the design of complete Digital Systems is its ability to synthesize both “High Level” and “Low Level” features described in the same SystemC code. Complete systems cannot be described and synthesized if one stays in the “High Level Only” design paradigm.