[edn/rtl] endpoint hold data for async requestors

EDN data will hold until the sebsequent request.
Waveform documentation has also been updated.
Text for the waveform also updated.
Commented out text removed for N hold data cycles.
Missed a few lines of old code to remove.

Signed-off-by: Mark Branstad <mark.branstad@wdc.com>
diff --git a/hw/ip/edn/doc/_index.md b/hw/ip/edn/doc/_index.md
index bc79230..741ed7b 100755
--- a/hw/ip/edn/doc/_index.md
+++ b/hw/ip/edn/doc/_index.md
@@ -199,18 +199,18 @@
 ##### Peripheral Hardware Interface - Req/Ack
 The following waveform shows an example of how the peripheral hardware interface works.
 This example shows the case where the boot-time mode in the ENTROPY_SRC block is enabled.
+This example also shows the case where the next request will change the prior data by popping the data FIFO.
 
 {{< wavejson >}}
 {signal: [
-   {name: 'clk'           , wave: 'p...|.........|.......'},
-   {name: 'edn_enable'    , wave: '01..|.........|.......'},
-   {name: 'edn_req'       , wave: '0..1|..01.0..1|.....0.'},
-   {name: 'edn_ack'       , wave: '0...|.10.10...|....10.'},
-   {name: 'edn_bus[31:0]' , wave: '0...|.30.30...|....30.', data: ['es0','es1','es2']},
-   {name: 'edn_fips'      , wave: '0...|....10...|....10.'},
+   {name: 'clk'           , wave: 'p...|...........|......'},
+   {name: 'edn_enable'    , wave: '01..|...........|......'},
+   {name: 'edn_req'       , wave: '0..1|..0..1.0...|1.0...'},
+   {name: 'edn_ack'       , wave: '0...|.10...10...|.10...'},
+   {name: 'edn_bus[31:0]' , wave: '0...|3....3.....|3.....', data: ['es0','es1','es2']},
+   {name: 'edn_fips'      , wave: '0...|...........|......'},
  {},
-]}
-{{< /wavejson >}}
+]}{{< /wavejson >}}
 
 # Programmers Guide
 
diff --git a/hw/ip/edn/rtl/edn_ack_sm.sv b/hw/ip/edn/rtl/edn_ack_sm.sv
index b2d5198..d4151fe 100755
--- a/hw/ip/edn/rtl/edn_ack_sm.sv
+++ b/hw/ip/edn/rtl/edn_ack_sm.sv
@@ -15,26 +15,29 @@
   output logic               fifo_pop_o
 );
 
-  // Encoding generated with ./sparse-fsm-encode.py -d 3 -m 3 -n 6 -s 4028491767
-  // Hamming distance histogram:
-  //
-  // 0: --
-  // 1: --
-  // 2: --
-  // 3: |||||||||||||||||||| (33.33%)
-  // 4: |||||||||||||||||||| (33.33%)
-  // 5: |||||||||||||||||||| (33.33%)
-  // 6: --
-  //
-  // Minimum Hamming distance: 3
-  // Maximum Hamming distance: 5
-  //
+// Encoding generated with:
+// $ ./sparse-fsm-encode.py -d 3 -m 4 -n 6 \
+//      -s 3468982201 --language=sv
+//
+// Hamming distance histogram:
+//
+//  0: --
+//  1: --
+//  2: --
+//  3: |||||||||||||||||||| (66.67%)
+//  4: ||||| (16.67%)
+//  5: --
+//  6: ||||| (16.67%)
+//
+// Minimum Hamming distance: 3
+// Maximum Hamming distance: 6
+//
 
   localparam int StateWidth = 6;
   typedef enum logic [StateWidth-1:0] {
-    Idle      = 6'b110101, // idle (hamming distance = 3)
-    AckImmed  = 6'b001011, // ack the request immediately
-    AckWait   = 6'b111010  // wait until the fifo has an entry
+    Idle      = 6'b010011, // idle (hamming distance = 3)
+    DataWait  = 6'b001001, // wait for data to return
+    AckPls    = 6'b101100  // signal ack to endpoint TODO: regen states
   } state_e;
 
   state_e state_d, state_q;
@@ -63,24 +66,20 @@
       Idle: begin
         if (req_i) begin
           if (fifo_not_empty_i) begin
-            state_d = AckImmed;
-          end else begin
-            state_d = AckWait;
+            fifo_pop_o = 1'b1;
           end
+          state_d = DataWait;
         end
       end
-      AckImmed: begin
-        ack_o = 1'b1;
-        fifo_pop_o = 1'b1;
-        state_d = Idle;
-      end
-      AckWait: begin
+      DataWait: begin
         if (fifo_not_empty_i) begin
-          ack_o = 1'b1;
-          fifo_pop_o = 1'b1;
-          state_d = Idle;
+          state_d = AckPls;
         end
       end
+      AckPls: begin
+        ack_o = 1'b1;
+        state_d = Idle;
+      end
       default: state_d = Idle;
     endcase
   end
diff --git a/hw/ip/edn/rtl/edn_core.sv b/hw/ip/edn/rtl/edn_core.sv
index 1f2f112..63c25ab 100644
--- a/hw/ip/edn/rtl/edn_core.sv
+++ b/hw/ip/edn/rtl/edn_core.sv
@@ -112,7 +112,6 @@
   logic                               sfifo_gencmd_not_full;
   logic                               sfifo_gencmd_not_empty;
 
-
   // flops
   logic [31:0]                        cs_cmd_req_q, cs_cmd_req_d;
   logic                               cs_cmd_req_vld_q, cs_cmd_req_vld_d;
@@ -513,7 +512,7 @@
 
     // gate returned data
     assign edn_o[i].edn_ack = packer_ep_ack[i];
-    assign edn_o[i].edn_bus = packer_ep_ack[i] ? packer_ep_rdata[i] : '0;
+    assign edn_o[i].edn_bus = packer_ep_rdata[i];
 
     edn_ack_sm u_edn_ack_sm_ep (
       .clk_i            (clk_i),