[pwrmgr] pwrmgr for OT bronze

- This is implemented per current power manager specifications.

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/pwrmgr/rtl/pwrmgr_cdc_pulse.sv b/hw/ip/pwrmgr/rtl/pwrmgr_cdc_pulse.sv
new file mode 100644
index 0000000..dad86e1
--- /dev/null
+++ b/hw/ip/pwrmgr/rtl/pwrmgr_cdc_pulse.sv
@@ -0,0 +1,57 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Power Manager module to find slow clock edges
+//
+
+`include "prim_assert.sv"
+
+module pwrmgr_cdc_pulse (
+  input clk_slow_i,
+  input clk_i,
+  input rst_ni,
+  input start_i,
+  input stop_i,
+  output logic pulse_o
+);
+
+  logic clk_slow_q;
+  logic clk_slow_q2;
+  logic toggle;
+  logic valid;
+
+  prim_flop_2sync # (
+    .Width(1)
+  ) i_sync (
+    .clk_i,
+    .rst_ni,
+    .d(clk_slow_i),
+    .q(clk_slow_q)
+  );
+
+  always_ff @(posedge clk_i or negedge rst_ni) begin
+    if (!rst_ni) begin
+      clk_slow_q2 <= 1'b0;
+    end else begin
+      clk_slow_q2 <= clk_slow_q;
+    end
+  end
+
+  always_ff @(posedge clk_i or negedge rst_ni) begin
+    if (!rst_ni) begin
+      valid <= 1'b0;
+    end else if (valid & stop_i) begin
+      valid <= 1'b0;
+    end else if (!valid && toggle && start_i) begin
+      valid <= 1'b1;
+    end
+  end
+
+  assign toggle = clk_slow_q2 ^ clk_slow_q;
+  assign pulse_o = valid & toggle;
+
+
+
+
+endmodule // pwrmgr