aquiles viza
10/17/2024, 2:23 PMihp-sg13g2
pdk?
I'm adding rules to the grulesobj
matrix and almost all of the metalization rules are ready but there's some stuff that I'm not understanding.
• Is the grulesobj
matrix symmetric? grule[L1][L2] == grule[L2][L1]
?
• Where's the complete list of grules? I thougth it was only min_width (width)
, min_enclosure
, min_separation
. but there's also overhang
and I needed to extend the list with min_area
I'm sorry for having interrupted my participation in this chipathon.
I think if I can help in give basic support for this pdk and validate it with some examples it could be a useful contribution to this project.mehdi
10/17/2024, 3:10 PMmehdi
10/17/2024, 3:10 PMAli Hammoud
10/17/2024, 7:54 PMaquiles viza
10/17/2024, 10:29 PMgrule(l1, l2)
and grule(l2, l1).
Should both always be equal or equivalent?
I've created a function to update the object, avoiding this kind of problemsAli Hammoud
10/17/2024, 10:30 PMaquiles viza
10/17/2024, 10:37 PMpdk.activate()
makes that the boxes drawn on klayout have size 0, 0. If all the instances of pdk.activate()
are removed from glayout
, it works.
The use of @cell
doesn't seems to fix anything. Maybe your team had this issue beforeAli Hammoud
10/17/2024, 10:42 PMaquiles viza
10/17/2024, 10:46 PMsg13g2_mapped_pdk.gds_write_settings.unit = 5 * 10**-9
.
Removing it makes the code work, Thanks @Ali HammoudAli Hammoud
10/17/2024, 10:47 PMaquiles viza
10/17/2024, 10:57 PMmin_area
rule, for instance.
That's the difficult part but the idea is to share it eventuallyAli Hammoud
10/17/2024, 11:00 PMaquiles viza
10/18/2024, 1:33 AMsg13g2_mapped_pdk.gds_write_settings.precision = 0.005e-6
the offgrid problem disapear.
Is there any problem in not having that parameter set?aquiles viza
10/18/2024, 1:44 AMvia_stack
to take the min_area
in consideration. The minimum area is not equal to minimum width^2, so there's always drc errorsMitch Bailey
10/18/2024, 2:34 AMHello @aquiles viza you only need to implement the grules in one direction (it is a symmetric matrix).Just to clarify, for
grulesobj["A"]["B"] = {"min_enclosure": 0.06}
does this rule check both the enclosure of A
by B
and B
by A
? I suppose you could use a symmetric matrix if one layer only exists inside the other.
One exception is poly
and diff
where the gate extension beyond poly
may be different from the minimum diff overlap of poly
(source/drain width). Maybe this is handled with derived layers. Could you clarify?
While the documentation mentions min_enclousure
, `min_width`/`width` and min_separation
as valid parameters,
The keys are one of the three rule names "min_enclosure", "min_separation", or "min_width" / "width" (depending on the context).
looking at the `sky130` grules, I see there’s an overhang
parameter for active_diff
and poly
and an extension
parameter for poly
- poly
.
Are these special use parameters?
Also, could you explain the difference between the min_width
and width
parameters? For sky130
, via2
has a min_width
= 0.21
but a width
of 0.15
.Ali Hammoud
10/18/2024, 3:11 AMAli Hammoud
10/18/2024, 3:19 AMaquiles viza
10/18/2024, 3:43 AMprimitives.via_gen.py
• Fork: https://github.com/akiles-esta-usado/OpenFASOC
• Tests: https://github.com/akiles-esta-usado/OpenFASOC/tree/main/openfasoc/generators/glayout/tests/ihp-sg13g2
The basic tests works without drc errors (via, via_stack, via_array, tapring) but fets are not working as expected.
On nmos, a layer of pwell
and n+s/d
is added always, despite the parameters. I don't know if that happens on sky130 or gf180 (I apologize for my ignorance) but it's avoiding lvs recognition.