blob: 17e9cf337ebf533e8640ed3289b528d6245ab0fe [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// Power Manager Package
//
package pwrmgr_pkg;
localparam HwRstReqs = 2; // this needs to be a topgen populated number, or from topcfg?
localparam PowerDomains = 2; // this maybe needs to be a topgen populated number, or from topcfg?
localparam WakeUpPeris = 16; // this needs to be a topgen populated number, or from topcfg?
localparam TotalWakeWidth = WakeUpPeris + 2; // Abort and fall through are added
localparam AlwaysOnDomain = 0; // Abort and fall through are added
// pwrmgr to ast
typedef struct packed {
logic main_pdb;
logic pwr_clamp;
logic slow_clk_en;
logic core_clk_en;
logic io_clk_en;
} pwr_ast_req_t;
typedef struct packed {
logic [1:0] slow_clk_val;
logic [1:0] core_clk_val;
logic [1:0] io_clk_val;
logic main_pok;
} pwr_ast_rsp_t;
// default value of pwr_ast_rsp (for dangling ports)
parameter pwr_ast_rsp_t PWR_AST_RSP_DEFAULT = '{
slow_clk_val: 2'b10,
core_clk_val: 2'b10,
io_clk_val: 2'b10,
main_pok: 1'b1
};
parameter pwr_ast_rsp_t PWR_AST_RSP_SYNC_DEFAULT = '{
slow_clk_val: 2'b01,
core_clk_val: 2'b01,
io_clk_val: 2'b10,
main_pok: 1'b0
};
// pwrmgr to rstmgr
typedef struct packed {
logic [PowerDomains-1:0] lc_rst_req;
logic [PowerDomains-1:0] sys_rst_req;
logic ndm_req_en;
logic low_power_rst;
logic hw_rst;
} pwr_rst_req_t;
// rstmgr to pwrmgr
typedef struct packed {
logic [PowerDomains-1:0] rst_lc_src_n;
logic [PowerDomains-1:0] rst_sys_src_n;
} pwr_rst_rsp_t;
// default value (for dangling ports)
parameter pwr_rst_rsp_t PWR_RST_RSP_DEFAULT = '{
rst_lc_src_n: 1'b1,
rst_sys_src_n: 1'b1
};
// pwrmgr to clkmgr
typedef struct packed {
logic ip_clk_en;
} pwr_clk_req_t;
// pwrmgr to otp
typedef struct packed {
logic otp_init;
} pwr_otp_req_t;
// otp to pwrmgr
typedef struct packed {
logic otp_done;
logic otp_idle;
} pwr_otp_rsp_t;
// default value (for dangling ports)
parameter pwr_otp_rsp_t PWR_OTP_RSP_DEFAULT = '{
otp_done: '0,
otp_idle: 1'b1
};
// pwrmgr to lifecycle
typedef struct packed {
logic lc_init;
} pwr_lc_req_t;
// lifecycle to pwrmgr
typedef struct packed {
logic lc_done;
logic lc_idle;
} pwr_lc_rsp_t;
// default value (for dangling ports)
parameter pwr_lc_rsp_t PWR_LC_RSP_DEFAULT = '{
lc_done: '0,
lc_idle: 1'b1
};
// flash to pwrmgr
typedef struct packed {
logic flash_idle;
} pwr_flash_rsp_t;
// default value (for dangling ports)
parameter pwr_flash_rsp_t PWR_FLASH_RSP_DEFAULT = '{
flash_idle: 1'b1
};
// peripherals to pwrmgr
// TODO, switch this to two logic arrays once the option to support
// logic during intermodule.py is in.
// Structs are used for now since these happen to support dangling port
// defaults.
typedef struct packed {
logic [WakeUpPeris-1:0] wakeups;
logic [HwRstReqs-1:0] rstreqs;
} pwr_peri_rsp_t;
// default value (for dangling ports)
parameter pwr_peri_rsp_t PWR_PERIS_RSP_DEFAULT = '{
wakeups: WakeUpPeris'(1'b1),
rstreqs: '0
};
// power-up causes
typedef enum logic [1:0] {
Por = 2'h0,
Wake = 2'h1,
Reset = 2'h2
} pwrup_cause_e;
// low power hints
typedef enum logic {
None = 1'b0,
LowPower = 1'b1
} low_power_hint_e;
endpackage // pwrmgr_pkg