../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: