( ESNUG 383 Item 12 ) ------------------------------------------- [11/28/01]

From: Rudolf Usselmann <rudi@asics.ws>
Subject: How Can I Coax DC To Intelligently Duplicate High Fanout Nets?

Hi John!

I'm having trouble getting Design Compiler to do what I'm thinking -- not
what I'm writing.  ;)  Well almost!  Basically I have the following code:

  always @(posedge clk)
     sig_del1 <= #1 sig_in;

  always @(posedge clk)
     sig_del2 <= #1 sig_del1;

  always @(sig_sel2 or data_a or data_b)
     if(sig_del2)   dout = data_a;
        else        dout = data_b;

In this example, the data bus is 64 bits wide, and sig_del2 is driving 64
2:1 MUXes (or equivalent).  This means sig_del2 is my critical path due to
high fanout.  I tried to limit the fanout by setting set_max_fanout, in
which case DC inserts a buffer tree.  However, what I really would like
to see DC do is something like this:

   always @(posedge clk)
      sig_del1 <= #1 sig_in;

   always @(posedge clk)
      sig_del2_0 <= #1 sig_del1;

   always @(posedge clk)
      sig_del2_1 <= #1 sig_del1;

   always @(posedge clk)
      sig_del2_2 <= #1 sig_del1;

   always @(posedge clk)
      sig_del2_3 <= #1 sig_del1;

   always @(sig_sel2_0 or data_a or data_b)
      if(sig_del2_0)   dout[15:00] = data_a[15:00];
         else          dout[15:00] = data_b[15:00];

   always @(sig_sel2_1 or data_a or data_b)
      if(sig_del2_1)   dout[31:16] = data_a[31:16];
         else          dout[31:16] = data_b[31:16];

   always @(sig_sel2_2 or data_a or data_b)
      if(sig_del2_2)   dout[47:32] = data_a[47:32];
         else          dout[47:32] = data_b[47:32];

   always @(sig_sel2_3 or data_a or data_b)
      if(sig_del2_3)   dout[63:48] = data_a[63:48];
         else          dout[63:48] = data_b[63:48];

In this example I have reduced the fanout from 64 to 16, without inserting
buffers.  I do have a DC-Ultra license which is required for re-timing.  But
DC still can't read my mind...   :*(

So how can I do the above optimization automatically?  Maybe it would be
even better to reduce the fanout to 8.  DC should be able to figure this
out.  Any pointers appreciated !

    - Rudi Usselmann


 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)