Public

Thread: LVS_IGNORE_CELLS for fill-cap cells?

11 Discord messages from ℹ️ - Information/⁉️-questions/threads/lvsignorecells-for-fill.md.

Category: ℹ️ - Information Parent channel: #⁉️-questions Thread ID: 1504886967022653481

Messages: 11

message-1504886967022653481

2026-05-15T16:43:32.386+00:00 — Matt G. (Mobius) (@mguthaus)

Content

If you have a design with a lot of fill/cap cells, LVS takes an incredibly long time. This is likely due to the single/no pin connections of these cells and the isomorphism checking during LVS to do the matching of cells. Should the PDK ignore these fill cells?

@Leo Moser (mole99) @Tim Edwards ?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
        "color": null,
        "discriminator": "0000",
        "id": "323371864074485771",
        "isBot": false,
        "name": "mole99",
        "nickname": "Leo Moser (mole99)",
        "roles": [
          {
            "color": null,
            "id": "1423020172595298314",
            "name": "Mod",
            "position": 4
          }
        ]
      },
      {
        "avatarUrl": "2026-05_media/6bcc8e61db497b620550682309ace5d5-D89B4.png",
        "color": null,
        "discriminator": "0000",
        "id": "1365118310701600900",
        "isBot": false,
        "name": "rtimothyedwards_19428",
        "nickname": "Tim Edwards",
        "roles": []
      }
    ]
  }
}
</details>

message-1504892555794448606

2026-05-15T17:05:44.853+00:00 — Tim Edwards (@rtimothyedwards_19428)

Content

Netgen has a clever way to deal with this.  It treats every "cell X with an unconnected pin" like every other "cell X with an unconnected pin" and combines them in parallel, making sure to flag that the pin is unconnected instead of all the pins being connected together.

So if LVS is taking a long time for this reason, then you are doing something to subvert that method.  This could happen, for example, if the cells get renamed, as can happen when magic tries to disambiguate different projects which are using cells with the same name that may or may not be the same cell.  Mitch had a nice setup file for netgen that handled that case;  I do not think it has been ported to GF or IHP.

If you can post an example use case, I can quickly figure out if this is being caused by magic prefixing a library, and I can transfer Mitch's solution for sky130 over to gf180mcu.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/6bcc8e61db497b620550682309ace5d5-D89B4.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1504894847549571182

2026-05-15T17:14:51.25+00:00 — Matt G. (Mobius) (@mguthaus)

Content

@Tim Edwards Here was my patch with the change on the template example:
https://github.com/VLSIDA/gf180mcu-project-template/commit/2bd281386bac9fdf845696a617b356a9b9ef87a6
Note that I'm using the 3.3V libraries and memories in the branch.
https://github.com/VLSIDA/gf180mcu-project-template/tree/3v3-libraries

Without those changes, it was running 16+ hours and not finishing LVS.

Embeds

<details> <summary>Embeds data</summary>
[
  {
    "color": "#1E2327",
    "description": "The 3.3V flow inserts ~315k fillcap_16 and ~82k tap_2 instances at\nchip_top — roughly 3x the device count of the 5V flow and ~257x more\nfillcap_16. Netgen&#39;s iterative partition refinement d...",
    "fields": [],
    "images": [],
    "inlineEmojis": [],
    "thumbnail": {
      "height": 600,
      "url": "2026-05_media/2bd281386bac9fdf845696a617b356a9b9ef87a6-5D375",
      "width": 1200
    },
    "timestamp": null,
    "title": "fix: ignore fill/tap/decap cells during LVS to avoid netgen hang ·...",
    "url": "https://github.com/VLSIDA/gf180mcu-project-template/commit/2bd281386bac9fdf845696a617b356a9b9ef87a6"
  },
  {
    "color": "#1E2327",
    "description": "All-Digital PLL for GF180MCU using standard cells. Contribute to VLSIDA/gf180mcu-project-template development by creating an account on GitHub.",
    "fields": [],
    "images": [],
    "inlineEmojis": [],
    "thumbnail": {
      "height": 600,
      "url": "2026-05_media/gf180mcu-project-template-54141",
      "width": 1200
    },
    "timestamp": null,
    "title": "GitHub - VLSIDA/gf180mcu-project-template at 3v3-libraries",
    "url": "https://github.com/VLSIDA/gf180mcu-project-template/tree/3v3-libraries"
  }
]
</details><details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/6bcc8e61db497b620550682309ace5d5-D89B4.png",
        "color": null,
        "discriminator": "0000",
        "id": "1365118310701600900",
        "isBot": false,
        "name": "rtimothyedwards_19428",
        "nickname": "Tim Edwards",
        "roles": []
      }
    ]
  }
}
</details>

message-1504895053917589666

