summaryrefslogtreecommitdiff
path: root/rtl/perf/perf_snoop.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-02-12 22:33:47 -0600
committerAlejandro Soto <alejandro@34project.org>2024-02-20 11:11:18 -0600
commit31006bd10962e72c56f34158b893313e233cd161 (patch)
tree42d25fdb315b80c57c87462576f0d9ff0d172704 /rtl/perf/perf_snoop.sv
parent6c175d5dc428f630e3bd4caf707db4b77b0b87e7 (diff)
rtl/perf: add a flag for enabling or disabling the perf module
Diffstat (limited to 'rtl/perf/perf_snoop.sv')
-rw-r--r--rtl/perf/perf_snoop.sv125
1 files changed, 65 insertions, 60 deletions
diff --git a/rtl/perf/perf_snoop.sv b/rtl/perf/perf_snoop.sv
index e98153e..2cc159d 100644
--- a/rtl/perf/perf_snoop.sv
+++ b/rtl/perf/perf_snoop.sv
@@ -1,4 +1,5 @@
`include "cache/defs.sv"
+`include "config.sv"
module perf_snoop
(
@@ -64,66 +65,70 @@ module perf_snoop
assign local_readdata = mem_readdata;
assign local_waitrequest = mem_waitrequest;
- always @(posedge clk or negedge rst_n)
- if (!rst_n) begin
- hold_read <= 0;
- hold_write <= 0;
- hold_waitrequest <= 0;
-
- hold_left_ready <= 0;
- hold_left_valid <= 0;
- hold_right_ready <= 0;
- hold_right_valid <= 0;
-
- snoop_read <= 0;
- snoop_write <= 0;
- snoop_waitrequest <= 0;
-
- snoop_left_ready <= 0;
- snoop_left_valid <= 0;
- snoop_right_ready <= 0;
- snoop_right_valid <= 0;
- end else begin
- /* La idea aquí es aligerar el trabajo del fitter, ya que perf_monitor
- * muestrea el anillo completo, por lo que su span de área es
- * potencialmente grande.
- */
-
- hold_read <= mem_read;
- hold_write <= mem_write;
- hold_waitrequest <= mem_waitrequest;
-
- hold_left_ready <= in_left_ready;
- hold_left_valid <= in_left_valid;
- hold_right_ready <= in_right_ready;
- hold_right_valid <= in_right_valid;
-
- snoop_read <= hold_read;
- snoop_write <= hold_write;
- snoop_waitrequest <= hold_waitrequest;
-
- snoop_left_ready <= hold_left_ready;
- snoop_left_valid <= hold_left_valid;
- snoop_right_ready <= hold_right_ready;
- snoop_right_valid <= hold_right_valid;
+ generate
+ if (`CONFIG_PERF_MONITOR) begin: enable
+ always @(posedge clk or negedge rst_n)
+ if (!rst_n) begin
+ hold_read <= 0;
+ hold_write <= 0;
+ hold_waitrequest <= 0;
+
+ hold_left_ready <= 0;
+ hold_left_valid <= 0;
+ hold_right_ready <= 0;
+ hold_right_valid <= 0;
+
+ snoop_read <= 0;
+ snoop_write <= 0;
+ snoop_waitrequest <= 0;
+
+ snoop_left_ready <= 0;
+ snoop_left_valid <= 0;
+ snoop_right_ready <= 0;
+ snoop_right_valid <= 0;
+ end else begin
+ /* La idea aquí es aligerar el trabajo del fitter, ya que perf_monitor
+ * muestrea el anillo completo, por lo que su span de área es
+ * potencialmente grande.
+ */
+
+ hold_read <= mem_read;
+ hold_write <= mem_write;
+ hold_waitrequest <= mem_waitrequest;
+
+ hold_left_ready <= in_left_ready;
+ hold_left_valid <= in_left_valid;
+ hold_right_ready <= in_right_ready;
+ hold_right_valid <= in_right_valid;
+
+ snoop_read <= hold_read;
+ snoop_write <= hold_write;
+ snoop_waitrequest <= hold_waitrequest;
+
+ snoop_left_ready <= hold_left_ready;
+ snoop_left_valid <= hold_left_valid;
+ snoop_right_ready <= hold_right_ready;
+ snoop_right_valid <= hold_right_valid;
+ end
+
+ always @(posedge clk) begin
+ hold_left.ttl <= in_left.ttl;
+ hold_left.read <= in_left.read;
+ hold_left.inval <= in_left.inval;
+ hold_left.reply <= in_left.reply;
+
+ hold_right.ttl <= in_right.ttl;
+ hold_right.read <= in_right.read;
+ hold_right.inval <= in_right.inval;
+ hold_right.reply <= in_right.reply;
+
+ snoop_left <= hold_left;
+ snoop_right <= hold_right;
+
+ hold_address <= mem_address;
+ snoop_address <= hold_address;
+ end
end
-
- always @(posedge clk) begin
- hold_left.ttl <= in_left.ttl;
- hold_left.read <= in_left.read;
- hold_left.inval <= in_left.inval;
- hold_left.reply <= in_left.reply;
-
- hold_right.ttl <= in_right.ttl;
- hold_right.read <= in_right.read;
- hold_right.inval <= in_right.inval;
- hold_right.reply <= in_right.reply;
-
- snoop_left <= hold_left;
- snoop_right <= hold_right;
-
- hold_address <= mem_address;
- snoop_address <= hold_address;
- end
+ endgenerate
endmodule