Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics 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.

Innovus - Cover IO pins with Metal

Status
Not open for further replies.

MSPLL

Newbie level 4
Joined
Nov 22, 2020
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
56
Hi,

I am trying to cover my I/O pins with their corresponding metal. In the attached images, I have shown an M3 Input pin called "reset" in both Innovus and Virtuoso. The issue arises when importing the layout in Virtuoso and performing the Calibre LVS. The LVS does not pass because the M3 "pin" is not covered with the M3 "drawing." For some reason, Innovus does not overlap the pins once routing is complete. See how in Innovus, there is only a 0.1um overlap which gets mapped to Virtuoso.

Yes, there are alternatives to pass the LVS, such as changing the purpose of the pin and label in Virtuoso to "drawing" or manually draw the overlap in Virtuoso. However, I want to avoid these alternatives. Manually drawing would not be possible for large designs.

How can I ensure that the overlap extends covering the entire pin with the wired connection? Thank you.
Virtuoso.png
Innovus.png
 

innovus does pin routing just fine. I think your layer map file is not correct, so the pins seen in virtuoso appear to be missing. that would be my 1st guess.
 

innovus does pin routing just fine. I think your layer map file is not correct, so the pins seen in virtuoso appear to be missing. that would be my 1st guess.

The pins are not missing in Virtuoso. You can clearly see it from the image.

Also, see how in Innovus, the inside of the green shapes are different, i.e., one is a pin and the other is a drawing.
 

The pin extents seem unusually and needlessly large.
Maybe there is a setting for the size, location, etc. in
whichever tool draws the pins, that would make it
behave better?
 

The pin extents seem unusually and needlessly large.
Maybe there is a setting for the size, location, etc. in
whichever tool draws the pins, that would make it
behave better?

I tried reducing the pins to their smallest size (0.1um by 0.1um) and the same thing happened. However this time the wire extends to exactly half the pin (0.05um). Leaving the remaining half without any metal cover.

I draw the pin in Innovus using the pin editor.
 

the pin shape is pretty normal for what innovus likes to do. you need to check your layer map files from innovus -> gds and from gds -> virtuoso.

a related issue is the output gds precision. it is possible you are in the most dumb corner case ever and your db does not have precision enough to draw the pin properly. so it shrinks? pretty unlikely, but possible. innovus would warn you in the console though if that happens.
 

the pin shape is pretty normal for what innovus likes to do. you need to check your layer map files from innovus -> gds and from gds -> virtuoso.

a related issue is the output gds precision. it is possible you are in the most dumb corner case ever and your db does not have precision enough to draw the pin properly. so it shrinks? pretty unlikely, but possible. innovus would warn you in the console though if that happens.

Thanks for the reply. It happens for all of my I/O pins on my design. It never wants to complete the overlap and randomly stops.

I need a way to ensure that the net extends to the entire pin. Ignoring Virtuoso, I would like to figure out how I can cover my pin with the same metal. I found a similar thread where the author indicates that this is a known bug and made a script that would cover the pin:

 

For anyone interested in this issue, I wrote a rough TCL script that will cover the pin. However, it assumes that VDD and VSS are either on the north or south side. It can be easily modified for your design. All it does is move the pin by 0.5um in the east or west direction. Ensure that the routing is complete before running this. The good news is in Virtuoso, the Calibre LVS passes without any modifications.

Instead of moving the pin, I would like to simply get the coordinates of the pin and place metal over it.

Code:
foreach pin [get_db ports] {

  set name  [get_db $pin .name]
  set side     [get_db $pin .side]
  set xL         [get_db $pin .location.x]
  set yL         [get_db $pin .location.y]
  set layer   [get_db $pin .layer.name]

  if {$side == "east"} {
  set xL [expr {$xL - 0.5}]
  edit_pin -layer ${layer} -side Inside -assign $xL $yL -pin ${name}
  } elseif {$side == "west"} {
  set xL [expr {$xL - 0.5}]
  edit_pin -layer ${layer} -side Inside -assign $xL $yL -pin ${name}
  } else {
  puts "Do nothing"
  }

}
 
Last edited by a moderator:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top