Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

Issue when exporting the Innovus layout to Virtuoso

OrangeHalo

Junior Member level 2
Joined
Jan 16, 2019
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Ann Arbor
Activity points
199
Hi all,

I am doing some digital implemtation staff. I used Innovus to do PnR, and export the layout using GDS format to virtuoso.

Problem: All the label layers imported to Virtuoso appear to be drawing layers. As you can see in the figure below:

1591453277948.png


My thoughts: The mapping file for exporting Innovus layout to GDS format have some problems. Some layer definations(data type?) have errors. The thing is that I don't know how to modify the stream data types in mapping file, and I don't know how to map the purposes in the map file(such as NET, SPNET, PIN, etc.) to the technology file provided by my vendor.

Some additional information: I am using TSMC 0.18um GP technology. My map file and stream layer information are shown below:



========StreamUut Mapping File========

CONT PIN 15 0
CONT LEFPIN 15 0
CONT FILL 15 0
CONT FILLOPC 15 0
CONT VIA 15 0
CONT VIAFILL 15 0
CONT VIAFILLOPC 15 0
METAL1 NET 16 0
METAL1 SPNET 16 0
METAL1 PIN 16 0
METAL1 LEFPIN 16 0
METAL1 FILL 16 0
METAL1 FILLOPC 16 0
METAL1 VIA 16 0
METAL1 VIAFILL 16 0
METAL1 VIAFILLOPC 16 0
METAL1 LEFOBS 16 0
NAME METAL1/NET 16 0
NAME METAL1/SPNET 16 0
NAME METAL1/PIN 16 0
NAME METAL1/LEFPIN 16 0
VIA12 PIN 17 0
VIA12 LEFPIN 17 0
VIA12 FILL 17 0
VIA12 FILLOPC 17 0
VIA12 VIA 17 0
VIA12 VIAFILL 17 0
VIA12 VIAFILLOPC 17 0
METAL2 NET 18 0
METAL2 SPNET 18 0
METAL2 PIN 18 0
METAL2 LEFPIN 18 0
METAL2 FILL 18 0
METAL2 FILLOPC 18 0
METAL2 VIA 18 0
METAL2 VIAFILL 18 0
METAL2 VIAFILLOPC 18 0
METAL2 LEFOBS 18 0
NAME METAL2/NET 18 0
NAME METAL2/SPNET 18 0
NAME METAL2/PIN 18 0
NAME METAL2/LEFPIN 18 0
VIA23 PIN 27 0
VIA23 LEFPIN 27 0
VIA23 FILL 27 0
VIA23 FILLOPC 27 0
VIA23 VIA 27 0
VIA23 VIAFILL 27 0
VIA23 VIAFILLOPC 27 0
METAL3 NET 28 0
METAL3 SPNET 28 0
METAL3 PIN 28 0
METAL3 LEFPIN 28 0
METAL3 FILL 28 0
METAL3 FILLOPC 28 0
METAL3 VIA 28 0
METAL3 VIAFILL 28 0
METAL3 VIAFILLOPC 28 0
METAL3 LEFOBS 28 0
NAME METAL3/NET 28 0
NAME METAL3/SPNET 28 0
NAME METAL3/PIN 28 0
NAME METAL3/LEFPIN 28 0
VIA34 PIN 29 0
VIA34 LEFPIN 29 0
VIA34 FILL 29 0
VIA34 FILLOPC 29 0
VIA34 VIA 29 0
VIA34 VIAFILL 29 0
VIA34 VIAFILLOPC 29 0
METAL4 NET 31 0
METAL4 SPNET 31 0
METAL4 PIN 31 0
METAL4 LEFPIN 31 0
METAL4 FILL 31 0
METAL4 FILLOPC 31 0
METAL4 VIA 31 0
METAL4 VIAFILL 31 0
METAL4 VIAFILLOPC 31 0
METAL4 LEFOBS 31 0
NAME METAL4/NET 31 0
NAME METAL4/SPNET 31 0
NAME METAL4/PIN 31 0
NAME METAL4/LEFPIN 31 0
VIA45 PIN 32 0
VIA45 LEFPIN 32 0
VIA45 FILL 32 0
VIA45 FILLOPC 32 0
VIA45 VIA 32 0
VIA45 VIAFILL 32 0
VIA45 VIAFILLOPC 32 0
METAL5 NET 33 0
METAL5 SPNET 33 0
METAL5 PIN 33 0
METAL5 LEFPIN 33 0
METAL5 FILL 33 0
METAL5 FILLOPC 33 0
METAL5 VIA 33 0
METAL5 VIAFILL 33 0
METAL5 VIAFILLOPC 33 0
METAL5 LEFOBS 33 0
NAME METAL5/NET 33 0
NAME METAL5/SPNET 33 0
NAME METAL5/PIN 33 0
NAME METAL5/LEFPIN 33 0
VIA56 PIN 39 0
VIA56 LEFPIN 39 0
VIA56 FILL 39 0
VIA56 FILLOPC 39 0
VIA56 VIA 39 0
VIA56 VIAFILL 39 0
VIA56 VIAFILLOPC 39 0
METAL6 NET 38 0
METAL6 SPNET 38 0
METAL6 PIN 38 0
METAL6 LEFPIN 38 0
METAL6 FILL 38 0
METAL6 FILLOPC 38 0
METAL6 VIA 38 0
METAL6 VIAFILL 38 0
METAL6 VIAFILLOPC 38 0
METAL6 LEFOBS 38 0
NAME METAL6/NET 38 0
NAME METAL6/SPNET 38 0
NAME METAL6/PIN 38 0
NAME METAL6/LEFPIN 38 0
NAME COMP 220 0
COMP ALL 221 0
DIEAREA ALL 222 0
===================================

