[dcd] Added design files

Signed-off-by: Eric Shiu <eshiu@google.com>
diff --git a/hw/ip/dcd/rtl/dcd_intr.sv b/hw/ip/dcd/rtl/dcd_intr.sv
new file mode 100644
index 0000000..2631a79
--- /dev/null
+++ b/hw/ip/dcd/rtl/dcd_intr.sv
@@ -0,0 +1,168 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Description: DCD interrupt Module
+//
+module dcd_intr import dcd_reg_pkg::*; (
+  input  clk_i,
+  input  rst_ni,
+  input  clk_aon_i,
+  input  rst_slow_ni,
+
+  input  [NumAdcFilter-1:0] cfg_wakeup_en,
+  input  [NumAdcFilter-1:0] cfg_intr_en,
+  input  cfg_oneshot_intr_en,
+  input  [NumAdcFilter-1:0] dcd_match_pulse,
+  input  cfg_oneshot_done,
+
+  input  dcd_reg2hw_intr_state_reg_t intr_state_i,
+  input  dcd_reg2hw_intr_enable_reg_t intr_enable_i,
+  input  dcd_reg2hw_intr_test_reg_t intr_test_i,
+
+  output dcd_hw2reg_intr_state_reg_t intr_state_o,
+  output dcd_hw2reg_adc_intr_status_reg_t adc_intr_status_o,
+  output dcd_hw2reg_adc_wakeup_status_reg_t adc_wakeup_status_o,
+
+  output debug_cable_wakeup_o,
+  output intr_debug_cable_o
+);
+
+  logic [NumAdcFilter-1:0] cfg_dcd_match_done;
+  logic dcd_event;
+
+  //Synchronize from 200KHz always-onclock to 24MHz cfg clock
+  prim_pulse_sync i_cc_sink_det (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[0]),
+    .dst_pulse_o (cfg_dcd_match_done[0])
+  );
+
+  prim_pulse_sync i_cc_1a5_sink_det (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[1]),
+    .dst_pulse_o (cfg_dcd_match_done[1])
+  );
+
+  prim_pulse_sync i_cc_3a0_sink_det (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[2]),
+    .dst_pulse_o (cfg_dcd_match_done[2])
+  );
+
+  prim_pulse_sync i_cc_src_det (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[3]),
+    .dst_pulse_o (cfg_dcd_match_done[3])
+  );
+
+  prim_pulse_sync i_cc_1a5_src_det (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[4]),
+    .dst_pulse_o (cfg_dcd_match_done[4])
+  );
+
+  prim_pulse_sync i_cc_src_det_flip (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[5]),
+    .dst_pulse_o (cfg_dcd_match_done[5])
+  );
+
+  prim_pulse_sync i_cc_1a5_src_det_flip (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[6]),
+    .dst_pulse_o (cfg_dcd_match_done[6])
+  );
+
+  prim_pulse_sync i_cc_discon (
+    .clk_src_i   (clk_aon_i),
+    .clk_dst_i   (clk_i),
+    .rst_src_ni  (rst_slow_ni),
+    .rst_dst_ni  (rst_ni),
+    .src_pulse_i (dcd_match_pulse[7]),
+    .dst_pulse_o (cfg_dcd_match_done[7])
+  );
+
+  //To write into interrupt status register
+  assign adc_intr_status_o.cc_sink_det.de = cfg_dcd_match_done[0];
+  assign adc_intr_status_o.cc_1a5_sink_det.de = cfg_dcd_match_done[1];
+  assign adc_intr_status_o.cc_3a0_sink_det.de = cfg_dcd_match_done[2];
+  assign adc_intr_status_o.cc_src_det.de = cfg_dcd_match_done[3];
+  assign adc_intr_status_o.cc_1a5_src_det.de = cfg_dcd_match_done[4];
+  assign adc_intr_status_o.cc_src_det_flip.de = cfg_dcd_match_done[5];
+  assign adc_intr_status_o.cc_1a5_src_det_flip.de = cfg_dcd_match_done[6];
+  assign adc_intr_status_o.cc_discon.de = cfg_dcd_match_done[7];
+  assign adc_intr_status_o.oneshot.de = cfg_oneshot_done;
+
+  assign adc_intr_status_o.cc_sink_det.d = 1'b1;
+  assign adc_intr_status_o.cc_1a5_sink_det.d = 1'b1;
+  assign adc_intr_status_o.cc_3a0_sink_det.d = 1'b1;
+  assign adc_intr_status_o.cc_src_det.d = 1'b1;
+  assign adc_intr_status_o.cc_1a5_src_det.d = 1'b1;
+  assign adc_intr_status_o.cc_src_det_flip.d = 1'b1;
+  assign adc_intr_status_o.cc_1a5_src_det_flip.d = 1'b1;
+  assign adc_intr_status_o.cc_discon.d = 1'b1;
+  assign adc_intr_status_o.oneshot.d = 1'b1;
+
+  //Qualify each bit with intr_en
+  assign dcd_event = (|(cfg_dcd_match_done & cfg_intr_en)) ||
+         (cfg_oneshot_done & cfg_oneshot_intr_en);
+
+  // instantiate interrupt hardware primitive
+  prim_intr_hw #(.Width(1)) i_dcd_intr_o (
+    .clk_i(clk_i),
+    .rst_ni(rst_ni),
+    .event_intr_i           (dcd_event),
+    .reg2hw_intr_enable_q_i (intr_enable_i.q),
+    .reg2hw_intr_test_q_i   (intr_test_i.q),
+    .reg2hw_intr_test_qe_i  (intr_test_i.qe),
+    .reg2hw_intr_state_q_i  (intr_state_i.q),
+    .hw2reg_intr_state_de_o (intr_state_o.de),
+    .hw2reg_intr_state_d_o  (intr_state_o.d),
+    .intr_o                 (intr_debug_cable_o)
+  );
+
+  //To write into wakeup status register
+  assign adc_wakeup_status_o.cc_sink_det.de = cfg_dcd_match_done[0];
+  assign adc_wakeup_status_o.cc_1a5_sink_det.de = cfg_dcd_match_done[1];
+  assign adc_wakeup_status_o.cc_3a0_sink_det.de = cfg_dcd_match_done[2];
+  assign adc_wakeup_status_o.cc_src_det.de = cfg_dcd_match_done[3];
+  assign adc_wakeup_status_o.cc_1a5_src_det.de = cfg_dcd_match_done[4];
+  assign adc_wakeup_status_o.cc_src_det_flip.de = cfg_dcd_match_done[5];
+  assign adc_wakeup_status_o.cc_1a5_src_det_flip.de = cfg_dcd_match_done[6];
+  assign adc_wakeup_status_o.cc_discon.de = cfg_dcd_match_done[7];
+
+  assign adc_wakeup_status_o.cc_sink_det.d = 1'b1;
+  assign adc_wakeup_status_o.cc_1a5_sink_det.d = 1'b1;
+  assign adc_wakeup_status_o.cc_3a0_sink_det.d = 1'b1;
+  assign adc_wakeup_status_o.cc_src_det.d = 1'b1;
+  assign adc_wakeup_status_o.cc_1a5_src_det.d = 1'b1;
+  assign adc_wakeup_status_o.cc_src_det_flip.d = 1'b1;
+  assign adc_wakeup_status_o.cc_1a5_src_det_flip.d = 1'b1;
+  assign adc_wakeup_status_o.cc_discon.d = 1'b1;
+
+  //Qualify each bit with wakeup_en
+  assign debug_cable_wakeup_o = |(cfg_dcd_match_done & cfg_wakeup_en);
+
+endmodule