Hi, I'm trying to split drc rules evaluation in different runs, so I can: - Target specific drc erro...
a
Hi, I'm trying to split drc rules evaluation in different runs, so I can: • Target specific drc errors instead of running all tests • Evaluate all the set of rules This code is inside a Makefile and it's specific to gf180mcuD.
Copy code
KLAYOUT_SCRIPT_DRC_PDK:=python $(KLAYOUT_HOME)/drc/run_drc.py \
	--variant=D \
	--run_mode=flat \
	--verbose \
	--thr=$(NPROCS) \
	--run_dir=$(REPORT_DIR) \
	--path $(GDS) \
	--topcell=$(GDS_CELL)

KLAYOUT_SCRIPT_DRC_PDK_ANTENNA_ONLY:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--antenna_only \
	--no_connectivity \
	--no_offgrid

KLAYOUT_SCRIPT_DRC_PDK_DENSITY_ONLY:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--density_only \
	--no_connectivity \
	--no_offgrid

KLAYOUT_SCRIPT_DRC_PDK_BEOL:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--no_feol

KLAYOUT_SCRIPT_DRC_PDK_FEOL:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--no_beol


.PHONY: klayout-drc-efabless
klayout-drc-efabless: klayout-validation
	$(KLAYOUT_SCRIPT_DRC_PDK_BEOL) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_beol.log || true

	$(KLAYOUT_SCRIPT_DRC_PDK_FEOL) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_feol.log || true

	$(KLAYOUT_SCRIPT_DRC_PDK_DENSITY_ONLY) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_density.log || true

	$(KLAYOUT_SCRIPT_DRC_PDK_ANTENNA_ONLY) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_antenna.log || true
I want to know if it's possible to meet my goals, and how to improve the commands
m
@aquiles viza I have a hunch that you want to enable connectivity with the antenna check. 😉
a
Thanks David, I'm going to fix that. Do you see anything else that needs to be changed?
Can I make a "OFFGRID_ONLY" check? If it's possible, it should use beol, feol or both?
m
Just so we’re on the same page, can you include a link to the klayout rules and commands you’re referencing?
a
I'm using the verification library supported by MaBrains (stable one, not experimental). https://github.com/efabless/globalfoundries-pdk-libs-gf180mcu_fd_pv When run help, this is the documentation:
Copy code
# --help -h                           Print this help message.
# --path=<file_path>                  The input GDS file path.
# --variant=<combined_options>        Select combined options of metal_top, mim_option, and metal_level. Allowed values (A, B, C, D, E, F).
#                                     variant=A: Select  metal_top=30K  mim_option=A  metal_level=3LM
#                                     variant=B: Select  metal_top=11K  mim_option=B  metal_level=4LM
#                                     variant=C: Select  metal_top=9K   mim_option=B  metal_level=5LM
#                                     variant=D: Select  metal_top=11K  mim_option=B  metal_level=5LM
#                                     variant=E: Select  metal_top=9K   mim_option=B  metal_level=6LM
#                                     variant=F: Select  metal_top=9K   mim_option=A  metal_level=6LM
# --topcell=<topcell_name>            Topcell name to use.
# --table=<table_name>                Table name to use to run the rule deck.
# --mp=<num_cores>                    Run the rule deck in parts in parallel to speed up the run. [default: 1]
# --run_dir=<run_dir_path>            Run directory to save all the results [default: pwd]
# --thr=<thr>                         The number of threads used in run.
# --run_mode=<run_mode>               Select klayout mode Allowed modes (flat , deep). [default: flat]
# --verbose                           Detailed rule execution log for debugging.
# --no_feol                           Turn off FEOL rules from running.
# --no_beol                           Turn off BEOL rules from running.
# --no_connectivity                   Turn off connectivity rules.
# --density                           Turn on Density rules.
# --density_only                      Turn on Density rules only.
# --antenna                           Turn on Antenna checks.
# --antenna_only                      Turn on Antenna checks only.
# --split_deep                        Spliting some long run rules to be run in deep mode permanently.
# --no_offgrid                        Turn off OFFGRID checking rules.
# --macro_gen                         Generating the full rule deck without run.
# --slow_via                          Turn on SLOW_VIA option for MT30.8 rule.
m
I doubt that the off grid rules take much time. I’d only turn them off if there were a large number of false errors in the fab verified cells.
a
Offgrid affects antenna and density error detection? If it doesn't I think we can disable offgrid rule evaluation while performing antenna and density checks.
👍 1
This is the last configuration I'm using
Copy code
KLAYOUT_SCRIPT_DRC_PDK:=python $(KLAYOUT_HOME)/drc/run_drc.py \
	--variant=D \
	--run_mode=flat \
	--verbose \
	--thr=$(NPROCS) \
	--run_dir=$(REPORT_DIR) \
	--path $(GDS) \
	--topcell=$(GDS_CELL)

# See <https://open-source-silicon.slack.com/archives/C016HUV935L/p1710737146725369>
KLAYOUT_SCRIPT_DRC_PDK_ANTENNA_ONLY:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--antenna_only \
	--no_offgrid

KLAYOUT_SCRIPT_DRC_PDK_DENSITY_ONLY:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--density_only \
	--no_connectivity \
	--no_offgrid

KLAYOUT_SCRIPT_DRC_PDK_BEOL:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--no_feol

KLAYOUT_SCRIPT_DRC_PDK_FEOL:=$(KLAYOUT_SCRIPT_DRC_PDK) \
	--no_beol


.PHONY: klayout-drc-efabless
klayout-drc-efabless: klayout-validation
	rm $(REPORT_DIR)/*.lyrdb

	$(KLAYOUT_SCRIPT_DRC_PDK_BEOL) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_beol.log || true
	mv $(REPORT_DIR)/$(TOP)_main.lyrdb $(REPORT_DIR)/drc_efabless_$(TOP)_beol.lyrdb

	$(KLAYOUT_SCRIPT_DRC_PDK_FEOL) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_feol.log || true
	mv $(REPORT_DIR)/$(TOP)_main.lyrdb $(REPORT_DIR)/drc_efabless_$(TOP)_feol.lyrdb

	$(KLAYOUT_SCRIPT_DRC_PDK_DENSITY_ONLY) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_density.log || true
	mv $(REPORT_DIR)/$(TOP)_density.lyrdb $(REPORT_DIR)/drc_efabless_$(TOP)_density.lyrdb

	$(KLAYOUT_SCRIPT_DRC_PDK_ANTENNA_ONLY) \
		|& tee $(LOG_KLAYOUT)_drc_efabless_antenna.log || true
	mv $(REPORT_DIR)/$(TOP)_antenna.lyrdb $(REPORT_DIR)/drc_efabless_$(TOP)_antenna.lyrdb