[csrng/edn/rtl] Ensure enable/local_escalate in every state in main fsms

Signed-off-by: Steve Nelson <steve.nelson@wdc.com>
diff --git a/hw/ip/csrng/rtl/csrng_cmd_stage.sv b/hw/ip/csrng/rtl/csrng_cmd_stage.sv
index ec988fa..f6e4687 100644
--- a/hw/ip/csrng/rtl/csrng_cmd_stage.sv
+++ b/hw/ip/csrng/rtl/csrng_cmd_stage.sv
@@ -90,6 +90,8 @@
   logic                    cmd_gen_flag_q, cmd_gen_flag_d;
   logic [11:0]             cmd_gen_cmd_q, cmd_gen_cmd_d;
 
+  logic                    local_escalate;
+
 
   always_ff @(posedge clk_i or negedge rst_ni)
     if (!rst_ni) begin
@@ -194,6 +196,8 @@
     .err_o(cmd_gen_cnt_err_o)
   );
 
+  // For naming consistency
+  assign local_escalate = cmd_gen_cnt_err_o;
 
   //---------------------------------------------------------
   // state machine to process command
@@ -254,87 +258,139 @@
     cmd_stage_sm_err_o = 1'b0;
     unique case (state_q)
       Idle: begin
-        if (!cmd_fifo_zero) begin
-          state_d = ArbGnt;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (cs_enable_i) begin
+          if (!cmd_fifo_zero) begin
+            state_d = ArbGnt;
+          end
         end
       end
       ArbGnt: begin
-        cmd_arb_req_o = 1'b1;
-        if (cmd_arb_gnt_i) begin
-          state_d = SendSOP;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          cmd_arb_req_o = 1'b1;
+          if (cmd_arb_gnt_i) begin
+            state_d = SendSOP;
+          end
         end
       end
       SendSOP: begin
