( ESNUG 481 Item 3 ) -------------------------------------------- [05/08/09]

Subject: ( ESNUG 480 #2 ) Brett warns of CatC/Synfora ANSI-C dead ends

> Legacy dictates that ANSI C/C++ is the right language for design because
> that's where most customers' algorithms start.  Having to do an ugly
> rewrite into SystemC sucks.  In addition, SystemC verification is slow
> (compared to C/C++) -- sorry Forte Cynthesizer; sorry Cadence C2S.
>
>     - Vinod Kathail
>       Synfora, Inc.                              Mountain View, CA


From: Brett Cline <brett=user domain=forteds not calm>

Hi, John,

I finally stopped laughing at Vinod's ridiculous portrayal of the high-level
synthesis (HLS) market long enough to respond.  Isn't he Synfora's CTO?  I
thought these technical guys are supposed to have some credibility.  Wow!
I guess I was wrong.

The center of Vinod's argument is verification.  Great idea and extremely
import but he's completely left out the dirty little secret that these
so-called "ANSI-C" synthesis tools have -- they will actually make your
verification problem WORSE!  ANSI-C/C++ is a software programming
language which means that it has several specific problems for use without
significant modification in a hardware design flow.

  - First problem: ANSI-C does not allow bit-accurate data types.  This
    means that your "ANSI-C simulation" will not accurately model the bit
    widths in your hardware block.  You are limited to data types like
    char, int, etc.  Wouldn't it matter if your bit width was limited to
    10 bits and you were using a 32 or 64 bit int and an overflow
    condition occurred?  Even Mentor knows that ANSI-C isn't good enough
    for synthesis because they have their own language (we'll call it
    "MentorC") that adds bit accurate data types.  Of course, these are
    not standard and they certainly are not "ANSI-C."

  - Second problem: There's no way to model control logic in ANSI-C.  I'm
    not talking about your basic "if, else, case" type of control.  I'm
    talking about control that involves timing.  For instance, just
    modeling a typical I/O protocol in ANSI-C is all but impossible.
    There's no way to wait on a clock edge for something to happen;
    something critical in accurately modeling a design.  Their way makes
    you stick on the interface later in the process with no testing...
    but more on that later.

  - Third problem: ANSI-C simulations cannot deal with concurrency.  This
    is a huge problem!  Their marketing team (or CTO evidently) will tell
    you how much faster "ANSI-C" is -- but it isn't simulating your entire
    design -- only a single block serially.  If you are designing a simple
    filter this may not matter.  But, for any real design the blocks must
    interact and that must involve some concurrency semantics.  And, since
    ANSI-C can't model any sort of complex I/O -- you never get to
    simulate your interfaces with your ANSI-C algorithm.  Is that really
    verification?

  - Fourth problem: PICO and CatapultC are block level tools.  On the
    surface this doesn't seem like a problem but ultimately it is the real
    killer.  The RTL created for each block with an "ANSI-C" tool must be
    stitched together by hand in RTL.  This will be the first time the user
    gets to simulate all of their blocks AND THE INTERFACES together.  This
    is basically pushing the verification problem back to RTL and provides
    no benefit ultimately -- and worse yet, it causes a ton of problems.

I just came back from two weeks in Japan and Korea where we met with several
customers there who have attempted to use some of these "ANSI-C" tools and
ultimately failed.  The main reason (there were several) was because the
increase in design and verification effort and time once they actually
reached RTL!  The "ANSI-C" pitch makes it look very easy to get started; but
it is very difficult to actually finish.

SystemC has solved these problems already and done so in a standardized way.
With SystemC you can use all of your existing algorithms in an environment
that meets the requirements for hardware design mentioned above.  Using our
Cynthesizer with SystemC handles your entire design, including control and
datapath, multi-clock, etc. from a chip or system level -- not just
individual blocks.

One final point to clear this up once and for all: SystemC's not a language.
It is a class library that extends ANSI-C++ in a standardized way.  So, if
you can write C/C++ -- you can use the SystemC hardware features and the
dozens of tools that support SystemC.

So, I really do appreciate all of Vinod's apologies in his email to you
and, on behalf of the readers, we accept since he has left out some of the
important facts.  Perhaps he's up for a "promotion" to marketing guy.

    - Brett Cline
      Forte Design Systems                       Acton, MA
Join    Index    Next->Item









   
 Sign up for the DeepChip newsletter.
Email
 Read what EDA tool users really think.


Feedback About Wiretaps ESNUGs SIGN UP! Downloads Trip Reports Advertise

"Relax. This is a discussion. Anything said here is just one engineer's opinion. Email in your dissenting letter and it'll be published, too."
This Web Site Is Modified Every 2-3 Days
Copyright 1991-2024 John Cooley.  All Rights Reserved.
| Contact John Cooley | Webmaster | Legal | Feedback Form |

   !!!     "It's not a BUG,
  /o o\  /  it's a FEATURE!"
 (  >  )
  \ - / 
  _] [_     (jcooley 1991)