2026-05-15T17:15:40.452+00:00 — Matt G. (Mobius) (@mguthaus)

Content

It was indeed for gf180mcu
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1504895213842337983

2026-05-15T17:16:18.581+00:00 — Matt G. (Mobius) (@mguthaus)

Content

Interestingly, the 5V cells didn't really run into the issue since the cell density means many fewer fill/cap/tap cells.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1504996868587786250

2026-05-16T00:00:14.961+00:00 — bailey (@bailey8889)

Content

@Matt G. (Mobius) The netgen setup can reduce not only devices, but also parallel cells. As you have noticed, if the parallel fill cells are reduced, then netgen can take a long time.

Currently, this is the setup
```
#---------------------------------------------------------------
# Allow the fill, decap, etc., cells to be parallelized
#---------------------------------------------------------------

foreach cell $cells1 {
    if {[regexp {gf180mcu_fd_sc_[^_]+__fillcap_[[:digit:]]+} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__endcap} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__filltie} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__antenna} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
}

foreach cell $cells2 {
    if {[regexp {gf180mcu_fd_sc_[^_]+__fillcap_[[:digit:]]+} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__endcap} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__filltie} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_fd_sc_[^_]+__antenna} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
}
```
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/0-EB806.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
        "color": null,
        "discriminator": "0000",
        "id": "1417961928961298623",
        "isBot": false,
        "name": "mguthaus",
        "nickname": "Matt G. (Mobius)",
        "roles": []
      }
    ]
  }
}
</details>

message-1505025445861658625

2026-05-16T01:53:48.314+00:00 — Tim Edwards (@rtimothyedwards_19428)

Content

@Matt G. (Mobius) :  I'm not sure what version of the PDK you have, but from the last WaferSpace tapeout, I added the Avalon 3.3V standard cells to the netgen setup (gf180mcuD/libs.tech/netgen/gf180mcuD_setup.tcl):
```
# And do the same for the Avalon semiconductor 3.3V standard cell library.

foreach cell $cells1 {
    if {[regexp {gf180mcu_as_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_as_sc_[^_]+__fillcap_[[:digit:]]+} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
    if {[regexp {gf180mcu_as_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
        property "-circuit1 $cell" parallel enable
    }
}

foreach cell $cells2 {
    if {[regexp {gf180mcu_as_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_as_sc_[^_]+__fillcap_[[:digit:]]+} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
    if {[regexp {gf180mcu_as_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
        property "-circuit2 $cell" parallel enable
    }
}
```
If you have that version of the PDK or newer, then you should not run into long LVS run-times with the Avalon 3.3V library.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/6bcc8e61db497b620550682309ace5d5-D89B4.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
        "color": null,
        "discriminator": "0000",
        "id": "1417961928961298623",
        "isBot": false,
        "name": "mguthaus",
        "nickname": "Matt G. (Mobius)",
        "roles": []
      }
    ]
  }
}
</details>

message-1505215973572087889

2026-05-16T14:30:53.66+00:00 — Matt G. (Mobius) (@mguthaus)

Content

@Tim Edwards I've been using tag 1.4.0 of the wafer space template which is the newest
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/6bcc8e61db497b620550682309ace5d5-D89B4.png",
        "color": null,
        "discriminator": "0000",
        "id": "1365118310701600900",
        "isBot": false,
        "name": "rtimothyedwards_19428",
        "nickname": "Tim Edwards",
        "roles": []
      }
    ]
  }
}
</details>

message-1505216180476973168

2026-05-16T14:31:42.99+00:00 — Matt G. (Mobius) (@mguthaus)

Content

Version 1.8.0 of the PDK
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/e459857e9a131799083272cfec162ef6-9879C.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1506001195918032947

2026-05-18T18:31:05.256+00:00 — Tim 'mithro' Ansell (@mithro_)

Content

@Leo Moser (mole99) - Where does this stuff fit into your PDK work?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/9679bb77da48d47c905b398d98a83780-75B68.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-05_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
        "color": null,
        "discriminator": "0000",
        "id": "323371864074485771",
        "isBot": false,
        "name": "mole99",
        "nickname": "Leo Moser (mole99)",
        "roles": [
          {
            "color": null,
            "id": "1423020172595298314",
            "name": "Mod",
            "position": 4
          }
        ]
      }
    ]
  }
}
</details>

message-1506173767796260897

2026-05-19T05:56:49.598+00:00 — Leo Moser (mole99) (@mole99)

Content

If the netgen setup was updated after the last sync of the wafer.space PDK with open_pdks, which is likely the case, then one would need to handpick the patch.
However, since we will soon be switching to the open_pdks PDK (I’m trying to finish a preview version of the template that uses it by the end of the week), this patch will be included then.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-05_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>