-        cmd_gen_1st_req = 1'b1;
-        cmd_arb_sop_o = 1'b1;
-        cmd_fifo_pop = 1'b1;
-        if (sfifo_cmd_rdata[24:12] == GenBitsCntrWidth'(1)) begin
-          cmd_gen_cnt_last = 1'b1;
-        end
-        if (cmd_len == '0) begin
-          cmd_arb_eop_o = 1'b1;
-          state_d = GenCmdChk;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
         end else begin
-          state_d = SendMOP;
-        end
-      end
-      SendMOP: begin
-        if (!cmd_fifo_zero) begin
+          cmd_gen_1st_req = 1'b1;
+          cmd_arb_sop_o = 1'b1;
           cmd_fifo_pop = 1'b1;
-          cmd_len_dec = 1'b1;
-          if (cmd_len_q == 4'h1) begin
-            cmd_arb_mop_o = 1'b1;
+          if (sfifo_cmd_rdata[24:12] == GenBitsCntrWidth'(1)) begin
+            cmd_gen_cnt_last = 1'b1;
+          end
+          if (cmd_len == '0) begin
             cmd_arb_eop_o = 1'b1;
             state_d = GenCmdChk;
           end else begin
-            cmd_arb_mop_o = 1'b1;
+            state_d = SendMOP;
+          end
+        end
+      end
+      SendMOP: begin
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          if (!cmd_fifo_zero) begin
+            cmd_fifo_pop = 1'b1;
+            cmd_len_dec = 1'b1;
+            if (cmd_len_q == 4'h1) begin
+              cmd_arb_mop_o = 1'b1;
+              cmd_arb_eop_o = 1'b1;
+              state_d = GenCmdChk;
+            end else begin
+              cmd_arb_mop_o = 1'b1;
+            end
           end
         end
       end
       GenCmdChk: begin
-        if (cmd_gen_flag_q) begin
-          cmd_gen_cnt_dec= 1'b1;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          if (cmd_gen_flag_q) begin
+            cmd_gen_cnt_dec= 1'b1;
+          end
+          state_d = CmdAck;
         end
-        state_d = CmdAck;
       end
       CmdAck: begin
-        if (cmd_ack_i) begin
-          state_d = GenReq;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          if (cmd_ack_i) begin
+            state_d = GenReq;
+          end
         end
       end
       GenReq: begin
-        // flag set if a gen request
-        if (cmd_gen_flag_q) begin
-          // must stall if genbits fifo is not clear
-          if (!sfifo_genbits_full) begin
-            if (cmd_gen_cnt == '0) begin
-              cmd_final_ack = 1'b1;
-              state_d = Idle;
-            end else begin
-              // issue a subsequent gen request
-              state_d = GenArbGnt;
-            end
-          end
-        end else begin
-          // ack for the non-gen request case
-          cmd_final_ack = 1'b1;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
           state_d = Idle;
+        end else begin
+          // flag set if a gen request
+          if (cmd_gen_flag_q) begin
+            // must stall if genbits fifo is not clear
+            if (!sfifo_genbits_full) begin
+              if (cmd_gen_cnt == '0) begin
+                cmd_final_ack = 1'b1;
+                state_d = Idle;
+              end else begin
+                // issue a subsequent gen request
+                state_d = GenArbGnt;
+              end
+            end
+          end else begin
+            // ack for the non-gen request case
+            cmd_final_ack = 1'b1;
+            state_d = Idle;
+          end
         end
       end
       GenArbGnt: begin
-        cmd_arb_req_o = 1'b1;
-        if (cmd_arb_gnt_i) begin
-          state_d = GenSOP;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          cmd_arb_req_o = 1'b1;
+          if (cmd_arb_gnt_i) begin
+            state_d = GenSOP;
+          end
         end
       end
       GenSOP: begin
-        cmd_arb_sop_o = 1'b1;
-        cmd_arb_eop_o = 1'b1;
-        cmd_gen_inc_req = 1'b1;
-        state_d = GenCmdChk;
-        // check for final genbits beat
-        if (cmd_gen_cnt == GenBitsCntrWidth'(1)) begin
-          cmd_gen_cnt_last = 1'b1;
+        if (local_escalate) begin
+          state_d = Error;
+        end else if (!cs_enable_i) begin
+          state_d = Idle;
+        end else begin
+          cmd_arb_sop_o = 1'b1;
+          cmd_arb_eop_o = 1'b1;
+          cmd_gen_inc_req = 1'b1;
+          state_d = GenCmdChk;
+          // check for final genbits beat
+          if (cmd_gen_cnt == GenBitsCntrWidth'(1)) begin
+            cmd_gen_cnt_last = 1'b1;
+          end
         end
       end
       Error: begin
diff --git a/hw/ip/csrng/rtl/csrng_main_sm.sv b/hw/ip/csrng/rtl/csrng_main_sm.sv
index c7eb613..dcf02c0 100644
--- a/hw/ip/csrng/rtl/csrng_main_sm.sv
+++ b/hw/ip/csrng/rtl/csrng_main_sm.sv
@@ -53,6 +53,9 @@
     main_sm_err_o = 1'b0;
     unique case (state_q)
       Idle: begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else
         if (enable_i) begin
           if (ctr_drbg_cmd_req_rdy_i) begin
             // signal the arbiter to grant this request
@@ -64,7 +67,9 @@
         end
       end
       ParseCmd: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           if (ctr_drbg_cmd_req_rdy_i) begin
@@ -96,7 +101,9 @@
         end
       end
       InstantPrep: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           if (flag0_i) begin
@@ -112,7 +119,9 @@
         end
       end
       InstantReq: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           instant_req_o = 1'b1;
@@ -120,7 +129,9 @@
         end
       end
       ReseedPrep: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           if (flag0_i) begin
@@ -136,7 +147,9 @@
         end
       end
       ReseedReq: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           reseed_req_o = 1'b1;
@@ -144,7 +157,9 @@
         end
       end
       GeneratePrep: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           // assumes all adata is present now
@@ -152,7 +167,9 @@
         end
       end
       GenerateReq: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           generate_req_o = 1'b1;
@@ -160,7 +177,9 @@
         end
       end
       UpdatePrep: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           // assumes all adata is present now
@@ -168,7 +187,9 @@
         end
       end
       UpdateReq: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           update_req_o = 1'b1;
@@ -176,7 +197,9 @@
         end
       end
       UninstantPrep: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           // assumes all adata is present now
@@ -184,7 +207,9 @@
         end
       end
       UninstantReq: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           uninstant_req_o = 1'b1;
@@ -192,7 +217,9 @@
         end
       end
       ClrAData: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           clr_adata_packer_o = 1'b1;
@@ -200,7 +227,9 @@
         end
       end
       CmdCompWait: begin
-        if (!enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!enable_i) begin
           state_d = Idle;
         end else begin
           if (cmd_complete_i) begin
@@ -213,9 +242,6 @@
       end
       default: state_d = Error;
     endcase
-    if (local_escalate_i) begin
-      state_d = Error;
-    end
   end
 
 endmodule
diff --git a/hw/ip/edn/rtl/edn_main_sm.sv b/hw/ip/edn/rtl/edn_main_sm.sv
index ee7ce1f..329034d 100644
--- a/hw/ip/edn/rtl/edn_main_sm.sv
+++ b/hw/ip/edn/rtl/edn_main_sm.sv
@@ -104,7 +104,9 @@
     main_sm_err_o = 1'b0;
     unique case (state_q)
       Idle: begin
-        if (boot_req_mode_i && edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (boot_req_mode_i && edn_enable_i) begin
           state_d = BootLoadIns;
         end else if (auto_req_mode_i && edn_enable_i) begin
           state_d = AutoLoadIns;
@@ -114,15 +116,31 @@
         end
       end
       BootLoadIns: begin
-        boot_wr_cmd_reg_o = 1'b1;
-        state_d = BootLoadGen;
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end
+        else begin
+          boot_wr_cmd_reg_o = 1'b1;
+          state_d = BootLoadGen;
+        end
       end
       BootLoadGen: begin
-        boot_wr_cmd_genfifo_o = 1'b1;
-        state_d = BootInsAckWait;
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end
+        else begin
+          boot_wr_cmd_genfifo_o = 1'b1;
+          state_d = BootInsAckWait;
+        end
       end
       BootInsAckWait: begin
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
           if (csrng_cmd_ack_i) begin
@@ -131,21 +149,32 @@
         end
       end
       BootCaptGenCnt: begin
-        capt_gencmd_fifo_cnt_o = 1'b1;
-        state_d = BootSendGenCmd;
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end
+        else begin
+          capt_gencmd_fifo_cnt_o = 1'b1;
+          state_d = BootSendGenCmd;
+        end
       end
       BootSendGenCmd: begin
-        boot_send_gencmd_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          boot_send_gencmd_o = 1'b1;
           if (cmd_sent_i) begin
             state_d = BootGenAckWait;
           end
         end
       end
       BootGenAckWait: begin
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
           if (csrng_cmd_ack_i) begin
@@ -154,31 +183,43 @@
         end
       end
       BootPulse: begin
-        main_sm_done_pulse_o = 1'b1;
-        state_d = BootDone;
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end else begin
+          main_sm_done_pulse_o = 1'b1;
+          state_d = BootDone;
+        end
       end
       BootDone: begin
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end
       end
       //-----------------------------------
       AutoLoadIns: begin
-        auto_set_intr_gate_o = 1'b1;
-        auto_first_ack_wait_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_set_intr_gate_o = 1'b1;
+          auto_first_ack_wait_o = 1'b1;
           if (sw_cmd_req_load_i) begin
             state_d = AutoFirstAckWait;
           end
         end
       end
       AutoFirstAckWait: begin
-        auto_first_ack_wait_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_first_ack_wait_o = 1'b1;
           if (csrng_cmd_ack_i) begin
             auto_clr_intr_gate_o = 1'b1;
             state_d = AutoDispatch;
@@ -186,20 +227,24 @@
         end
       end
       AutoAckWait: begin
-        auto_req_mode_busy_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_req_mode_busy_o = 1'b1;
           if (csrng_cmd_ack_i) begin
             state_d = AutoDispatch;
           end
         end
       end
       AutoDispatch: begin
-        auto_req_mode_busy_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_req_mode_busy_o = 1'b1;
           if (!auto_req_mode_i) begin
             main_sm_done_pulse_o = 1'b1;
             state_d = Idle;
@@ -213,39 +258,57 @@
         end
       end
       AutoCaptGenCnt: begin
-        auto_req_mode_busy_o = 1'b1;
-        capt_gencmd_fifo_cnt_o = 1'b1;
-        state_d = AutoSendGenCmd;
-      end
-      AutoSendGenCmd: begin
-        auto_req_mode_busy_o = 1'b1;
-        send_gencmd_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_req_mode_busy_o = 1'b1;
+          capt_gencmd_fifo_cnt_o = 1'b1;
+          state_d = AutoSendGenCmd;
+        end
+      end
+      AutoSendGenCmd: begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end else begin
+          auto_req_mode_busy_o = 1'b1;
+          send_gencmd_o = 1'b1;
           if (cmd_sent_i) begin
             state_d = AutoAckWait;
           end
         end
       end
       AutoCaptReseedCnt: begin
-        auto_req_mode_busy_o = 1'b1;
-        capt_rescmd_fifo_cnt_o = 1'b1;
-        state_d = AutoSendReseedCmd;
-      end
-      AutoSendReseedCmd: begin
-        auto_req_mode_busy_o = 1'b1;
-        send_rescmd_o = 1'b1;
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end else begin
+          auto_req_mode_busy_o = 1'b1;
+          capt_rescmd_fifo_cnt_o = 1'b1;
+          state_d = AutoSendReseedCmd;
+        end
+      end
+      AutoSendReseedCmd: begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
+          state_d = Idle;
+        end else begin
+          auto_req_mode_busy_o = 1'b1;
+          send_rescmd_o = 1'b1;
           if (cmd_sent_i) begin
             state_d = AutoAckWait;
           end
         end
       end
       SWPortMode: begin
-        if (!edn_enable_i) begin
+        if (local_escalate_i) begin
+          state_d = Error;
+        end else if (!edn_enable_i) begin
           state_d = Idle;
         end
       end
@@ -254,9 +317,6 @@
       end
       default: state_d = Error;
     endcase
-    if (local_escalate_i) begin
-      state_d = Error;
-    end
   end
 
 endmodule