===========.tf stream layer file===

streamLayers(
;( layer streamNumber dataType translate )
;( ----- ------------ -------- --------- )
( ("ref" "drawing") 0 0 t )
( ("PWELL" "drawing") 1 0 t )
( ("NWELL" "drawing") 2 0 t )
( ("NWELL" "pin") 2 6 t )
( ("DIFF" "drawing") 3 0 t )
( ("DIFF" "dummy") 3 1 t )
( ("DIFF" "drain") 3 3 t )
( ("DIFF" "pin") 3 6 t )
( ("OD2" "drawing") 4 0 t )
( ("N3V" "drawing") 5 0 t )
( ("PIMP" "drawing") 7 0 t )
( ("NIMP" "drawing") 8 0 t )
( ("EPLY" "drawing") 9 0 t )
( ("BPLY" "drawing") 10 0 t )
( ("PDIFF" "drawing") 11 0 t )
( ("NDIFF" "drawing") 12 0 t )
( ("POLY1" "drawing") 13 0 t )
( ("POLY1" "dummy") 13 1 t )
( ("POLY2" "drawing") 14 0 t )
( ("CONT" "drawing") 15 0 t )
( ("METAL1" "drawing") 16 0 t )
( ("METAL1" "dummy") 16 1 t )
( ("METAL1" "slot") 16 2 t )
( ("METAL1" "BSL") 16 100 t )
( ("METAL1" "BSD") 16 101 t )
( ("VIA12" "drawing") 17 0 t )
( ("METAL2" "drawing") 18 0 t )
( ("METAL2" "dummy") 18 1 t )
( ("METAL2" "slot") 18 2 t )
( ("PAD" "drawing") 19 0 t )
( ("PAD" "BSL") 19 100 t )
( ("BPI" "drawing") 20 0 t )
( ("VIA67" "drawing") 21 0 nil )
( ("METAL7" "drawing") 22 0 nil )
( ("METAL7" "dummy") 22 1 nil )
( ("METAL7" "slot") 22 2 nil )
( ("VTM_P" "drawing") 23 0 t )
( ("VTM_N" "drawing") 24 0 t )
( ("VTDP" "drawing") 25 0 t )
( ("VTDN" "drawing") 26 0 t )
( ("VIA23" "drawing") 27 0 t )
( ("METAL3" "drawing") 28 0 t )
( ("METAL3" "dummy") 28 1 t )
( ("METAL3" "slot") 28 2 t )
( ("ESD" "drawing") 30 0 t )
( ("VIA34" "drawing") 29 0 t )
( ("METAL4" "drawing") 31 0 t )
( ("METAL4" "dummy") 31 1 t )
( ("METAL4" "slot") 31 2 t )
( ("VIA45" "drawing") 32 0 t )
( ("METAL5" "drawing") 33 0 t )
( ("METAL5" "dummy") 33 1 t )
( ("METAL5" "slot") 33 2 t )
( ("RPO" "drawing") 34 0 t )
( ("P2V" "drawing") 35 0 t )
( ("PTDIODE" "drawing") 37 0 t )

( ("METAL6" "drawing") 38 0 t )
( ("METAL6" "dummy") 38 1 t )
( ("METAL6" "slot") 38 2 t )
( ("VIA56" "drawing") 39 0 t )

( ("METAL1" "pin") 40 0 t )
( ("METAL1" "BSP") 40 100 t )
( ("METAL2" "pin") 41 0 t )
( ("METAL3" "pin") 42 0 t )

( ("METAL4" "pin") 43 0 t )
( ("DMEXCL" "dummy4") 150 4 t )
( ("SLTEXCL" "dummy4") 158 4 t )
( ("METAL5" "pin") 44 0 t )
( ("DMEXCL" "dummy5") 150 5 t )
( ("SLTEXCL" "dummy5") 158 5 t )
( ("METAL6" "pin") 45 0 t )
( ("DMEXCL" "dummy6") 150 6 t )
( ("SLTEXCL" "dummy6") 158 6 t )
( ("METAL7" "pin") 46 0 nil )
( ("DMEXCL" "dummy7") 150 7 nil )
( ("SLTEXCL" "dummy7") 158 7 nil )
( ("POLY1" "pin") 47 0 t )
( ("POLY1" "lvs") 47 1 t )
( ("HRI" "drawing") 48 0 t )
( ("BJTDUMMY" "drawing") 49 0 t )
( ("PSUB2" "drawing") 50 0 t )
( ("HOTWL" "drawing") 51 0 t )
( ("RWDUMMY" "drawing") 52 0 t )
( ("RWDUMMY" "drawing1") 52 1 t )
( ("VCDUMMY" "drawing") 53 0 t )
( ("RPDUMMY" "drawing") 54 0 t )
( ("RPDUMMY" "drawing1") 54 1 t )
( ("HVPRDMY" "drawing") 54 2 t )
( ("RP4TDUMMY" "drawing") 54 3 t )
( ("EXCL" "drawing") 55 0 t )
( ("DIODUMMY" "drawing") 56 0 t )
( ("SDI" "drawing") 58 0 t )
( ("TEXT" "drawing") 59 0 t )
( ("DRCDUMMY" "drawing") 60 0 t )
( ("N2V" "drawing") 61 0 t )
( ("prBoundary" "drawing") 62 0 t )
( ("marker" "error") 63 0 t )
( ("LMARK" "drawing") 63 1 t )
( ("LW" "drawing") 63 2 t )
( ("IP" "drawing") 63 63 t )
( ("marker" "warning") 64 0 t )
...
( ("METAL1" "boundary") 151 0 t )
( ("METAL2" "boundary") 152 0 t )
( ("METAL3" "boundary") 153 0 t )
( ("METAL4" "boundary") 154 0 t )
( ("METAL5" "boundary") 155 0 t )
( ("METAL6" "boundary") 156 0 t )
( ("METAL7" "boundary") 157 0 t )
( ("SLTEXCL" "dummy1") 158 1 t )
( ("SLTEXCL" "dummy2") 158 2 t )
( ("SLTEXCL" "dummy3") 158 3 t )
( ("MD" "pin") 159 0 t )
( ("RFDUMMY" "drawing") 160 0 t )
( ("RFDUMMY" "drawing1") 160 1 t )
( ("RFDUMMY" "drawing2") 160 2 t )
( ("VIA12" "boundary") 161 0 t )
( ("VIA23" "boundary") 162 0 t )
( ("VIA34" "boundary") 163 0 t )
( ("VIA45" "boundary") 164 0 t )
( ("VIA56" "boundary") 165 0 t )
( ("VIA67" "boundary") 166 0 t )
( ("VIAD" "drawing") 167 0 t )
...
( ("CONT" "boundary") 0 0 nil )
( ("CONT" "net") 0 0 nil )
( ("METAL1" "net") 0 0 nil )
( ("METAL2" "net") 0 0 nil )
( ("METAL3" "net") 0 0 nil )
( ("METAL4" "net") 0 0 nil )
( ("METAL5" "net") 0 0 nil )
( ("METAL6" "net") 0 0 nil )
( ("METAL7" "net") 0 0 nil )
( ("VIA12" "net") 0 0 nil )
( ("VIA23" "net") 0 0 nil )
( ("VIA34" "net") 0 0 nil )
( ("VIA45" "net") 0 0 nil )
( ("VIA56" "net") 0 0 nil )
( ("VIA67" "net") 0 0 nil )
( ("boundary" "drawing") 0 0 nil )
) ;streamLayers
===========================



