../src/lowrisc_ip_pwrmgr_0.1/rtl/pwrmgr_wake_info.sv Cov: 100%
1: // Copyright lowRISC contributors.
2: // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3: // SPDX-License-Identifier: Apache-2.0
4: //
5: // Power Manager Wake Information
6: //
7:
8: `include "prim_assert.sv"
9:
10: module pwrmgr_wake_info import pwrmgr_pkg::*; (
11: input clk_i,
12: input rst_ni,
13: input wr_i,
14: input [TotalWakeWidth-1:0] data_i,
15: input start_capture_i,
16: input record_dis_i,
17: input [WakeUpPeris-1:0] wakeups_i,
18: input fall_through_i,
19: input abort_i,
20: output logic [TotalWakeWidth-1:0] info_o
21: );
22:
23: logic record_en;
24:
25: // generate the record enbale signal
26: // HW enables the recording
27: // Software can suppress the recording or disable it
28: always_ff @(posedge clk_i or negedge rst_ni) begin
29: if (!rst_ni) begin
30: record_en <= 1'b0;
31: end else if (start_capture_i && !record_dis_i) begin
32: // if not disabled by software
33: // a recording enable puls by HW starts recording
34: record_en <= 1'b1;
35: end else if (record_dis_i && record_en) begin
36: // if recording is already ongoing
37: // a disable command by software shuts things down
38: record_en <= 1'b0;
39: end
40: end
41:
42: always_ff @(posedge clk_i or negedge rst_ni) begin
43: if (!rst_ni) begin
44: info_o <= '0;
45: end else if (wr_i) begin
46: info_o <= info_o & ~data_i; // W1C
47: end else if (record_en) begin // If set once, hold until clear
48: info_o[0 +: WakeUpPeris] <= info_o[0 +: WakeUpPeris] | wakeups_i;
49: info_o[WakeUpPeris +: 2] <= info_o[WakeUpPeris +: 2] | {abort_i, fall_through_i};
50: end
51: end
52:
53:
54: endmodule
55: