( Post 122 Item 3 ) --------------------------------------------------------

From: vlsisj!mrslate!ravi@uucp-gw-2.pa.dec.com (Ravi Donthi x5204)
Subject: (Post 117 Item 3) "Back annotation from Synopsys to Verilog"

Hi John,

This solution is for problem Item-3 in Post-117 from an anonymous user.
First, here's the original problem:

>I'd like to know if there are 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

Here I think the problem is not Synopsys, but Verilog.   For back-annotating
MIPD (Module input port delays), the port receiving the delay has to be port
of a verilog primitive cell (for ex: buf, bufif0, and, nand etc...).  Refer to
chapter 26-2 of Verilog reference manual for a list of these primitives.  

Looks like in your case the cell description has some kind of behavioural
statment like "always@(...,port_name,...)" which gets accelerated during
simulation/compilation in verilog and is not backannotatable.  To get a quick
fix for the cell you can do the following:

      module xyz ( a, b , c, d ....);
      input a, b ;
      output c, d ;
          
           buf ( a_buf, a);
        
       always@ (a_buf) 
          .....
 
The idea is to use the name of the buffered port ( a_buf ) during the
entire description of the cell instead of port_name( a).

  - Ravi Donthi, VLSI Tech. Inc. San Jose.



 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)