Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added cv64a65x_config_pkg.sv for CVA6 64bits config. To be reviewed! #2655

Closed
wants to merge 1 commit into from

Conversation

ludovicpion
Copy link

As discussed during CVA6 Project Meeting on 2024-12-03, I added the cv64a65x_config_pkg.sv for CVA6 64bits config.

To be reviewed

Copy link
Contributor

github-actions bot commented Dec 6, 2024

✔️ successful run, report available here.

@JeanRochCoulon
Copy link
Contributor

"65" means superscalar is enabled, which is not the case in this new configuration.
Ok to create a new configuration, but the name need to be updated and approved by OpenHW. @jquevremont @Floadv298

@ludovicpion
Copy link
Author

Hi,
Obviously the name of this config will be changed to be coherent with the actual parameters.

Any other feedback before making the change?

Thanks

@JeanRochCoulon
Copy link
Contributor

Yes. We highly suggest to remove all the localparams from this file. Because this produces RTL issues: CVA6config can be override from outside (when instantiating the CVA6) while localparam cannot be redefined.

@ludovicpion
Copy link
Author

Ok, no problem to remove localparam.

Current localparam were just based on the format of the cv32a65x config pkg file.

@jquevremont
Copy link
Contributor

"65" means superscalar is enabled, which is not the case in this new configuration. Ok to create a new configuration, but the name need to be updated and approved by OpenHW. @jquevremont @Floadv298

Configuration names are vetted by the Cores TG, either in monthly meetings or on the Mattermost channel.

With what I read, the likely name would be CV64A60AX (the second A for Application = MMU, X for CV-X-IF). I think it collides with what @zarubaf has in mind for his company's configuration (but it's not vetted). The first action would for @ludovicpion and @zarubaf to get in touch together and identify the differences between their configurations.

localparam config_pkg::cache_type_t CVA6ConfigDcacheType = config_pkg::HPDCACHE;

localparam config_pkg::cva6_user_cfg_t cva6_cfg = '{
XLEN: unsigned'(CVA6ConfigXlen),
Copy link
Member

Choose a reason for hiding this comment

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

In cv32a65x_config_pkg.sv there is a parameter called VLEN (Virtual address length) defined as well. It is a bit of a surprise that the CV32A65X should define anything about virtual addressing, but I would expect to see it defined for an Application-class core such as the CV64A65X.

Copy link
Author

Choose a reason for hiding this comment

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

Maybe it is a parameter that we have missed. I will check.

Thanks for the feedback, it is useful.

Copy link
Contributor

Choose a reason for hiding this comment

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

In CPU core, addresses are virtual.
if no MMU, PLEN address = VLEN
if MMU, PLEN address = translation(VLEN)

Copy link
Member

@MikeOpenHWGroup MikeOpenHWGroup left a comment

Choose a reason for hiding this comment

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

This is great @ludovicpion, thanks for this. I am happy with it, but will leave it up to either @JeanRochCoulon or @jquevremont to approve. I've added comments directly to specific lines in the pkg file and will also make the following comments and queries:

  1. I see that you have not set SuperscalarEN. If we follow our current naming strategy, that implies that this core should be the CV64A60X.
  2. Are you interested in defining a core that aligns with one of the RVI Profiles? At this point, this config is close to the RVB23U64. To get there we'll need to add Zicsr, Zicntr, Zihpm, Ziccif, Ziccrse, Ziccamoa, Za64rs and Zihintpause (whew!). As the CVA6 predates the definition of RVI Profiles, the config_pkg.sv does not have variables defined for many of these Zi* features. Please give it some thought - at a minimum it would be useful to add these variables to the config package and set them to zero.

AxiUserWidth: unsigned'(CVA6ConfigDataUserWidth),
MemTidWidth: unsigned'(CVA6ConfigAxiIdWidth),
NrLoadBufEntries: unsigned'(8),
RVF: bit'(1),
Copy link
Member

Choose a reason for hiding this comment

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

Happy to see the F and D ISAs included in this core! I would strongly encourage you to update the floating-point unit the in CVA6 to the latest version of cvfpu as the floating-point unit currently in CVA6 is very out of date and can be expected to have many known and unknown bugs. A couple of additional things to note:

  1. The F ISA of cvfpu has been extensively verified by v1.83. of CV32E40P. Please check out the CV32E40P user Manual to see which parameters of the cvfpu have been verified.
  2. Support for the D ISA has never been verified in an OpenHW core. I do not know the status of this feature in cvfpu, but it is safe to assume that the CV64A65X will have a lot of work to do for double-precision floating point verification.

XF16: bit'(0),
XF16ALT: bit'(0),
XF8: bit'(0),
RVA: bit'(1),
Copy link
Member

Choose a reason for hiding this comment

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

Happy to see this!

RVZiCond: bit'(1),
NrScoreboardEntries: unsigned'(CVA6ConfigNrScoreboardEntries),
PerfCounterEn: bit'(1),
MmuPresent: bit'(1),
Copy link
Member

Choose a reason for hiding this comment

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

As I am sure you now, the MMU, RVS and RVU features are not well verified. We will need a lot of work for these.

CachedRegionAddrBase: 1024'({64'h8000_0000}),
CachedRegionLength: 1024'({64'h40000000}),
MaxOutstandingStores: unsigned'(7),
DebugEn: bit'(1),
Copy link
Member

Choose a reason for hiding this comment

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

Again, the Debug feature is not well verified.

MaxOutstandingStores: unsigned'(7),
DebugEn: bit'(1),
AxiBurstWriteEn: bit'(0),
IcacheByteSize: unsigned'(32768),
Copy link
Member

Choose a reason for hiding this comment

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

These updates to the I and D caches will be "all new verification territory".

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.

4 participants