efabless / globalfoundries-pdk-libs-gf180mcu_fd_pr

Primitives for GF180MCU provided by GlobalFoundries.
https://gf180mcu-pdk.rtfd.io
Apache License 2.0
9 stars 8 forks source link

connectivity speedup issue #15

Closed marwaneltoukhy closed 1 year ago

marwaneltoukhy commented 1 year ago

Expected Behavior

Run in a reasonable time

Actual Behavior

runs for 49 hours

Steps to Reproduce the Problem

  1. clone PDK
  2. python3 run_drc.py --thr=4 --variant=C --path=/home/marwan/caravel-gf180mcu/gds/caravel_core.gds --run_dir=/home/marwan/caravel-gf180mcu/signoff/caravel_core/standalone_pvr --connectivity

Specifications

atorkmabrains commented 1 year ago

@marwaneltoukhy Connectivity is would help remove some of the violations related to the connectivity rules. But unfortunately, this is a limitation in klayout. We tried to code it in way that would minimize the required run time. But still it will be slow.

atorkmabrains commented 1 year ago

@klayoutmatthias Could you please take a look at how we could increase the speed of the connectivity based rules?

klayoutmatthias commented 1 year ago

I guess that means an integrated feature. That is not impossible, but the post-check filtering approach is bound to be slow in case of many violations. Pre-check filtering makes more sense.

I have not started development on that topic yet. It's some thing on my long TODO list.

Maybe there are some low hanging fruits and now there is a test case, there is some basis for a development. I cannot promise anything however.

atorkmabrains commented 1 year ago

@FaragElsayed2 please take a look

klayoutmatthias commented 1 year ago

If you're still interested in that topic: I plan to release some feature in KLayout 0.28.4 which allows native implementation of connected DRC checks (plus many more things as it is a generic enhancement).

You will still need to spend the the netlist extraction step, but the connected space and separation should get considerably faster and take less memory.

An unconnected space check looks like that:

# "layer.nets" attaches net identity a properties to shapes from "layer":
nets = layer.nets
# the new "props_ne" keyword tells space to act on polygons with different properties only:
unconnected_output = nets.space(not_conn_val.um, mode, props_ne).polygons(0.001)
nets.forget

It's possible to integrate that feature in a way that for old versions the current homebrewn check is fallback.

It's a huge new feature but I am willing to take that risk and release it in the course of a minor version update.

Matthias

atorkmabrains commented 1 year ago

Thanks @klayoutmatthias That would be really helpful for us.

klayoutmatthias commented 1 year ago

I have released 0.28.4 with that feature. I will propose a patch that makes it available.

Is this repo the right one to file a PR against?

atorkmabrains commented 1 year ago

@klayoutmatthias Please use https://github.com/efabless/globalfoundries-pdk-libs-gf180mcu_fd_pv as we are migrating all the DRC and LVS to that repo. And now the regression CI is working correctly in that repo also.

atorkmabrains commented 1 year ago

@klayoutmatthias and @marwaneltoukhy completed the integration of the updates in https://github.com/efabless/globalfoundries-pdk-libs-gf180mcu_fd_pv.