( Post 117 Item 1 ) --------------------------------------------------------

From: rhughson@wellfleet.com (Richard Hughson)
Subject: Characterize Function (or Misfunction)

I've been using a methodology with uses the characterize/write_script
commands to create constraint files for my leaf modules.  After
investigating the contents of the write_script output files and
cross-referencing them to each other, I've discovered something
disturbing.  I'll describe the processes and then the results.

Process:

1. Compile all leaf modules using a set of generic constraints.
   An example of the generic constraints are:
	set_arrival	20	all combinational inputs
	set_arrival	6	all registered input
	max_delay	10	all combinational output
	max_delay	6	all registered output
	max_period	30	clk
		
	as well as standard drive and load attributes
	and the other necessary clock attributes/constraints.

    These constraints provide a quick and easy starting point. 

2.  Once all leaf module are compiled, I read in the top level
    design, link all, and characterize all leaf modules.  After
    characterization is complete, write_script produces constraint
    files that will be used for future compiles. 

Results:

Suppose for this example a design exists of two leaf modules, A and B.
Module A has an output "net01" which feeds an input to module B.
After the first compile which uses the generic constraints, net01
has a maximum delay of 13ns out of module A. After the generic compile
of B, it is reported that net01 is required to be at the port
by 19ns in order to make set-up time to an internal register.

At this point things are great. I've got 6ns of slack. Here is the problem.

It seems that when characterizing net01 on module A, it sees that module B
only needs the signal to be available by 19ns and therefore places a
"max_delay 19 net01" constraint on module A.  Likewise, when characterizing
module B, a "set_arrival 13 net01" attribute is assigned.  If a compile is
executed with using these write_script constraint files, each leaf can
pass without any violations but the top level design will have up to a 6ns
violation.

The characterize command should not assign constaints/attributes which will
violate the "max_period" constraint! 

If other users have seen this same behavior, I'd like to hear what solutions
have been found.  If we are all "just living with it," maybe we ought to
inform Synopsys of this issue.

  - Richard Hughson, Wellfleet Communications


( Post 117 Item 2 ) --------------------------------------------------------

From: sgolson@trilobyte.com (Steve Golson)
Subject: One Can't Have a Library Cell with Pin Name 'NS'

I'm using Synopsys 3.0a on SPARC under SunOS 4.1.3.

If you try to build a library cell using Library Compiler, and one of your pin
names is 'NS', then the library gets built fine. However if you instantiate
this cell, and try to link it, you get the following error message:

  Error: Can't find input port 'NS' on reference to 'FOO' in 'test'. (LINK-1)

It turns out that 'NS' is a reserved word. According to Synopsys, 'NS' or 'ns'
means nanoseconds and is used in the predefined physical type TIME. Ergo, you
can't use it as a pin name.

I haven't been able to find any listing of these reserved words anywhere in
the manuals. Does anybody know what *other* words are reserved?

  - Steve Golson, Trilobyte Systems, Carlisle, MA


( Post 117 Item 3 ) --------------------------------------------------------

From: [A User]
Subject: Back Annotation from Synopsys to Verilog

Hi, John:

Please make this posting anonymous.

I'd like to know if there is any people out there have ever tried to generate
the pre-layout SDF file from Synopsys 3.0a and then back annotate to the 
Verilog environment. 

According to my understanding, this can be done with the following steps:

1. in Synopsys: write_timing -format sdf -output xxx.sdf -context verilog

2. in Verilog: add the following lines to the system simulation level of the
  verilog source code:

  initial begin
    $timeformat(-9, 2, " ns", 20);
    $sdf_annotate("xxx.sdf", system,,, "MAXIMUM", "1.0:1.0:1.0", "FROM_MTM");
  end

However, the verilog annotator failed to finish the annotation.  I'm pretty
sure that I used the correct scope because otherwise the annotator would
complain about instance not found.

Here's what I get from the run:

   Configuring for back-annotation...

   Reading SDF file and back-annotating timing data...

   WARNING - Hierarchy divider in SDF is being mapped to `.'
   SDFA ERROR - error annotating to MIPD
   SDFA ERROR - error encountered during timing annotation of instance top
   SDFA ERROR - error encountered during timing annotation - back-annotation
   terminated

Can anyone help me?



 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)