[HW]: Add mem_multibanked_pwrgate for correct power management#246
[HW]: Add mem_multibanked_pwrgate for correct power management#246
Conversation
b4fc6c8 to
44a66c7
Compare
There was a problem hiding this comment.
Hi @Lore0599, thank you for the contribution! I have one general question: would there be a point in generalising the module further? Specifically, I don't see the direct relevance of the deepsleep and powergate signals in the module implementation. They are "just" packed into the impl_i ports of the tc_srams. Would it make sense to expose the impl_i ports directly (instead of deepsleep_i and powergate_i) to make this module independent of the technology, perhaps even of the use case (power management), and pack them outside the module?
Other than that, I have added a couple of nitpicks inline. Furthermore, I would like to ask you the following:
- add the new testbench to .gitlab-ci.yml
- add a module description in the README.md
- add the new source files to common_cells.core
- fix the lint errors in the CI.
Thanks a lot!
|
Hi @niwis, thank you for your comments. I'll implement all of them ASAP. |
|
I see. Otherwise, perhaps you could add another wrapping layer that packs the signals locally? I'm just thinking that feeding through the implementation ports might increase the reusability of this module. |
|
@niwis Regarding the CI linting failure, the source of the error is the missing type specification for some parameters at the interface common_cells/src/mem_multibank_pwrgate.sv Line 28 in f374a5b These parameters are of string type, and similarly, in the tc_sram module (https://github.com/pulp-platform/tech_cells_generic/blob/7968dd6e6180df2c644636bc6d2908a49f2190cf/src/rtl/tc_sram.sv#L62) their type is also unspecified.Would you prefer that I explicitly specify the type as string, or should we consider suppressing the linting error as done here? On this forum it appears that not specifying the string type can serve as a workaround for compatibility with tools like Vivado. Let me know :) |
Good point. You can add a waiver for this line here: common_cells/lint/common_cells.style.waiver Lines 4 to 6 in 554ebbc |
7a53b12 to
766fa7c
Compare
- [Lint]: Waive linting check on string datat type declaration - [HW]: Re-introduce IF to check design parameters
b24caf3 to
aee15a3
Compare
|
Hi @Lore0599, sorry for the long silence. Have you had any success with exposing the |
| parameter int unsigned ByteWidth = 32'd8, // Width of a data byte | ||
| parameter int unsigned NumPorts = 32'd2, // Number of read and write ports | ||
| parameter int unsigned Latency = 32'd1, // Latency when the read data is available | ||
| parameter int unsigned NumLogicBanks = 32'd1, // Logic bank for Power Management |
There was a problem hiding this comment.
@Lore0599 Let's double check that the terms LogicBanks/PhysicalBanks have correct semantics
Power Gated MutliBanked Memory
This PR introduces the
mem_multibank_pwrgate.svmodule.Goal
When designing power-aware systems, memory macro cells often include control signals dedicated to powering down/up the bank and entering retention mode. Additionally, when each bank in the memory is made of different cuts, the power control signals must be properly managed to maintain the memory’s interleaved addressing scheme..
Addition:
mem_multibank_pwrgate.sv: In a memory system with multiple banks and applied power strategies, each bank must be correctly managed to avoid disruptions in memory interleaving. For memories with multiple cuts and interleaved banks, it is important to ensure that power signals do not disrupt the internal bank interleaving. This module is responsible for correctly addressing each internal bank and connecting the appropriate power control signals.mem_multibank_pwrgate_tb.sv: A testbench to verify the correct addressing functionality of the implemented module.