Thanks in advance.



Best,

OrangeHalo
 

Dominik Przyborowski

Advanced Member level 3
Joined
Jun 6, 2013
Messages
818
Helped
360
Reputation
720
Reaction score
353
Trophy points
1,343
Location
Norway
Activity points
6,092
Both Innovus and virtuoso are using OA, why not open digital layout directly in virtuoso?
 

OrangeHalo

Junior Member level 2
Joined
Jan 16, 2019
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Ann Arbor
Activity points
199
Both Innovus and virtuoso are using OA, why not open digital layout directly in virtuoso?
Hi Dominik,
Thank you for your reply. But when export the Innovus design into OA format, it still need some map file. I do not have that with my kit.
Best,
Haochen
 

dick_freebird

Advanced Member level 5
Joined
Mar 4, 2008
Messages
6,719
Helped
1,981
Reputation
3,966
Reaction score
1,798
Trophy points
1,393
Location
USA
Activity points
53,885
Not clear to me whether the problem is on the export side
or the import side. Seems like the Innovus layout is all
exported to datatype zero and Cadence import puts
datatype 0 to "regular" layers w/ "drawing" purpose.
There appears no exporting of Innovus layers to datatype
6, which your Cadence import would put to "pin" purpose.

Also appears Innovus export is putting multiple purposes
(?) onto the same layer, datatype 0 from which they will
not be able to be "unmerged" at the Cadence import end.

