-
Notifications
You must be signed in to change notification settings - Fork 75
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
Replacing hand instantiated clock gate cells #50
Comments
I recommend either: a) Omit : force user substitution by TECH_SPECIFIC_EC_RV_ICG b) ifdef synthesizable portion and leave intentional placeholder for per-integrator replacement. |
Hello, please take look at the PR #54 |
looks good to me, assuming module user_clock_gate sits in area outside of the core (which it does seem so). |
just add +define+TECH_RV_ICG= to synthesis or compilation command Or patch this define in generated common_defines.h |
@algrobman Adding the define is not enough as the module in question is defined inside Cores-VeeR-EL2/design/lib/beh_lib.sv Lines 752 to 775 in ff9ad9b
There will be name conflict with the custom one from the external tech library. |
Since #54 is merged can this issue be closed? Or is there anything more to be done? |
@rahuljainNV could you close if completed? |
@nstewart-amd - are you able to use this option as part of Caliptra codebase? |
@rahuljainNV - I think this will work. So far, it looks like we've been picking up the default inferred gaters since the code is written to default in that direction. My preference is that the integrator should have a "force function", that requires them to define the cell (else FAIL to compile). It's a bit of a silent failure at compile time here and will only get picked up by post compile design checks. Also... please note that the same scenario exists the synchronizers. Most integrators will have a foundry/technology specific synchronizer, likely exceeding 2 flop depth. |
Code has hand-instantiated clock gating cells which are defined in below library.
swerv_el2/rtl/lib/beh_lib.sv
module `TEC_RV_ICG
Generally such clock gates are not synthesized, rather a specific specially design cells is picked up from tech library as we don't want any random unbalanced combo logic on clock path, and timing has to be carefully done.
I do see this particular module being different from the rest in library and using a define for module name. So I am guessing that there was an intent to handle this differently and perhaps allow it to be replaced without having to edit the riscv core code.
But I am not able to see how to achieve that - could someone please clarify?
The text was updated successfully, but these errors were encountered: