mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
feat: add support for GF180 and SKY130 PDKs with corresponding warnings and simulation files
- Introduced new JSON files for warnings generated by Icarus Verilog, Verilator, and Yosys for both GF180 and SKY130 PDKs. - Updated the build requirements to include necessary packages for handling JSON data. - Modified RTL filelists to use generated files for GF180 and SKY130 standard-cell models. - Enhanced the Iverilog makefile to generate filelists dynamically based on the selected PDK. - Implemented a Python script to generate Iverilog filelists, accommodating both GF180 and SKY130 technologies. - Added behavioral definitions for GF180 UDPs and a tri-state buffer for netlist simulations. - Updated Yosys synthesis scripts to handle new PDKs and ensure proper tie cell mapping. - Extended regression scripts to support PDK-specific commands for GF180 and SKY130. - Added tests to verify that PDK-specific regression commands cover firmware, RTL, and netlist simulations.
This commit is contained in:
37 files changed
+851
-123
No files matched your search
+6
-1
@@ -67,7 +67,12 @@ def main() -> int:
|
||||
tools.append("sta")
|
||||
|
||||
source_names = ["mpw", "cluster_common", "third_party_ip"]
|
||||
pdk_names = {"IHP130": "pdk_ihp130", "ICS55": "pdk_ics55"}
|
||||
pdk_names = {
|
||||
"IHP130": "pdk_ihp130",
|
||||
"ICS55": "pdk_ics55",
|
||||
"GF180": "pdk_gf180",
|
||||
"SKY130": "pdk_sky130",
|
||||
}
|
||||
if args.pdk in pdk_names:
|
||||
source_names.append(pdk_names[args.pdk])
|
||||
paths = {
|
||||
|
||||
+46
-3
@@ -27,7 +27,10 @@ PR_COMMANDS = (
|
||||
"configs/ci/mdd-rv32im-ihp130.mk",
|
||||
("SIMU=VERILATOR", "HAVE_SVA=YES", "firmware", "sim"),
|
||||
),
|
||||
("configs/ci/hazard3-rv32im-ihp130.mk", ("SIMU=VERILATOR", "HAVE_SVA=YES", "sim")),
|
||||
(
|
||||
"configs/ci/hazard3-rv32im-ihp130.mk",
|
||||
("SIMU=VERILATOR", "HAVE_SVA=YES", "firmware", "sim"),
|
||||
),
|
||||
(
|
||||
"configs/ci/hazard3-rv32im-ihp130.mk",
|
||||
("SIMU=IVERILOG", "RTL_SIM_TIMEOUT=5200000", "sim-asm"),
|
||||
@@ -62,6 +65,31 @@ PR_PROFILES = (
|
||||
)
|
||||
NIGHTLY_PROFILES = PR_PROFILES + ("configs/nightly/picorv32-rv32im-ihp130.mk",)
|
||||
|
||||
PDK_PR_PROFILES = {
|
||||
"GF180": "configs/ci/hazard3-rv32im-gf180.mk",
|
||||
"IHP130": "configs/ci/hazard3-rv32im-ihp130.mk",
|
||||
"SKY130": "configs/ci/hazard3-rv32im-sky130.mk",
|
||||
}
|
||||
|
||||
|
||||
def pdk_pr_commands(profile: str) -> tuple[tuple[str, tuple[str, ...]], ...]:
|
||||
return (
|
||||
(profile, ("firmware",)),
|
||||
(profile, ("SIMU=VERILATOR", "HAVE_SVA=YES", "firmware", "sim")),
|
||||
(profile, ("SIMU=IVERILOG", "RTL_SIM_TIMEOUT=5200000", "sim-asm")),
|
||||
(profile, ("SYNTH=YOSYS", "synth")),
|
||||
(
|
||||
profile,
|
||||
(
|
||||
"SIMU=IVERILOG",
|
||||
"SIM_FIRMWARE_NAME=retrosoc_asm",
|
||||
"SIM_SUCCESS_MARKER=Mem wr/rd test success",
|
||||
"RTL_SIM_TIMEOUT=5200000",
|
||||
"netsim",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def regression_environment() -> dict[str, str]:
|
||||
environment = os.environ.copy()
|
||||
@@ -96,10 +124,25 @@ def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Run a supported retroSoC regression suite")
|
||||
parser.add_argument("--root", type=Path, required=True)
|
||||
parser.add_argument("--suite", choices=("pr", "nightly"), required=True)
|
||||
parser.add_argument("--pdk", choices=tuple(PDK_PR_PROFILES), help="run one PR PDK matrix")
|
||||
parser.add_argument("--dry-run", action="store_true")
|
||||
args = parser.parse_args()
|
||||
commands = PR_COMMANDS if args.suite == "pr" else NIGHTLY_COMMANDS
|
||||
profiles = PR_PROFILES if args.suite == "pr" else NIGHTLY_PROFILES
|
||||
if args.pdk:
|
||||
if args.suite == "nightly":
|
||||
if args.pdk != "IHP130":
|
||||
parser.error("nightly regression supports only --pdk IHP130")
|
||||
commands = NIGHTLY_COMMANDS
|
||||
profiles = NIGHTLY_PROFILES
|
||||
elif args.pdk == "IHP130":
|
||||
commands = PR_COMMANDS
|
||||
profiles = PR_PROFILES
|
||||
else:
|
||||
profile = PDK_PR_PROFILES[args.pdk]
|
||||
commands = pdk_pr_commands(profile)
|
||||
profiles = (profile,)
|
||||
else:
|
||||
commands = PR_COMMANDS if args.suite == "pr" else NIGHTLY_COMMANDS
|
||||
profiles = PR_PROFILES if args.suite == "pr" else NIGHTLY_PROFILES
|
||||
environment = regression_environment()
|
||||
for profile, values in commands:
|
||||
command = ["make", f"CONFIG={profile}", *values]
|
||||
|
||||
Reference in new issue
Block a user