mpw_precheck
mpw_precheck copied to clipboard
m4.pd.1d density check
Hi!
We are trying to close our submission (precheck is clean) however, the tapeout step (metal fill) is failing and gives the following error:
Unfortunately, I can only check the design and run metal fill on the open galaxy environment which takes a lot of time to run BTW(maybe an enhancement idea to let people run this locally).
This is our submission: https://platform.efabless.com/projects/1324
FYI, we tried to fix it by inserting m4 manually and then we were told actually we have to reduce metal fill density on m4.
Updating after discussing with @RTimothyEdwards on the open-source-silicon.dev slack workspace.
Quoting @RTimothyEdwards:
Magic reports that metal4 density (metal density, not clear area) within the user project itself is 6.9%.
% cif cover MET4 Cell Area = 10329984000000 CIF units^2 Layer Bounding Area = 9888485739600 CIF units^2 Layer Total Area = 713447009075 CIF units^2 Coverage in cell = 6.9%
This might require getting @jeffdi to manually override the precheck, while an issue is raised to root out and fix the problem, which (given the existing evidence) I conclude is either an error in klayout or in the density check definition.
Because of an obscure bug, I expect. To run what I did above, I just read the GDS of the user project into magic, selected the whole top level cell, and typed the command "cif cover MET4". There is a script installed with open_pdks under sky130B/libs.tech/magic/check_density.py; you can just run it giving the GDS file as argument. Results will be different than the full Caravel chip. Also you will get lots of metal-under-density errors because the script is intended to be run on a layout after fill generation. When I run it, I get all metal layers under density, which is what I would expect from visual inspection of the layout. So, still all evidence points to this as being a klayout or klayout density rule description error.
This looks like the issue:
(File https://github.com/efabless/mpw_precheck/blob/main/checks/drc_checks/klayout/met_min_ca_density.lydrc)
m4_wildcard = "71/0-4,6-43,45-*"
via4_wildcard = "71/44"
m4fill_wildcard = "51/28"
This treats all purposes 0 to 4, 6 to 43, and 45 and up as "kinds of metal" that add to the density count. In that range is purpose 10, which is fill block. The first line above should be written
m4_wildcard = "71/0-4,6-9,11-43,45-*"
and this needs to be done for all metal layers starting with local interconnect up to and including metal 5, since they are all similarly constructed wrong.
Thanks @RTimothyEdwards Should be fixed by: #142