Skip to content

flow: add CVA6 support for Nangate45 - #4428

Open
HectorRguez wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
HectorRguez:contribution/cva6-nangate45
Open

flow: add CVA6 support for Nangate45#4428
HectorRguez wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
HectorRguez:contribution/cva6-nangate45

Conversation

@HectorRguez

Copy link
Copy Markdown

Summary

  • add a CVA6 flow configuration for Nangate45, following the existing ASAP7 CVA6 flow structure
  • add minimal Verilog adapters that map the CVA6 FakeRAM modules to Nangate45 FakeRAM macros
  • add and register the four generated Nangate45 LEF/Liberty memory views required by CVA6
  • add metadata rules for continuous QoR validation

Motivation

ORFS already includes CVA6 support for ASAP7. This change makes the same open-source CPU available on Nangate45 while preserving the existing CVA6 source, canonicalization, and constraint structure. The platform-specific plumbing is limited to configuration, memory adapters, and the required FakeRAM views.

Validation

  • completed the full RTL-to-GDS flow on an AMD Ryzen Threadripper PRO 7955WX (amd128)
  • placed all 8 memory macros
  • global routing completed without congestion
  • detailed routing completed with 0 DRC violations
  • antenna checking reported 0 violations
  • final timing reported 0 setup TNS and 0 hold TNS
  • power-grid analysis connected VDD/VSS and reported 0.01% worst IR drop
  • metadata validation passed all 27 rules with 0 warnings
  • git diff --check passes

The run used current ORFS scripts with the locally cached ORFS tool image. Local formal equivalence could not be exercised because the cached kepler-formal binary exited with SIGILL; no source configuration disables LEC, so upstream CI can run the normal formal check with its current image.

Signed-off-by: Hector <hectorrodriguezrodriguez52@gmail.com>

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds support for the CVA6 design on the Nangate45 platform, introducing build, configuration, and constraint files, alongside new fakeram macro LEF and Liberty files. The review feedback highlights a redundant false path constraint in constraint.sdc applied to the rvfi_probes_o port, which is already deleted during canonicalization. Additionally, duplicate definitions of the default_input_pin_cap attribute were found across all newly added Liberty (.lib) files, which should be cleaned up to prevent warnings or errors in strict Liberty parsers.

# i_cache_subsystem/i_cva6_icache/gen_sram_*__tag_sram/gen_cut_*__gen_mem_i_tc_sram_wrapper/addr_i[*]


set_false_path -to [get_ports {rvfi_probes_o}]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The port rvfi_probes_o is deleted during canonicalization (as specified in canonicalize.tcl). Therefore, applying a false path constraint to this non-existent port is redundant and will cause warnings or errors during SDC parsing in OpenROAD. This line should be removed or commented out.

# rvfi_probes_o is deleted during canonicalization

@HectorRguez HectorRguez Aug 14, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2889e56 by removing the obsolete false-path constraint

Comment on lines +29 to +31
default_input_pin_cap : 0.0;
default_output_pin_cap : 0.0;
default_input_pin_cap : 0.0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The attribute default_input_pin_cap is defined twice (on line 29 and line 31). This duplicate definition is redundant and can cause warnings or errors in strict Liberty parsers. The duplicate on line 31 should be removed.

    default_input_pin_cap : 0.0;
    default_output_pin_cap : 0.0;

@HectorRguez HectorRguez Aug 14, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 8314c10 by removing the duplicate default_input_pin_cap declaration from this newly added Liberty file

Comment on lines +29 to +31
default_input_pin_cap : 0.0;
default_output_pin_cap : 0.0;
default_input_pin_cap : 0.0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The attribute default_input_pin_cap is defined twice (on line 29 and line 31). This duplicate definition is redundant and can cause warnings or errors in strict Liberty parsers. The duplicate on line 31 should be removed.

    default_input_pin_cap : 0.0;
    default_output_pin_cap : 0.0;

@HectorRguez HectorRguez Aug 14, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 8314c10 by removing the duplicate default_input_pin_cap declaration from this newly added Liberty file

Comment on lines +29 to +31
default_input_pin_cap : 0.0;
default_output_pin_cap : 0.0;
default_input_pin_cap : 0.0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The attribute default_input_pin_cap is defined twice (on line 29 and line 31). This duplicate definition is redundant and can cause warnings or errors in strict Liberty parsers. The duplicate on line 31 should be removed.

    default_input_pin_cap : 0.0;
    default_output_pin_cap : 0.0;

@HectorRguez HectorRguez Aug 14, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 8314c10 by removing the duplicate default_input_pin_cap declaration from this newly added Liberty file

Comment on lines +29 to +31
default_input_pin_cap : 0.0;
default_output_pin_cap : 0.0;
default_input_pin_cap : 0.0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The attribute default_input_pin_cap is defined twice (on line 29 and line 31). This duplicate definition is redundant and can cause warnings or errors in strict Liberty parsers. The duplicate on line 31 should be removed.

    default_input_pin_cap : 0.0;
    default_output_pin_cap : 0.0;

@HectorRguez HectorRguez Aug 14, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 8314c10 by removing the duplicate default_input_pin_cap declaration from this newly added Liberty file

Signed-off-by: Hector <hectorrodriguezrodriguez52@gmail.com>
@openroad-ci

openroad-ci commented Aug 14, 2026

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch. Advisory — results are log-only and do not affect build status. The authoritative QoR gate remains the local rules-file check.

Commit b77c790 · Jenkins build #3 · Baseline: build

61 design(s) checked — 0 with regression(s), 0 without a comparable baseline.
Design Variant Verdict local vs inline passed / failed / missing
asap7/aes base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes-block base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes-mbff base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/cva6 base ✅ pass ✅ MATCH 12 / 0 / 0
asap7/ethmac base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/ethmac_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/gcd-ccs base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/jpeg_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/mock-alu base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/mock-cpu base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/riscv32i-mock-sram base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/swerv_wrapper base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/uart base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/aes base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/aes-hybrid base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/uart-blocks base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/aes base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/aes base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/i2c-gpio-expander base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/spi base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/aes base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ariane133 base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ariane136 base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/black_parrot base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_be_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_fe_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_multi_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/dynamic_node base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/mempool_group base ✅ pass ✅ MATCH 12 / 0 / 0
nangate45/swerv base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/swerv_wrapper base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/tinyRocket base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/aes base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/chameleon base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/microwatt base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/aes base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0

Signed-off-by: Hector <hectorrodriguezrodriguez52@gmail.com>
@HectorRguez
HectorRguez marked this pull request as ready for review August 15, 2026 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants