( ESNUG 275 Item 9 ) --------------------------------------------- [12/17/97]

From: rmehler@netcom.com (Ron Mehler)
Subject: Ron Mehler's Quickie Hierarchical "Characterize" Tutorial

John,

I don't suppose I've discovered anything that isn't already well known, but
for what it's worth, here's my "characterize" tutorial I used successfully
at Alcatel.  The methodology:

   1: compile designs up the tree 
   2: characterize down 
   3: compile from the top for design rule changes only

                            A
                    ________|________
                   | B               | C
                 ------           --------
                |      |         |        |
                D      E         F        G


For example, a design consisting of the above tree would have the script:

  compile D 
  compile E 
  compile F 
  compile G

  compile B 
  compile C

  compile A

  characterize{B C}

  current_design = B 
  characterize {D E}

  current_design = C 
  characterize {F G}

  current_design = A 
  compile -only_design_rule

This methodology does not produce the desired results.  Design constraints
applied at the top level were not applied to lower levels, resulting in
unacceptable fanout and other design rule violations.

It was decided to implement the approach illustrated by Glenn Dukes in
"Synopsys dc_shell Scripts for Synthesis Application Note" of February 1993.
Scripts were written to perform the following operations automatically on
any design hierarchy:

   current_design = A 
   characterize B 
   write_script B.wscr
   characterize C 
   write_script C.wscr 
   current_design = B
   characterize D

etc. through the entire hierarchy...  then compile from the bottom up:

   current_design = G 
   include G.wscr 
   compile -only_design_rule
      . . .
   current_design = B 
   include B.wscr 
   compile -only_design_rule
   current_design = A 
   compile -only_design_rule

This appears to produce the desired results, after patching them up to work
around Synopsys bugs.

David Moreland (David.Moreland@Eng.Sun.COM) also has noted that timing
constraints are not always pushed down when blocks are characterized.  He
has proposed the following script to ensure that all submodules get
default constraints:

  find(design,"*") 
  des_list = dc_shell_status 
  foreach (DES, des_list) {
     current_design = DES 
     filter all_inputs() "@max_transition==0" 
     if (dc_shell_status != "") {
        set_max_transition 3.0 dc_shell_status 
     } 
  }

Another problem we have noted here is Synopsys putting in delay lines on
flip-flop feedback lines when using clock uncertainty.  To get around this
problem, an engineer here proposed adding the following script:

	foreach(dummy, all_registers()) {
		set_false_path -hold -from dummy -to dummy 
		}

and then compiling incrementally.

This appears to produce the desired results on small files, but causes
large ones to spin, more or less, forever.  For now, we have decided that
we can live with those extraneous delay lines.

I invite more discussion about hierarchical synthesis on ESNUG.

  - Ron Mehler
    Consultant



 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)