I guess you have to get your hands dirty.
 

OrangeHalo

Junior Member level 2
Joined
Jan 16, 2019
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Ann Arbor
Activity points
199
Not clear to me whether the problem is on the export side
or the import side. Seems like the Innovus layout is all
exported to datatype zero and Cadence import puts
datatype 0 to "regular" layers w/ "drawing" purpose.
There appears no exporting of Innovus layers to datatype
6, which your Cadence import would put to "pin" purpose.

Also appears Innovus export is putting multiple purposes
(?) onto the same layer, datatype 0 from which they will
not be able to be "unmerged" at the Cadence import end.

I guess you have to get your hands dirty.
Hi dick_freebird,

Thank you for your reply. I just tried to changed the mapping of the " NAME METAL*/Purpose 'layer number' 'data type' " lines according to the pins information in the technology.

For example, I changed
NAME METAL1/NET 16 0
NAME METAL1/SPNET 16 0
NAME METAL1/PIN 16 0
NAME METAL1/LEFPIN 16 0
to
NAME METAL1/NET 40 0
NAME METAL1/SPNET 40 0
NAME METAL1/PIN 40 0
NAME METAL1/LEFPIN 40 0
according to
( ("METAL1" "pin") 40 0 t )
It seems the layout in Virtuoso has the correct layer information now.

But still, I have no idea on what does each data type refer to. Besides, those purposes in map file(SPNET, LEFPIN, FILLOPC, etc.) seem unclear to me. Can you give me some hint or reference ? Thank you again.

Best,
OrangeHalo
 

ThisIsNotSam

Advanced Member level 5
Joined
Apr 6, 2016
Messages
1,974
Helped
351
Reputation
702
Reaction score
344
Trophy points
83
Activity points
9,883
first thought: you need to find the mapping files provided by TSMC, both for innovus/encounter and virtuoso. they exist for sure. whoever installed the kit must have them put somewhere.

second, the meaning of the datatypes is weird to interpret (and probably not that important because it is vendor dependent) also because there is no match between custom layout and digital layout terminology. for instance, SPNET refers to special net. this is just a drawing metal layer in virtuoso.
 

OrangeHalo

