[dcd] Created the register definition file
Signed-off-by: Eric Shiu <eshiu@google.com>
diff --git a/hw/ip/dcd/data/dcd.hjson b/hw/ip/dcd/data/dcd.hjson
new file mode 100644
index 0000000..3d865af
--- /dev/null
+++ b/hw/ip/dcd/data/dcd.hjson
@@ -0,0 +1,403 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+{ name: "dcd",
+ clock_primary: "clk_i",
+ other_clock_list: [
+ "clk_aon_i",
+ ],
+ reset_primary: "rst_ni",
+ other_reset_list: [
+ "rst_slow_ni",
+ ],
+ bus_device: "tlul",
+ bus_host: "none",
+ //inter_signal_list: [
+ // { struct: "adc_ast",
+ // type: "req_rsp",
+ // act: "req",
+ // name: "adc",
+ // package: "ast_wrapper_pkg",
+ // }
+ //],
+ interrupt_list: [
+ { name: "debug_cable_update",
+ desc: "USB-C debug cable is attached or disconnected",
+ }
+ ],
+ wakeup_list: [
+ { name: "debug_cable_wakeup",
+ desc: "USB-C debug cable wakeup request",
+ }
+ ],
+ param_list: [
+ { name: "NumAdcFilter",
+ type: "int",
+ default: "8",
+ desc: "Number for ADC filters",
+ local: "true",
+ }
+ { name: "NumAdcChannel",
+ type: "int",
+ default: "2",
+ desc: "Number for ADC channels",
+ local: "true",
+ }
+ ],
+ regwidth: "32",
+ registers: [
+ { name: "adc_en_ctl",
+ desc: "ADC enable control register",
+ swaccess: "rw",
+ hwaccess: "hro",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "adc_enable",
+ desc: "1’b0: to power down ADC and DCD FSM will enter the reset state; 1’b1: to power up ADC and DCD FSM will start",
+ }
+ { bits: "1",
+ name: "oneshot_mode",
+ desc: "Oneshot mode does not care about the filter value. 1’b0: disable; 1’b1: enable",
+ }
+ ]
+ }
+ { name: "adc_pd_ctl",
+ desc: "ADC PowerDown(PD) control register",
+ swaccess: "rw",
+ hwaccess: "hro",
+ hwqe: "true",
+ fields: [
+ { bits: "0",
+ name: "lp_mode",
+ desc: "1’b0: adc_pd is disabled, use adc_sample_ctl. 1'b1: adc_pd is enabled, use both adc_lp_sample_ctl & adc_sample_ctl",
+ resval: "0",
+ }
+ { bits: "7:4",
+ name: "pwrup_time",
+ desc: "ADC power up time. unit in cycles, 200KHz(5us)",
+ resval: "6",
+ }
+ { bits: "31:8",
+ name: "wakeup_time",
+ desc: "How often FSM wakes up from ADC PD mode to take a sample. unit in cycles, 200KHz(5us)",
+ resval: "1600",
+ }
+ ]
+ }
+ { name: "adc_lp_sample_ctl",
+ desc: "ADC Low-Power(LP) sample control register",
+ swaccess: "rw",
+ hwaccess: "hro",
+ hwqe: "true",
+ fields: [
+ { bits: "7:0",
+ name: "lp_sample_cnt",
+ desc: "The number of samples in low-power mode when the low-power mode is enabled. After the programmed number is met, ADC won’t be powered down any more.",
+ resval: "4",
+ }
+ ],
+ }
+ { name: "adc_sample_ctl",
+ desc: "ADC sample control register",
+ swaccess: "rw",
+ hwaccess: "hro",
+ hwqe: "true",
+ resval: "155",
+ fields: [
+ { bits: "15:0",
+ name: "np_sample_cnt",
+ desc: "The number of samples in normal-power mode to meet the debounce spec. used after the low-power mode condition is met or in the normal power mode",
+ }
+ ]
+ }
+ { name: "adc_fsm_rst",
+ desc: "ADC FSM reset control",
+ swaccess: "rw",
+ hwaccess: "hro",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "rst_en",
+ desc: "1’b0: Normal functional mode. 1’b1: SW to reset all the FSMs and timers",
+ }
+ ]
+ }
+ { multireg: {
+ name: "adc_chn0_filter_ctl",
+ desc: '''ADC channel0 filter range
+
+ There are 8 filters to define the potential range(min, max)
+ [11:0]: min value [1:0] RO 0
+ [12]: condition(in the box or out of the box)
+ [27:16]: max value [17:16] RO 0
+ each step is 2.148mV
+ ''',
+ count: "NumAdcFilter",
+ cname: "DCD",
+ swaccess: "rw",
+ hwaccess: "hro",
+ hwqe: "true",
+ resval: "0",
+ fields: [
+ { bits: "1:0",
+ name: "min_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "11:2",
+ name: "min_v",
+ desc: "10-bit for chn0 filter min value ",
+ }
+ { bits: "12",
+ name: "cond",
+ desc: "1-bit for the condition; 1'b0 means min<=ADC<=max, 1'b1 means ADC>max or ADC<min ",
+ }
+ { bits: "17:16",
+ name: "max_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "27:18",
+ name: "max_v",
+ desc: "10-bit for chn0 filter max value ",
+ }
+ ],
+ }
+ }
+ { multireg: {
+ name: "adc_chn1_filter_ctl",
+ desc: '''ADC channel1 filter range
+
+ There are 8 filters to define the potential range(min, max)
+ [11:0]: min value [1:0] RO 0
+ [12]: condition(in the box or out of the box)
+ [27:16]: max value [17:16] RO 0
+ each step is 2.148mV
+ ''',
+ count: "NumAdcFilter",
+ cname: "DCD",
+ swaccess: "rw",
+ hwaccess: "hro",
+ hwqe: "true",
+ resval: "0",
+ fields: [
+ { bits: "1:0",
+ name: "min_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "11:2",
+ name: "min_v",
+ desc: "10-bit for chn0 filter min value ",
+ }
+ { bits: "12",
+ name: "cond",
+ desc: "1-bit for the condition; 1'b0 means min<=ADC<=max, 1'b1 means ADC>max or ADC<min ",
+ }
+ { bits: "17:16",
+ name: "max_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "27:18",
+ name: "max_v",
+ desc: "10-bit for chn0 filter max value ",
+ }
+ ],
+ }
+ }
+ { multireg: {
+ name: "adc_chn_val",
+ desc: "ADC value sampled on channel",
+ count: "NumAdcChannel",
+ cname: "DCD",
+ swaccess: "ro",
+ hwaccess: "hwo",
+ resval: "0",
+ fields: [
+ { bits: "1:0",
+ name: "adc_chn_value_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "11:2",
+ name: "adc_chn_value",
+ desc: "Latest ADC value sampled on channel. each step is 2.148mV",
+ }
+ { bits: "17:16",
+ name: "adc_chn_value_intr_ext",
+ desc: "2-bit extension; RO 0",
+ }
+ { bits: "27:18",
+ name: "adc_chn_value_intr",
+ desc: "ADC value sampled on channel when the interrupt is raised(debug cable is attached or disconnected)each step is 2.148mV",
+ }
+ ],
+ }
+ }
+ { name: "adc_wakeup_ctl",
+ desc: "wakeup control",
+ swaccess: "rw",
+ hwaccess: "hro",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "chn0_1_filter0_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "1",
+ name: "chn0_1_filter1_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "2",
+ name: "chn0_1_filter2_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "3",
+ name: "chn0_1_filter3_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "4",
+ name: "chn0_1_filter4_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "5",
+ name: "chn0_1_filter5_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "6",
+ name: "chn0_1_filter6_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "7",
+ name: "chn0_1_filter7_en",
+ desc: "0: disable; 1: enable",
+ }
+ ]
+ }
+ { name: "adc_wakeup_status",
+ desc: "Wakeup internal status",
+ swaccess: "rw1c",
+ hwaccess: "hwo",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "cc_sink_det",
+ desc: "0: filter0 condition is not met; 1: filter0 condition is met",
+ }
+ { bits: "1",
+ name: "cc_1A5_sink_det",
+ desc: "0: filter1 condition is not met; 1: filter1 condition is met",
+ }
+ { bits: "2",
+ name: "cc_3A0_sink_det",
+ desc: "0: filter2 condition is not met; 1: filter2 condition is met",
+ }
+ { bits: "3",
+ name: "cc_src_det",
+ desc: "0: filter3 condition is not met; 1: filter3 condition is met",
+ }
+ { bits: "4",
+ name: "cc_1A5_src_det",
+ desc: "0: filter4 condition is not met; 1: filter4 condition is met",
+ }
+ { bits: "5",
+ name: "cc_src_det_flip",
+ desc: "0: filter5 condition is not met; 1: filter5 condition is met",
+ }
+ { bits: "6",
+ name: "cc_1A5_src_det_flip",
+ desc: "0: filter6 condition is not met; 1: filter6 condition is met",
+ }
+ { bits: "7",
+ name: "cc_discon",
+ desc: "0: filter7 condition is not met; 1: filter7 condition is met",
+ }
+ ]
+ }
+ { name: "adc_intr_ctl",
+ desc: "Debug cable internal control",
+ swaccess: "rw",
+ hwaccess: "hro",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "chn0_1_filter0_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "1",
+ name: "chn0_1_filter1_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "2",
+ name: "chn0_1_filter2_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "3",
+ name: "chn0_1_filter3_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "4",
+ name: "chn0_1_filter4_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "5",
+ name: "chn0_1_filter5_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "6",
+ name: "chn0_1_filter6_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "7",
+ name: "chn0_1_filter7_en",
+ desc: "0: disable; 1: enable",
+ }
+ { bits: "8",
+ name: "oneshot_intr_en",
+ desc: "0: disable; 1: enable",
+ }
+ ]
+ }
+ { name: "adc_intr_status",
+ desc: "Debug cable internal status",
+ swaccess: "rw1c",
+ hwaccess: "hwo",
+ resval: "0",
+ fields: [
+ { bits: "0",
+ name: "cc_sink_det",
+ desc: "0: filter0 condition is not met; 1: filter0 condition is met",
+ }
+ { bits: "1",
+ name: "cc_1A5_sink_det",
+ desc: "0: filter1 condition is not met; 1: filter1 condition is met",
+ }
+ { bits: "2",
+ name: "cc_3A0_sink_det",
+ desc: "0: filter2 condition is not met; 1: filter2 condition is met",
+ }
+ { bits: "3",
+ name: "cc_src_det",
+ desc: "0: filter3 condition is not met; 1: filter3 condition is met",
+ }
+ { bits: "4",
+ name: "cc_1A5_src_det",
+ desc: "0: filter4 condition is not met; 1: filter4 condition is met",
+ }
+ { bits: "5",
+ name: "cc_src_det_flip",
+ desc: "0: filter5 condition is not met; 1: filter5 condition is met",
+ }
+ { bits: "6",
+ name: "cc_1A5_src_det_flip",
+ desc: "0: filter6 condition is not met; 1: filter6 condition is met",
+ }
+ { bits: "7",
+ name: "cc_discon",
+ desc: "0: filter7 condition is not met; 1: filter7 condition is met",
+ }
+ { bits: "8",
+ name: "oneshot",
+ desc: "0: oneshot sample is not done ; 1: oneshot sample is done",
+ }
+ ]
+ }
+ ],
+}
diff --git a/hw/ip/dcd/data/dcd.prj.hjson b/hw/ip/dcd/data/dcd.prj.hjson
new file mode 100644
index 0000000..e280d6b
--- /dev/null
+++ b/hw/ip/dcd/data/dcd.prj.hjson
@@ -0,0 +1,15 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+{
+ name: "dcd",
+ design_spec: "hw/ip/dcd/doc",
+ dv_doc: "hw/ip/dcd/doc/dv",
+ hw_checklist: "hw/ip/dcd/doc/checklist",
+ version: "1.0",
+ life_stage: "L1",
+ design_stage: "D0",
+ verification_stage: "V0",
+ notes: "",
+}
diff --git a/hw/ip/dcd/dcd.core b/hw/ip/dcd/dcd.core
new file mode 100644
index 0000000..a8f5a08
--- /dev/null
+++ b/hw/ip/dcd/dcd.core
@@ -0,0 +1,59 @@
+CAPI=2:
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+name: "lowrisc:ip:dcd:1.0"
+description: "dcd"
+filesets:
+ files_rtl:
+ depend:
+ - lowrisc:constants:top_pkg
+ - lowrisc:prim:all
+ - lowrisc:ip:tlul
+ - lowrisc:systems:ast_pkg
+ files:
+ - rtl/dcd_reg_pkg.sv
+ - rtl/dcd_reg_top.sv
+ - rtl/dcd_pkg.sv
+ - rtl/dcd_fsm.sv
+ - rtl/dcd_intr.sv
+ - rtl/dcd_core.sv
+ - rtl/dcd.sv
+ file_type: systemVerilogSource
+
+ files_ascentlint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ file_type: waiver
+
+ files_veriblelint_waiver:
+ depend:
+ # common waivers
+ - lowrisc:lint:common
+ - lowrisc:lint:comportable
+
+parameters:
+ SYNTHESIS:
+ datatype: bool
+ paramtype: vlogdefine
+
+targets:
+ default: &default_target
+ filesets:
+ - tool_ascentlint ? (files_ascentlint_waiver)
+ - files_rtl
+ toplevel: dcd
+
+
+ lint:
+ <<: *default_target
+ default_tool: verilator
+ parameters:
+ - SYNTHESIS=true
+ tools:
+ vdcd.hjsonerilator:
+ mode: lint-only
+ verilator_options:
+ - "-Wall"
+