feat: add RTC wake functionality and related integration

- Introduced  signal in sysctrl interface and module to handle RTC wake events.
- Added RTC wake status register in memory map and updated related tests.
- Integrated RTC wake handling in the APB wrapper and core wrapper.
- Enhanced clock and reset domain configurations to include RTC signals.
- Updated software build configurations to include RTC source files and headers.
- Modified formal verification and testbench files to accommodate RTC wake functionality.
- Ensured proper synchronization and status recording for RTC wake events in the sysctrl module.
This commit is contained in:
maksyuki committed 2026-08-10 09:32:30 +08:00
1 parent 34624a913a
commit c9a3d7934c
38 files changed
+663 -361

No files matched your search

+1
View File
@@ -106,6 +106,7 @@ module pll_ctrl_tb;
sysctrl.user_bus_idle_i = 1'b1;
sysctrl.fault_access_i = 1'b0;
sysctrl.fault_master_i = '0;
sysctrl.rtc_wake_i = 1'b0;
#100;
rst_n_i = 1'b1;
repeat (12) @(posedge sys_clk_o);
+24 -1
View File
@@ -72,6 +72,7 @@ module sysctrl_fault_tb;
sysctrl.perf_sdram_wait_i = 64'd16;
sysctrl.perf_psram_wait_i = 64'd17;
sysctrl.perf_flash_wait_i = 64'd18;
sysctrl.rtc_wake_i = 1'b0;
pll_ctrl.req_ready_i = 1'b1;
pll_ctrl.rsp_active_sel_i = '0;
pll_ctrl.rsp_active_valid_i = 1'b0;
@@ -163,7 +164,29 @@ module sysctrl_fault_tb;
$fatal(1, "terminal test status was overwritten");
end
$display("sysctrl fault and user core control test passed");
read_register(32'h1000_B088, read_data);
if (read_data !== 32'h0000_0000) begin
$fatal(1, "RTC wake status did not reset");
end
sysctrl.rtc_wake_i = 1'b1;
repeat (4) @(posedge clk_i);
read_register(32'h1000_B088, read_data);
if (read_data !== 32'h0000_0003) begin
$fatal(1, "RTC wake live and sticky status was not recorded");
end
sysctrl.rtc_wake_i = 1'b0;
repeat (4) @(posedge clk_i);
read_register(32'h1000_B088, read_data);
if (read_data !== 32'h0000_0002) begin
$fatal(1, "RTC wake sticky status was not retained");
end
write_register(32'h1000_B088, 32'h0000_0002);
read_register(32'h1000_B088, read_data);
if (read_data !== 32'h0000_0000) begin
$fatal(1, "RTC wake sticky status W1C failed");
end
$display("sysctrl fault, user core control, and RTC wake test passed");
$finish;
end
endmodule