From 0e217f43eef16891c9c77be8fa6b98bc7e2e6c90 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Sun, 20 Sep 2026 16:27:16 +0300 Subject: [PATCH 1/3] Refactor IP management by removing CF_gpio_config submodule and updating project structure. Track IPM-installed IPs in ip/dependencies.json, and adjust .gitignore to manage new directory. Update README and CI workflow for clarity on IP installation process. --- .github/workflows/user_project_ci.yml | 10 ++++++---- .gitignore | 4 ++++ .gitmodules | 3 --- CF_gpio_config | 1 - README.md | 5 +++++ ip/.gitignore | 3 +++ ip/dependencies.json | 7 +++++++ openlane/openframe_project_wrapper/config.json | 2 +- verilog/includes/includes.rtl.caravel_user_project | 1 + 9 files changed, 27 insertions(+), 9 deletions(-) delete mode 100644 .gitmodules delete mode 160000 CF_gpio_config create mode 100644 ip/.gitignore create mode 100644 ip/dependencies.json diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index e8d31a7..cefe273 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -136,8 +136,6 @@ jobs: needs: [download_deps] steps: - uses: actions/checkout@v4 - with: - submodules: true - name: Set up QEMU uses: docker/setup-qemu-action@v1 @@ -156,6 +154,12 @@ jobs: #echo "PRECHECK_ROOT=$GITHUB_WORKSPACE/mpw_precheck" >> $GITHUB_ENV echo "MPW_TAG=main" >> $GITHUB_ENV + - name: Install IPM dependencies + run: | + python3 -m pip install --upgrade --no-cache-dir cf-ipm + curl -fsSL -o /tmp/verified_IPs.json https://raw.githubusercontent.com/chipfoundry/ipm/main/verified_IPs.json + ipm install-dep --ip-root $GITHUB_WORKSPACE/ip --local-file /tmp/verified_IPs.json + - name: Download PDK Tarball uses: actions/download-artifact@v4 with: @@ -326,8 +330,6 @@ jobs: needs: [hardening] steps: - uses: actions/checkout@v4 - with: - submodules: true - name: Set up QEMU uses: docker/setup-qemu-action@v1 diff --git a/.gitignore b/.gitignore index be5c585..7437e28 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ runs/ /logs lvs_results/ __pycache__/ +# IPM installs IPs under ip/; keep dependencies.json tracked +/ip/* +!/ip/dependencies.json +!/ip/.gitignore diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index b4093dd..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "CF_gpio_config"] - path = CF_gpio_config - url = https://github.com/chipfoundry/CF_gpio_config diff --git a/CF_gpio_config b/CF_gpio_config deleted file mode 160000 index a8a2252..0000000 --- a/CF_gpio_config +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a8a225255573c0c20dd782916001a0d1b5759b61 diff --git a/README.md b/README.md index 3d51420..06edc95 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ A successful OpenFrame project requires a specific directory layout for the auto | `verilog/rtl/` | Source Verilog code for the project. | | `verilog/gl/` | Gate-level netlists (generated after hardening). | | `verilog/dv/` | Design Verification (cocotb and Verilog testbenches). | +| `ip/` | IPM-installed IPs (for example `CF_gpio_config`). Track `ip/dependencies.json` only. | | `gds/` | Final GDSII binary files for fabrication. | | `lef/` | Library Exchange Format files for the macros. | @@ -89,7 +90,11 @@ The `cf setup` command installs: - OpenLane: The RTL-to-GDS hardening flow. - PDK: Skywater 130nm process design kit. - Timing Scripts: For Static Timing Analysis (STA). +- IPM dependencies: Installs `CF_gpio_config` from IPM into `ip/` (required for GPIO pad configuration). +> [!NOTE] +> `CF_gpio_config` is managed by IPM via `ip/dependencies.json`. Do not add it as a git submodule. +> Re-run `cf setup` (or `cf setup --only-ipm`) after cloning to install it. --- ## Development Flow diff --git a/ip/.gitignore b/ip/.gitignore new file mode 100644 index 0000000..83fe78c --- /dev/null +++ b/ip/.gitignore @@ -0,0 +1,3 @@ +* +!dependencies.json +!.gitignore diff --git a/ip/dependencies.json b/ip/dependencies.json new file mode 100644 index 0000000..3323913 --- /dev/null +++ b/ip/dependencies.json @@ -0,0 +1,7 @@ +{ + "IP": [ + { + "CF_gpio_config": "v1.1.0" + } + ] +} diff --git a/openlane/openframe_project_wrapper/config.json b/openlane/openframe_project_wrapper/config.json index 8389d7f..b75d267 100644 --- a/openlane/openframe_project_wrapper/config.json +++ b/openlane/openframe_project_wrapper/config.json @@ -4,7 +4,7 @@ "VERILOG_FILES": [ "dir::/../../verilog/rtl/openframe_project_netlists.v", "dir::/../../verilog/rtl/openframe_project_wrapper.v", - "dir::/../../CF_gpio_config/rtl/CF_gpio_config.v" + "dir::../../ip/CF_gpio_config/rtl/CF_gpio_config.v" ], "VERILOG_FILES_BLACKBOX": [ "dir::../../verilog/gl/user_proj_timer.v", diff --git a/verilog/includes/includes.rtl.caravel_user_project b/verilog/includes/includes.rtl.caravel_user_project index 5a076c4..656289d 100644 --- a/verilog/includes/includes.rtl.caravel_user_project +++ b/verilog/includes/includes.rtl.caravel_user_project @@ -1,5 +1,6 @@ # Caravel user project includes -v $(USER_PROJECT_VERILOG)/dv/firmware/spiflash.v +-v $(USER_PROJECT_VERILOG)/../ip/CF_gpio_config/rtl/CF_gpio_config.v -v $(USER_PROJECT_VERILOG)/rtl/openframe_project_wrapper.v -v $(USER_PROJECT_VERILOG)/rtl/picosoc.v -v $(USER_PROJECT_VERILOG)/rtl/picorv32.v From e02e2c3586c541b8b3a85d8cce23d856a1a4d1a1 Mon Sep 17 00:00:00 2001 From: Marwan Abbas <67271180+marwaneltoukhy@users.noreply.github.com> Date: Thu, 24 Sep 2026 11:28:00 +0300 Subject: [PATCH 2/3] Update dependencies.json --- ip/dependencies.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ip/dependencies.json b/ip/dependencies.json index 3323913..831b646 100644 --- a/ip/dependencies.json +++ b/ip/dependencies.json @@ -1,7 +1,7 @@ { "IP": [ { - "CF_gpio_config": "v1.1.0" + "CF_gpio_config": "v1.1.4" } ] } From 6fba5a9e02e6aca599a86568d1860339e0939aaa Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Thu, 24 Sep 2026 11:35:02 +0300 Subject: [PATCH 3/3] Update README to clarify IPM installation process and dependencies. Added instructions for installing IPs listed in `ip/dependencies.json` and emphasized the role of the ChipFoundry IP Manager. --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 06edc95..9de112c 100644 --- a/README.md +++ b/README.md @@ -90,11 +90,18 @@ The `cf setup` command installs: - OpenLane: The RTL-to-GDS hardening flow. - PDK: Skywater 130nm process design kit. - Timing Scripts: For Static Timing Analysis (STA). -- IPM dependencies: Installs `CF_gpio_config` from IPM into `ip/` (required for GPIO pad configuration). +- IPM: The ChipFoundry IP Manager (`cf-ipm`) used to install listed IPs. + +### 4. Install IPM dependencies + +IPs listed in `ip/dependencies.json` (for example `CF_gpio_config`) are not stored in git. After cloning, install them with: + +```bash +ipm install-dep --ip-root ip +``` + +This is required for GPIO pad configuration and any other IPM-managed blocks in `ip/`. -> [!NOTE] -> `CF_gpio_config` is managed by IPM via `ip/dependencies.json`. Do not add it as a git submodule. -> Re-run `cf setup` (or `cf setup --only-ipm`) after cloning to install it. --- ## Development Flow