feat: add IHP, SKY130, and GF180 PDK support#56
Conversation
|
Hello, I've solved the problem and I really hope your project includes all Open source pdks . and I've been following you for a while now. I think your project will be revolutionary in this field, wish you all the best. |
Emin017
left a comment
There was a problem hiding this comment.
Please also add at least one test for the newly introduced PDKs in this PR to ensure that their integration works correctly and does not introduce functional issues.
| stdcell_dir = "{}/IP/STD_cell/ics55_LLSC_H7C_V1p10C100".format(resolved_root) | ||
|
|
||
| tech_path = "{}/prtech/techLEF/N551P6M_ecos.lef".format(resolved_root) | ||
| tech_path = "{}/prtech/techLEF/N551P6M.lef".format(resolved_root) |
There was a problem hiding this comment.
Will this LEF cause issues when using other PDKs?
| logger.error(msg) | ||
| raise ValueError(msg) | ||
|
|
||
Emin017
left a comment
There was a problem hiding this comment.
Please also rebase this branch, so we can trigger the ci check.
| stdcell_dir = "{}/IP/STD_cell/ics55_LLSC_H7C_V1p10C100".format(resolved_root) | ||
|
|
||
| tech_path = "{}/prtech/techLEF/N551P6M_ecos.lef".format(resolved_root) | ||
| tech_path = "{}/prtech/techLEF/N551P6M.lef".format(resolved_root) |
There was a problem hiding this comment.
| tech_path = "{}/prtech/techLEF/N551P6M.lef".format(resolved_root) | |
| tech_path = "{}/prtech/techLEF/N551P6M_ecos.lef".format(resolved_root) |
| @@ -9,7 +9,7 @@ | |||
|
|
|||
| def _create_minimal_ics55_pdk(root: Path) -> Path: | |||
| """Create the minimal ICS55 directory tree required by get_pdk().""" | |||
| tech_path = root / "prtech" / "techLEF" / "N551P6M_ecos.lef" | |||
| tech_path = root / "prtech" / "techLEF" / "N551P6M.lef" | |||
There was a problem hiding this comment.
| tech_path = root / "prtech" / "techLEF" / "N551P6M.lef" | |
| tech_path = root / "prtech" / "techLEF" / "N551P6M_ecos.lef" |
| logger.error(msg) | ||
| raise ValueError(msg) | ||
|
|
||
|
We may also need to add some pdk initialize step in ci configuration. |
|
You can use git amend and force push when you don't know what to write commit msg or the content is duplicated :) |
|
@Emin017 Fair point 😄. In this case, though, I wasn't sure whether the issue was caused by my changes or by an existing problem. I'm still investigating it—the test_ics55_gcd test reaches the CTS stage, where a native dependency aborts the process and causes the GitHub Actions run to fail with exit code 134. Once I understand the root cause, I'll clean up the commits if needed. |
For every PDK, I added a dedicated PDK_...() function that acts as a dictionary of the factory's "parts list."
** Specific Cell Names: I mapped the unique naming conventions of each factory so the compiler knows which "brick" to pick:
IHP: Uses sg13g2_ prefix (e.g., sg13g2_filltap).
SkyWater: Uses sky130_fd_sc_hd__ prefix (e.g., sky130_fd_sc_hd__fill_1).
GlobalFoundries: Uses gf180mcu_fd_sc_mcu7t5v0__ prefix.
** File Path Resolution: Added logic to find the three critical files required for every chip:
Tech LEF: The "Rulebook" for the metal layers.
StdCell LEF: The "Shapes" of the transistors.
Liberty (.lib): The "Timing" (how fast the signals move).
For every PDK, I created a _PARAMETERS_TEMPLATE that defines the "rules of the road" for drawing the chip.
** Power Delivery Network (PDN): We added a professional power grid for every PDK:
** Layer Constraints:
** Utilization & Margins: Set safe default "density" levels (e.g., 65% for IHP, 40% for SkyWater) so the chips aren't too crowded to wire.