Thursday 4th April 2024Attachments: (only for registered users) drcsample.gds
Hi, I'm attempting to run a DRC script for my designs. A simple minimumSize check is failing in various ways:
1. If the script runs without crashing, many false positives are shown where polygons meet.
2. If I try edgeRemoveSelect, LayoutEditor crashes.
3. If I try doing a minimumSize with merge set to true, LayoutEditor crashes.
I've attached one layer from one cell of the design, and the DRC script I'm trying to run on it. Any advice on how to run the DRC successfully would be appreciated!
-Greg
Script file:
```
#!/usr/bin/layout
#name=sta5700
#help=STA5700 layout DRC
// Layers
const int active = 1;
const int temp = 30;
const int err = 31;
int main()
{
debug.clear();
debug.console(true);
debug("Start\n");
layers::displayedLayers=32;
layers::disableAllLayer();
layers::num[1].enable();
layers::num[1].name="1-ACTIVE";
layers::num[1].setStyle(3);
layers::num[1].setColor(0,170,0);
layers::num[1].set3dView(0,0);
layers::num[31].enable();
layers::num[31].name="31-ERR";
layers::num[31].setStyle(0);
layers::num[31].setColor(255,0,0);
layers::num[31].set3dView(0,0);
layers::technologyLayerRemoveAll();
layout->closeDesign();
layout->drawing->openFile("drcsample.gds");
layout->drawing->setCell("STA5720");
cell *c = layout->drawing->currentCell;
/*
// Fast merge
layout->booleanTool->boolOnLayer(active, active, temp, "A merge", 0, 0, 2);
c->deleteLayer(active);
c->deselectAll();
c->selectLayer(temp);
c->moveToLayerSelect(active);
*/
/*
// Slow merge
c->selectAll();
c->mergeSelect();
*/
// Remove edge discontinuities
c->selectAll();
c->edgeRemoveSelect(100);
layout->drawing->activeLayer = err;
layout->drcTool->result = "STA5720 DRC\r\n";
layout->drcTool->clearViolationView();
layout->drcTool->setErrorLayerToActiveLayer();
// Active
layout->drcTool->ruleName= "Minimum Size Active";
layout->drcTool->minimumSize(2000, active, false, false);
layout->drcTool->showReport();
debug("Finish\n");
}
```
Jürgen LayoutEditorFull Thursday 4th April 2024
Thanks for the example. I have reviewed it. And in deed that design is affected by an issue on the removeSmallEdges feature that can cause a crash. It is already fixed in the development version from release 20240301 and new. This development version can be downloaded here: https://layouteditor.com/download?release=latest
The DRC check for minimum size without a Boolean Merge will check any polygon individually. And on your design several polygon would have an minimum size violation if there would be no other polygon next to it. So for these kind of polygons a Booleon Merge before the check is a must. I have activated the corresponding DRC option, and it just runs fine. Just 4 violations remain and as far I can see at the first view this is correct. I also have tried to merge the layer in other ways and all run fine without a crash. How do you merged it? What system was used? Windows, Linux Mac? LayoutEditor version? You problem may not appear on all systems.
Friday 5th April 2024
Thanks for the reply. I installed version 20240329, and that appears to have fixed the edgeRemoveSelect crash. However, if I run the above script with the merge option enabled:
```
layout->drcTool->minimumSize(2000, active, true, false);
```
the program still crashes. I'm running Windows 10 64 bit. What system were you using when you got 4 violations after a merge? I can try other OSes if needed.
Thanks,
-Greg
Jürgen LayoutEditorFull Sunday 7th April 2024
Hi Grag, thanks for that info. The minimuSize DRC check on Windows had a limit on number of holes in a polygon. The exact number depends on the shape of the polygon. The feature separate-holes does have the same limitation. Nevertheless, this issue will be removed with release 20240408 or newer available in the next days under: [https://layouteditor.com/download?release=latest](https://layouteditor.com/download?release=latest) The Linux package never had this problem. Thanks for reporting it!