Junior Member level 2
Joined
Jan 16, 2019
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Ann Arbor
Activity points
199
first thought: you need to find the mapping files provided by TSMC, both for innovus/encounter and virtuoso. they exist for sure. whoever installed the kit must have them put somewhere.

second, the meaning of the datatypes is weird to interpret (and probably not that important because it is vendor dependent) also because there is no match between custom layout and digital layout terminology. for instance, SPNET refers to special net. this is just a drawing metal layer in virtuoso.
Hi ThisIsNotSam,
Really appreciate your answer. I will try to contact TSMC for details.
Best,
OrangeHalo
 

dick_freebird

Advanced Member level 5
Joined
Mar 4, 2008
Messages
6,719
Helped
1,981
Reputation
3,966
Reaction score
1,798
Trophy points
1,393
Location
USA
Activity points
53,885
I think you may run into other problems using GDS-II
as the "medium of exchange".

Cadence pins are more than their geometry and
layer/datatype (GDS-II knows only this). The pin
objects also carry connectivity properties that
are probably interesting or even essential. Those
can't be rebuilt in any way I know of, other than
manually.

When I ran "blowback" verifications I would stream
in the mask shop GDS file, and then copy onto it
the set of pin objects from the original layout DB
so that LVS could figure out top level connectivity.
Streamed-in DB only had property-less pin polygons
which helps LVS not at all.

But in your recent example it looks like you are still
mashing multiple source layers into one GDS layer /
datatype. While the layer may be correct (?) you
lose all the "purpose" (and properties are dropped,
regardless, just by the nature of GDS-II data structure)
 

    OrangeHalo

    points: 2
    Helpful Answer Positive Rating

ThisIsNotSam

Advanced Member level 5
Joined
Apr 6, 2016
Messages
1,974
Helped
351
Reputation
702
Reaction score
344
Trophy points
83
Activity points
9,883
The comment above is correct, but I must add that there is a reference flow for digital designs and that is how it is done. (OA is still not popular, nor is OASIS)
The number one reason we stream out a GDS file from innovus is to run DRC on calibre. The GDS file you get is "complete" in that sense.
 

    OrangeHalo

    points: 2
    Helpful Answer Positive Rating

ranaya

Member level 5
Joined
Jan 22, 2012
Messages
85
Helped
3
Reputation
6
Reaction score
2
Trophy points
1,288
Location
Kelaniya
Activity points
2,044
Hi ThisIsNotSam,
Really appreciate your answer. I will try to contact TSMC for details.
Best,
OrangeHalo
As ThisIsNotSam stated, to go with stream-out -> GDS flow, you need a mapping file. The corresponding GDS equivalent number (for stream-out) to each layer is defined in .tf file of the PDK. For instance, it looks like below for a certain PDK :

.tf content :-

techLayers(
;( LayerName Layer# Abbreviation )
;( --------- ------ ------------ )
( MG 35 MG )
( SAB 36 SAB )
( TG 37 TG )
( HR 38 HR )
( CONT 39 CONT )
( NWR 40 NWR )
( PO1 41 PO1 )
( ME1 46 ME1 )


Then map the right number from .tf file to the corresponding layer in the file you use for the stream-out. i.e.

CONT PIN 39 0
CONT LEFPIN 39 0
CONT FILL 39 0
CONT FILLOPC 39 0
CONT VIA 39 0
CONT VIAFILL 39 0
CONT VIAFILLOPC 39 0
ME1 NET 46 0
ME1 SPNET 46 0
ME1 PIN 46 0
ME1 LEFPIN 46 0
ME1 FILL 46 0
ME1 FILLOPC 46 0
ME1 VIA 46 0
ME1 VIAFILL 46 0
ME1 VIAFILLOPC 46 0
ME1 LEFOBS 46 0

Notice that, number 39 and 46 for CONT and ME1 (metal 1) layers are mapped from the .tf file. Hope this helps.....

Anuradha
 

    OrangeHalo

    points: 2
    Helpful Answer Positive Rating

OrangeHalo

Junior Member level 2
Joined
Jan 16, 2019
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Ann Arbor
Activity points
199
Sorry for late reply. Thank you for all your replies! Now it is clear to me.

Best,
OrangeHalo
 

Toggle Sidebar

Part and Inventory Search


Welcome to EDABoard.com

Sponsor

Sponsor

Design Fast


×
Top