[top] Auto generate files
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index 66e0b9b..3845514 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -380,6 +380,19 @@
top_signame: alert_handler_esc_rx
index: 0
}
+ {
+ struct: crashdump
+ type: uni
+ name: crashdump
+ act: req
+ package: rv_core_ibex_pkg
+ inst_name: rv_core_ibex
+ width: 1
+ default: ""
+ top_type: broadcast
+ top_signame: rv_core_ibex_crashdump
+ index: -1
+ }
]
}
]
@@ -2408,6 +2421,18 @@
index: -1
}
{
+ struct: crashdump
+ type: uni
+ name: cpu_dump
+ act: rcv
+ package: rv_core_ibex_pkg
+ inst_name: rstmgr
+ width: 1
+ default: ""
+ top_signame: rv_core_ibex_crashdump
+ index: -1
+ }
+ {
struct: rstmgr_ast_out
type: uni
name: resets_ast
@@ -5228,6 +5253,10 @@
[
lc_ctrl.pwr_lc
]
+ rv_core_ibex.crashdump:
+ [
+ rstmgr.cpu_dump
+ ]
otp_ctrl.otp_keymgr_key:
[
keymgr.otp_key
@@ -9142,6 +9171,18 @@
index: -1
}
{
+ struct: crashdump
+ type: uni
+ name: cpu_dump
+ act: rcv
+ package: rv_core_ibex_pkg
+ inst_name: rstmgr
+ width: 1
+ default: ""
+ top_signame: rv_core_ibex_crashdump
+ index: -1
+ }
+ {
struct: rstmgr_ast_out
type: uni
name: resets_ast
@@ -10605,6 +10646,19 @@
top_signame: alert_handler_esc_rx
index: 0
}
+ {
+ struct: crashdump
+ type: uni
+ name: crashdump
+ act: req
+ package: rv_core_ibex_pkg
+ inst_name: rv_core_ibex
+ width: 1
+ default: ""
+ top_type: broadcast
+ top_signame: rv_core_ibex_crashdump
+ index: -1
+ }
]
external:
[
@@ -11010,6 +11064,14 @@
default: ""
}
{
+ package: rv_core_ibex_pkg
+ struct: crashdump
+ signame: rv_core_ibex_crashdump
+ width: 1
+ type: uni
+ default: ""
+ }
+ {
package: otp_ctrl_pkg
struct: otp_keymgr_key
signame: otp_ctrl_otp_keymgr_key
diff --git a/hw/top_earlgrey/ip/rstmgr/data/autogen/rstmgr.hjson b/hw/top_earlgrey/ip/rstmgr/data/autogen/rstmgr.hjson
index 7ed3da6..68d0689 100644
--- a/hw/top_earlgrey/ip/rstmgr/data/autogen/rstmgr.hjson
+++ b/hw/top_earlgrey/ip/rstmgr/data/autogen/rstmgr.hjson
@@ -95,6 +95,13 @@
package: "alert_pkg",
},
+ { struct: "crashdump",
+ type: "uni",
+ name: "cpu_dump",
+ act: "rcv",
+ package: "rv_core_ibex_pkg",
+ },
+
// Exported resets
{ struct: "rstmgr_ast_out",
type: "uni",
@@ -204,7 +211,7 @@
{ name: "ALERT_INFO",
desc: '''
Alert dump information prior to last reset.
- Which value read is controlled by the ALERT_INFO_CTRL register.
+ Which value read is controlled by the !ALERT_INFO_CTRL register.
''',
swaccess: "ro",
hwaccess: "hwo",
@@ -213,13 +220,80 @@
{ bits: "31:0",
name: "VALUE",
desc: '''
- The current 32-bit value of alert crash dump.
+ The current 32-bit value of crash dump.
'''
resval: "0",
},
]
},
+ { name: "CPU_INFO_CTRL",
+ desc: '''
+ Cpu info dump controls.
+ ''',
+ swaccess: "rw",
+ hwaccess: "hro",
+ fields: [
+ { bits: "0",
+ name: "EN",
+ hwaccess: "hrw",
+ desc: '''
+ Enable cpu dump to capture new information.
+ This field is automatically set to 0 upon system reset (even if rstmgr is not reset).
+ '''
+ resval: "0"
+ },
+ { bits: "4+IdxWidth-1:4",
+ name: "INDEX",
+ desc: '''
+ Controls which 32-bit value to read.
+ '''
+ resval: "0"
+ },
+ ]
+ },
+
+ { name: "CPU_INFO_ATTR",
+ desc: '''
+ Cpu info dump attributes.
+ ''',
+ swaccess: "ro",
+ hwaccess: "hwo",
+ hwext: "true",
+ fields: [
+ { bits: "IdxWidth-1:0",
+ name: "CNT_AVAIL",
+ swaccess: "ro",
+ hwaccess: "hwo",
+ desc: '''
+ The number of 32-bit values contained in the cpu info dump.
+ '''
+ resval: "0",
+ tags: [// This field only reflects the status of the design, thus the
+ // default value is likely to change and not remain 0
+ "excl:CsrAllTests:CsrExclCheck"]
+ },
+ ]
+ },
+
+ { name: "CPU_INFO",
+ desc: '''
+ Cpu dump information prior to last reset.
+ Which value read is controlled by the !CPU_INFO_CTRL register.
+ ''',
+ swaccess: "ro",
+ hwaccess: "hwo",
+ hwext: "true",
+ fields: [
+ { bits: "31:0",
+ name: "VALUE",
+ desc: '''
+ The current 32-bit value of crash dump.
+ '''
+ resval: "0",
+ },
+ ]
+ },
# Templated registers for software control
diff --git a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr.sv b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr.sv
index a890f3f..7fa9c33 100644
--- a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr.sv
+++ b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr.sv
@@ -9,8 +9,6 @@
// SPDX-License-Identifier: Apache-2.0
//
// This module is the overall reset manager wrapper
-// TODO: This module is only a draft implementation that covers most of the rstmgr
-// functoinality but is incomplete
`include "prim_assert.sv"
@@ -43,6 +41,9 @@
// Interface to alert handler
input alert_pkg::alert_crashdump_t alert_dump_i,
+ // Interface to cpu crash dump
+ input rv_core_ibex_pkg::crashdump_t cpu_dump_i,
+
// dft bypass
input scan_rst_ni,
input scanmode_i,
@@ -562,6 +563,43 @@
assign hw2reg.reset_info.hw_req.d = pwr_i.rstreqs | reg2hw.reset_info.hw_req.q;
assign hw2reg.reset_info.hw_req.de = rst_hw_req;
+ ////////////////////////////////////////////////////
+ // Crash info capture //
+ ////////////////////////////////////////////////////
+
+ logic dump_capture;
+ assign dump_capture = rst_hw_req | rst_ndm | rst_low_power;
+
+ rstmgr_crash_info #(
+ .CrashDumpWidth($bits(alert_pkg::alert_crashdump_t))
+ ) u_alert_info (
+ .clk_i,
+ .rst_ni,
+ .dump_i(alert_dump_i),
+ .dump_capture_i(dump_capture & reg2hw.alert_info_ctrl.en.q),
+ .slot_sel_i(reg2hw.alert_info_ctrl.index.q),
+ .slots_cnt_o(hw2reg.alert_info_attr.d),
+ .slot_o(hw2reg.alert_info.d)
+ );
+
+ rstmgr_crash_info #(
+ .CrashDumpWidth($bits(rv_core_ibex_pkg::crashdump_t))
+ ) u_cpu_info (
+ .clk_i,
+ .rst_ni,
+ .dump_i(cpu_dump_i),
+ .dump_capture_i(dump_capture & reg2hw.cpu_info_ctrl.en.q),
+ .slot_sel_i(reg2hw.cpu_info_ctrl.index.q),
+ .slots_cnt_o(hw2reg.cpu_info_attr.d),
+ .slot_o(hw2reg.cpu_info.d)
+ );
+
+ // once dump is captured, no more information is captured until
+ // re-eanbled by software.
+ assign hw2reg.alert_info_ctrl.en.d = 1'b0;
+ assign hw2reg.alert_info_ctrl.en.de = dump_capture;
+ assign hw2reg.cpu_info_ctrl.en.d = 1'b0;
+ assign hw2reg.cpu_info_ctrl.en.de = dump_capture;
////////////////////////////////////////////////////
// Exported resets //
@@ -570,60 +608,13 @@
assign resets_ast_o.rst_ast_usbdev_sys_io_div4_n = resets_o.rst_sys_io_div4_n;
assign resets_ast_o.rst_ast_usbdev_usb_n = resets_o.rst_usb_n;
- ////////////////////////////////////////////////////
- // Crash info capture //
- ////////////////////////////////////////////////////
- localparam int CrashRemainder = $bits(alert_pkg::alert_crashdump_t) % RdWidth > 0 ? 1 : 0;
- localparam int CrashStoreSlot = $bits(alert_pkg::alert_crashdump_t) / RdWidth +
- CrashRemainder;
- localparam int TotalWidth = CrashStoreSlot * RdWidth;
- localparam int SlotCntWidth = $clog2(CrashStoreSlot);
- logic dump_capture;
- logic [2**SlotCntWidth-1:0][RdWidth-1:0] slots;
- logic [CrashStoreSlot-1:0][RdWidth-1:0] slots_q;
-
- // capture on any legal reset request
- assign dump_capture = reg2hw.alert_info_ctrl.en.q &
- (rst_hw_req | rst_ndm | rst_low_power);
-
- always_ff @(posedge clk_i or negedge rst_ni) begin
- if (!rst_ni) begin
- slots_q <= '0;
- end else if (dump_capture) begin
- slots_q <= TotalWidth'(alert_dump_i);
- end
- end
-
- always_comb begin
- slots = '0;
- slots[CrashStoreSlot-1:0] = slots_q;
- end
-
- // once dump is captured, no more information is captured until
- // re-eanbled by software.
- assign hw2reg.alert_info_ctrl.en.d = 1'b0;
- assign hw2reg.alert_info_ctrl.en.de = dump_capture;
-
- // number of segments to read
- assign hw2reg.alert_info_attr.d = CrashStoreSlot;
-
- // the actual dump data
- assign hw2reg.alert_info.d = slots[reg2hw.alert_info_ctrl.index.q[SlotCntWidth-1:0]];
-
- if (SlotCntWidth < IdxWidth) begin : gen_tieoffs
- logic [IdxWidth-SlotCntWidth-1:0] unused_idx;
- assign unused_idx = reg2hw.alert_info_ctrl.index.q[IdxWidth-1:SlotCntWidth];
- end
////////////////////////////////////////////////////
// Assertions //
////////////////////////////////////////////////////
- // Make sure the crash dump isn't excessively large
- `ASSERT_INIT(CntWidth_A, SlotCntWidth <= IdxWidth)
-
// when upstream resets, downstream must also reset
// output known asserts
diff --git a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_pkg.sv b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_pkg.sv
index 53ebd66..23e3068 100644
--- a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_pkg.sv
@@ -31,6 +31,15 @@
} rstmgr_reg2hw_alert_info_ctrl_reg_t;
typedef struct packed {
+ struct packed {
+ logic q;
+ } en;
+ struct packed {
+ logic [3:0] q;
+ } index;
+ } rstmgr_reg2hw_cpu_info_ctrl_reg_t;
+
+ typedef struct packed {
logic q;
} rstmgr_reg2hw_sw_rst_regen_mreg_t;
@@ -71,6 +80,21 @@
} rstmgr_hw2reg_alert_info_reg_t;
typedef struct packed {
+ struct packed {
+ logic d;
+ logic de;
+ } en;
+ } rstmgr_hw2reg_cpu_info_ctrl_reg_t;
+
+ typedef struct packed {
+ logic [3:0] d;
+ } rstmgr_hw2reg_cpu_info_attr_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } rstmgr_hw2reg_cpu_info_reg_t;
+
+ typedef struct packed {
logic d;
} rstmgr_hw2reg_sw_rst_ctrl_n_mreg_t;
@@ -79,8 +103,9 @@
// Register to internal design logic //
///////////////////////////////////////
typedef struct packed {
- rstmgr_reg2hw_reset_info_reg_t reset_info; // [12:11]
- rstmgr_reg2hw_alert_info_ctrl_reg_t alert_info_ctrl; // [10:6]
+ rstmgr_reg2hw_reset_info_reg_t reset_info; // [17:16]
+ rstmgr_reg2hw_alert_info_ctrl_reg_t alert_info_ctrl; // [15:11]
+ rstmgr_reg2hw_cpu_info_ctrl_reg_t cpu_info_ctrl; // [10:6]
rstmgr_reg2hw_sw_rst_regen_mreg_t [1:0] sw_rst_regen; // [5:4]
rstmgr_reg2hw_sw_rst_ctrl_n_mreg_t [1:0] sw_rst_ctrl_n; // [3:0]
} rstmgr_reg2hw_t;
@@ -89,20 +114,26 @@
// Internal design logic to register //
///////////////////////////////////////
typedef struct packed {
- rstmgr_hw2reg_reset_info_reg_t reset_info; // [46:40]
- rstmgr_hw2reg_alert_info_ctrl_reg_t alert_info_ctrl; // [39:38]
- rstmgr_hw2reg_alert_info_attr_reg_t alert_info_attr; // [37:34]
- rstmgr_hw2reg_alert_info_reg_t alert_info; // [33:2]
+ rstmgr_hw2reg_reset_info_reg_t reset_info; // [84:78]
+ rstmgr_hw2reg_alert_info_ctrl_reg_t alert_info_ctrl; // [77:76]
+ rstmgr_hw2reg_alert_info_attr_reg_t alert_info_attr; // [75:72]
+ rstmgr_hw2reg_alert_info_reg_t alert_info; // [71:40]
+ rstmgr_hw2reg_cpu_info_ctrl_reg_t cpu_info_ctrl; // [39:38]
+ rstmgr_hw2reg_cpu_info_attr_reg_t cpu_info_attr; // [37:34]
+ rstmgr_hw2reg_cpu_info_reg_t cpu_info; // [33:2]
rstmgr_hw2reg_sw_rst_ctrl_n_mreg_t [1:0] sw_rst_ctrl_n; // [1:0]
} rstmgr_hw2reg_t;
// Register Address
- parameter logic [4:0] RSTMGR_RESET_INFO_OFFSET = 5'h 0;
- parameter logic [4:0] RSTMGR_ALERT_INFO_CTRL_OFFSET = 5'h 4;
- parameter logic [4:0] RSTMGR_ALERT_INFO_ATTR_OFFSET = 5'h 8;
- parameter logic [4:0] RSTMGR_ALERT_INFO_OFFSET = 5'h c;
- parameter logic [4:0] RSTMGR_SW_RST_REGEN_OFFSET = 5'h 10;
- parameter logic [4:0] RSTMGR_SW_RST_CTRL_N_OFFSET = 5'h 14;
+ parameter logic [5:0] RSTMGR_RESET_INFO_OFFSET = 6'h 0;
+ parameter logic [5:0] RSTMGR_ALERT_INFO_CTRL_OFFSET = 6'h 4;
+ parameter logic [5:0] RSTMGR_ALERT_INFO_ATTR_OFFSET = 6'h 8;
+ parameter logic [5:0] RSTMGR_ALERT_INFO_OFFSET = 6'h c;
+ parameter logic [5:0] RSTMGR_CPU_INFO_CTRL_OFFSET = 6'h 10;
+ parameter logic [5:0] RSTMGR_CPU_INFO_ATTR_OFFSET = 6'h 14;
+ parameter logic [5:0] RSTMGR_CPU_INFO_OFFSET = 6'h 18;
+ parameter logic [5:0] RSTMGR_SW_RST_REGEN_OFFSET = 6'h 1c;
+ parameter logic [5:0] RSTMGR_SW_RST_CTRL_N_OFFSET = 6'h 20;
// Register Index
@@ -111,18 +142,24 @@
RSTMGR_ALERT_INFO_CTRL,
RSTMGR_ALERT_INFO_ATTR,
RSTMGR_ALERT_INFO,
+ RSTMGR_CPU_INFO_CTRL,
+ RSTMGR_CPU_INFO_ATTR,
+ RSTMGR_CPU_INFO,
RSTMGR_SW_RST_REGEN,
RSTMGR_SW_RST_CTRL_N
} rstmgr_id_e;
// Register width information to check illegal writes
- parameter logic [3:0] RSTMGR_PERMIT [6] = '{
+ parameter logic [3:0] RSTMGR_PERMIT [9] = '{
4'b 0001, // index[0] RSTMGR_RESET_INFO
4'b 0001, // index[1] RSTMGR_ALERT_INFO_CTRL
4'b 0001, // index[2] RSTMGR_ALERT_INFO_ATTR
4'b 1111, // index[3] RSTMGR_ALERT_INFO
- 4'b 0001, // index[4] RSTMGR_SW_RST_REGEN
- 4'b 0001 // index[5] RSTMGR_SW_RST_CTRL_N
+ 4'b 0001, // index[4] RSTMGR_CPU_INFO_CTRL
+ 4'b 0001, // index[5] RSTMGR_CPU_INFO_ATTR
+ 4'b 1111, // index[6] RSTMGR_CPU_INFO
+ 4'b 0001, // index[7] RSTMGR_SW_RST_REGEN
+ 4'b 0001 // index[8] RSTMGR_SW_RST_CTRL_N
};
endpackage
diff --git a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_top.sv b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_top.sv
index b972605..e9e673d 100644
--- a/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_top.sv
+++ b/hw/top_earlgrey/ip/rstmgr/rtl/autogen/rstmgr_reg_top.sv
@@ -23,7 +23,7 @@
import rstmgr_reg_pkg::* ;
- localparam int AW = 5;
+ localparam int AW = 6;
localparam int DW = 32;
localparam int DBW = DW/8; // Byte Width
@@ -93,6 +93,16 @@
logic alert_info_attr_re;
logic [31:0] alert_info_qs;
logic alert_info_re;
+ logic cpu_info_ctrl_en_qs;
+ logic cpu_info_ctrl_en_wd;
+ logic cpu_info_ctrl_en_we;
+ logic [3:0] cpu_info_ctrl_index_qs;
+ logic [3:0] cpu_info_ctrl_index_wd;
+ logic cpu_info_ctrl_index_we;
+ logic [3:0] cpu_info_attr_qs;
+ logic cpu_info_attr_re;
+ logic [31:0] cpu_info_qs;
+ logic cpu_info_re;
logic sw_rst_regen_en_0_qs;
logic sw_rst_regen_en_0_wd;
logic sw_rst_regen_en_0_we;
@@ -301,6 +311,92 @@
);
+ // R[cpu_info_ctrl]: V(False)
+
+ // F[en]: 0:0
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_cpu_info_ctrl_en (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (cpu_info_ctrl_en_we),
+ .wd (cpu_info_ctrl_en_wd),
+
+ // from internal hardware
+ .de (hw2reg.cpu_info_ctrl.en.de),
+ .d (hw2reg.cpu_info_ctrl.en.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.cpu_info_ctrl.en.q ),
+
+ // to register interface (read)
+ .qs (cpu_info_ctrl_en_qs)
+ );
+
+
+ // F[index]: 7:4
+ prim_subreg #(
+ .DW (4),
+ .SWACCESS("RW"),
+ .RESVAL (4'h0)
+ ) u_cpu_info_ctrl_index (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (cpu_info_ctrl_index_we),
+ .wd (cpu_info_ctrl_index_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.cpu_info_ctrl.index.q ),
+
+ // to register interface (read)
+ .qs (cpu_info_ctrl_index_qs)
+ );
+
+
+ // R[cpu_info_attr]: V(True)
+
+ prim_subreg_ext #(
+ .DW (4)
+ ) u_cpu_info_attr (
+ .re (cpu_info_attr_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.cpu_info_attr.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (cpu_info_attr_qs)
+ );
+
+
+ // R[cpu_info]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_cpu_info (
+ .re (cpu_info_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.cpu_info.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (cpu_info_qs)
+ );
+
+
// Subregister 0 of Multireg sw_rst_regen
// R[sw_rst_regen]: V(False)
@@ -395,15 +491,18 @@
- logic [5:0] addr_hit;
+ logic [8:0] addr_hit;
always_comb begin
addr_hit = '0;
addr_hit[0] = (reg_addr == RSTMGR_RESET_INFO_OFFSET);
addr_hit[1] = (reg_addr == RSTMGR_ALERT_INFO_CTRL_OFFSET);
addr_hit[2] = (reg_addr == RSTMGR_ALERT_INFO_ATTR_OFFSET);
addr_hit[3] = (reg_addr == RSTMGR_ALERT_INFO_OFFSET);
- addr_hit[4] = (reg_addr == RSTMGR_SW_RST_REGEN_OFFSET);
- addr_hit[5] = (reg_addr == RSTMGR_SW_RST_CTRL_N_OFFSET);
+ addr_hit[4] = (reg_addr == RSTMGR_CPU_INFO_CTRL_OFFSET);
+ addr_hit[5] = (reg_addr == RSTMGR_CPU_INFO_ATTR_OFFSET);
+ addr_hit[6] = (reg_addr == RSTMGR_CPU_INFO_OFFSET);
+ addr_hit[7] = (reg_addr == RSTMGR_SW_RST_REGEN_OFFSET);
+ addr_hit[8] = (reg_addr == RSTMGR_SW_RST_CTRL_N_OFFSET);
end
assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -417,6 +516,9 @@
if (addr_hit[3] && reg_we && (RSTMGR_PERMIT[3] != (RSTMGR_PERMIT[3] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[4] && reg_we && (RSTMGR_PERMIT[4] != (RSTMGR_PERMIT[4] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[5] && reg_we && (RSTMGR_PERMIT[5] != (RSTMGR_PERMIT[5] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[6] && reg_we && (RSTMGR_PERMIT[6] != (RSTMGR_PERMIT[6] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[7] && reg_we && (RSTMGR_PERMIT[7] != (RSTMGR_PERMIT[7] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[8] && reg_we && (RSTMGR_PERMIT[8] != (RSTMGR_PERMIT[8] & reg_be))) wr_err = 1'b1 ;
end
assign reset_info_por_we = addr_hit[0] & reg_we & ~wr_err;
@@ -441,19 +543,29 @@
assign alert_info_re = addr_hit[3] && reg_re;
- assign sw_rst_regen_en_0_we = addr_hit[4] & reg_we & ~wr_err;
+ assign cpu_info_ctrl_en_we = addr_hit[4] & reg_we & ~wr_err;
+ assign cpu_info_ctrl_en_wd = reg_wdata[0];
+
+ assign cpu_info_ctrl_index_we = addr_hit[4] & reg_we & ~wr_err;
+ assign cpu_info_ctrl_index_wd = reg_wdata[7:4];
+
+ assign cpu_info_attr_re = addr_hit[5] && reg_re;
+
+ assign cpu_info_re = addr_hit[6] && reg_re;
+
+ assign sw_rst_regen_en_0_we = addr_hit[7] & reg_we & ~wr_err;
assign sw_rst_regen_en_0_wd = reg_wdata[0];
- assign sw_rst_regen_en_1_we = addr_hit[4] & reg_we & ~wr_err;
+ assign sw_rst_regen_en_1_we = addr_hit[7] & reg_we & ~wr_err;
assign sw_rst_regen_en_1_wd = reg_wdata[1];
- assign sw_rst_ctrl_n_val_0_we = addr_hit[5] & reg_we & ~wr_err;
+ assign sw_rst_ctrl_n_val_0_we = addr_hit[8] & reg_we & ~wr_err;
assign sw_rst_ctrl_n_val_0_wd = reg_wdata[0];
- assign sw_rst_ctrl_n_val_0_re = addr_hit[5] && reg_re;
+ assign sw_rst_ctrl_n_val_0_re = addr_hit[8] && reg_re;
- assign sw_rst_ctrl_n_val_1_we = addr_hit[5] & reg_we & ~wr_err;
+ assign sw_rst_ctrl_n_val_1_we = addr_hit[8] & reg_we & ~wr_err;
assign sw_rst_ctrl_n_val_1_wd = reg_wdata[1];
- assign sw_rst_ctrl_n_val_1_re = addr_hit[5] && reg_re;
+ assign sw_rst_ctrl_n_val_1_re = addr_hit[8] && reg_re;
// Read data return
always_comb begin
@@ -480,11 +592,24 @@
end
addr_hit[4]: begin
+ reg_rdata_next[0] = cpu_info_ctrl_en_qs;
+ reg_rdata_next[7:4] = cpu_info_ctrl_index_qs;
+ end
+
+ addr_hit[5]: begin
+ reg_rdata_next[3:0] = cpu_info_attr_qs;
+ end
+
+ addr_hit[6]: begin
+ reg_rdata_next[31:0] = cpu_info_qs;
+ end
+
+ addr_hit[7]: begin
reg_rdata_next[0] = sw_rst_regen_en_0_qs;
reg_rdata_next[1] = sw_rst_regen_en_1_qs;
end
- addr_hit[5]: begin
+ addr_hit[8]: begin
reg_rdata_next[0] = sw_rst_ctrl_n_val_0_qs;
reg_rdata_next[1] = sw_rst_ctrl_n_val_1_qs;
end
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index ff70a6f..60505c7 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -276,6 +276,7 @@
pwrmgr_pkg::pwr_otp_rsp_t pwrmgr_pwr_otp_rsp;
pwrmgr_pkg::pwr_lc_req_t pwrmgr_pwr_lc_req;
pwrmgr_pkg::pwr_lc_rsp_t pwrmgr_pwr_lc_rsp;
+ rv_core_ibex_pkg::crashdump_t rv_core_ibex_crashdump;
otp_ctrl_pkg::otp_keymgr_key_t otp_ctrl_otp_keymgr_key;
keymgr_pkg::hw_key_req_t keymgr_kmac_key;
keymgr_pkg::kmac_data_req_t keymgr_kmac_data_req;
@@ -452,6 +453,8 @@
.esc_rx_o (alert_handler_esc_rx[0]),
// debug interface
.debug_req_i (debug_req),
+ // crash dump interface
+ .crash_dump_o (rv_core_ibex_crashdump),
// CPU control signals
.fetch_enable_i (1'b1),
.core_sleep_o (pwrmgr_pwr_cpu.core_sleeping)
@@ -999,6 +1002,7 @@
.ast_i(rstmgr_ast_i),
.cpu_i(rstmgr_cpu),
.alert_dump_i(alert_handler_crashdump),
+ .cpu_dump_i(rv_core_ibex_crashdump),
.resets_ast_o(rsts_ast_o),
.tl_i(rstmgr_tl_req),
.tl_o(rstmgr_tl_rsp),