diff --git a/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd b/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd
index 0b1cf79bcdf78a9c2d1a00407bad000069b48014..1aeeb57d843fad84551b8e868d140a2b48a327aa 100644
--- a/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd
+++ b/libraries/io/nw_10GbE/src/vhdl/nw_arp_request.vhd
@@ -75,8 +75,12 @@ ARCHITECTURE rtl of nw_arp_request IS
   CONSTANT c_dp_field_blk_snk_data_w : NATURAL := field_slv_len(c_hdr_field_arr);
   CONSTANT c_dp_field_blk_src_data_w : NATURAL := c_data_w;
 
-  SIGNAL pps_cnt : NATURAL := 0;
-  SIGNAL trigger : BOOLEAN := FALSE;
+  SIGNAL valid_sha : STD_LOGIC := '0';
+  SIGNAL valid_spa : STD_LOGIC := '0';
+  SIGNAL valid_tpa : STD_LOGIC := '0';
+  SIGNAL valid_arp : STD_LOGIC := '0';
+  SIGNAL pps_cnt   : NATURAL   := 0;
+  SIGNAL trigger   : BOOLEAN   := FALSE;
 
   SIGNAL dp_field_blk_snk_in      : t_dp_sosi := c_dp_sosi_rst;
   SIGNAL nxt_dp_field_blk_snk_in  : t_dp_sosi := c_dp_sosi_rst;
@@ -96,33 +100,46 @@ BEGIN
     nxt_dp_field_blk_snk_in.data(field_hi(c_hdr_field_arr, "arp_spa")     DOWNTO field_lo(c_hdr_field_arr, "arp_spa")) <= arp_spa;
     nxt_dp_field_blk_snk_in.data(field_hi(c_hdr_field_arr, "arp_tpa")     DOWNTO field_lo(c_hdr_field_arr, "arp_tpa")) <= arp_tpa;
   END PROCESS;
-     
+
   -- pps counter process setting sop, eop and valid
   p_dp_pps : PROCESS (dp_clk, dp_rst)
   BEGIN
     IF dp_rst = '1' THEN
+      valid_sha <= '0';
+      valid_spa <= '0';
+      valid_tpa <= '0';
+      valid_arp <= '0';
       trigger <= FALSE;
       pps_cnt <= 0;
       dp_field_blk_snk_in <= c_dp_sosi_rst;
     ELSIF RISING_EDGE(dp_clk) THEN
+      -- Use signal to indicate if ARP can be enabled.
+      valid_sha <= vector_or(arp_sha);
+      valid_spa <= vector_or(arp_spa);
+      valid_tpa <= vector_or(arp_tpa);
+      valid_arp <= valid_sha AND valid_spa AND valid_tpa;
+      IF valid_arp = '1' THEN
+        dp_field_blk_snk_in <= nxt_dp_field_blk_snk_in;
+        IF trigger AND dp_field_blk_snk_out.ready = '1' AND dp_field_blk_snk_out.xon = '1' THEN
+          trigger <= FALSE;
+          dp_field_blk_snk_in.sop   <= '1';
+          dp_field_blk_snk_in.eop   <= '1';
+          dp_field_blk_snk_in.valid <= '1';
+        END IF;
 
-      dp_field_blk_snk_in <= nxt_dp_field_blk_snk_in;
-      IF trigger AND dp_field_blk_snk_out.ready = '1' AND dp_field_blk_snk_out.xon = '1' THEN
-        trigger <= FALSE;
-        dp_field_blk_snk_in.sop   <= '1';
-        dp_field_blk_snk_in.eop   <= '1';
-        dp_field_blk_snk_in.valid <= '1';
-      END IF;
-
-      IF dp_pps = '1' THEN
-        IF pps_cnt < g_period_s-1 THEN
-          pps_cnt <= pps_cnt + 1;
-        ELSE
-          pps_cnt <= 0;
-          trigger <= TRUE;
+        IF dp_pps = '1' THEN
+          IF pps_cnt < g_period_s-1 THEN
+            pps_cnt <= pps_cnt + 1;
+          ELSE
+            pps_cnt <= 0;
+            trigger <= TRUE;
+          END IF;
         END IF;
+      ELSE
+        trigger <= FALSE;
+        pps_cnt <= 0;
+        dp_field_blk_snk_in <= c_dp_sosi_rst;
       END IF;
-
     END IF;
   END PROCESS;