[sysrst_ctrl] Consolidate input CDC flops, overhaul signal naming
Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson b/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
index dc668b0..addb988 100644
--- a/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
+++ b/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
@@ -22,12 +22,12 @@
}
],
wakeup_list: [
- { name: "gsc_wk",
+ { name: "aon_gsc_wk",
desc: "user directed wakeup",
}
],
reset_request_list: [
- { name: "gsc_rst",
+ { name: "aon_gsc_rst",
desc: "user directed reset"
},
],
@@ -44,6 +44,12 @@
desc: "Number of timer bits",
local: "true",
}
+ { name: "DetTimerWidth",
+ type: "int",
+ default: "32",
+ desc: "Number of detection timer bits",
+ local: "true",
+ }
],
available_input_list: [
{ name: "ac_present", desc: "A/C power is present" }
@@ -64,14 +70,14 @@
{ name: "z3_wakeup", desc: "To enter Z3 mode and exit from Z4 sleep mode" }
],
inter_signal_list: [
- { name: "gsc_wk",
+ { name: "aon_gsc_wk",
package: "",
struct: "logic",
act: "req"
type: "uni",
width: "1"
}
- { name: "gsc_rst",
+ { name: "aon_gsc_rst",
package: "",
struct: "logic",
act: "req"
@@ -103,7 +109,7 @@
resval: "2000",
async: "clk_aon_i",
fields: [
- { bits: "15:0",
+ { bits: "TimerWidth-1:0",
name: "ec_rst_pulse",
desc: "Configure the pulse width of ec_rst_l. 10-200ms, each step is 5us(200KHz clock)",
}
@@ -117,7 +123,7 @@
resval: "8000",
async: "clk_aon_i",
fields: [
- { bits: "15:0",
+ { bits: "TimerWidth-1:0",
name: "ulp_ac_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
@@ -131,7 +137,7 @@
resval: "8000",
async: "clk_aon_i",
fields: [
- { bits: "15:0",
+ { bits: "TimerWidth-1:0",
name: "ulp_lid_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
@@ -145,7 +151,7 @@
resval: "8000",
async: "clk_aon_i",
fields: [
- { bits: "15:0",
+ { bits: "TimerWidth-1:0",
name: "ulp_pwrb_debounce_timer",
desc: "Configure the debounce timer. 10-200ms, each step is 5us(200KHz clock)",
}
@@ -185,6 +191,7 @@
swaccess: "rw1c",
hwaccess: "hrw",
resval: "0",
+ async: "clk_aon_i",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
@@ -512,7 +519,7 @@
resval: "0",
async: "clk_aon_i",
fields: [
- { bits: "15:0",
+ { bits: "TimerWidth-1:0",
name: "debounce_timer",
desc: "Define the timer valure so that pwrb_in is not oscillating for 0-200ms, each step is 5us(200KHz clock)",
}
@@ -611,7 +618,7 @@
resval: "0",
async: "clk_aon_i",
fields: [
- { bits: "31:0",
+ { bits: "DetTimerWidth-1:0",
name: "detection_timer",
desc: "0-60s, each step is 5us(200KHz clock)",
}
@@ -659,6 +666,7 @@
swaccess: "rw1c",
hwaccess: "hwo",
resval: "0",
+ async: "clk_aon_i",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
@@ -686,6 +694,7 @@
swaccess: "rw1c",
hwaccess: "hwo",
resval: "0",
+ async: "clk_aon_i",
tags: [ // the value of these regs is determined by the
// value on the pins, hence it cannot be predicted.
"excl:CsrNonInitTests:CsrExclCheck"],
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
index 0a8d0b1..3553544 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
@@ -11,15 +11,12 @@
#(
parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}
) (
- input clk_i,//Always-on 24MHz clock(config)
- input clk_aon_i,//Always-on 200KHz clock(logic)
- input rst_ni,//power-on reset for the 24MHz clock(config)
- input rst_aon_ni,//power-on reset for the 200KHz clock(logic)
- output gsc_wk_o, //GSC wake to pwrmgr
- output gsc_rst_o,//GSC reset to rstmgr
- output intr_sysrst_ctrl_o,//sysrst_ctrl interrupt to PLIC
+ input clk_i, // Always-on 24MHz clock(config)
+ input clk_aon_i, // Always-on 200KHz clock(logic)
+ input rst_ni, // power-on reset for the 24MHz clock(config)
+ input rst_aon_ni, // power-on reset for the 200KHz clock(logic)
- //Regster interface
+ // Register interface
input tlul_pkg::tl_h2d_t tl_i,
output tlul_pkg::tl_d2h_t tl_o,
@@ -27,21 +24,26 @@
input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i,
output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o,
- //DIO
- input cio_ac_present_i,//AC power is present
- input cio_ec_rst_in_l_i,//EC reset is asserted by some other system agent
- input cio_key0_in_i,//VolUp button in tablet; column output from the EC in a laptop
- input cio_key1_in_i,//VolDown button in tablet; row input from keyboard matrix in a laptop
- input cio_key2_in_i,//TBD button in tablet; row input from keyboard matrix in a laptop
- input cio_pwrb_in_i,//Power button in both tablet and laptop
- input cio_lid_open_i,//lid is open from GMR
- output logic cio_bat_disable_o,//Battery is disconnected
- output logic cio_ec_rst_out_l_o,//EC reset is asserted by sysrst_ctrl
- output logic cio_key0_out_o,//Passthrough from key0_in, can be configured to invert
- output logic cio_key1_out_o,//Passthrough from key1_in, can be configured to invert
- output logic cio_key2_out_o,//Passthrough from key2_in, can be configured to invert
- output logic cio_pwrb_out_o,//Passthrough from pwrb_in, can be configured to invert
- output logic cio_z3_wakeup_o,//Exit from Z4 sleep mode and enter Z3 mode
+ // Wake, reset and interrupt requests
+ output logic aon_gsc_wk_o, // GSC wake to pwrmgr
+ output logic aon_gsc_rst_o, // GSC reset to rstmgr
+ output logic intr_sysrst_ctrl_o, // sysrst_ctrl interrupt to PLIC
+
+ // IOs
+ input cio_ac_present_i, // AC power is present
+ input cio_ec_rst_in_l_i, // EC reset is asserted by some other system agent
+ input cio_key0_in_i, // VolUp button in tablet; column output from the EC in a laptop
+ input cio_key1_in_i, // VolDown button in tablet; row input from keyboard matrix in a laptop
+ input cio_key2_in_i, // TBD button in tablet; row input from keyboard matrix in a laptop
+ input cio_pwrb_in_i, // Power button in both tablet and laptop
+ input cio_lid_open_i, // lid is open from GMR
+ output logic cio_bat_disable_o, // Battery is disconnected
+ output logic cio_ec_rst_out_l_o, // EC reset is asserted by sysrst_ctrl
+ output logic cio_key0_out_o, // Passthrough from key0_in, can be configured to invert
+ output logic cio_key1_out_o, // Passthrough from key1_in, can be configured to invert
+ output logic cio_key2_out_o, // Passthrough from key2_in, can be configured to invert
+ output logic cio_pwrb_out_o, // Passthrough from pwrb_in, can be configured to invert
+ output logic cio_z3_wakeup_o, // Exit from Z4 sleep mode and enter Z3 mode
output logic cio_bat_disable_en_o,
output logic cio_ec_rst_out_l_en_o,
output logic cio_key0_out_en_o,
@@ -51,28 +53,15 @@
output logic cio_z3_wakeup_en_o
);
+ /////////////////////////
+ // Alerts and CSR Node //
+ /////////////////////////
+
import sysrst_ctrl_reg_pkg::* ;
sysrst_ctrl_reg2hw_t reg2hw;
sysrst_ctrl_hw2reg_t hw2reg;
- logic pwrb_int, key0_int, key1_int, key2_int, ac_present_int, lid_open_int;
- logic pwrb_out_hw, key0_out_hw, key1_out_hw, key2_out_hw, ec_rst_l_hw, bat_disable_hw;
- logic z3_wakeup_hw;
- logic pwrb_out_int, key0_out_int, key1_out_int, key2_out_int, bat_disable_int, z3_wakeup_int;
- logic sysrst_ctrl_combo_intr, sysrst_ctrl_key_intr;
- logic ulp_wakeup_pulse_int;
-
- //Always-on pins
- assign cio_ec_rst_out_l_en_o = 1'b1;
- assign cio_pwrb_out_en_o = 1'b1;
- assign cio_key0_out_en_o = 1'b1;
- assign cio_key1_out_en_o = 1'b1;
- assign cio_key2_out_en_o = 1'b1;
- assign cio_bat_disable_en_o = 1'b1;
- assign cio_z3_wakeup_en_o = 1'b1;
-
- // Alerts
logic [NumAlerts-1:0] alert_test, alerts;
assign alert_test = {
reg2hw.alert_test.q &
@@ -95,7 +84,6 @@
);
end
- // Register module
sysrst_ctrl_reg_top u_reg (
.clk_i,
.rst_ni,
@@ -109,165 +97,260 @@
.devmode_i (1'b1)
);
- //Instantiate the autoblock module
- sysrst_ctrl_autoblock u_autoblock (
+ ///////////////////////////////////////
+ // Input inversion and Synchronizers //
+ ///////////////////////////////////////
+
+ // Optionally invert some of the input signals
+ logic pwrb_int, key0_int, key1_int, key2_int, ac_present_int, lid_open_int, ec_rst_l_int;
+ assign pwrb_int = reg2hw.key_invert_ctl.pwrb_in.q ^ cio_pwrb_in_i;
+ assign key0_int = reg2hw.key_invert_ctl.key0_in.q ^ cio_key0_in_i;
+ assign key1_int = reg2hw.key_invert_ctl.key1_in.q ^ cio_key1_in_i;
+ assign key2_int = reg2hw.key_invert_ctl.key2_in.q ^ cio_key2_in_i;
+ assign ac_present_int = reg2hw.key_invert_ctl.ac_present.q ^ cio_ac_present_i;
+ assign lid_open_int = reg2hw.key_invert_ctl.lid_open.q ^ cio_lid_open_i;
+ // Uninverted input
+ assign ec_rst_l_int = cio_ec_rst_in_l_i;
+
+ // Synchronize input signals to AON clock
+ logic aon_pwrb_int, aon_key0_int, aon_key1_int, aon_key2_int;
+ logic aon_ac_present_int, aon_lid_open_int, aon_ec_rst_l_int;
+ prim_flop_2sync # (
+ .Width(7)
+ ) u_prim_flop_2sync_input (
+ .clk_i(clk_aon_i),
+ .rst_ni(rst_aon_ni),
+ .d_i({pwrb_int,
+ key0_int,
+ key1_int,
+ key2_int,
+ ac_present_int,
+ lid_open_int,
+ ec_rst_l_int}),
+ .q_o({aon_pwrb_int,
+ aon_key0_int,
+ aon_key1_int,
+ aon_key2_int,
+ aon_ac_present_int,
+ aon_lid_open_int,
+ aon_ec_rst_l_int})
+ );
+
+ ///////////////
+ // Autoblock //
+ ///////////////
+
+ // This module operates on both synchronized and unsynchronized signals.
+ // I.e., the passthrough signals are NOT synchronnous to the AON clock.
+ logic pwrb_out_hw, key0_out_hw, key1_out_hw, key2_out_hw;
+ sysrst_ctrl_autoblock u_sysrst_ctrl_autoblock (
.clk_aon_i,
.rst_aon_ni,
+ // (Optionally) inverted input signals on AON clock
+ .aon_pwrb_int_i(aon_pwrb_int),
+ // (Optionally) inverted input signals (not synced to AON clock)
.pwrb_int_i(pwrb_int),
.key0_int_i(key0_int),
.key1_int_i(key1_int),
.key2_int_i(key2_int),
- .auto_block_debounce_ctl_i(reg2hw.auto_block_debounce_ctl),
- .auto_block_out_ctl_i(reg2hw.auto_block_out_ctl),
+ // CSRs synced to AON clock
+ .aon_auto_block_debounce_ctl_i(reg2hw.auto_block_debounce_ctl),
+ .aon_auto_block_out_ctl_i(reg2hw.auto_block_out_ctl),
+ // Output signals to pin override logic (not synced to AON clock)
.pwrb_out_hw_o(pwrb_out_hw),
.key0_out_hw_o(key0_out_hw),
.key1_out_hw_o(key1_out_hw),
.key2_out_hw_o(key2_out_hw)
);
- //Instantiate the ULP module
- sysrst_ctrl_ulp u_ulp (
- .clk_aon_i,
- .rst_aon_ni,
- .pwrb_int_i(pwrb_int),
- .lid_open_int_i(lid_open_int),
- .ac_present_int_i(ac_present_int),
+ /////////
+ // ULP //
+ /////////
+
+ // This module runs on the AON clock entirely.
+ // Hence, its local signals are not prefixed with aon_*.
+ logic aon_z3_wakeup_hw;
+ logic aon_ulp_wakeup_pulse_int;
+ sysrst_ctrl_ulp u_sysrst_ctrl_ulp (
+ .clk_i(clk_aon_i),
+ .rst_ni(rst_aon_ni),
+ // (Optionally) inverted input signals on AON clock
+ .pwrb_int_i(aon_pwrb_int),
+ .lid_open_int_i(aon_lid_open_int),
+ .ac_present_int_i(aon_ac_present_int),
+ // CSRs synced to AON clock
.ulp_ac_debounce_ctl_i(reg2hw.ulp_ac_debounce_ctl),
.ulp_lid_debounce_ctl_i(reg2hw.ulp_lid_debounce_ctl),
.ulp_pwrb_debounce_ctl_i(reg2hw.ulp_pwrb_debounce_ctl),
.ulp_ctl_i(reg2hw.ulp_ctl),
.ulp_status_o(hw2reg.ulp_status),
- .ulp_wakeup_pulse_o(ulp_wakeup_pulse_int),
- .z3_wakeup_hw_o(z3_wakeup_hw)
+ // wakeup pulses on AON clock
+ .ulp_wakeup_pulse_o(aon_ulp_wakeup_pulse_int),
+ .z3_wakeup_hw_o(aon_z3_wakeup_hw)
);
- //Instantiate the pin inversion module
- sysrst_ctrl_inv u_inversion (
- .cio_pwrb_in_i,
- .cio_key0_in_i,
- .cio_key1_in_i,
- .cio_key2_in_i,
- .cio_ac_present_i,
- .cio_lid_open_i,
- .pwrb_out_int_i(pwrb_out_int),
- .key0_out_int_i(key0_out_int),
- .key1_out_int_i(key1_out_int),
- .key2_out_int_i(key2_out_int),
- .bat_disable_int_i(bat_disable_int),
- .z3_wakeup_int_i(z3_wakeup_int),
- .key_invert_ctl_i(reg2hw.key_invert_ctl),
- .pwrb_int_o(pwrb_int),
- .key0_int_o(key0_int),
- .key1_int_o(key1_int),
- .key2_int_o(key2_int),
- .ac_present_int_o(ac_present_int),
- .lid_open_int_o(lid_open_int),
- .cio_bat_disable_o,
- .cio_pwrb_out_o,
- .cio_key0_out_o,
- .cio_key1_out_o,
- .cio_key2_out_o,
- .cio_z3_wakeup_o
- );
+ /////////////////////////////
+ // Key triggered interrups //
+ /////////////////////////////
- //Instantiate the pin visibility and override module
- sysrst_ctrl_pin u_pin_vis_ovd (
- .clk_i,
- .rst_ni,
- .cio_pwrb_in_i,
- .cio_key0_in_i,
- .cio_key1_in_i,
- .cio_key2_in_i,
- .cio_ac_present_i,
- .cio_ec_rst_in_l_i,
- .cio_lid_open_i,
- .pwrb_out_hw_i(pwrb_out_hw),
- .key0_out_hw_i(key0_out_hw),
- .key1_out_hw_i(key1_out_hw),
- .key2_out_hw_i(key2_out_hw),
- .bat_disable_hw_i(bat_disable_hw),
- .ec_rst_l_hw_i(ec_rst_l_hw),
- .z3_wakeup_hw_i(z3_wakeup_hw),
- .pin_allowed_ctl_i(reg2hw.pin_allowed_ctl),
- .pin_out_ctl_i(reg2hw.pin_out_ctl),
- .pin_out_value_i(reg2hw.pin_out_value),
- .pin_in_value_o(hw2reg.pin_in_value),
- .pwrb_out_int_o(pwrb_out_int),
- .key0_out_int_o(key0_out_int),
- .key1_out_int_o(key1_out_int),
- .key2_out_int_o(key2_out_int),
- .bat_disable_int_o(bat_disable_int),
- .z3_wakeup_int_o(z3_wakeup_int),
- .cio_ec_rst_out_l_o
- );
-
- //Instantiate key-triggered interrupt module
- sysrst_ctrl_keyintr u_keyintr (
- .clk_i,
- .rst_ni,
- .clk_aon_i,
- .rst_aon_ni,
- .pwrb_int_i(pwrb_int),
- .key0_int_i(key0_int),
- .key1_int_i(key1_int),
- .key2_int_i(key2_int),
- .ac_present_int_i(ac_present_int),
- .cio_ec_rst_in_l_i,
+ // This module runs on the AON clock entirely.
+ // Hence, its local signals are not prefixed with aon_*.
+ logic aon_sysrst_ctrl_key_intr;
+ sysrst_ctrl_keyintr u_sysrst_ctrl_keyintr (
+ .clk_i(clk_aon_i),
+ .rst_ni(rst_aon_ni),
+ // (Optionally) inverted input signals on AON clock
+ .pwrb_int_i(aon_pwrb_int),
+ .key0_int_i(aon_key0_int),
+ .key1_int_i(aon_key1_int),
+ .key2_int_i(aon_key2_int),
+ .ac_present_int_i(aon_ac_present_int),
+ .ec_rst_l_int_i(aon_ec_rst_l_int),
+ // CSRs synced to AON clock
.key_intr_ctl_i(reg2hw.key_intr_ctl),
.key_intr_debounce_ctl_i(reg2hw.key_intr_debounce_ctl),
.key_intr_status_o(hw2reg.key_intr_status),
- .sysrst_ctrl_key_intr_o(sysrst_ctrl_key_intr)
+ // IRQ running on AON clock
+ .sysrst_ctrl_key_intr_o(aon_sysrst_ctrl_key_intr)
);
- //Instantiate combo module
- sysrst_ctrl_combo u_combo (
- .clk_i,
- .rst_ni,
- .clk_aon_i,
- .rst_aon_ni,
- .pwrb_int_i(pwrb_int),
- .key0_int_i(key0_int),
- .key1_int_i(key1_int),
- .key2_int_i(key2_int),
- .ac_present_int_i(ac_present_int),
- .cio_ec_rst_in_l_i,
+ /////////////////////
+ // Combo detection //
+ /////////////////////
+
+ // This module runs on the AON clock entirely.
+ // Hence, its local signals are not prefixed with aon_*.
+ logic aon_sysrst_ctrl_combo_intr, aon_bat_disable_hw, aon_ec_rst_l_hw;
+ sysrst_ctrl_combo u_sysrst_ctrl_combo (
+ .clk_i(clk_aon_i),
+ .rst_ni(rst_aon_ni),
+ // (Optionally) inverted input signals on AON clock
+ .pwrb_int_i(aon_pwrb_int),
+ .key0_int_i(aon_key0_int),
+ .key1_int_i(aon_key1_int),
+ .key2_int_i(aon_key2_int),
+ .ac_present_int_i(aon_ac_present_int),
+ .ec_rst_l_int_i(aon_ec_rst_l_int),
+ // CSRs synced to AON clock
.ec_rst_ctl_i(reg2hw.ec_rst_ctl),
.key_intr_debounce_ctl_i(reg2hw.key_intr_debounce_ctl),
.com_sel_ctl_i(reg2hw.com_sel_ctl),
.com_det_ctl_i(reg2hw.com_det_ctl),
.com_out_ctl_i(reg2hw.com_out_ctl),
.combo_intr_status_o(hw2reg.combo_intr_status),
- .sysrst_ctrl_combo_intr_o(sysrst_ctrl_combo_intr),
- .bat_disable_hw_o(bat_disable_hw),
- .gsc_rst_o,
- .ec_rst_l_hw_o(ec_rst_l_hw)
+ // Output signals on AON clock
+ .sysrst_ctrl_combo_intr_o(aon_sysrst_ctrl_combo_intr),
+ .bat_disable_hw_o(aon_bat_disable_hw),
+ .gsc_rst_o(aon_gsc_rst_o),
+ .ec_rst_l_hw_o(aon_ec_rst_l_hw)
);
- // TODO: does ulp_wakeup_pulse_int have to be on the AON domain or not?
- // GSC wakeup signal to pwrmgr
- // see #6323
- assign gsc_wk_o = reg2hw.wk_status.q;
- assign hw2reg.wk_status.de = ulp_wakeup_pulse_int ||
- sysrst_ctrl_combo_intr || sysrst_ctrl_key_intr;
- assign hw2reg.wk_status.d = 1'b1;
+ ///////////////////////////////
+ // Pin visibility / override //
+ ///////////////////////////////
- //Instantiate the interrupt module
- sysrst_ctrl_intr u_intr (
+ // This module operates on both synchronized and unsynchronized signals.
+ // I.e., the passthrough signals are NOT synchronnous to the AON clock.
+ logic pwrb_out_int, key0_out_int, key1_out_int, key2_out_int, aon_bat_disable_out_int;
+ logic aon_z3_wakeup_out_int, aon_ec_rst_out_int;
+ sysrst_ctrl_pin u_sysrst_ctrl_pin (
.clk_i,
.rst_ni,
- .sysrst_ctrl_combo_intr_i(sysrst_ctrl_combo_intr),
- .sysrst_ctrl_key_intr_i(sysrst_ctrl_key_intr),
- .intr_state_i(reg2hw.intr_state),
- .intr_enable_i(reg2hw.intr_enable),
- .intr_test_i(reg2hw.intr_test),
- .intr_state_o(hw2reg.intr_state),
- .sysrst_ctrl_intr_o(intr_sysrst_ctrl_o)
+ // Raw input signals (not synced to AON clock)
+ .cio_pwrb_in_i,
+ .cio_key0_in_i,
+ .cio_key1_in_i,
+ .cio_key2_in_i,
+ .cio_ac_present_i,
+ .cio_ec_rst_in_l_i,
+ .cio_lid_open_i,
+ // Signals from autoblock (not synced to AON clock)
+ .pwrb_out_hw_i(pwrb_out_hw),
+ .key0_out_hw_i(key0_out_hw),
+ .key1_out_hw_i(key1_out_hw),
+ .key2_out_hw_i(key2_out_hw),
+ // Generated signals, running on AON clock
+ .aon_bat_disable_hw_i(aon_bat_disable_hw),
+ .aon_ec_rst_l_hw_i(aon_ec_rst_l_hw),
+ .aon_z3_wakeup_hw_i(aon_z3_wakeup_hw),
+ // CSRs synced to AON clock
+ .aon_pin_allowed_ctl_i(reg2hw.pin_allowed_ctl),
+ .aon_pin_out_ctl_i(reg2hw.pin_out_ctl),
+ .aon_pin_out_value_i(reg2hw.pin_out_value),
+ // CSRs synced to bus clock
+ .pin_in_value_o(hw2reg.pin_in_value),
+ // Output signals (not synced to AON clock)
+ .pwrb_out_int_o(pwrb_out_int),
+ .key0_out_int_o(key0_out_int),
+ .key1_out_int_o(key1_out_int),
+ .key2_out_int_o(key2_out_int),
+ // Output signals running on AON clock
+ .aon_bat_disable_out_int_o(aon_bat_disable_out_int),
+ .aon_z3_wakeup_out_int_o(aon_z3_wakeup_out_int),
+ .aon_ec_rst_out_int_l_o(aon_ec_rst_out_int)
+ );
+
+ // Optionally invert some of the output signals
+ assign cio_pwrb_out_o = reg2hw.key_invert_ctl.pwrb_out.q ^ pwrb_out_int;
+ assign cio_key0_out_o = reg2hw.key_invert_ctl.key0_out.q ^ key0_out_int;
+ assign cio_key1_out_o = reg2hw.key_invert_ctl.key1_out.q ^ key1_out_int;
+ assign cio_key2_out_o = reg2hw.key_invert_ctl.key2_out.q ^ key2_out_int;
+ assign cio_bat_disable_o = reg2hw.key_invert_ctl.bat_disable.q ^ aon_bat_disable_out_int;
+ assign cio_z3_wakeup_o = reg2hw.key_invert_ctl.z3_wakeup.q ^ aon_z3_wakeup_out_int;
+ // uninverted output
+ assign cio_ec_rst_out_l_o = aon_ec_rst_out_int;
+
+ // These outputs are always enabled
+ assign cio_pwrb_out_en_o = 1'b1;
+ assign cio_key0_out_en_o = 1'b1;
+ assign cio_key1_out_en_o = 1'b1;
+ assign cio_key2_out_en_o = 1'b1;
+ assign cio_bat_disable_en_o = 1'b1;
+ assign cio_z3_wakeup_en_o = 1'b1;
+ assign cio_ec_rst_out_l_en_o = 1'b1;
+
+ ///////////////////////////
+ // Interrupt agreggation //
+ ///////////////////////////
+
+ // GSC wakeup signal to pwrmgr, CSRs and signals on AON domain (see #6323)
+ assign aon_gsc_wk_o = reg2hw.wk_status.q;
+ assign hw2reg.wk_status.de = aon_ulp_wakeup_pulse_int ||
+ aon_sysrst_ctrl_combo_intr ||
+ aon_sysrst_ctrl_key_intr;
+ assign hw2reg.wk_status.d = 1'b1;
+
+ // sync the wakeup request (level) to bus clock to trigger an IRQ.
+ logic gsc_wk;
+ prim_flop_2sync #(
+ .Width(1)
+ ) u_prim_flop_2sync (
+ .clk_i,
+ .rst_ni,
+ .d_i(aon_gsc_wk_o),
+ .q_o(gsc_wk)
+ );
+
+ // Instantiate the interrupt module
+ prim_intr_hw #(
+ .Width(1)
+ ) u_prim_intr_hw (
+ .clk_i,
+ .rst_ni,
+ .event_intr_i (gsc_wk),
+ .reg2hw_intr_enable_q_i (reg2hw.intr_enable.q),
+ .reg2hw_intr_test_q_i (reg2hw.intr_test.q),
+ .reg2hw_intr_test_qe_i (reg2hw.intr_test.qe),
+ .reg2hw_intr_state_q_i (reg2hw.intr_state.q),
+ .hw2reg_intr_state_de_o (hw2reg.intr_state.de),
+ .hw2reg_intr_state_d_o (hw2reg.intr_state.d),
+ .intr_o (intr_sysrst_ctrl_o)
);
// All outputs should be known value after reset
`ASSERT_KNOWN(IntrSysRstCtrlOKnown, intr_sysrst_ctrl_o)
- `ASSERT_KNOWN(GSCWkOKnown, gsc_wk_o)
- `ASSERT_KNOWN(GSCRstOKnown, gsc_rst_o)
+ `ASSERT_KNOWN(GSCWkOKnown, aon_gsc_wk_o)
+ `ASSERT_KNOWN(GSCRstOKnown, aon_gsc_rst_o)
`ASSERT_KNOWN(TlODValidKnown, tl_o.d_valid)
`ASSERT_KNOWN(TlOAReadyKnown, tl_o.a_ready)
`ASSERT_KNOWN(AlertKnownO_A, alert_tx_o)
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
index e1afb27..a74db30 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
@@ -7,53 +7,43 @@
module sysrst_ctrl_autoblock import sysrst_ctrl_reg_pkg::*; (
input clk_aon_i,
input rst_aon_ni,
-
+ // (Optionally) inverted input signals on AON clock
+ input aon_pwrb_int_i,
+ // (Optionally) inverted input signals (not synced to AON clock)
input pwrb_int_i,
input key0_int_i,
input key1_int_i,
input key2_int_i,
-
- input sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t auto_block_debounce_ctl_i,
- input sysrst_ctrl_reg2hw_auto_block_out_ctl_reg_t auto_block_out_ctl_i,
-
+ // CSRs synced to AON clock
+ input sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t aon_auto_block_debounce_ctl_i,
+ input sysrst_ctrl_reg2hw_auto_block_out_ctl_reg_t aon_auto_block_out_ctl_i,
+ // Output signals to pin override logic (not synced to AON clock)
output pwrb_out_hw_o,
output key0_out_hw_o,
output key1_out_hw_o,
output key2_out_hw_o
);
- logic ab_cond_met;
- logic pwrb_int;
-
- //synchronize between GPIO and always-on(200KHz)
- prim_flop_2sync # (
- .Width(1)
- ) u_pwrb_in_i (
+ logic aon_ab_cond_met;
+ sysrst_ctrl_timerfsm # (
+ .TimerWidth(TimerWidth)
+ ) u_ab_fsm (
.clk_i(clk_aon_i),
.rst_ni(rst_aon_ni),
- .d_i(pwrb_int_i),
- .q_o(pwrb_int)
- );
-
- sysrst_ctrl_timerfsm # (
- .TIMERBIT(16)
- ) u_ab_fsm (
- .clk_aon_i,
- .rst_aon_ni,
- .trigger_i(pwrb_int),
- .cfg_timer_i(auto_block_debounce_ctl_i.debounce_timer.q),
+ .trigger_i(aon_pwrb_int_i),
+ .cfg_timer_i(aon_auto_block_debounce_ctl_i.debounce_timer.q),
.cfg_l2h_en_i(1'b0),
- .cfg_h2l_en_i(auto_block_debounce_ctl_i.auto_block_enable.q),
+ .cfg_h2l_en_i(aon_auto_block_debounce_ctl_i.auto_block_enable.q),
.timer_l2h_cond_met(),
- .timer_h2l_cond_met(ab_cond_met)
+ .timer_h2l_cond_met(aon_ab_cond_met)
);
- assign pwrb_out_hw_o = pwrb_int;
- assign key0_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key0_out_sel.q) ?
- auto_block_out_ctl_i.key0_out_value.q : key0_int_i;
- assign key1_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key1_out_sel.q) ?
- auto_block_out_ctl_i.key1_out_value.q : key1_int_i;
- assign key2_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key2_out_sel.q) ?
- auto_block_out_ctl_i.key2_out_value.q : key2_int_i;
+ assign pwrb_out_hw_o = pwrb_int_i;
+ assign key0_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key0_out_sel.q) ?
+ aon_auto_block_out_ctl_i.key0_out_value.q : key0_int_i;
+ assign key1_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key1_out_sel.q) ?
+ aon_auto_block_out_ctl_i.key1_out_value.q : key1_int_i;
+ assign key2_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key2_out_sel.q) ?
+ aon_auto_block_out_ctl_i.key2_out_value.q : key2_int_i;
endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
index 1c6000c..3875b52 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
@@ -5,27 +5,24 @@
// Description: sysrst_ctrl combo Module
//
module sysrst_ctrl_combo import sysrst_ctrl_reg_pkg::*; (
- input clk_aon_i,
- input rst_aon_ni,
input clk_i,
input rst_ni,
-
+ // (Optionally) inverted input signals on AON clock
input pwrb_int_i,
input key0_int_i,
input key1_int_i,
input key2_int_i,
input ac_present_int_i,
- input cio_ec_rst_in_l_i,
-
- input sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t ec_rst_ctl_i,
- input sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl_i,
+ input ec_rst_l_int_i,
+ // CSRs synced to AON clock
+ input sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t ec_rst_ctl_i,
+ input sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl_i,
input sysrst_ctrl_reg2hw_com_sel_ctl_mreg_t [NumCombo-1:0] com_sel_ctl_i,
input sysrst_ctrl_reg2hw_com_det_ctl_mreg_t [NumCombo-1:0] com_det_ctl_i,
input sysrst_ctrl_reg2hw_com_out_ctl_mreg_t [NumCombo-1:0] com_out_ctl_i,
-
- output sysrst_ctrl_hw2reg_combo_intr_status_reg_t combo_intr_status_o,
+ output sysrst_ctrl_hw2reg_combo_intr_status_reg_t combo_intr_status_o,
+ // Output signals on AON clock
output sysrst_ctrl_combo_intr_o,
-
output bat_disable_hw_o,
output gsc_rst_o,
output ec_rst_l_hw_o
@@ -33,144 +30,68 @@
// There are four possible combos
// Each key combo can select different triggers
- logic pwrb_int;
- logic key0_int, key1_int, key2_int;
- logic ac_present_int;
-
- logic [NumCombo-1:0] trigger_h;
- logic [NumCombo-1:0] trigger_l;
- logic [NumCombo-1:0] cfg_combo_en;
- logic [NumCombo-1:0] combo_det;
-
logic [NumCombo-1:0] combo_bat_disable;
- logic [NumCombo-1:0] combo_intr_pulse;
- logic [NumCombo-1:0] combo_intr_pulse_synced;
logic [NumCombo-1:0] combo_ec_rst_l;
logic [NumCombo-1:0] combo_gsc_rst;
-
- logic ec_rst_l_int;
-
-
- //synchronize between GPIO and always-on(200KHz)
- prim_flop_2sync # (
- .Width(1)
- ) u_ec_rst_l_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(cio_ec_rst_in_l_i),
- .q_o(ec_rst_l_int)
- );
-
- //synchronize between GPIO and always-on(200KHz)
- prim_flop_2sync # (
- .Width(1)
- ) u_pwrb_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(pwrb_int_i),
- .q_o(pwrb_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key0_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key0_int_i),
- .q_o(key0_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key1_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key1_int_i),
- .q_o(key1_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key2_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key2_int_i),
- .q_o(key2_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_ac_present_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(ac_present_int_i),
- .q_o(ac_present_int)
- );
+ logic [NumCombo-1:0] combo_intr_pulse;
for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_combo_trigger
- // generate the trigger for each combo
+ // Generate the trigger for each combo
+ logic trigger_h, trigger_l;
sysrst_ctrl_combotrg u_combo_trg (
.cfg_in0_sel(com_sel_ctl_i[k].pwrb_in_sel.q),
.cfg_in1_sel(com_sel_ctl_i[k].key0_in_sel.q),
.cfg_in2_sel(com_sel_ctl_i[k].key1_in_sel.q),
.cfg_in3_sel(com_sel_ctl_i[k].key2_in_sel.q),
.cfg_in4_sel(com_sel_ctl_i[k].ac_present_sel.q),
- .in0(pwrb_int),
- .in1(key0_int),
- .in2(key1_int),
- .in3(key2_int),
- .in4(ac_present_int),
- .trigger_h_o(trigger_h[k]),
- .trigger_l_o(trigger_l[k])
+ .in0(pwrb_int_i),
+ .in1(key0_int_i),
+ .in2(key1_int_i),
+ .in3(key2_int_i),
+ .in4(ac_present_int_i),
+ .trigger_h_o(trigger_h),
+ .trigger_l_o(trigger_l)
);
- assign cfg_combo_en[k] = com_sel_ctl_i[k].pwrb_in_sel.q |
- com_sel_ctl_i[k].key0_in_sel.q |
- com_sel_ctl_i[k].key1_in_sel.q |
- com_sel_ctl_i[k].key2_in_sel.q |
- com_sel_ctl_i[k].ac_present_sel.q;
+ logic cfg_combo_en;
+ assign cfg_combo_en = com_sel_ctl_i[k].pwrb_in_sel.q |
+ com_sel_ctl_i[k].key0_in_sel.q |
+ com_sel_ctl_i[k].key1_in_sel.q |
+ com_sel_ctl_i[k].key2_in_sel.q |
+ com_sel_ctl_i[k].ac_present_sel.q;
//Instantiate the combo detection state machine
+ logic combo_det;
sysrst_ctrl_combofsm # (
- .TIMER1BIT(16),
- .TIMER2BIT(32)
+ .Timer1Width(TimerWidth),
+ .Timer2Width(DetTimerWidth)
) u_combo_fsm (
- .clk_aon_i,
- .rst_aon_ni,
- .trigger_h_i(trigger_h[k]),
- .trigger_l_i(trigger_l[k]),
+ .clk_i,
+ .rst_ni,
+ .trigger_h_i(trigger_h),
+ .trigger_l_i(trigger_l),
.cfg_timer1_i(key_intr_debounce_ctl_i.q),
.cfg_timer2_i(com_det_ctl_i[k].q),
- .cfg_h2l_en_i(cfg_combo_en[k]),
- .timer_h2l_cond_met(combo_det[k])
+ .cfg_h2l_en_i(cfg_combo_en),
+ .timer_h2l_cond_met_o(combo_det)
);
//Instantiate the combo action module
sysrst_ctrl_comboact u_combo_act (
- .clk_aon_i,
- .rst_aon_ni,
- .cfg_intr_en(com_out_ctl_i[k].interrupt.q),
- .cfg_bat_disable_en(com_out_ctl_i[k].bat_disable.q),
- .cfg_ec_rst_en(com_out_ctl_i[k].ec_rst.q),
- .cfg_gsc_rst_en(com_out_ctl_i[k].gsc_rst.q),
- .combo_det(combo_det[k]),
- .ec_rst_l_i(ec_rst_l_int),
+ .clk_i,
+ .rst_ni,
+ .cfg_intr_en_i(com_out_ctl_i[k].interrupt.q),
+ .cfg_bat_disable_en_i(com_out_ctl_i[k].bat_disable.q),
+ .cfg_ec_rst_en_i(com_out_ctl_i[k].ec_rst.q),
+ .cfg_gsc_rst_en_i(com_out_ctl_i[k].gsc_rst.q),
+ .combo_det_i(combo_det),
+ .ec_rst_l_i(ec_rst_l_int_i),
.ec_rst_ctl_i(ec_rst_ctl_i),
- .combo_intr_pulse(combo_intr_pulse[k]),
+ .combo_intr_pulse_o(combo_intr_pulse[k]),
.bat_disable_o(combo_bat_disable[k]),
.gsc_rst_o(combo_gsc_rst[k]),
.ec_rst_l_o(combo_ec_rst_l[k])
);
-
- // Synchronize IRQ pulsefrom 200KHz always-onclock to 24MHz cfg clock
- prim_pulse_sync u_combo0_intr (
- .clk_src_i (clk_aon_i),
- .clk_dst_i (clk_i),
- .rst_src_ni (rst_aon_ni),
- .rst_dst_ni (rst_ni),
- .src_pulse_i (combo_intr_pulse[k]),
- .dst_pulse_o (combo_intr_pulse_synced[k])
- );
end
// bat_disable
@@ -185,9 +106,9 @@
assign {combo_intr_status_o.combo3_h2l.de,
combo_intr_status_o.combo2_h2l.de,
combo_intr_status_o.combo1_h2l.de,
- combo_intr_status_o.combo0_h2l.de} = combo_intr_pulse_synced;
+ combo_intr_status_o.combo0_h2l.de} = combo_intr_pulse;
- assign sysrst_ctrl_combo_intr_o = |combo_intr_pulse_synced;
+ assign sysrst_ctrl_combo_intr_o = |combo_intr_pulse;
assign combo_intr_status_o.combo0_h2l.d = 1'b1;
assign combo_intr_status_o.combo1_h2l.d = 1'b1;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
index 44158e1..5aa2914 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
@@ -5,19 +5,19 @@
// Description: sysrst_ctrl combo action Module
//
module sysrst_ctrl_comboact import sysrst_ctrl_reg_pkg::*; (
- input clk_aon_i,
- input rst_aon_ni,
+ input clk_i,
+ input rst_ni,
- input cfg_intr_en,
- input cfg_bat_disable_en,
- input cfg_ec_rst_en,
- input cfg_gsc_rst_en,
- input combo_det,
+ input cfg_intr_en_i,
+ input cfg_bat_disable_en_i,
+ input cfg_ec_rst_en_i,
+ input cfg_gsc_rst_en_i,
+ input combo_det_i,
input ec_rst_l_i,
input sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t ec_rst_ctl_i,
- output combo_intr_pulse,
+ output combo_intr_pulse_o,
output bat_disable_o,
output gsc_rst_o,
output ec_rst_l_o
@@ -31,28 +31,28 @@
logic combo_ec_rst_pulse;
logic ec_rst_l_q, ec_rst_l_d;
- logic [15:0] timer_cnt_d, timer_cnt_q;
+ logic [TimerWidth-1:0] timer_cnt_d, timer_cnt_q;
logic timer_cnt_clr, timer_cnt_en;
logic ec_rst_l_int, ec_rst_l_det;
//delay the level signal to generate a pulse
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_combo_det
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: u_combo_det
+ if (!rst_ni) begin
combo_det_q <= 1'b0;
end else begin
- combo_det_q <= combo_det;
+ combo_det_q <= combo_det_i;
end
end
//bat_disable logic
- assign combo_bat_disable_pulse = cfg_bat_disable_en && (combo_det_q == 1'b0) &&
- (combo_det == 1'b1);
+ assign combo_bat_disable_pulse = cfg_bat_disable_en_i && (combo_det_q == 1'b0) &&
+ (combo_det_i == 1'b1);
assign bat_disable_d = combo_bat_disable_pulse ? 1'b1 : bat_disable_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_combo_bat_disable
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: u_combo_bat_disable
+ if (!rst_ni) begin
bat_disable_q <= 1'b0;
end else begin
bat_disable_q <= bat_disable_d;
@@ -62,11 +62,11 @@
assign bat_disable_o = bat_disable_q;
//Interrupt logic
- assign combo_intr_pulse = cfg_intr_en && (combo_det_q == 1'b0) && (combo_det == 1'b1);
+ assign combo_intr_pulse_o = cfg_intr_en_i && (combo_det_q == 1'b0) && (combo_det_i == 1'b1);
//ec_rst_logic
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_ec_rst_l_int
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: u_ec_rst_l_int
+ if (!rst_ni) begin
ec_rst_l_int <= 1'b1;//active low signal
end else begin
ec_rst_l_int <= ec_rst_l_i;
@@ -77,14 +77,14 @@
assign ec_rst_l_det = (ec_rst_l_int == 1'b1) && (ec_rst_l_i == 1'b0);
//combo with EC RST CFG enable
- assign combo_ec_rst_pulse = cfg_ec_rst_en && (combo_det_q == 1'b0) && (combo_det == 1'b1);
+ assign combo_ec_rst_pulse = cfg_ec_rst_en_i && (combo_det_q == 1'b0) && (combo_det_i == 1'b1);
//GSC reset will also reset EC
assign ec_rst_l_d = (combo_ec_rst_pulse | combo_gsc_pulse | ec_rst_l_det) ? 1'b0 :
timer_cnt_clr ? 1'b1 : ec_rst_l_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_combo_ec_rst_l
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: u_combo_ec_rst_l
+ if (!rst_ni) begin
ec_rst_l_q <= 1'b0;//asserted when power-on-reset is asserted
end else begin
ec_rst_l_q <= ec_rst_l_d;
@@ -97,8 +97,8 @@
assign timer_cnt_d = (timer_cnt_en) ? timer_cnt_q + 1'b1 : timer_cnt_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: timer_cnt_regs
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: timer_cnt_regs
+ if (!rst_ni) begin
timer_cnt_q <= '0;
end
else if (timer_cnt_clr) begin
@@ -111,12 +111,12 @@
assign ec_rst_l_o = ec_rst_l_q;
//gsc_rst_logic
- assign combo_gsc_pulse = cfg_gsc_rst_en && (combo_det_q == 1'b0) && (combo_det == 1'b1);
+ assign combo_gsc_pulse = cfg_gsc_rst_en_i && (combo_det_q == 1'b0) && (combo_det_i == 1'b1);
assign gsc_rst_d = combo_gsc_pulse ? 1'b1 : gsc_rst_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_combo_gsc_rst
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: u_combo_gsc_rst
+ if (!rst_ni) begin
gsc_rst_q <= 1'b0;
end else begin
gsc_rst_q <= gsc_rst_d;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combofsm.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combofsm.sv
index fb7aa16..0aa9d25 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combofsm.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combofsm.sv
@@ -5,38 +5,38 @@
// Description sysrst_ctrl combo detection FSM module
module sysrst_ctrl_combofsm #(
- parameter int unsigned TIMER1BIT = 16,
- parameter int unsigned TIMER2BIT = 32
+ parameter int unsigned Timer1Width = 16,
+ parameter int unsigned Timer2Width = 32
) (
- input clk_aon_i,
- input rst_aon_ni,
- input trigger_h_i,//input vector is all "1"
- input trigger_l_i,//input vector is all "0"
- input [TIMER1BIT-1:0] cfg_timer1_i,//debounce
- input [TIMER2BIT-1:0] cfg_timer2_i,//detection
- input cfg_h2l_en_i,
- output logic timer_h2l_cond_met
+ input clk_i,
+ input rst_ni,
+ input trigger_h_i,//input vector is all "1"
+ input trigger_l_i,//input vector is all "0"
+ input [Timer1Width-1:0] cfg_timer1_i,//debounce
+ input [Timer2Width-1:0] cfg_timer2_i,//detection
+ input cfg_h2l_en_i,
+ output logic timer_h2l_cond_met_o
);
logic trigger_h_q, trigger_l_q;
logic trigger_h2l, trigger_l2h, trigger_l2l;
- logic [TIMER1BIT-1:0] timer1_cnt_d, timer1_cnt_q;
+ logic [Timer1Width-1:0] timer1_cnt_d, timer1_cnt_q;
logic timer1_cnt_clr, timer1_cnt_en;
- logic [TIMER2BIT-1:0] timer2_cnt_d, timer2_cnt_q;
+ logic [Timer2Width-1:0] timer2_cnt_d, timer2_cnt_q;
logic timer2_cnt_clr, timer2_cnt_en;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_h_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_trigger_h_reg
+ if (!rst_ni) begin
trigger_h_q <= 1'b0;
end else begin
trigger_h_q <= trigger_h_i;
end
end
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_l_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_trigger_l_reg
+ if (!rst_ni) begin
trigger_l_q <= 1'b0;
end else begin
trigger_l_q <= trigger_l_i;
@@ -65,8 +65,8 @@
timer_state_e timer_state_q, timer_state_d;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_state_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_state_reg
+ if (!rst_ni) begin
timer_state_q <= IDLE;
end else begin
timer_state_q <= timer_state_d;
@@ -76,8 +76,8 @@
assign timer1_cnt_d = (timer1_cnt_en) ? timer1_cnt_q + 1'b1 : timer1_cnt_q;
assign timer2_cnt_d = (timer2_cnt_en) ? timer2_cnt_q + 1'b1 : timer2_cnt_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer1_cnt_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer1_cnt_reg
+ if (!rst_ni) begin
timer1_cnt_q <= '0;
end
else if (timer1_cnt_clr) begin
@@ -87,8 +87,8 @@
end
end
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer2_cnt_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer2_cnt_reg
+ if (!rst_ni) begin
timer2_cnt_q <= '0;
end
else if (timer2_cnt_clr) begin
@@ -101,7 +101,7 @@
always_comb begin: p_timer_fsm
timer_state_d = timer_state_q;
//outputs
- timer_h2l_cond_met = 1'b0;
+ timer_h2l_cond_met_o = 1'b0;
timer1_cnt_clr = 1'b0;
timer1_cnt_en = 1'b0;
timer2_cnt_clr = 1'b0;
@@ -144,7 +144,7 @@
DONE: begin
if (trigger_l2l) begin
- timer_h2l_cond_met = 1'b1;
+ timer_h2l_cond_met_o = 1'b1;
end
else if (trigger_l2h) begin
timer_state_d = IDLE;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_intr.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_intr.sv
deleted file mode 100644
index 0307e39..0000000
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_intr.sv
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-// Description: sysrst_ctrl interrupt Module
-//
-module sysrst_ctrl_intr import sysrst_ctrl_reg_pkg::*; (
- input clk_i,
- input rst_ni,
- input sysrst_ctrl_combo_intr_i,
- input sysrst_ctrl_key_intr_i,
- input sysrst_ctrl_reg2hw_intr_state_reg_t intr_state_i,
- input sysrst_ctrl_reg2hw_intr_enable_reg_t intr_enable_i,
- input sysrst_ctrl_reg2hw_intr_test_reg_t intr_test_i,
- output sysrst_ctrl_hw2reg_intr_state_reg_t intr_state_o,
- output sysrst_ctrl_intr_o
-);
-
- logic sysrst_ctrl_event;
-
- assign sysrst_ctrl_event = sysrst_ctrl_combo_intr_i | sysrst_ctrl_key_intr_i;
-
- // instantiate interrupt hardware primitive
- prim_intr_hw #(.Width(1)) u_sysrst_ctrl_intr_o (
- .clk_i(clk_i),
- .rst_ni(rst_ni),
- .event_intr_i (sysrst_ctrl_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 (sysrst_ctrl_intr_o)
- );
-
-endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv
deleted file mode 100644
index 62af05f..0000000
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-// Description: sysrst_ctrl pin inversion Module
-//
-
-module sysrst_ctrl_inv import sysrst_ctrl_reg_pkg::*; (
- input cio_pwrb_in_i,
- input cio_key0_in_i,
- input cio_key1_in_i,
- input cio_key2_in_i,
- input cio_ac_present_i,
- input cio_lid_open_i,
-
- input pwrb_out_int_i,
- input key0_out_int_i,
- input key1_out_int_i,
- input key2_out_int_i,
- input bat_disable_int_i,
- input z3_wakeup_int_i,
-
- input sysrst_ctrl_reg2hw_key_invert_ctl_reg_t key_invert_ctl_i,
-
- output pwrb_int_o,
- output key0_int_o,
- output key1_int_o,
- output key2_int_o,
- output ac_present_int_o,
- output lid_open_int_o,
-
- output cio_bat_disable_o,
- output cio_pwrb_out_o,
- output cio_key0_out_o,
- output cio_key1_out_o,
- output cio_key2_out_o,
- output cio_z3_wakeup_o
-
-);
-
- assign cio_pwrb_out_o = key_invert_ctl_i.pwrb_out.q ^ pwrb_out_int_i;
- assign cio_key0_out_o = key_invert_ctl_i.key0_out.q ^ key0_out_int_i;
- assign cio_key1_out_o = key_invert_ctl_i.key1_out.q ^ key1_out_int_i;
- assign cio_key2_out_o = key_invert_ctl_i.key2_out.q ^ key2_out_int_i;
- assign cio_bat_disable_o = key_invert_ctl_i.bat_disable.q ^ bat_disable_int_i;
- assign cio_z3_wakeup_o = key_invert_ctl_i.z3_wakeup.q ^ z3_wakeup_int_i;
-
- assign pwrb_int_o = key_invert_ctl_i.pwrb_in.q ^ cio_pwrb_in_i;
- assign key0_int_o = key_invert_ctl_i.key0_in.q ^ cio_key0_in_i;
- assign key1_int_o = key_invert_ctl_i.key1_in.q ^ cio_key1_in_i;
- assign key2_int_o = key_invert_ctl_i.key2_in.q ^ cio_key2_in_i;
- assign ac_present_int_o = key_invert_ctl_i.ac_present.q ^ cio_ac_present_i;
- assign lid_open_int_o = key_invert_ctl_i.lid_open.q ^ cio_lid_open_i;
-
-endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
index a21c54e..5955b0d 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
@@ -7,14 +7,14 @@
module sysrst_ctrl_keyfsm #(
parameter int unsigned TimerWidth = 16
) (
- input clk_aon_i,
- input rst_aon_ni,
+ input clk_i,
+ input rst_ni,
input trigger_i,
input [TimerWidth-1:0] cfg_timer_i,
input cfg_l2h_en_i,
input cfg_h2l_en_i,
- output logic timer_l2h_cond_met,
- output logic timer_h2l_cond_met
+ output logic timer_l2h_cond_met_o,
+ output logic timer_h2l_cond_met_o
);
@@ -25,8 +25,8 @@
logic [TimerWidth-1:0] timer_cnt_d, timer_cnt_q;
logic timer_cnt_clr, timer_cnt_en;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_trigger_reg
+ if (!rst_ni) begin
trigger_q <= 1'b0;
end else begin
trigger_q <= trigger_i;
@@ -58,8 +58,8 @@
timer_state_e timer_state_q, timer_state_d;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_state_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_state_reg
+ if (!rst_ni) begin
timer_state_q <= IDLE;
end else begin
timer_state_q <= timer_state_d;
@@ -68,8 +68,8 @@
assign timer_cnt_d = (timer_cnt_en) ? timer_cnt_q + 1'b1 : timer_cnt_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_cnt_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_cnt_reg
+ if (!rst_ni) begin
timer_cnt_q <= '0;
end
else if (timer_cnt_clr) begin
@@ -82,8 +82,8 @@
always_comb begin: timer_fsm
timer_state_d = timer_state_q;
//outputs
- timer_l2h_cond_met = 1'b0;
- timer_h2l_cond_met = 1'b0;
+ timer_l2h_cond_met_o = 1'b0;
+ timer_h2l_cond_met_o = 1'b0;
timer_cnt_clr = 1'b0;
timer_cnt_en = 1'b0;
@@ -113,7 +113,7 @@
DONEL2H: begin
if (trigger_h2h) begin
- timer_l2h_cond_met = 1'b1;
+ timer_l2h_cond_met_o = 1'b1;
end
else if (!cfg_h2l_en_i && trigger_h2l) begin
timer_state_d = IDLE;
@@ -139,7 +139,7 @@
DONEH2L: begin
if (trigger_l2l) begin
- timer_h2l_cond_met = 1'b1;
+ timer_h2l_cond_met_o = 1'b1;
end
else if (!cfg_l2h_en_i && trigger_l2h) begin
timer_state_d = IDLE;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
index e2aae36..9c74d4d 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
@@ -5,95 +5,31 @@
// Description: sysrst_ctrl key-triggered interrupt Module
//
module sysrst_ctrl_keyintr import sysrst_ctrl_reg_pkg::*; (
- input clk_aon_i,
- input rst_aon_ni,
input clk_i,
input rst_ni,
-
+ // (Optionally) inverted input signals on AON clock
input pwrb_int_i,
input key0_int_i,
input key1_int_i,
input key2_int_i,
input ac_present_int_i,
- input cio_ec_rst_in_l_i,
-
- input sysrst_ctrl_reg2hw_key_intr_ctl_reg_t key_intr_ctl_i,
+ input ec_rst_l_int_i,
+ // CSRs synced to AON clock
+ input sysrst_ctrl_reg2hw_key_intr_ctl_reg_t key_intr_ctl_i,
input sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl_i,
-
- output sysrst_ctrl_hw2reg_key_intr_status_reg_t key_intr_status_o,
+ output sysrst_ctrl_hw2reg_key_intr_status_reg_t key_intr_status_o,
+ // IRQ running on bus clock
output sysrst_ctrl_key_intr_o
-
);
- logic pwrb_int;
- logic key0_int, key1_int, key2_int;
- logic ac_present_int;
- logic ec_rst_l_int;
-
- //synchronize between GPIO and always-on(200KHz)
- prim_flop_2sync # (
- .Width(1)
- ) u_pwrb_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(pwrb_int_i),
- .q_o(pwrb_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key0_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key0_int_i),
- .q_o(key0_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key1_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key1_int_i),
- .q_o(key1_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_key2_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(key2_int_i),
- .q_o(key2_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_ac_present_int_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(ac_present_int_i),
- .q_o(ac_present_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_ec_rst_l_int (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(cio_ec_rst_in_l_i),
- .q_o(ec_rst_l_int)
- );
-
- localparam int TimerWidth = 16;
localparam int NumKeyIntr = 6;
logic [NumKeyIntr-1:0] triggers, l2h_en, h2l_en;
- assign triggers = {pwrb_int,
- key0_int,
- key1_int,
- key2_int,
- ac_present_int,
- ec_rst_l_int};
+ assign triggers = {pwrb_int_i,
+ key0_int_i,
+ key1_int_i,
+ key2_int_i,
+ ac_present_int_i,
+ ec_rst_l_int_i};
assign l2h_en = {key_intr_ctl_i.pwrb_in_l2h.q,
key_intr_ctl_i.key0_in_l2h.q,
key_intr_ctl_i.key1_in_l2h.q,
@@ -107,27 +43,27 @@
key_intr_ctl_i.ac_present_h2l.q,
key_intr_ctl_i.ec_rst_l_h2l.q};
- logic [NumKeyIntr-1:0] l2h_met_pulse_synced, h2l_met_pulse_synced;
+ logic [NumKeyIntr-1:0] l2h_met_pulse, h2l_met_pulse;
for (genvar k = 0; k < NumKeyIntr; k ++) begin : gen_keyfsm
// Instantiate the key state machine
logic l2h_met_d, h2l_met_d;
sysrst_ctrl_keyfsm # (
.TimerWidth(TimerWidth)
) u_pwrbintr_fsm (
- .clk_aon_i,
- .rst_aon_ni,
+ .clk_i,
+ .rst_ni,
.trigger_i(triggers[k]),
.cfg_timer_i(key_intr_debounce_ctl_i.q),
.cfg_l2h_en_i(l2h_en[k]),
.cfg_h2l_en_i(h2l_en[k]),
- .timer_l2h_cond_met(l2h_met_d),
- .timer_h2l_cond_met(h2l_met_d)
+ .timer_l2h_cond_met_o(l2h_met_d),
+ .timer_h2l_cond_met_o(h2l_met_d)
);
// generate a pulses for interrupt status CSR
logic l2h_met_q, h2l_met_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin : p_pulse_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin : p_pulse_reg
+ if (!rst_ni) begin
l2h_met_q <= '0;
h2l_met_q <= '0;
end else begin
@@ -136,26 +72,8 @@
end
end
- logic l2h_met_pulse, h2l_met_pulse;
- assign l2h_met_pulse = l2h_met_d & ~l2h_met_q;
- assign h2l_met_pulse = ~h2l_met_d & h2l_met_q;
-
- prim_pulse_sync u_prim_pulse_sync_l2h (
- .clk_src_i (clk_aon_i),
- .rst_src_ni (rst_aon_ni),
- .src_pulse_i(l2h_met_pulse),
- .clk_dst_i (clk_i),
- .rst_dst_ni (rst_ni),
- .dst_pulse_o(l2h_met_pulse_synced[k])
- );
- prim_pulse_sync u_prim_pulse_sync_h2l (
- .clk_src_i (clk_aon_i),
- .rst_src_ni (rst_aon_ni),
- .src_pulse_i(h2l_met_pulse),
- .clk_dst_i (clk_i),
- .rst_dst_ni (rst_ni),
- .dst_pulse_o(h2l_met_pulse_synced[k])
- );
+ assign l2h_met_pulse[k] = l2h_met_d & ~l2h_met_q;
+ assign h2l_met_pulse[k] = ~h2l_met_d & h2l_met_q;
end
// Assign to CSRs
@@ -164,18 +82,18 @@
key_intr_status_o.key1_in_l2h.de,
key_intr_status_o.key2_in_l2h.de,
key_intr_status_o.ac_present_l2h.de,
- key_intr_status_o.ec_rst_l_l2h.de} = l2h_met_pulse_synced;
+ key_intr_status_o.ec_rst_l_l2h.de} = l2h_met_pulse;
assign {key_intr_status_o.pwrb_h2l.de,
key_intr_status_o.key0_in_h2l.de,
key_intr_status_o.key1_in_h2l.de,
key_intr_status_o.key2_in_h2l.de,
key_intr_status_o.ac_present_h2l.de,
- key_intr_status_o.ec_rst_l_h2l.de} = h2l_met_pulse_synced;
+ key_intr_status_o.ec_rst_l_h2l.de} = h2l_met_pulse;
// Send out aggregated interrupt pulse
- assign sysrst_ctrl_key_intr_o = |l2h_met_pulse_synced |
- |h2l_met_pulse_synced;
+ assign sysrst_ctrl_key_intr_o = |l2h_met_pulse |
+ |h2l_met_pulse;
// To write into interrupt status register
assign key_intr_status_o.pwrb_h2l.d = 1'b1;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
index 2a893a7..9dcd2f3 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
@@ -8,7 +8,7 @@
module sysrst_ctrl_pin import sysrst_ctrl_reg_pkg::*; (
input clk_i,
input rst_ni,
-
+ // Raw input signals (not synced to AON clock)
input cio_pwrb_in_i,
input cio_key0_in_i,
input cio_key1_in_i,
@@ -16,28 +16,30 @@
input cio_ac_present_i,
input cio_ec_rst_in_l_i,
input cio_lid_open_i,
-
+ // Signals from autoblock (not synced to AON clock)
input pwrb_out_hw_i,
input key0_out_hw_i,
input key1_out_hw_i,
input key2_out_hw_i,
- input bat_disable_hw_i,
- input ec_rst_l_hw_i,
- input z3_wakeup_hw_i,
-
- input sysrst_ctrl_reg2hw_pin_allowed_ctl_reg_t pin_allowed_ctl_i,
- input sysrst_ctrl_reg2hw_pin_out_ctl_reg_t pin_out_ctl_i,
- input sysrst_ctrl_reg2hw_pin_out_value_reg_t pin_out_value_i,
-
+ // Generated signals, running on AON clock
+ input aon_bat_disable_hw_i,
+ input aon_ec_rst_l_hw_i,
+ input aon_z3_wakeup_hw_i,
+ // CSRs synced to AON clock
+ input sysrst_ctrl_reg2hw_pin_allowed_ctl_reg_t aon_pin_allowed_ctl_i,
+ input sysrst_ctrl_reg2hw_pin_out_ctl_reg_t aon_pin_out_ctl_i,
+ input sysrst_ctrl_reg2hw_pin_out_value_reg_t aon_pin_out_value_i,
+ // CSRs synced to bus clock
output sysrst_ctrl_hw2reg_pin_in_value_reg_t pin_in_value_o,
-
+ // Output signals (not synced to AON clock)
output pwrb_out_int_o,
output key0_out_int_o,
output key1_out_int_o,
output key2_out_int_o,
- output bat_disable_int_o,
- output z3_wakeup_int_o,
- output cio_ec_rst_out_l_o
+ // Output signals running on AON clock
+ output aon_bat_disable_out_int_o,
+ output aon_z3_wakeup_out_int_o,
+ output aon_ec_rst_out_int_l_o
);
@@ -74,54 +76,54 @@
// Pin override logic.
localparam int NumSignals = 7;
- logic [NumSignals-1:0] inputs, outputs, enabled, values, allowed0, allowed1;
+ logic [NumSignals-1:0] inputs, outputs, aon_enabled, aon_values, aon_allowed0, aon_allowed1;
assign inputs = {pwrb_out_hw_i,
key0_out_hw_i,
key1_out_hw_i,
key2_out_hw_i,
- z3_wakeup_hw_i,
- bat_disable_hw_i,
- ec_rst_l_hw_i};
- assign enabled = {pin_out_ctl_i.pwrb_out.q,
- pin_out_ctl_i.key0_out.q,
- pin_out_ctl_i.key1_out.q,
- pin_out_ctl_i.key2_out.q,
- pin_out_ctl_i.z3_wakeup.q,
- pin_out_ctl_i.bat_disable.q,
- pin_out_ctl_i.ec_rst_l.q};
- assign values = {pin_out_value_i.pwrb_out.q,
- pin_out_value_i.key0_out.q,
- pin_out_value_i.key1_out.q,
- pin_out_value_i.key2_out.q,
- pin_out_value_i.z3_wakeup.q,
- pin_out_value_i.bat_disable.q,
- pin_out_value_i.ec_rst_l.q};
- assign allowed0 = {pin_allowed_ctl_i.pwrb_out_0.q,
- pin_allowed_ctl_i.key0_out_0.q,
- pin_allowed_ctl_i.key1_out_0.q,
- pin_allowed_ctl_i.key2_out_0.q,
- pin_allowed_ctl_i.z3_wakeup_0.q,
- pin_allowed_ctl_i.bat_disable_0.q,
- pin_allowed_ctl_i.ec_rst_l_0.q};
- assign allowed1 = {pin_allowed_ctl_i.pwrb_out_1.q,
- pin_allowed_ctl_i.key0_out_1.q,
- pin_allowed_ctl_i.key1_out_1.q,
- pin_allowed_ctl_i.key2_out_1.q,
- pin_allowed_ctl_i.z3_wakeup_1.q,
- pin_allowed_ctl_i.bat_disable_1.q,
- pin_allowed_ctl_i.ec_rst_l_1.q};
+ aon_z3_wakeup_hw_i,
+ aon_bat_disable_hw_i,
+ aon_ec_rst_l_hw_i};
+ assign aon_enabled = {aon_pin_out_ctl_i.pwrb_out.q,
+ aon_pin_out_ctl_i.key0_out.q,
+ aon_pin_out_ctl_i.key1_out.q,
+ aon_pin_out_ctl_i.key2_out.q,
+ aon_pin_out_ctl_i.z3_wakeup.q,
+ aon_pin_out_ctl_i.bat_disable.q,
+ aon_pin_out_ctl_i.ec_rst_l.q};
+ assign aon_values = {aon_pin_out_value_i.pwrb_out.q,
+ aon_pin_out_value_i.key0_out.q,
+ aon_pin_out_value_i.key1_out.q,
+ aon_pin_out_value_i.key2_out.q,
+ aon_pin_out_value_i.z3_wakeup.q,
+ aon_pin_out_value_i.bat_disable.q,
+ aon_pin_out_value_i.ec_rst_l.q};
+ assign aon_allowed0 = {aon_pin_allowed_ctl_i.pwrb_out_0.q,
+ aon_pin_allowed_ctl_i.key0_out_0.q,
+ aon_pin_allowed_ctl_i.key1_out_0.q,
+ aon_pin_allowed_ctl_i.key2_out_0.q,
+ aon_pin_allowed_ctl_i.z3_wakeup_0.q,
+ aon_pin_allowed_ctl_i.bat_disable_0.q,
+ aon_pin_allowed_ctl_i.ec_rst_l_0.q};
+ assign aon_allowed1 = {aon_pin_allowed_ctl_i.pwrb_out_1.q,
+ aon_pin_allowed_ctl_i.key0_out_1.q,
+ aon_pin_allowed_ctl_i.key1_out_1.q,
+ aon_pin_allowed_ctl_i.key2_out_1.q,
+ aon_pin_allowed_ctl_i.z3_wakeup_1.q,
+ aon_pin_allowed_ctl_i.bat_disable_1.q,
+ aon_pin_allowed_ctl_i.ec_rst_l_1.q};
for (genvar k = 0; k < NumSignals; k++) begin : gen_override_logic
- assign outputs[k] = (enabled[k] && allowed0[k] && !values[k]) ? 1'b0 :
- (enabled[k] && allowed1[k] && values[k]) ? 1'b1 : inputs[k];
+ assign outputs[k] = (aon_enabled[k] && aon_allowed0[k] && !aon_values[k]) ? 1'b0 :
+ (aon_enabled[k] && aon_allowed1[k] && aon_values[k]) ? 1'b1 : inputs[k];
end
assign {pwrb_out_int_o,
key0_out_int_o,
key1_out_int_o,
key2_out_int_o,
- z3_wakeup_int_o,
- bat_disable_int_o,
- cio_ec_rst_out_l_o} = outputs;
+ aon_z3_wakeup_out_int_o,
+ aon_bat_disable_out_int_o,
+ aon_ec_rst_out_int_l_o} = outputs;
endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
index 7d57efa..b972689 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
@@ -9,6 +9,7 @@
// Param list
parameter int NumCombo = 4;
parameter int TimerWidth = 16;
+ parameter int DetTimerWidth = 32;
parameter int NumAlerts = 1;
// Address widths within the block
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
index e6d402f..d88c4d2 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
@@ -160,6 +160,7 @@
logic wk_status_we;
logic wk_status_qs;
logic wk_status_wd;
+ logic wk_status_busy;
logic key_invert_ctl_we;
logic key_invert_ctl_key0_in_qs;
logic key_invert_ctl_key0_in_wd;
@@ -493,37 +494,53 @@
logic combo_intr_status_we;
logic combo_intr_status_combo0_h2l_qs;
logic combo_intr_status_combo0_h2l_wd;
+ logic combo_intr_status_combo0_h2l_busy;
logic combo_intr_status_combo1_h2l_qs;
logic combo_intr_status_combo1_h2l_wd;
+ logic combo_intr_status_combo1_h2l_busy;
logic combo_intr_status_combo2_h2l_qs;
logic combo_intr_status_combo2_h2l_wd;
+ logic combo_intr_status_combo2_h2l_busy;
logic combo_intr_status_combo3_h2l_qs;
logic combo_intr_status_combo3_h2l_wd;
+ logic combo_intr_status_combo3_h2l_busy;
logic key_intr_status_we;
logic key_intr_status_pwrb_h2l_qs;
logic key_intr_status_pwrb_h2l_wd;
+ logic key_intr_status_pwrb_h2l_busy;
logic key_intr_status_key0_in_h2l_qs;
logic key_intr_status_key0_in_h2l_wd;
+ logic key_intr_status_key0_in_h2l_busy;
logic key_intr_status_key1_in_h2l_qs;
logic key_intr_status_key1_in_h2l_wd;
+ logic key_intr_status_key1_in_h2l_busy;
logic key_intr_status_key2_in_h2l_qs;
logic key_intr_status_key2_in_h2l_wd;
+ logic key_intr_status_key2_in_h2l_busy;
logic key_intr_status_ac_present_h2l_qs;
logic key_intr_status_ac_present_h2l_wd;
+ logic key_intr_status_ac_present_h2l_busy;
logic key_intr_status_ec_rst_l_h2l_qs;
logic key_intr_status_ec_rst_l_h2l_wd;
+ logic key_intr_status_ec_rst_l_h2l_busy;
logic key_intr_status_pwrb_l2h_qs;
logic key_intr_status_pwrb_l2h_wd;
+ logic key_intr_status_pwrb_l2h_busy;
logic key_intr_status_key0_in_l2h_qs;
logic key_intr_status_key0_in_l2h_wd;
+ logic key_intr_status_key0_in_l2h_busy;
logic key_intr_status_key1_in_l2h_qs;
logic key_intr_status_key1_in_l2h_wd;
+ logic key_intr_status_key1_in_l2h_busy;
logic key_intr_status_key2_in_l2h_qs;
logic key_intr_status_key2_in_l2h_wd;
+ logic key_intr_status_key2_in_l2h_busy;
logic key_intr_status_ac_present_l2h_qs;
logic key_intr_status_ac_present_l2h_wd;
+ logic key_intr_status_ac_present_l2h_busy;
logic key_intr_status_ec_rst_l_l2h_qs;
logic key_intr_status_ec_rst_l_l2h_wd;
+ logic key_intr_status_ec_rst_l_l2h_busy;
// Register instances
// R[intr_state]: V(False)
@@ -779,28 +796,24 @@
// R[wk_status]: V(False)
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_wk_status (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (wk_status_we),
- .wd (wk_status_wd),
-
- // from internal hardware
- .de (hw2reg.wk_status.de),
- .d (hw2reg.wk_status.d),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.wk_status.q),
-
- // to register interface (read)
- .qs (wk_status_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (wk_status_we),
+ .src_wd_i (wk_status_wd),
+ .dst_de_i (hw2reg.wk_status.de),
+ .dst_d_i (hw2reg.wk_status.d),
+ .src_busy_o (wk_status_busy),
+ .src_qs_o (wk_status_qs),
+ .dst_qe_o (),
+ .q (reg2hw.wk_status.q)
);
@@ -3262,420 +3275,356 @@
// R[combo_intr_status]: V(False)
// F[combo0_h2l]: 0:0
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_combo_intr_status_combo0_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (combo_intr_status_we),
- .wd (combo_intr_status_combo0_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.combo_intr_status.combo0_h2l.de),
- .d (hw2reg.combo_intr_status.combo0_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (combo_intr_status_combo0_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (combo_intr_status_we),
+ .src_wd_i (combo_intr_status_combo0_h2l_wd),
+ .dst_de_i (hw2reg.combo_intr_status.combo0_h2l.de),
+ .dst_d_i (hw2reg.combo_intr_status.combo0_h2l.d),
+ .src_busy_o (combo_intr_status_combo0_h2l_busy),
+ .src_qs_o (combo_intr_status_combo0_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[combo1_h2l]: 1:1
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_combo_intr_status_combo1_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (combo_intr_status_we),
- .wd (combo_intr_status_combo1_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.combo_intr_status.combo1_h2l.de),
- .d (hw2reg.combo_intr_status.combo1_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (combo_intr_status_combo1_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (combo_intr_status_we),
+ .src_wd_i (combo_intr_status_combo1_h2l_wd),
+ .dst_de_i (hw2reg.combo_intr_status.combo1_h2l.de),
+ .dst_d_i (hw2reg.combo_intr_status.combo1_h2l.d),
+ .src_busy_o (combo_intr_status_combo1_h2l_busy),
+ .src_qs_o (combo_intr_status_combo1_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[combo2_h2l]: 2:2
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_combo_intr_status_combo2_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (combo_intr_status_we),
- .wd (combo_intr_status_combo2_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.combo_intr_status.combo2_h2l.de),
- .d (hw2reg.combo_intr_status.combo2_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (combo_intr_status_combo2_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (combo_intr_status_we),
+ .src_wd_i (combo_intr_status_combo2_h2l_wd),
+ .dst_de_i (hw2reg.combo_intr_status.combo2_h2l.de),
+ .dst_d_i (hw2reg.combo_intr_status.combo2_h2l.d),
+ .src_busy_o (combo_intr_status_combo2_h2l_busy),
+ .src_qs_o (combo_intr_status_combo2_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[combo3_h2l]: 3:3
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_combo_intr_status_combo3_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (combo_intr_status_we),
- .wd (combo_intr_status_combo3_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.combo_intr_status.combo3_h2l.de),
- .d (hw2reg.combo_intr_status.combo3_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (combo_intr_status_combo3_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (combo_intr_status_we),
+ .src_wd_i (combo_intr_status_combo3_h2l_wd),
+ .dst_de_i (hw2reg.combo_intr_status.combo3_h2l.de),
+ .dst_d_i (hw2reg.combo_intr_status.combo3_h2l.d),
+ .src_busy_o (combo_intr_status_combo3_h2l_busy),
+ .src_qs_o (combo_intr_status_combo3_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// R[key_intr_status]: V(False)
// F[pwrb_h2l]: 0:0
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_pwrb_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_pwrb_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.pwrb_h2l.de),
- .d (hw2reg.key_intr_status.pwrb_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_pwrb_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_pwrb_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.pwrb_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.pwrb_h2l.d),
+ .src_busy_o (key_intr_status_pwrb_h2l_busy),
+ .src_qs_o (key_intr_status_pwrb_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key0_in_h2l]: 1:1
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key0_in_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key0_in_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key0_in_h2l.de),
- .d (hw2reg.key_intr_status.key0_in_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key0_in_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key0_in_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.key0_in_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.key0_in_h2l.d),
+ .src_busy_o (key_intr_status_key0_in_h2l_busy),
+ .src_qs_o (key_intr_status_key0_in_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key1_in_h2l]: 2:2
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key1_in_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key1_in_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key1_in_h2l.de),
- .d (hw2reg.key_intr_status.key1_in_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key1_in_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key1_in_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.key1_in_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.key1_in_h2l.d),
+ .src_busy_o (key_intr_status_key1_in_h2l_busy),
+ .src_qs_o (key_intr_status_key1_in_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key2_in_h2l]: 3:3
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key2_in_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key2_in_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key2_in_h2l.de),
- .d (hw2reg.key_intr_status.key2_in_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key2_in_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key2_in_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.key2_in_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.key2_in_h2l.d),
+ .src_busy_o (key_intr_status_key2_in_h2l_busy),
+ .src_qs_o (key_intr_status_key2_in_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[ac_present_h2l]: 4:4
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_ac_present_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_ac_present_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.ac_present_h2l.de),
- .d (hw2reg.key_intr_status.ac_present_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_ac_present_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_ac_present_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.ac_present_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.ac_present_h2l.d),
+ .src_busy_o (key_intr_status_ac_present_h2l_busy),
+ .src_qs_o (key_intr_status_ac_present_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[ec_rst_l_h2l]: 5:5
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_ec_rst_l_h2l (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_ec_rst_l_h2l_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.ec_rst_l_h2l.de),
- .d (hw2reg.key_intr_status.ec_rst_l_h2l.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_ec_rst_l_h2l_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_ec_rst_l_h2l_wd),
+ .dst_de_i (hw2reg.key_intr_status.ec_rst_l_h2l.de),
+ .dst_d_i (hw2reg.key_intr_status.ec_rst_l_h2l.d),
+ .src_busy_o (key_intr_status_ec_rst_l_h2l_busy),
+ .src_qs_o (key_intr_status_ec_rst_l_h2l_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[pwrb_l2h]: 6:6
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_pwrb_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_pwrb_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.pwrb_l2h.de),
- .d (hw2reg.key_intr_status.pwrb_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_pwrb_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_pwrb_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.pwrb_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.pwrb_l2h.d),
+ .src_busy_o (key_intr_status_pwrb_l2h_busy),
+ .src_qs_o (key_intr_status_pwrb_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key0_in_l2h]: 7:7
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key0_in_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key0_in_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key0_in_l2h.de),
- .d (hw2reg.key_intr_status.key0_in_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key0_in_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key0_in_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.key0_in_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.key0_in_l2h.d),
+ .src_busy_o (key_intr_status_key0_in_l2h_busy),
+ .src_qs_o (key_intr_status_key0_in_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key1_in_l2h]: 8:8
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key1_in_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key1_in_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key1_in_l2h.de),
- .d (hw2reg.key_intr_status.key1_in_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key1_in_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key1_in_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.key1_in_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.key1_in_l2h.d),
+ .src_busy_o (key_intr_status_key1_in_l2h_busy),
+ .src_qs_o (key_intr_status_key1_in_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[key2_in_l2h]: 9:9
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_key2_in_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_key2_in_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.key2_in_l2h.de),
- .d (hw2reg.key_intr_status.key2_in_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_key2_in_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_key2_in_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.key2_in_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.key2_in_l2h.d),
+ .src_busy_o (key_intr_status_key2_in_l2h_busy),
+ .src_qs_o (key_intr_status_key2_in_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[ac_present_l2h]: 10:10
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_ac_present_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_ac_present_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.ac_present_l2h.de),
- .d (hw2reg.key_intr_status.ac_present_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_ac_present_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_ac_present_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.ac_present_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.ac_present_l2h.d),
+ .src_busy_o (key_intr_status_ac_present_l2h_busy),
+ .src_qs_o (key_intr_status_ac_present_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
// F[ec_rst_l_l2h]: 11:11
- prim_subreg #(
+ prim_subreg_async #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
.RESVAL (1'h0)
) u_key_intr_status_ec_rst_l_l2h (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (key_intr_status_we),
- .wd (key_intr_status_ec_rst_l_l2h_wd),
-
- // from internal hardware
- .de (hw2reg.key_intr_status.ec_rst_l_l2h.de),
- .d (hw2reg.key_intr_status.ec_rst_l_l2h.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (key_intr_status_ec_rst_l_l2h_qs)
+ .clk_src_i (clk_i),
+ .rst_src_ni (rst_ni),
+ .clk_dst_i (clk_aon_i),
+ .rst_dst_ni (rst_aon_ni),
+ .src_update_i (sync_aon_update),
+ .src_we_i (key_intr_status_we),
+ .src_wd_i (key_intr_status_ec_rst_l_l2h_wd),
+ .dst_de_i (hw2reg.key_intr_status.ec_rst_l_l2h.de),
+ .dst_d_i (hw2reg.key_intr_status.ec_rst_l_l2h.d),
+ .src_busy_o (key_intr_status_ec_rst_l_l2h_busy),
+ .src_qs_o (key_intr_status_ec_rst_l_l2h_qs),
+ .dst_qe_o (),
+ .q ()
);
@@ -4328,6 +4277,9 @@
addr_hit[10]: begin
reg_busy = ulp_status_busy;
end
+ addr_hit[11]: begin
+ reg_busy = wk_status_busy;
+ end
addr_hit[12]: begin
reg_busy =
key_invert_ctl_key0_in_busy |
@@ -4484,6 +4436,28 @@
com_out_ctl_3_ec_rst_3_busy |
com_out_ctl_3_gsc_rst_3_busy;
end
+ addr_hit[33]: begin
+ reg_busy =
+ combo_intr_status_combo0_h2l_busy |
+ combo_intr_status_combo1_h2l_busy |
+ combo_intr_status_combo2_h2l_busy |
+ combo_intr_status_combo3_h2l_busy;
+ end
+ addr_hit[34]: begin
+ reg_busy =
+ key_intr_status_pwrb_h2l_busy |
+ key_intr_status_key0_in_h2l_busy |
+ key_intr_status_key1_in_h2l_busy |
+ key_intr_status_key2_in_h2l_busy |
+ key_intr_status_ac_present_h2l_busy |
+ key_intr_status_ec_rst_l_h2l_busy |
+ key_intr_status_pwrb_l2h_busy |
+ key_intr_status_key0_in_l2h_busy |
+ key_intr_status_key1_in_l2h_busy |
+ key_intr_status_key2_in_l2h_busy |
+ key_intr_status_ac_present_l2h_busy |
+ key_intr_status_ec_rst_l_l2h_busy;
+ end
default: begin
reg_busy = '0;
end
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_timerfsm.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_timerfsm.sv
index 5248587..d18c0cb 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_timerfsm.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_timerfsm.sv
@@ -5,12 +5,12 @@
// Description sysrst_ctrl timer-based FSM module
module sysrst_ctrl_timerfsm #(
- parameter int unsigned TIMERBIT = 16
+ parameter int unsigned TimerWidth = 16
) (
- input clk_aon_i,
- input rst_aon_ni,
+ input clk_i,
+ input rst_ni,
input trigger_i,
- input [TIMERBIT-1:0] cfg_timer_i,
+ input [TimerWidth-1:0] cfg_timer_i,
input cfg_l2h_en_i,
input cfg_h2l_en_i,
output logic timer_l2h_cond_met,
@@ -22,11 +22,11 @@
logic trigger_h2l, trigger_l2h, trigger_h2h, trigger_l2l;
//logic trigger_tgl, trigger_sty;
- logic [TIMERBIT-1:0] timer_cnt_d, timer_cnt_q;
+ logic [TimerWidth-1:0] timer_cnt_d, timer_cnt_q;
logic timer_cnt_clr, timer_cnt_en;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_trigger_reg
+ if (!rst_ni) begin
trigger_q <= 1'b0;
end else begin
trigger_q <= trigger_i;
@@ -56,8 +56,8 @@
timer_state_e timer_state_q, timer_state_d;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_state_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_state_reg
+ if (!rst_ni) begin
timer_state_q <= IDLE;
end else begin
timer_state_q <= timer_state_d;
@@ -66,8 +66,8 @@
assign timer_cnt_d = (timer_cnt_en) ? timer_cnt_q + 1'b1 : timer_cnt_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_cnt_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_cnt_reg
+ if (!rst_ni) begin
timer_cnt_q <= '0;
end
else if (timer_cnt_clr) begin
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
index 0f3e4d7..c04f2a9 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
@@ -5,98 +5,67 @@
// Description sysrst_ctrl ULP module
module sysrst_ctrl_ulp import sysrst_ctrl_reg_pkg::*; (
- input clk_aon_i,
- input rst_aon_ni,
-
+ input clk_i,
+ input rst_ni,
+ // (Optionally) inverted input signals on AON clock
input lid_open_int_i,
input ac_present_int_i,
input pwrb_int_i,
-
+ // CSRs synced to AON clock
input sysrst_ctrl_reg2hw_ulp_ac_debounce_ctl_reg_t ulp_ac_debounce_ctl_i,
input sysrst_ctrl_reg2hw_ulp_lid_debounce_ctl_reg_t ulp_lid_debounce_ctl_i,
input sysrst_ctrl_reg2hw_ulp_pwrb_debounce_ctl_reg_t ulp_pwrb_debounce_ctl_i,
input sysrst_ctrl_reg2hw_ulp_ctl_reg_t ulp_ctl_i,
-
output sysrst_ctrl_hw2reg_ulp_status_reg_t ulp_status_o,
+ // Wakeup pulses on AON clock
output ulp_wakeup_pulse_o,
output z3_wakeup_hw_o
);
- logic pwrb_int;
- logic lid_open_int;
- logic ac_present_int;
-
- //synchronize between GPIO and always-on(200KHz)
- prim_flop_2sync # (
- .Width(1)
- ) u_pwrb_in_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(pwrb_int_i),
- .q_o(pwrb_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_lid_open_in_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(lid_open_int_i),
- .q_o(lid_open_int)
- );
-
- prim_flop_2sync # (
- .Width(1)
- ) u_ac_present_in_i (
- .clk_i(clk_aon_i),
- .rst_ni(rst_aon_ni),
- .d_i(ac_present_int_i),
- .q_o(ac_present_int)
- );
+ logic pwrb_cond_met_d, pwrb_cond_met_q;
+ logic lid_open_cond_met_d, lid_open_cond_met_q;
+ logic ac_present_cond_met_d, ac_present_cond_met_q;
sysrst_ctrl_ulpfsm # (
- .EDGE_TYPE("HL"),
- .TIMERBIT(16)
+ .EdgeType("HL"),
+ .TimerWidth(TimerWidth)
) u_pwrb_ulpfsm (
- .clk_aon_i,
- .rst_aon_ni,
- .trigger_i(pwrb_int),
+ .clk_i,
+ .rst_ni,
+ .trigger_i(pwrb_int_i),
.cfg_timer_i(ulp_pwrb_debounce_ctl_i.q),
.cfg_en_i(ulp_ctl_i.q),
.timer_cond_met_o(pwrb_cond_met_d)
);
sysrst_ctrl_ulpfsm # (
- .EDGE_TYPE("LH"),
- .TIMERBIT(16)
+ .EdgeType("LH"),
+ .TimerWidth(TimerWidth)
) u_lid_open_ulpfsm (
- .clk_aon_i,
- .rst_aon_ni,
- .trigger_i(lid_open_int),
+ .clk_i,
+ .rst_ni,
+ .trigger_i(lid_open_int_i),
.cfg_timer_i(ulp_lid_debounce_ctl_i.q),
.cfg_en_i(ulp_ctl_i.q),
.timer_cond_met_o(lid_open_cond_met_d)
);
sysrst_ctrl_ulpfsm # (
- .EDGE_TYPE("H"),
- .TIMERBIT(16)
+ .EdgeType("H"),
+ .TimerWidth(TimerWidth)
) u_ac_present_ulpfsm (
- .clk_aon_i,
- .rst_aon_ni,
- .trigger_i(ac_present_int),
+ .clk_i,
+ .rst_ni,
+ .trigger_i(ac_present_int_i),
.cfg_timer_i(ulp_ac_debounce_ctl_i.q),
.cfg_en_i(ulp_ctl_i.q),
.timer_cond_met_o(ac_present_cond_met_d)
);
- //delay the level signal to generate a pulse
- logic pwrb_cond_met_d, pwrb_cond_met_q;
- logic lid_open_cond_met_d, lid_open_cond_met_q;
- logic ac_present_cond_met_d, ac_present_cond_met_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_ulp_cond_met
- if (!rst_aon_ni) begin
+ // delay the level signal to generate a pulse
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_ulp_cond_met
+ if (!rst_ni) begin
pwrb_cond_met_q <= 1'b0;
lid_open_cond_met_q <= 1'b0;
ac_present_cond_met_q <= 1'b0;
@@ -115,15 +84,15 @@
assign ac_present_det_pulse = ac_present_cond_met_d & ~ac_present_cond_met_q;
// aggregate pulses
- assign ulp_wakeup_pulse_o = ulp_ctl_i.q & (pwrb_det_pulse |
+ assign ulp_wakeup_pulse_o = ulp_ctl_i.q & (pwrb_det_pulse |
lid_open_det_pulse |
ac_present_det_pulse);
- assign z3_wakeup_hw_o = pwrb_cond_met_d |
+ assign z3_wakeup_hw_o = pwrb_cond_met_d |
lid_open_cond_met_d |
ac_present_cond_met_d;
- assign ulp_status_o.d = 1'b1;
+ assign ulp_status_o.d = 1'b1;
assign ulp_status_o.de = ulp_wakeup_pulse_o;
endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulpfsm.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulpfsm.sv
index fc4bece..0580400 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulpfsm.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulpfsm.sv
@@ -5,26 +5,25 @@
// Description sysrst_ctrl ULP FSM module
module sysrst_ctrl_ulpfsm #(
- parameter bit [15:0] EDGE_TYPE = "H", // can be LH, HL and H
- parameter int unsigned TIMERBIT = 16
- ) (
- input clk_aon_i,
- input rst_aon_ni,
- input trigger_i,
- input [TIMERBIT-1:0] cfg_timer_i,
- input cfg_en_i,
- output logic timer_cond_met_o
-
+ parameter bit [15:0] EdgeType = "H", // can be LH, HL and H
+ parameter int unsigned TimerWidth = 16
+) (
+ input clk_i,
+ input rst_ni,
+ input trigger_i,
+ input [TimerWidth-1:0] cfg_timer_i,
+ input cfg_en_i,
+ output logic timer_cond_met_o
);
logic trigger_q;
logic trigger, trigger_stable;
- logic [TIMERBIT-1:0] timer_cnt_d, timer_cnt_q;
+ logic [TimerWidth-1:0] timer_cnt_d, timer_cnt_q;
logic timer_cnt_clr, timer_cnt_en;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_trigger_reg
+ if (!rst_ni) begin
trigger_q <= 1'b0;
end
else if (!cfg_en_i) begin
@@ -34,10 +33,10 @@
end
end
- if (EDGE_TYPE == "LH") begin : gen_trigger_l2h
+ if (EdgeType == "LH") begin : gen_trigger_l2h
assign trigger = (trigger_q == 1'b0) && (trigger_i == 1'b1);
assign trigger_stable = (trigger_q == trigger_i) && (trigger_i == 1'b1);
- end else if (EDGE_TYPE == "HL") begin : gen_trigger_h2l
+ end else if (EdgeType == "HL") begin : gen_trigger_h2l
assign trigger = (trigger_q == 1'b1) && (trigger_i == 1'b0);
assign trigger_stable = (trigger_q == trigger_i) && (trigger_i == 1'b0);
end else begin: gen_trigger_h
@@ -60,8 +59,8 @@
timer_state_e timer_state_q, timer_state_d;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_state_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_state_reg
+ if (!rst_ni) begin
timer_state_q <= IDLE_ST;
end
else begin
@@ -71,8 +70,8 @@
assign timer_cnt_d = (timer_cnt_en) ? timer_cnt_q + 1'b1 : timer_cnt_q;
- always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_timer_cnt_reg
- if (!rst_aon_ni) begin
+ always_ff @(posedge clk_i or negedge rst_ni) begin: p_timer_cnt_reg
+ if (!rst_ni) begin
timer_cnt_q <= '0;
end
else if (timer_cnt_clr ) begin
diff --git a/hw/ip/sysrst_ctrl/sysrst_ctrl.core b/hw/ip/sysrst_ctrl/sysrst_ctrl.core
index b295b92..9fdcf2a 100644
--- a/hw/ip/sysrst_ctrl/sysrst_ctrl.core
+++ b/hw/ip/sysrst_ctrl/sysrst_ctrl.core
@@ -16,8 +16,6 @@
- rtl/sysrst_ctrl_autoblock.sv
- rtl/sysrst_ctrl_comboact.sv
- rtl/sysrst_ctrl_combotrg.sv
- - rtl/sysrst_ctrl_intr.sv
- - rtl/sysrst_ctrl_inv.sv
- rtl/sysrst_ctrl_pin.sv
- rtl/sysrst_ctrl_keyintr.sv
- rtl/sysrst_ctrl_timerfsm.sv
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index 46b3a95..544d1ba 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -2709,7 +2709,7 @@
inter_signal_list:
[
{
- name: gsc_wk
+ name: aon_gsc_wk
struct: logic
type: uni
act: req
@@ -2721,7 +2721,7 @@
index: 0
}
{
- name: gsc_rst
+ name: aon_gsc_rst
struct: logic
type: uni
act: req
@@ -6701,7 +6701,7 @@
]
pwrmgr_aon.wakeups:
[
- sysrst_ctrl_aon.gsc_wk
+ sysrst_ctrl_aon.aon_gsc_wk
adc_ctrl_aon.debug_cable_wakeup
pinmux_aon.aon_wkup_req
pinmux_aon.usb_wkup_req
@@ -6709,7 +6709,7 @@
]
pwrmgr_aon.rstreqs:
[
- sysrst_ctrl_aon.gsc_rst
+ sysrst_ctrl_aon.aon_gsc_rst
aon_timer_aon.aon_timer_rst_req
]
main.tl_rv_core_ibex__corei:
@@ -11506,7 +11506,7 @@
wakeups:
[
{
- name: gsc_wk
+ name: aon_gsc_wk
width: "1"
module: sysrst_ctrl_aon
}
@@ -11534,7 +11534,7 @@
reset_requests:
[
{
- name: gsc_rst
+ name: aon_gsc_rst
width: "1"
module: sysrst_ctrl_aon
}
@@ -14576,7 +14576,7 @@
index: -1
}
{
- name: gsc_wk
+ name: aon_gsc_wk
struct: logic
type: uni
act: req
@@ -14588,7 +14588,7 @@
index: 0
}
{
- name: gsc_rst
+ name: aon_gsc_rst
struct: logic
type: uni
act: req
diff --git a/hw/top_earlgrey/ip/pwrmgr/data/autogen/pwrmgr.hjson b/hw/top_earlgrey/ip/pwrmgr/data/autogen/pwrmgr.hjson
index 791be24..26b110f 100644
--- a/hw/top_earlgrey/ip/pwrmgr/data/autogen/pwrmgr.hjson
+++ b/hw/top_earlgrey/ip/pwrmgr/data/autogen/pwrmgr.hjson
@@ -144,8 +144,8 @@
local: "true"
},
- { name: "GSC_WK_IDX",
- desc: "Vector index for gsc_wk, applies for WAKEUP_EN, WAKE_STATUS and WAKE_INFO",
+ { name: "AON_GSC_WK_IDX",
+ desc: "Vector index for aon_gsc_wk, applies for WAKEUP_EN, WAKE_STATUS and WAKE_INFO",
type: "int",
default: "0",
local: "true"
diff --git a/hw/top_earlgrey/ip/pwrmgr/rtl/autogen/pwrmgr_reg_pkg.sv b/hw/top_earlgrey/ip/pwrmgr/rtl/autogen/pwrmgr_reg_pkg.sv
index aa4bb58..ba848f5 100644
--- a/hw/top_earlgrey/ip/pwrmgr/rtl/autogen/pwrmgr_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/pwrmgr/rtl/autogen/pwrmgr_reg_pkg.sv
@@ -8,7 +8,7 @@
// Param list
parameter int NumWkups = 5;
- parameter int GSC_WK_IDX = 0;
+ parameter int AON_GSC_WK_IDX = 0;
parameter int DEBUG_CABLE_WAKEUP_IDX = 1;
parameter int AON_WKUP_REQ_IDX = 2;
parameter int USB_WKUP_REQ_IDX = 3;
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index 0a21d99..01f5d36 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -1701,8 +1701,8 @@
.alert_rx_i ( alert_rx[23:23] ),
// Inter-module signals
- .gsc_wk_o(pwrmgr_aon_wakeups[0]),
- .gsc_rst_o(pwrmgr_aon_rstreqs[0]),
+ .aon_gsc_wk_o(pwrmgr_aon_wakeups[0]),
+ .aon_gsc_rst_o(pwrmgr_aon_rstreqs[0]),
.tl_i(sysrst_ctrl_aon_tl_req),
.tl_o(sysrst_ctrl_aon_tl_rsp),
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
index 62926be..f7b0321 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.h
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -1606,7 +1606,7 @@
* Power Manager Wakeup Signals
*/
typedef enum top_earlgrey_power_manager_wake_ups {
- kTopEarlgreyPowerManagerWakeUpsSysrstCtrlAonGscWk = 0, /**< */
+ kTopEarlgreyPowerManagerWakeUpsSysrstCtrlAonAonGscWk = 0, /**< */
kTopEarlgreyPowerManagerWakeUpsAdcCtrlAonDebugCableWakeup = 1, /**< */
kTopEarlgreyPowerManagerWakeUpsPinmuxAonAonWkupReq = 2, /**< */
kTopEarlgreyPowerManagerWakeUpsPinmuxAonUsbWkupReq = 3, /**< */
@@ -1632,7 +1632,7 @@
* Power Manager Reset Request Signals
*/
typedef enum top_earlgrey_power_manager_reset_requests {
- kTopEarlgreyPowerManagerResetRequestsSysrstCtrlAonGscRst = 0, /**< */
+ kTopEarlgreyPowerManagerResetRequestsSysrstCtrlAonAonGscRst = 0, /**< */
kTopEarlgreyPowerManagerResetRequestsAonTimerAonAonTimerRstReq = 1, /**< */
kTopEarlgreyPowerManagerResetRequestsLast = 1, /**< \internal Last valid pwrmgr reset_request signal */
} top_earlgrey_power_manager_reset_requests_t;
diff --git a/sw/device/lib/dif/dif_pwrmgr.c b/sw/device/lib/dif/dif_pwrmgr.c
index 80b2b4f..d64e4c2 100644
--- a/sw/device/lib/dif/dif_pwrmgr.c
+++ b/sw/device/lib/dif/dif_pwrmgr.c
@@ -69,7 +69,7 @@
(1u << PWRMGR_WAKEUP_EN_EN_0_BIT),
"Layout of WAKEUP_EN register changed.");
static_assert(kDifPwrmgrWakeupRequestSourceOne ==
- (1u << PWRMGR_PARAM_GSC_WK_IDX),
+ (1u << PWRMGR_PARAM_AON_GSC_WK_IDX),
"Layout of WAKE_INFO register changed.");
static_assert(kDifPwrmgrWakeupRequestSourceTwo ==
(1u << PWRMGR_PARAM_DEBUG_CABLE_WAKEUP_IDX),