Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Filler Script #229

Draft
wants to merge 2 commits into
base: dev
Choose a base branch
from
Draft

Conversation

dnltz
Copy link
Contributor

@dnltz dnltz commented Oct 18, 2024

Work in progress!

This script should automatically generate the correct amount of filler cells into a design.

Please ignore all .lym files as they're get converted into the script later.

These three macros can fill Activ+GatPoly, all Metal layers or all
TopMetal layers.

Based-on: KrzysztofHerman <[email protected]>
Based-on: Daniel Arevalos <[email protected]>
Signed-off-by: Daniel Schultz <[email protected]>
Signed-off-by: Daniel Schultz <[email protected]>
@dnltz
Copy link
Contributor Author

dnltz commented Oct 18, 2024

@klayoutmatthias can you please help me with this klayout extension to add metal fill? I'm trying to convert .lym files into native Python since it's in my impression easier to check the density after metal fill and re-fill under some conditions.

My problem is klayout just hangs forever with the TilingProcessor. See the output from this script. Looks like it hangs inside self.top_cell.fill_region(...). Any idea how to fix that?

klayout -n sg13g2 -zz -r /home/daniel/work/aesc/i2c-gpio-expander/pdks/IHP-Open-PDK/ihp-sg13g2/libs.tech/klayout//tech/scripts/filler.py \
	-rd output_file=/home/daniel/work/aesc/i2c-gpio-expander/tools/OpenROAD-flow-scripts/flow/results/ihp-sg13g2/SG13G2Top/base/6_final.gds \
	/home/daniel/work/aesc/i2c-gpio-expander/tools/OpenROAD-flow-scripts/flow/results/ihp-sg13g2/SG13G2Top/base/6_final.gds
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
Warning: Box.destroy: already destroyed!
hi
ho
(-275000,-275000;525000,525000)
(56203,39403;56203,43603;52003,43603;52003,47803;47803,47803;47803,49000;525000,49000;525000,39403);(43603,52003;43603,56203;39403,56203;39403,62000;45000,62000;45000,52003);(320000,65000;320000,143000;192000,143000;192000,156000;176000,156000;176000,169000;160000,169000;160000,182000;152000,182000;152000,195000;144000,195000;144000,204254;204257,143997;322997,143997;322997,66997;399003,66997;399003,143997;404997,143997;404997,66997;481003,66997;481003,143997;486997,143997;486997,66997;525000,66997;525000,65000);(216943,175503;175503,216943;175503,219696;219696,175503);(236388,203003;203003,236388;203003,245971;245971,203003);(258663,234503;234503,258663;234503,261416;261416,234503);(288718,277003;277003,288718;277003,295996;295996,277003);(305688,301003;301003,305688;301003,306136;306136,301003);(423693,448623;423693,452000;525000,452000;525000,448623);(64000,312000;64000,525000;66997,525000;66997,486997;143997,486997;143997,481003;66997,481003;66997,404997;143997,404997;143997,399003;66997,399003;66997,322997;143997,322997;143997,312000)...
134 (0,0;5000,10000) None
^Cmake: *** [Makefile:69: sg13g2-filler] Interrupt

@dnltz dnltz marked this pull request as draft October 18, 2024 16:31
@klayoutmatthias
Copy link

Hi @dnltz,

I don't see some obvious issue in the code, but I have not used this combination myself yet.
The tiling processor basically can run on multiple threads, but Python is single-threaded. This involves a mutex, so maybe we have a deadlock problem here. Is there is difference if you use a single CPU?

Essentially, you should be able to put the filler code inside the expressions (using variables for the arguments). This would allow multi-threaded execution of the filler step.

Can you point me to some example file I can use to reproduce the issue?

Thanks,

Matthias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants