-
Notifications
You must be signed in to change notification settings - Fork 18
Description
I'm recently reading your paper "A RISC-V in-network accelerator for flexible high-performance low-power packet processing", along with the source code. And I find there're some mismatches between the paper and the source code, which are quite confusing for me.
I'm reading the source code on tag v0.6.1, and I make no changes to the source files. There's no significant changes for hardware design in hw/ according to git diff with branch master, so I think it's okay to consider v0.6.1 as "update-to-date".
There are connections in hw/deps/pulp_cluster/rtl/pulp_cluster.sv, that I believe play the role of clock-gating the core_region.
// line 1031
cluster_peripherals #(
...
) cluster_peripherals_i (
...
.core_busy_i(core_busy),
.core_clk_en_o(clk_core_en),
...
);
// line 1155
core_region #(
...
) core_region_i (
...
.clock_en_i(clk_core_en[i]),
...
.core_busy_o(core_busy[i]),
...
);Looks like that this cluster_peripherals_i instance is controlling/clock-gating the RISC-V cores. However, the paper mentions that
If the HPU driver has no task/handler to execute, it stops the HPUs by clock-gating it.
But I didn't find any connection between HPU driver and cluster_peripherals_i in the source code... Yet I don't find much description about this instance in the paper. So here are my questions:
- In current implemenation, by which module is core controlled/clock-gated, and what behavior is the module to control the core?
- What role is
cluster_peripherals_iplaying in the design? I noticed that it manages "events" from timer, DMA and etc., but how do these events and their sources work as a part of the design?