Guild icon
wafer.space Community
Information / general / Using gf180mcu_ocd_io in LibreLane
Between 10/31/2025 23:59 and 12/01/2025 00:00
Avatar
Creating a thread to avoid spamming #general 😅
14:18
And I also can't creae issues on the gf180_ocd_io repo because issues are disabled on it.
Avatar
Leo Moser (mole99) 11/26/2025 14:23
Actually, I think there is no reason. I simply wanted to do it like the SCL library where you can just select a different one and all the views will point to that one instead. But the PAD library is a bit more complicated and just selecting a different one does not work that well.
Avatar
Well having the PAD_CELL_LIBRARY is nice. But ATM some of the config seem to be set in the base file based on replacing $PAD_CELL_LIBRARY and some config is set by loading the subdirectory tcl file. And I think putting it all in the subdir file (possibly still using $PAD_CELL_LIBRARY so you can easily create new config for new IO lib by just copying and patching the little things needed.
👌 1
14:28
Now I'm faced with the much more annoying issue that OpenROAD is segfaulting on me during GlobalRouting 😩
😵‍💫 1
Avatar
🎉 Found what OR didn't like 😁
👏 1
Avatar
292 Magic DRC errors found. 47 LVS errors found.
18:32
The DRC errors are in the corner cells and looking at the upstream repo, I think @Tim Edwards already fixed them a few hours ago.
18:32
The LVS errors look related to the analog pads having DVSS shorted to ASIG5V ... (edited)
😶 1
Avatar
Tim Edwards 11/26/2025 18:39
@tnt: I've been chasing those errors all day long. Hopefully it should be resolved by tomorrow.
Avatar
@Tim Edwards DRC or also the LVS one ?
Avatar
Tim Edwards 11/26/2025 18:42
The DRC one. I should have time to look at the LVS issue but I was previously unaware of it. The DRC issue has been bugging me for a while; I just needed to find some time to work on it.
👌 1
Avatar
Ok. I'll just wait for the DRC one and keep digging on the LVS one, see if I can find what's the cause since it could very well be something on my side that I screwed up ...
Avatar
@Tim Edwards BTW, did you adapt all the cells including in_s and in_c ? Just to make sure I can also use those 😅
Avatar
Tim Edwards 11/26/2025 19:36
Yes. All digital cells are 3.3V compatible.
👌 1
Avatar
Tim Edwards 11/26/2025 20:00
@tnt: The LVS issue is due to a wayward "DVSS" label that got lost and wandered off and stuck itself to the ASIG5V pad.
Avatar
Tim Edwards 11/26/2025 20:11
I finally found the source of the label, hiding in the LEF file, under the sofa cushions.
Avatar
Yes, I saw that in the LEF already, I was about to update the issue on github 😅
20:47
Still have some other LVS issue but that'll have to wait a bit.
Avatar
Tim Edwards 11/26/2025 20:50
I have confirmed that fixing the LEF caused the virtual short in the magic view to disappear. It has been pushed.
👌 1
Avatar
Ok, yeah, remaining LVS is because one net gets extracted as \IO_CORNER_NORTH_WEST_INST.DVSS_RING_uq0 and in the netlist it's \IO_CORNER_NORTH_WEST_INST.DVSS_RING and that causes port mismatch.
21:49
manually fixing that up and running netgen on the result checks out just fine.
Avatar
Tim Edwards 11/26/2025 21:50
If that's a top-level port then you can avoid the unique name by doing extract unique notopports, which was how I got the SRAM to pass LVS.
Avatar
Yeah, although technically they should be connected internally and not rely on any external connections.
21:54
if I use that option, it wouldn't check if they are connected or not.
21:55
I mean, if all the DVSS nodes were not connected somewhow, it wouldn't spot it.
Avatar
Tim Edwards 11/26/2025 21:56
One way to get around it is just to copy enough of the connection between them inside the top level cell that magic sees that they are connected within the top level. Magic does extraction on each individual cell without looking at what's in subcells that might be connecting things together. Modifying that behavior is probably a lot of work.
👍 1
Avatar
Avatar
tnt
Now I'm faced with the much more annoying issue that OpenROAD is segfaulting on me during GlobalRouting 😩
Tim 'mithro' Ansell 11/26/2025 23:39
Please do report segfaults upstream - OpenROAD should never segfault.
Avatar
21154 KLayout DRC errors found. @Tim Edwards 😢
Avatar
Tim Edwards 11/27/2025 14:42
@tnt : I assume those errors are coming from the I/O pads? Can you send me the layout and DRC results? I made many small changes to the I/O layouts, but they are still the same pads apart from swapping in a level shifter circuit in front of each digital pin. However, I read in the I/O GDS and regenerated it from magic, so a single missing output layer or incorrect rule could have a massive effect.
Avatar
Lots of them are more due to marker layers causing different rules to apply.
Avatar
Tim Edwards 11/27/2025 14:42
Presence or absence of marker layers? Did I manage to drop some ESD marker mask?
Avatar
Absence. Of ESD and Latchup. And then some Resistor marker layer added instead.
14:44
Let me create a reproducible.
Avatar
Tim Edwards 11/27/2025 14:44
Okay. I'll need to regenerate them with mask hints for the marker layers. I don't think it's going to be a huge effort.
14:45
This is the "dirty" part of "quick & dirty".
Avatar
klayout -b -zz -r ${PDK_ROOT}/gf180mcuD/libs.tech/klayout/tech/drc/gf180mcu.drc -rd input=/mnt/pdk/OL2/pdk_root/gf180mcuD/libs.ref/gf180mcu_ocd_io/gds/gf180mcu_ocd_io.gds -rd report=drc.klayout.lyrdb -rd feol=True -rd beol=True -rd conn_drc=True -rd wedge=True -rd run_mode=deep -rd thr=16 -rd topcell=gf180mcu_ocd_io__bi_24t
👍 1
14:49
this runs the DRC on only gf180mcu_ocd_io__bi_24t and will show the errors.
14:49
I mean obviously you need to check all the cells, but that's a good start 😅
14:49
And runs much faster than a full chip DRC
Avatar
Tim Edwards 11/27/2025 15:39
@tnt : Where are you getting the file gf180mcu.drc from? I don't have that in my PDK.
15:42
I think it's just a top level calling all the rules deck. Probably on @Leo Moser (mole99) 's growing list of stuff to upstream 😅
Avatar
Leo Moser (mole99) 11/27/2025 15:45
Exactly 😁
Avatar
Tim Edwards 11/27/2025 15:50
Contribute to fossi-foundation/globalfoundries-pdk-libs-gf180mcu_fd_pv development by creating an account on GitHub.
👍 1
Avatar
Leo Moser (mole99) 11/27/2025 15:51
First I need to merge: https://github.com/wafer-space/gf180mcu/pull/1 and ensure there aren't any regressions.
Avatar
Tim Edwards 11/27/2025 15:53
Is that file written in rust ruby? I'm getting ERROR: Can't run macro (no interpreter) but I think I don't have rust ruby enabled in my version of klayout. (edited)
Avatar
Leo Moser (mole99) 11/27/2025 15:54
It's written in ruby, perhaps that is missing?
Avatar
Tim Edwards 11/27/2025 15:54
I meant ruby, sorry. I thought rust was wrong, somehow.
Avatar
All klayout drc are written in ruby AFAIK
15:57
I can run drc for each cell and post results if that's easier but I thought it'd be better if you could validate changes yourself
Avatar
Tim Edwards 11/27/2025 16:11
Posting results might be quicker because I'm going to have to recompile klayout with ruby support. But I did a layer-by-layer comparison between an original 5V I/O cell and my modified one, and I think I understand where I'm missing layers. Some of my generated layers (DUALGATE, for example) are not the same size as the original but are probably still valid. The main issue seems to be the missing "latchup" and "ESD" marker layers. Both are just two rectangular areas under the pad, and easy to add with mask hints. There is another issue with all FETs being marked as 5V due to the fact that the I/O library was created before I modified the handling of 5V/6V cells, but that's easy enough to correct and probably doesn't make a difference anyway.
Avatar
Arf, sorry for dissapearing ... went to grab a drink, knocked something over and spent the last 30 min cleaning up my mess 😅
16:40
Running DRC now.
16:47
477.98 KB
16:47
@Tim Edwards
👍 1
Avatar
Tim Edwards 11/27/2025 17:17
More work than I was expecting but shouldn't be too big of an issue.
👌 1
Avatar
BTW, if there is anything I can do to help, I'd be happy to 🙂
Avatar
Tim Edwards 11/27/2025 20:00
I may need to you run more klayout DRC checks. But I need to get some updates pushed, first. I have worked through most of the main errors already. Fortunately the highest count of errors was in the array contact spacing, which was easy to fix (although it exposed a way to get around magic's generation of wider-spaced 4x4-and-up arrays, which is to stack 4 or more 1xN contact arrays next to each other, which then magic no longer sees as a single "large array").
👍 1
Avatar
Tim Edwards 11/27/2025 22:22
@tnt : All right. I think I have a good handle on all the issues. I will push everything to the repository along with updates to open_pdks and everything should be ready to retest in the morning. I may have missed one or two things but nothing looks like it can't be dealt with pretty easily. I do have to rethink the way I handle generating PPLUS and NPLUS around tap diffusion that is too close to an nwell edge, but I think I have methods now that will work right that weren't available when I originally wrote the GF180MCU tech file. I haven't tested them yet; instead I just made sure that all tap diffusion is well away from nwell edges. It seemed like everything in the I/O library was just slightly closer than the limit that triggers the extra overlap (0.43um).
Avatar
Tim 'mithro' Ansell 11/27/2025 23:19
@Tim Edwards - If you have docker installed you can get a docker container with the precheck with all the deps and PDK and everything.
Avatar
Tim Edwards 11/28/2025 01:03
@tnt : I have updated the PDK and the I/O library. I don't know if I managed to get everything, but it should be a lot cleaner than before.
Avatar
@Tim Edwards Indeed, it seems much cleaner now 🙂
06:56
06:56
only fillnc and bi_24t still have items.
Avatar
I was looking at this extra overlap limit in the DRM and quite confused because on the diagrams that 0.43um is measured from the "inside" edge !?! (edited)
07:18
07:25
Just had a look at the exact errors and filllnc is just false positive because the cell can't be used by itself, it's too narrow but when put in the ring, there should be no errors ( although the pr boundary seems too wide ? ) And the bi_24t is minor issues with nplus/pplus extension but trivial to fix with maskhints.
Avatar
@Tim Edwards Som in bi_24t, one of the issue is ... probably a bug in magic or somewhere because if I load the .mag and do gds write gf180mcu_ocd_io__bi_24t , then there is the issue, like this :
10:47
10:47
Then I don't do anything else, but just re run the same gds write command and then the issue isn't there and the gap was bridged.
10:47
Avatar
The other one I fixed with this : diff --git a/magic/comp018green_out_paddrv_6T_PMOS_GROUP.mag b/magic/comp018green_out_paddrv_6T_PMOS_GROUP.mag index 98627ee..6a58925 100644 --- a/magic/comp018green_out_paddrv_6T_PMOS_GROUP.mag +++ b/magic/comp018green_out_paddrv_6T_PMOS_GROUP.mag @@ -3272,4 +3272,6 @@ use PMOS_metal_stack PMOS_metal_stack_6 timestamp 1758724778 transform 1 0 809 0 1 496 box -44 0 1584 12000 +<< properties >> +string MASKHINTS_NPLUS 12251 -768 12331 14372 << end >>
10:56
but maybe you have a more elegant way of preventing it in the first place 😅
Avatar
Tim Edwards 11/28/2025 14:41
@tnt : Yes, that's where the nwell needs to be extended out to 0.43um to prevent the little stub of NPLUS from showing up. The algorithm I came up with to deal with the extra overlap of NPLUS or PPLUS for diffusion edges close to an nwell edge works fine except when the diffusion is just slightly less than than the 0.43um limit away from the edge. Obnoxiously, most of the nwells in the I/O cells have been drawn just slightly under this limit, which then unfortunately highlights where my algorithm doesn't work right.
Avatar
Avatar
tnt
I was looking at this extra overlap limit in the DRM and quite confused because on the diagrams that 0.43um is measured from the "inside" edge !?! (edited)
Tim Edwards 11/28/2025 14:43
Yes, I've looked at that illustration before and decided it's an error in the illustration (one of many).
Avatar
I have a new chip-wide precheck running ATM, hopefully it will be clear.
Avatar
Tim Edwards 11/28/2025 15:38
I made a few edits so that the tap diffusion is wide enough that the NPLUS and PPLUS overlap of contacts is the same width as the overlap of the diffusion, so the NPLUS and PPLUS form simple rectangles that don't need to be hierarchically checked to close up gaps between the shapes. There was plenty of room to extend the taps outward and I should have done that earlier, just for the sake of the layout being cleaner. So there will be one more round of updates and the I/O pads should be squeaky-clean by tomorrow. I still need to rework the algorithm that generates the too-thin diffusion artifacts, but at least the errors only show up in pathological cases.
Avatar
Ok, hopfully it will show up in a ciel release and I can use that to do the final build.
Avatar
It cleared the KLayout DRC deck. Got some magic DRC errors from the pre-check but I suspect it's because the tech file isn't up to date.
Avatar
Tim Edwards 11/28/2025 16:30
I didn't change the tech file on this round. The DRC errors look like something that pops up after a GDS read, but I can reproduce them, so I'll take care of them.
16:31
No, actually I think I just cut a corner and made the last several changes without running on drc(full), so totally my fault.
Avatar
I still had the tech file from a while back.
Avatar
Tim Edwards 11/28/2025 16:34
It was an nwell spacing error?
Avatar
Yes and also some via width < 0.28u
16:35
Via3 width < 0.28um (V3.1 + 2 * V3.4) MV N-well spacing < 0.74um (NW.2a) Via4 width < 0.28um (V4.1 + 2 * V4.4)
Avatar
Tim Edwards 11/28/2025 16:42
The nwell spacing is due to a tiny notch in an nwell and I'm fixing it now. The via3/via4 errors are more bothersome---I'm guessing that they come from the same issue in the corner cell where some via rows were spaced close enough together that they get merged by magic, but the rows are slightly offset so they produce slivers that are narrower than the contact after the merge. But there seems to be some intermittent behavior there, because a few days ago I was fixing those, and after fixing all the errors I saw, I would re-write the GDS, and after reading the GDS back, the errors would appear again, somewhere else. It was like sometimes it would merge the rows and sometimes it wouldn't. I thought I had finally fixed the errors once and for all, but apparently not. The error would not be from the tech file, it would be from the corner cell itself.
16:44
Arrgh, yes, I can see them. . .
Avatar
Avatar
Tim Edwards
Yes, I've looked at that illustration before and decided it's an error in the illustration (one of many).
Tim 'mithro' Ansell 11/28/2025 22:51
I would really love to create some improved documentation with actually useful GDS examples (which can be rendered into diagrams) of these things which are unclear.
20:46
@Tim Edwards Errors in NP from the latest cells.
20:46
(sorry to be the bearer of bad news 😅 )
Avatar
Tim Edwards 11/29/2025 22:00
@tnt : No problem, iterate until done. Apparently I did not check the output after my last edit (sloppy or sleepy, not sure which. Or sloppy because of sleepy). Otherwise I would have seen that. I just forgot to add 0.02um to the top of the nwells. . . Sorry for forcing another round.
22:01
I also still need to figure out why magic won't cleanly separate the VSS and DVSS when extracting the corner cell, because that's preventing a clean LVS on anything using the padframe.
Avatar
Tim Edwards 11/29/2025 22:24
Now it's suddenly showing a property error in magic, but I think that's related to something that Mitch already pointed out to me, and it's a problem in magic that I need to look into. It's not a problem in the layouts.
Avatar
Avatar
Tim Edwards
@tnt : No problem, iterate until done. Apparently I did not check the output after my last edit (sloppy or sleepy, not sure which. Or sloppy because of sleepy). Otherwise I would have seen that. I just forgot to add 0.02um to the top of the nwells. . . Sorry for forcing another round.
Tim 'mithro' Ansell 11/30/2025 01:48
Too much turkey? 🙂
Avatar
Tim Edwards 11/30/2025 01:54
@tnt : I got klayout recompiled with ruby support, so I should be able to run the DRC myself from now on. I just needed a little time away from the openframe project to get the compile done.
Avatar
Tim Edwards 11/30/2025 02:10
@tnt : Also: Confirmed that the I/O cells are finally DRC clean.
02:11
@Tim 'mithro' Ansell : I had duck, not turkey. The wild turkeys have been wandering around my property recently. I guess they know it's safe here.
Avatar
Tim 'mithro' Ansell 11/30/2025 02:15
The google campus in MTV had the occasional wild turkey wandering around it.
Exported 100 message(s)
Timezone: UTC+0