[CRITICAL] - {{FAILURE}} 2 Check(s) Failed: ['Cons...
# efabless
j
[CRITICAL] - {{FAILURE}} 2 Check(s) Failed: ['Consistency', 'Klayout Metal Minimum Clear Area Density'] !!! Is it correct understud that Efabless will apply metal fill as part to the tape out process to Skywatar and that will take care of the Metal Minimum Clear Area Density error.
m
@Jørgen Kragh Jakobsen efabless will apply metal fill but that won’t solve the problem of clear area density. Minimum clear means you have too much metal. @Marwan Abbas is working on the openframe precheck. Maybe he can help you make sure you have the right version.
j
Thanks - More work to be done ... 🙂
m
There was a problem with the
openframe_project_wrapper
where the outer power ring was too wide causing the density error. I believe @Marwan Abbas fixed this and is working on a fix. Marwan, can you advise on the
config.json
settings and precheck version?
j
We use an empty open frame - all custom mixed mode stuff.
m
@Jørgen Kragh Jakobsen ok. But you do have a power ring that surrounds the design and connects to the gpios, right? The width of the power rails must match the what’s expected. If you’re power ring was copied from a previous default, it may be too wide and cause problems with the min clear area check.
j
But some things in the check do not sum up. I get drc errors on li1,m1 and M2 with density < 0.4 for with density [-2.4, -0.17, 0.15]
m
Can you share your drc report file with the errors?
j
Copy code
polygons" in: met_min_ca_density.lydrc:35
    Polygons (raw): 88979628 (flat)  23692 (hierarchical)
    Elapsed: 0.050s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:36
    Polygons (raw): 2255932722 (flat)  422270 (hierarchical)
    Elapsed: 0.260s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:38
    Polygons (raw): 87498378 (flat)  34538 (hierarchical)
    Elapsed: 0.040s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:39
    Polygons (raw): 391649496 (flat)  194011 (hierarchical)
    Elapsed: 0.140s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:41
    Polygons (raw): 23554057 (flat)  14915 (hierarchical)
    Elapsed: 0.040s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:42
    Polygons (raw): 143676798 (flat)  218252 (hierarchical)
    Elapsed: 0.140s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:44
    Polygons (raw): 1844178 (flat)  6219 (hierarchical)
    Elapsed: 0.020s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:45
    Polygons (raw): 128015970 (flat)  304262 (hierarchical)
    Elapsed: 0.200s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:47
    Polygons (raw): 54569760 (flat)  6105 (hierarchical)
    Elapsed: 0.010s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:48
    Polygons (raw): 0 (flat)  0 (hierarchical)
    Elapsed: 0.000s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:49
    Polygons (raw): 432588018 (flat)  52578 (hierarchical)
    Elapsed: 0.040s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:51
    Polygons (raw): 171666342 (flat)  7047 (hierarchical)
    Elapsed: 0.050s  Memory: 3322.00M
"input" in: met_min_ca_density.lydrc:53
    Polygons (raw): 1 (flat)  1 (hierarchical)
    Elapsed: 0.000s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:55
    Elapsed: 0.020s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:59
    Polygons (raw): 88979628 (flat)  23692 (hierarchical)
    Elapsed: 0.040s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:59
    Elapsed: 0.620s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:60
    Polygons (raw): 88979628 (flat)  23692 (hierarchical)
    Elapsed: 0.060s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:60
    Elapsed: 0.650s  Memory: 3322.00M
li1 area is 51868214.84775
full area is 15094153.5569
li1_ca_density is -2.4363115925794627
"output" in: met_min_ca_density.lydrc:67
    Polygons (raw): 1 (flat)  1 (hierarchical)
    Elapsed: 0.030s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:72
    Polygons (raw): 87498378 (flat)  34538 (hierarchical)
    Elapsed: 0.050s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:72
    Elapsed: 0.930s  Memory: 3322.00M
M1 area   : 17758649.38212
full area : 15094153.5569
"polygons" in: met_min_ca_density.lydrc:76
    Polygons (raw): 87498378 (flat)  34538 (hierarchical)
    Elapsed: 0.060s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:76
    Elapsed: 0.960s  Memory: 3322.00M
m1_ca_density is -0.17652502441927087
"output" in: met_min_ca_density.lydrc:81
    Polygons (raw): 1 (flat)  1 (hierarchical)
    Elapsed: 0.020s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:86
    Polygons (raw): 23554057 (flat)  14915 (hierarchical)
    Elapsed: 0.030s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:86
    Elapsed: 0.360s  Memory: 3322.00M
m2_ca_density is 0.15639475244127732
"output" in: met_min_ca_density.lydrc:91
    Polygons (raw): 1 (flat)  1 (hierarchical)
    Elapsed: 0.000s  Memory: 3322.00M
"polygons" in: met_min_ca_density.lydrc:96
    Polygons (raw): 1844178 (flat)  6219 (hierarchical)
    Elapsed: 0.010s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:96
    Elapsed: 0.140s  Memory: 3322.00M
m3_ca_density is 0.6527867633312747
"polygons" in: met_min_ca_density.lydrc:106
    Polygons (raw): 54569760 (flat)  6105 (hierarchical)
    Elapsed: 0.030s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:106
    Elapsed: 0.290s  Memory: 3322.00M
m4_ca_density is 0.5012429800826708
"polygons" in: met_min_ca_density.lydrc:116
    Polygons (raw): 171666342 (flat)  7047 (hierarchical)
    Elapsed: 0.030s  Memory: 3322.00M
"area" in: met_min_ca_density.lydrc:116
    Elapsed: 0.560s  Memory: 3322.00M
m5_ca_density is 0.42214595438093927
jakobsen@t490s
t
@Mitch Bailey: The openframe design does not have power rings. Marwan may have used them within the timer example project, but it would not be in the openframe design itself. @Jørgen Kragh Jakobsen: As Mitch says, a "clear area density" is the area not taken up by metal, so "minimum clear area density" is the same as "maximum metal area density" (people who deal with mask sets all the time seem comfortable with the concept of "clear" and "dark" but it tends to confuse people like me who work with layout editors, not mask sets, and I wish they would keep it out of the documentation and the error messages). If you are violating maximum metal density, then adding fill layers can do nothing but make it worse. (1) Which layer is being reported as over density? (2) Do you know of any specific structures in your layout that might be covering large areas with metal?
👍 1
j
We just ran the density check in magic.
all look good here.
t
Copy code
li1 area is 51868214.84775
full area is 15094153.5569
li1_ca_density is -2.4363115925794627
Something is very wrong here. Klayout is reporting a much larger area of local interconnect than the total area of the design. . .
j
So it is a check to make sure that there is free space enough to let metal fill do its job.
I have put pr boundary around the full die - but thing this is ok
m
@Amro Tork Is mabrains in in charge of the sky130 klayout density rules?
j
li1_density = polygons(li1_wildcard, li1fill_wildcard).area / full_area li1_area = polygons(li1_wildcard).area log("li1 area is #{li1_area}") log("full area is #{full_area}") li1_ca_density = 1 - li1_density log("li1_ca_density is #{li1_ca_density}")
did some debugging
t
The initial check is with clear area to make sure that there are not areas that are already over-density, because then the metal fill can't fix it. Only the user can fix it by somehow reducing the amount of metal. After running fill generation, it can be checked again for minimum metal density. I think something is confusing klayout. I know that the rules were checking for ranges of layer purposes and in the past we had some issues where it was counting the area of purposes that weren't actually metal and should not have been counted. But we had fixed those (or so I thought).
j
What is li1fill_wildcard - layer (56/28) ?
t
Layer 56:28 is for local interconnect fill shapes.
The "full area" number looks correct for the total area in square microns of the user project. It's the metal layer numbers for local interconnect and metal 1 that are wrong.
j
Thansks for clearing this out.
t
If you can share your project with Efabless staff, I can take a look at it.
j
We have a call with jeff on monday. But i can share with Efabless saff. If you PM your Efabless git handle i will add you later today.
m
The
li1_wildcard
definition may contain some non mask layers.
Copy code
li1_wildcard = "67/0-4,6-9,11-43,45-*"
mcon_wildcard = "67/44"
li1fill_wildcard = "56/28"

m1_wildcard = "68/0-4,6-9,11-43,45-*"
via_wildcard = "68/44"
m1fill_wildcard = "36/28"

m2_wildcard = "69/0-4,6-9,11-43,45-*"
via2_wildcard = "69/44"
m2fill_wildcard = "41/28"

m3_wildcard = "70/0-4,6-9,11-43,45-*"
via3_wildcard = "70/44"
m3fill_wildcard = "34/28"

m4_wildcard = "71/0-4,6-9,11-43,45-*"
via4_wildcard = "71/44"
m4fill_wildcard = "51/28" m5_wildcard = "72/0-4,6-9,11-43,45-*" m5fill_wildcard = "59/28"``` It may contain these layers. Do you have any of these layers in your gds?
Copy code
li1 resistor 67:13
li1 net 67:23
li1 pin 67:16
li1 pin 67:0
li1 pin 67:14
li1 probe 67:25
li1 short 67:15
@omla I think the
*_wildcard
layers might need to be only the actual mask layers.
t
@Jørgen Kragh Jakobsen: On the Efabless repository site my handle is
tim_edwards
.
@Mitch Bailey: The wildcard layers must be only the actual mask layers. Non-mask layers make absolutely no sense in the context of density checks.
That said, though, a density check should be run on flattened geometry and therefore it should never be possible to compute a layer density greater than 100% of the design area. So something is fundamentally wrong with the klayout density check rules (attn. @Amro Tork).
m
The manual is a little vague on the polygons function. It states that the options are similar to the
input
function which in turn explains
Copy code
Multiple filters can be given and all layers matching at least one of these filter expressions are joined to render the input layer for the DRC engine.
The
joined
may mean a concatenation on layer data as opposed to a merge. Calibre has a similar functionality. There may be different results if the wildcard layers consisting of multiple data types are merged before the area is computed.
@Matthias Köfferlein Can you comment on whether the
polygons
function when used with multiple input data merges the layers or concatenates the raw data?
m
This check is maintained by Efabless, please create an issue and I'll look into it. I'll also need a reproducible.
a
@Mitch Bailey Not for Skywaters, but would be happy to help.
t
@Mitch Bailey: I looked at the GDS. There are no unusual layers being used. Magic reports no unknown layer purposes on types 67 or 68, and the layout has relatively small amounts of circuitry (because it's mostly analog) and relatively large amounts of nothing (because they intend to saw the area down further and have saw streets running through it). The only thing of interest is that there are internal seal rings placed to protect the areas from sawing. But even that doesn't present any possibility of how klayout could have arrived at a metal area measurement five times the size of the entire chip.
👍 1
m
Could it be something to do with the hierarchical mode? I saw the
deep
keyword in the rule file.
t
Seems like you would never want to use
deep
in a density rule.