At DAC, a few visitors asked us how the EScala platform is different from other companies’ High Level Synthesis (HLS) tools, like Bluespec’s BSV, Cadence’s CtoS, Calypso’s Catapult-C, Forte’s Cynthesizer, NEC’s CyberWorkBench, and Synopsys’ Synphony. This is obviously a good question, as our booth clearly pointed to C/C++ as the design entry language used by EScala.
Brian Bailey recently published some helpful clarifications about HLS on the Programmable Planet web-site. In his article, he explains some important things that are different when it comes to entering an algorithmic description into a HLS tool versus normal software program descriptions.
The article points out key restrictions that HLS tools typically expect your C/C++ code to follow. Things like single thread of execution; C-style pointers; and constructs, such as “goto” and “malloc/new,” are in general not allowed. In addition, all maximum dimensions for things must be known at the beginning.
Brian eloquently concludes that just because both descriptions use ANSI C syntax does not mean that these descriptions largely look the same. In short, be prepared for some significant code refractoring if you plan to use a C/C++ program written for a CPU to target a HDL implementation.
For EScala, this is different. The technology is based on a programmable engine that executes the algorithm. Therefore, none of the HLS source code restrictions outlined above apply. Any meaningful code that can be compiled with a C/C++ compiler can easily be ported to the EScala platform, without the modification that would be required using a HLS tool.