diff --git a/Makefile b/Makefile index cbd8ce6..5ec6186 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ TOP = chip_top PDK_ROOT ?= $(MAKEFILE_DIR)/gf180mcu PDK ?= gf180mcuD -PDK_COMMIT ?= 140b0494c6665b10ce9353cb1c2ef5bcc18e7d66 +PDK_COMMIT ?= f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7 # Available SCL libraries: # gf180mcu_as_sc_mcu7t3v3 @@ -302,22 +302,19 @@ STA_NETLIST ?= $(MAKEFILE_DIR)/librelane/runs/$(STA_RUN)/51-openroad-fillinserti # STA_SDF below for why we preprocess it. STA_SDF_RAW ?= $(MAKEFILE_DIR)/librelane/runs/$(STA_RUN)/54-openroad-stapostpnr/$(STA_CORNER)/chip_top__$(STA_CORNER).sdf # Icarus-friendly SDF produced from STA_SDF_RAW by scripts/sdf_fix_for_icarus.py. -# Icarus 13's SDF parser has several specific gaps that make the raw file fatal -# or too noisy to use directly: +# Icarus 13's SDF parser has three specific gaps that make the raw file fatal: # 1. (VOLTAGE max::min) / (TEMPERATURE max::min) header triplets have an # empty typ slot. Icarus aborts with "Chosen value not defined". -# 2. TIMINGCHECK sections are parsed but not implemented by Icarus 13, so -# keeping them only floods the log with unsupported-check warnings. -# 3. INTERCONNECT entries that reference IO pad / SRAM instances with +# 2. INTERCONNECT entries that reference IO pad / SRAM instances with # escaped names (e.g. `analog\[1\]\.pad.ASIG5V`) crash vvp with a NULL # handle in vpi_scan — Icarus's path splitter doesn't honour SDF v3.0 # backslash escapes inside INTERCONNECT scopes. -# 4. CELL blocks for flattened instance names with escaped dots/brackets hit +# 3. CELL blocks for flattened instance names with escaped dots/brackets hit # the same path-splitting limitation and cannot be annotated by Icarus. -# The preprocessor fixes the triplets, strips unsupported TIMINGCHECK blocks, -# and strips unannotatable INTERCONNECT entries plus CELL blocks whose flattened -# instance names contain escaped dots or brackets. Flat std-cell IOPATHs and -# conditional delays are left untouched. +# The preprocessor fixes the triplets and strips unannotatable INTERCONNECT +# entries plus CELL blocks whose flattened instance names contain escaped dots +# or brackets. Flat std-cell IOPATHs, TIMINGCHECKs, and conditional delays +# are left untouched. STA_SDF ?= $(MAKEFILE_DIR)/cocotb/sdf/$(STA_RUN)/chip_top__$(STA_CORNER).icarus.sdf $(STA_SDF): $(STA_SDF_RAW) $(MAKEFILE_DIR)/scripts/sdf_fix_for_icarus.py @@ -326,7 +323,7 @@ $(STA_SDF): $(STA_SDF_RAW) $(MAKEFILE_DIR)/scripts/sdf_fix_for_icarus.py sim-gl-sta: $(STA_SDF) ## Run timed STA gate-level simulation with SDF, reset smoke test only cd cocotb; LD_LIBRARY_PATH="" SIM=icarus GL=1 TIMING=1 \ WAVES=0 \ - FORCE_REBUILD=$${FORCE_REBUILD:-1} \ + FORCE_REBUILD=${FORCE_REBUILD} \ COCOTB_TEST_FILTER=test_reset_and_spi_ready \ GL_NETLIST=$(STA_NETLIST) \ SDF_FILE=$(STA_SDF) \ @@ -339,17 +336,17 @@ sim-gl-sta-parallel: $(STA_SDF) ## Run all 4 gestures in parallel with timed STA @echo "Launching 4 parallel STA GLS classify runs (gestures 0-3, Icarus + SDF) …" @set -e ; for g in 0 1 2 3 ; do \ LD_LIBRARY_PATH="" SIM=icarus GL=1 TIMING=1 \ - WAVES=0 \ - FORCE_REBUILD=$${FORCE_REBUILD:-1} \ - PDK_ROOT=${PDK_ROOT} PDK=${PDK} SLOT=${SLOT} \ - GL_NETLIST=$(STA_NETLIST) \ - SDF_FILE=$(STA_SDF) \ - GESTURE_INDICES=$$g \ - COCOTB_TEST_FILTER=test_classify_all_gestures \ - SIM_BUILD=$(MAKEFILE_DIR)/cocotb/sim_build_sta_gl_g$$g \ - RESULTS_XML=$(MAKEFILE_DIR)/logs/results_sta_gl_g$$g.xml \ - python3 $(MAKEFILE_DIR)/cocotb/chip_top_tb.py \ - > $(MAKEFILE_DIR)/logs/sta_gls_gesture_$$g.log 2>&1 & \ + WAVES=0 \ + FORCE_REBUILD=$${FORCE_REBUILD:-0} \ + PDK_ROOT=${PDK_ROOT} PDK=${PDK} SLOT=${SLOT} \ + GL_NETLIST=$(STA_NETLIST) \ + SDF_FILE=$(STA_SDF) \ + GESTURE_INDICES=$$g \ + COCOTB_TEST_FILTER=test_classify_all_gestures \ + SIM_BUILD=$(MAKEFILE_DIR)/cocotb/sim_build_sta_gl_g$$g \ + RESULTS_XML=$(MAKEFILE_DIR)/logs/results_sta_gl_g$$g.xml \ + python3 $(MAKEFILE_DIR)/cocotb/chip_top_tb.py \ + > $(MAKEFILE_DIR)/logs/sta_gls_gesture_$$g.log 2>&1 & \ echo " PID $$! → gesture $$g, log: logs/sta_gls_gesture_$$g.log" ; \ done ; \ wait diff --git a/librelane/config.yaml b/librelane/config.yaml index 72d55a9..5bd8f50 100644 --- a/librelane/config.yaml +++ b/librelane/config.yaml @@ -169,11 +169,11 @@ LVS_IGNORE_CELLS: - gf180mcu_fd_io__fill10 - gf180mcu_fd_io__fillnc -DESIGN_REPAIR_MAX_SLEW_PCT: 30 # default: 20 % +DESIGN_REPAIR_MAX_SLEW_PCT: 37 # default: 20 % DESIGN_REPAIR_MAX_CAP_PCT: 50 # default: 20 % -GRT_DESIGN_REPAIR_MAX_SLEW_PCT: 20 # default: 10 %0 +GRT_DESIGN_REPAIR_MAX_SLEW_PCT: 27 # default: 10 %0 GRT_DESIGN_REPAIR_MAX_CAP_PCT: 30 # default: 10 %