From b2d95779c622aa83c974359e0b28947ed9c30b5f Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Sun, 12 Mar 2023 22:41:48 +0100 Subject: [PATCH] gateware/sysmgr: Make sure sys_start _always_ forces system clock ON Before it was only sensitive to rising edge. But for the "start" we actually want to force it on if active to avoid race condition in the software where: - CPU clears the condition of the wakeup - New wake up event happens right after it - CPU asks for shutdown - And then no rising edge happens because wakeup is already high For shutdown it's good that it's rising edge dependent since the OFF command signal _might_ stay high if the system clock shuts down Signed-off-by: Sylvain Munaut --- gateware/rtl/sysmgr_1.v | 4 ++-- gateware/rtl/sysmgr_2.v | 4 ++-- gateware/rtl/sysmgr_3.v | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gateware/rtl/sysmgr_1.v b/gateware/rtl/sysmgr_1.v index 66292bf..fe88ed6 100644 --- a/gateware/rtl/sysmgr_1.v +++ b/gateware/rtl/sysmgr_1.v @@ -176,8 +176,8 @@ module sysmgr ( // Synch triggers always @(posedge clk_base) begin - sys_start_s <= { ~sys_start_s[1] & sys_start_s[0], sys_start_s[0], sys_start }; - sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; + sys_start_s <= { sys_start_s[1], sys_start_s[0], sys_start }; + sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; end always @(posedge clk_base) diff --git a/gateware/rtl/sysmgr_2.v b/gateware/rtl/sysmgr_2.v index d51e974..781c372 100644 --- a/gateware/rtl/sysmgr_2.v +++ b/gateware/rtl/sysmgr_2.v @@ -170,8 +170,8 @@ module sysmgr ( // Synch triggers always @(posedge clk_base) begin - sys_start_s <= { ~sys_start_s[1] & sys_start_s[0], sys_start_s[0], sys_start }; - sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; + sys_start_s <= { sys_start_s[1], sys_start_s[0], sys_start }; + sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; end always @(posedge clk_base) diff --git a/gateware/rtl/sysmgr_3.v b/gateware/rtl/sysmgr_3.v index b3e4081..9411ade 100644 --- a/gateware/rtl/sysmgr_3.v +++ b/gateware/rtl/sysmgr_3.v @@ -166,8 +166,8 @@ module sysmgr ( // Synch triggers always @(posedge clk_base) begin - sys_start_s <= { ~sys_start_s[1] & sys_start_s[0], sys_start_s[0], sys_start }; - sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; + sys_start_s <= { sys_start_s[1], sys_start_s[0], sys_start }; + sys_stop_s <= { ~sys_stop_s[1] & sys_stop_s[0], sys_stop_s[0], sys_stop }; end always @(posedge clk_base)