Editor's Note:  Synopsys just announced that it's going to sell a tool
 called DesignPower that's to be used to do probabalistic power analysis on
 switching CMOS type designs.  (It's sort of like a "power" equivalent of
 a static timing analyzer -- you throw vectors at the design in this tool
 and it looks at what gates switched and what didn't from a power point of
 view.)  I'm very excited about this -- not the product, but what it 
 signifies -- Synopsys is going to start looking at power as a user
 controllable constraint to synthesis!  Cool!

                                             - John Cooley
                                               the ESNUG guy

( ESNUG 195 Item 1 ) ---------------------------------------------- [9/94]

Subject: (ESNUG 194 #3) Hold Problems On A Single FF Breaks Gate Array Size!

>When I use Design Compiler to fix hold times I run into a problem with
>feedback loops.  Synopsys adds the clock skew into the path to determine
>how much hold time is needed.  This is fine if the path starts and ends 
>at differant devices, but wrong when the path is a feedback path in a
>statemachine, or on a MUXed flop. 
>
>The effect of using clock skew in the hold requirement for a path that
>begins and ends on the same device in our case caused 6 extra un-needed
>buffers to be added into the feedback loop of every flop.  This adds 20%
>to the final gate count of my design -- pushing it up to the next higher
>size gate array!  Any idea how to get around this bug?

                     ----    ----    ----    ----

From: stropparo@pasta.enet.dec.com (Peter A. Stropparo)

John, I have been enlightened! All you need to do is say the SECRET PASSWORD
and Synopsys will behave correctly.  The SECRET PASSWORD is:

               "tvc_uncertainty_handle_self_loops = 1"

This generates the following warning:

             Warning: Defining new variable
                      'tvc_uncertainty_handle_self_loops'. (EQN-10)

which can be ignored.  With this hidden variable set Synopsys will not fix
hold times in feedback loops.

  - Peter A. Stropparo
    Digital Equipment Corp.


( ESNUG 195 Item 2 ) ---------------------------------------------- [9/94]

From: mhenry@p05.dasd.honeywell.com (Matthew Henry)
Subject: DesignWare Is A Carefully Crafted Overpriced Marketing Ploy

John,

The DesignWare commentary posted in ESNUG 192 struck a chord in me.  I
am licensed only for the standard "foundation" DesignWare libraries but have
evaluated several of the licensed components.  My honest impression is that
DesignWare is a carefully crafted marketing ploy by Synopsys that is 
undoubtedly overpriced or undervalued.  The following points elucidate how I 
can make so bold a claim:

 1. One of the primary advertised benefits of DesignWare is that it 
    contains hooks into the synthesis process that allow automatic selection 
    among two or more alternative speed vs. area implementations based on 
    overall design constraints.  This is fine, but that capability has 
    significance for arithmetic logic and little else.  (Notice that the most 
    recent DesignWare libraries do not include area & speed implementations.) 
    Furthermore, it is an unusual circumstance in which the ASIC designer does 
    not know ahead of time which implementation is best suited to his circuit. 
    I have never guessed wrong about when Synopsys will choose a ripple versus 
    a carry-lookahead adder, for example.

 2. The SynALU and SynAdvMath libraries are probably (I'm guessing) the 
    most popular licensed DesignWare because they promise faster arithmetic. 
    I've evaluated the "fast carry-lookahead" implementation of the adder
    using two different ASIC libraries.  In comparison to the standard
    carry-lookahead implementation, I found for some cases a degradation in
    speed, and in some cases a 2% to 4% speedup at the expense of 10% to 20%
    in area.  The Wallace tree multiplier is quite useful (and the vector
    adder is a minor variant of this), but I was able to write my own
    parameterized Wallace tree generator which, when coupled with a standard
    Synopsys carry-lookahead adder, outperforms the DesignWare version.

 3. DesignWare has at its roots the motivation of design reuse, and few 
    would dispute that reuse represents the single largest benefit to 
    productivity.  But who owns the intellectual property for reused
    components such as a microsequencer, EDAC unit, or programmable timer?
    Synopsys does.  A significant aspect of reuse is portability.  DesignWare
    is ASIC-library portable, but it is not simulator portable.  In addition,
    it contains no facility for the user to manually tweak a function for
    his own needs -- naturally, there is no source code.

 4. What can be the rationale for charging a customer 15% annual maintenance
    for a library that does not change?  If Synopsys devises a new DesignWare
    component, do they add it to an existing licensed library to give the
    user some reward for his maintenance?  No, they create a new DesignWare 
    library that must be separately licensed and maintained!  So maintenance 
    merely pays for the assurance that a DesignWare element will work with a
    new release of Design/VHDL/Verilog Compiler.  If DesignWare is founded on 
    unsupplied HDL source code, this really represents maintenance on the HDL 
    Compiler.  On the other hand, if DesignWare is founded on pre-configured 
    netlists of Synopsys primitives, then re-verification of a DesignWare 
    library should only be necessary if the Synopsys primitive set expands 
    (unlikely, it seems).  Either way, the customer is not getting much for
    his maintenance.

 5. Is there a genuine need to have multiple DesignWare licenses?  Do the 
    tools lock up a license for an extended period of time?  Can they even be 
    effectively shared?  It seems that one license for a given DesignWare 
    library should be sufficient for all but the largest sites.

 6. (I will happily concede that DesignWare makes tremendous sense for FPGAs,
    where some functions must be very cleverly mapped into coarse-grained 
    architectures.)

The bottom line is that I feel most users are much more appropriately served 
by initiating their own reuse strategies based on source code than on 
DesignWare.  Perhaps a more appropriate niche for DesignWare is in 
synthesizable cores of complex standard devices such as microcontrollers, 
SCSI interfaces, or the recently announced PCI interface.

  - Matt Henry
    Honeywell, Defense Avionics Systems


( ESNUG 195 Item 3 ) ---------------------------------------------- [9/94]

From: abdoo@adtaz.sps.mot.com (David Abdoo)
Subject: A Workaround To Force DC To Use FF Qbar Outputs

Hi John,

The library to which I am synthesizing has D Flip-Flops which have only a
'Q' output as well as DFF's with both Q and Qbar.  (This is to save area if
only Q is needed.)  I shall refer to them herein as 'DFF_Q' (DFF with
only a Q output) and 'DFF_Q_QB' (DFF with both Q and Qbar).

I noticed that the netlist produced by synthesis sometimes used a DFF_Q
followed by an inverter for cases where a DFF_Q_QB would have been more
efficient (both for area and timing).  The problem seems to be that the
Design Compiler picked the DFF_Q before it realized that it also needed Qbar.
(Once it was mapped to a DFF_Q, it seems to have no way of figuring out
that it could swap to the use of a DFF_Q_QB.)  Here's the Verilog behavioral
code I used to directly imply that it needed both Q & Qbar:
 
       always @ (posedge CLK) Q <= D;
       assign Qbar = ~Q;

       // Note: Q and Qbar are used as inputs in the modules that follow!

       some_other_module instance_name (Q, Qbar, ...  );

As I commonly use two (or occasionally more) 'compile' commands in the
synthesis process, and the last compile is incremental, my solution to this
not-using-Qbar problem is to prevent Design Compiler from picking the DFF_Q
until the last compile:

   (specify usual area and timing constraints here first)

   dont_use DFF_Q
   compile -map_effort medium /* maps to all DFF_Q_QB */

   remove_attribute DFF_Q dont_use
   compile -map_effort high -incremental

I strongly suggest that if you are going to try this, you write out your
netlist after each compile and compare the results.

If someone can explain to me (briefly) why Design Compiler did not know to
switch from DFF_Q + inverter to DFF_Q_QB, I'd like to understand - especially
if it was due to something I did wrong. Other constructive feedback and/or
questions are also welcome.
 
  - Dave Abdoo
    Motorola, Tempe, AZ
 

( ESNUG 195 Item 4 ) ---------------------------------------------- [9/94]

Subject: (ESNUG 193 #4) Interpreting Overlapping Verilog Casex Sectors

>Does Design Compiler define how they implement overlapping selectors in a
>Verilog "casex" statement?  For example:
>
> casex(var)
>    3'b1xx: action1;
>    3'bx1x: action2;
>    3'bxx1: action3;
>    3'b000: action4;
> endcase
>
>This is the syntax one would like to use for a one-hot state machine.  Does
>Synopsys ALWAYS generate the correct logic?  If so, where is it documented?

                     ----    ----    ----    ----

From: asic@netcom.netcom.com (Henry George Berkley)

In chapter 5 of HDL Compiler for Verilog Reference Manual:

  "The first case-item that evaluates to 'true' determines the path.
   All subsequent case-items are ignored, even if they are 'true'."

If you intend a one-hot state machine, use the '//synopsys parallel_case'
directive for optimal logic.  ESNUG 193 Item 3 presents an excellent
example of a one-hot construction.

  - Henry George Berkley     
    Electronic Consulting    

P.S.  Since the parallel_case directive logic behaves differently than
simulation, consider adding checking code:

 //synopsys translate_off

 begin : check_block
    integer i, n;
    n=0;
    for ( i=0; i<3; i=i+1 )
	if ( var[i] == 1'b1 )
	    n=n+1;
    if ( n>1 )
	$display("ERROR: var Bad one-hot state");
 end
 //synopsys translate_on
	
                     ----    ----    ----    ----

From: martint@sei.com (Martin Taylor)

In the case syntax that the user orginally gave you would not get efficient
one-hot encoding.  You would get an:

	if then
	else
	else
	else

Using the code example as supplied, the cases are evaluated in order until
one is found to be true.  (To get one-hot encoding use the "// synopsys
parallel_case" directive.  But be warned: If you use the parallel_case
directive then it is up to the engineer to guarantee *by*design* that only
one of the cases will evaluate true at any time.)

By the way; it's better to use casez than casex as x's in a casex are treated 
as don't cares which can mask design errors.

  - Martin Taylor
    Silicon Engineering Inc.

                     ----    ----    ----    ----

From: sgolson@trilobyte.com (Steve Golson)

In ESNUG 193 #4, the user wants to build a one-hot state machine, and wonders
if the following construct is guaranteed to work in Verilog:

   casex(var)
      3'b1xx: action1;
      3'bx1x: action2;
      3'bxx1: action3;
      3'b000: action4;
   endcase

A better idea is to use a "backwards" case statement:

   case (1'b1) // synopsys parallel_case full_case
      var[2]:  action1 ;
      var[1]:  action2 ;
      var[0]:  action3 ;
     default:  action4 ;
   endcase

This will do exactly what you want.  (For more info see my paper "State
machine design techniques for Verilog and VHDL" in the most recent issue
of the Synopsys Journal of High-Level Design.)

  - Steve Golson
    Trilobyte Systems


( ESNUG 195 Item 5 ) ---------------------------------------------- [9/94]

From: gordonb@bnr.ca (Gordon G. Buchanan)
Subject: How Does One Trick Design Compiler Into Invoking Complex Cells? 

Fellow Synopsys Slaves,

In order to improve routability on a particularly congested ASIC layout we
are proposing to add complex cells to the library (such as a quad scanable
FF with common enable, clock and scan pins).  Note: when the FF is "disabled"
it retains the previous Q & QC values after the clock edge  - we  have lots
of  examples of  this  function throughout our synchronous design.

The problem is: How do we get Design Compiler to actually use such a FF or
any other complex cell without hand instantiating it?  Anyone out there
found a way to do this?

  - Gordon Buchanan
    BNR, Ottawa



 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)