( 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.
|
|