diff --git a/rtl/ip_eth_rx.v b/rtl/ip_eth_rx.v
index 5dd99676f209f451d33756981d955aeddd9b9bd4..c8bad790f476213ddfcaf698cc9f720c5d321daa 100644
--- a/rtl/ip_eth_rx.v
+++ b/rtl/ip_eth_rx.v
@@ -361,13 +361,13 @@ always @* begin
             s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
 
             m_ip_payload_axis_tdata_int = s_eth_payload_axis_tdata;
-            m_ip_payload_axis_tvalid_int = s_eth_payload_axis_tvalid;
             m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser;
 
             if (s_eth_payload_axis_tready && s_eth_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd1;
+                m_ip_payload_axis_tvalid_int = 1'b1;
                 if (s_eth_payload_axis_tlast) begin
                     if (word_count_reg > 16'd1) begin
                         // end of frame, but length does not match
@@ -395,7 +395,6 @@ always @* begin
             s_eth_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
 
             m_ip_payload_axis_tdata_int = last_word_data_reg;
-            m_ip_payload_axis_tvalid_int = s_eth_payload_axis_tvalid && s_eth_payload_axis_tlast;
             m_ip_payload_axis_tlast_int = s_eth_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_eth_payload_axis_tuser;
 
@@ -403,6 +402,7 @@ always @* begin
                 if (s_eth_payload_axis_tlast) begin
                     s_eth_hdr_ready_next = !m_ip_hdr_valid_next;
                     s_eth_payload_axis_tready_next = 1'b0;
+                    m_ip_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_READ_PAYLOAD_LAST;
diff --git a/rtl/ip_eth_rx_64.v b/rtl/ip_eth_rx_64.v
index 8f0e334254f1d77f830362ae759f186fd6850c2d..b33dd67d81f9a928da4bf54a57f1fd03c47fe99d 100644
--- a/rtl/ip_eth_rx_64.v
+++ b/rtl/ip_eth_rx_64.v
@@ -388,7 +388,6 @@ always @* begin
 
             m_ip_payload_axis_tdata_int = shift_eth_payload_axis_tdata;
             m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep;
-            m_ip_payload_axis_tvalid_int = shift_eth_payload_axis_tvalid;
             m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser;
 
@@ -398,6 +397,7 @@ always @* begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd8;
                 transfer_in_save = 1'b1;
+                m_ip_payload_axis_tvalid_int = 1'b1;
                 if (word_count_reg <= 8) begin
                     // have entire payload
                     m_ip_payload_axis_tkeep_int = shift_eth_payload_axis_tkeep & count2keep(word_count_reg);
@@ -462,7 +462,6 @@ always @* begin
 
             m_ip_payload_axis_tdata_int = last_word_data_reg;
             m_ip_payload_axis_tkeep_int = last_word_keep_reg;
-            m_ip_payload_axis_tvalid_int = shift_eth_payload_axis_tvalid && shift_eth_payload_axis_tlast;
             m_ip_payload_axis_tlast_int = shift_eth_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = shift_eth_payload_axis_tuser;
 
@@ -472,6 +471,7 @@ always @* begin
                     s_eth_payload_axis_tready_next = 1'b0;
                     flush_save = 1'b1;
                     s_eth_hdr_ready_next = !m_ip_hdr_valid_next;
+                    m_ip_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_READ_PAYLOAD_LAST;
diff --git a/rtl/ip_eth_tx.v b/rtl/ip_eth_tx.v
index 4b52dd49e259993f331105e62548216774a41067..bfe0c705c2e5ed8c338737ea189699dbec246a89 100644
--- a/rtl/ip_eth_tx.v
+++ b/rtl/ip_eth_tx.v
@@ -298,13 +298,13 @@ always @* begin
             s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early;
 
             m_eth_payload_axis_tdata_int = s_ip_payload_axis_tdata;
-            m_eth_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
             m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
             if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 6'd1;
+                m_eth_payload_axis_tvalid_int = 1'b1;
                 if (s_ip_payload_axis_tlast) begin
                     if (word_count_reg != 16'd1) begin
                         // end of frame, but length does not match
@@ -332,7 +332,6 @@ always @* begin
             s_ip_payload_axis_tready_next = m_eth_payload_axis_tready_int_early;
 
             m_eth_payload_axis_tdata_int = last_word_data_reg;
-            m_eth_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
             m_eth_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_eth_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
@@ -340,6 +339,7 @@ always @* begin
                 if (s_ip_payload_axis_tlast) begin
                     s_ip_hdr_ready_next = !m_eth_hdr_valid_next;
                     s_ip_payload_axis_tready_next = 1'b0;
+                    m_eth_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_WRITE_PAYLOAD_LAST;
diff --git a/rtl/ip_eth_tx_64.v b/rtl/ip_eth_tx_64.v
index f8caa3b4108976c0544b2d0292034037c3e82496..412447100f75238e0bbec5850010a6f1a1d98067 100644
--- a/rtl/ip_eth_tx_64.v
+++ b/rtl/ip_eth_tx_64.v
@@ -408,7 +408,6 @@ always @* begin
 
             m_eth_payload_axis_tdata_int = shift_ip_payload_axis_tdata;
             m_eth_payload_axis_tkeep_int = shift_ip_payload_axis_tkeep;
-            m_eth_payload_axis_tvalid_int = shift_ip_payload_axis_tvalid;
             m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast;
             m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser;
 
@@ -418,6 +417,7 @@ always @* begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd8;
                 transfer_in_save = 1'b1;
+                m_eth_payload_axis_tvalid_int = 1'b1;
                 if (word_count_reg <= 8) begin
                     // have entire payload
                     m_eth_payload_axis_tkeep_int = count2keep(word_count_reg);
@@ -458,7 +458,6 @@ always @* begin
 
             m_eth_payload_axis_tdata_int = last_word_data_reg;
             m_eth_payload_axis_tkeep_int = last_word_keep_reg;
-            m_eth_payload_axis_tvalid_int = shift_ip_payload_axis_tvalid && shift_ip_payload_axis_tlast;
             m_eth_payload_axis_tlast_int = shift_ip_payload_axis_tlast;
             m_eth_payload_axis_tuser_int = shift_ip_payload_axis_tuser;
 
@@ -467,6 +466,7 @@ always @* begin
                 if (shift_ip_payload_axis_tlast) begin
                     s_ip_hdr_ready_next = !m_eth_hdr_valid_next;
                     s_ip_payload_axis_tready_next = 1'b0;
+                    m_eth_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_WRITE_PAYLOAD_LAST;
diff --git a/rtl/udp_ip_rx.v b/rtl/udp_ip_rx.v
index 9b1a6846765c4fa7d00151b5bb79e7dbaa72df6b..7096e5d4c87972c3e81f5ca260bc9683822e30c0 100644
--- a/rtl/udp_ip_rx.v
+++ b/rtl/udp_ip_rx.v
@@ -320,13 +320,13 @@ always @* begin
             s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early;
 
             m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata;
-            m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
             m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
             if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd1;
+                m_udp_payload_axis_tvalid_int = 1'b1;
                 if (s_ip_payload_axis_tlast) begin
                     if (word_count_reg != 16'd1) begin
                         // end of frame, but length does not match
@@ -354,7 +354,6 @@ always @* begin
             s_ip_payload_axis_tready_next = m_udp_payload_axis_tready_int_early;
 
             m_udp_payload_axis_tdata_int = last_word_data_reg;
-            m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
             m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
@@ -362,6 +361,7 @@ always @* begin
                 if (s_ip_payload_axis_tlast) begin
                     s_ip_hdr_ready_next = !m_udp_hdr_valid_next;
                     s_ip_payload_axis_tready_next = 1'b0;
+                    m_udp_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_READ_PAYLOAD_LAST;
diff --git a/rtl/udp_ip_rx_64.v b/rtl/udp_ip_rx_64.v
index 65bbc41839a5c0e435e75bb2f8e4321c473cc716..352e91ce79b04b9a0b35ff79bef6d180ab477c0e 100644
--- a/rtl/udp_ip_rx_64.v
+++ b/rtl/udp_ip_rx_64.v
@@ -328,7 +328,6 @@ always @* begin
 
             m_udp_payload_axis_tdata_int = s_ip_payload_axis_tdata;
             m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep;
-            m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid;
             m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
@@ -337,6 +336,7 @@ always @* begin
             if (s_ip_payload_axis_tready && s_ip_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd8;
+                m_udp_payload_axis_tvalid_int = 1'b1;
                 if (word_count_reg <= 8) begin
                     // have entire payload
                     m_udp_payload_axis_tkeep_int = s_ip_payload_axis_tkeep & count2keep(word_count_reg);
@@ -375,7 +375,6 @@ always @* begin
 
             m_udp_payload_axis_tdata_int = last_word_data_reg;
             m_udp_payload_axis_tkeep_int = last_word_keep_reg;
-            m_udp_payload_axis_tvalid_int = s_ip_payload_axis_tvalid && s_ip_payload_axis_tlast;
             m_udp_payload_axis_tlast_int = s_ip_payload_axis_tlast;
             m_udp_payload_axis_tuser_int = s_ip_payload_axis_tuser;
 
@@ -383,6 +382,7 @@ always @* begin
                 if (s_ip_payload_axis_tlast) begin
                     s_ip_hdr_ready_next = !m_udp_hdr_valid_next;
                     s_ip_payload_axis_tready_next = 1'b0;
+                    m_udp_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_READ_PAYLOAD_LAST;
diff --git a/rtl/udp_ip_tx.v b/rtl/udp_ip_tx.v
index 25398e7c263759899a30e43c3730c8855fc22b92..8224cd831a478d4bebf6771ae01a05e4032e8438 100644
--- a/rtl/udp_ip_tx.v
+++ b/rtl/udp_ip_tx.v
@@ -289,13 +289,13 @@ always @* begin
             s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
 
             m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata;
-            m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid;
             m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
 
             if (s_udp_payload_axis_tready && s_udp_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd1;
+                m_ip_payload_axis_tvalid_int = 1'b1;
                 if (s_udp_payload_axis_tlast) begin
                     if (word_count_reg != 16'd1) begin
                         // end of frame, but length does not match
@@ -323,7 +323,6 @@ always @* begin
             s_udp_payload_axis_tready_next = m_ip_payload_axis_tready_int_early;
 
             m_ip_payload_axis_tdata_int = last_word_data_reg;
-            m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid && s_udp_payload_axis_tlast;
             m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
 
@@ -331,6 +330,7 @@ always @* begin
                 if (s_udp_payload_axis_tlast) begin
                     s_udp_hdr_ready_next = !m_ip_hdr_valid_next;
                     s_udp_payload_axis_tready_next = 1'b0;
+                    m_ip_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_WRITE_PAYLOAD_LAST;
diff --git a/rtl/udp_ip_tx_64.v b/rtl/udp_ip_tx_64.v
index b027e3e7cfbb2c455bb74334bade1e89c4adaa5d..c3faa1c07e752034bbd49ec54aa6b51971b53efa 100644
--- a/rtl/udp_ip_tx_64.v
+++ b/rtl/udp_ip_tx_64.v
@@ -325,7 +325,6 @@ always @* begin
 
             m_ip_payload_axis_tdata_int = s_udp_payload_axis_tdata;
             m_ip_payload_axis_tkeep_int = s_udp_payload_axis_tkeep;
-            m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid;
             m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
 
@@ -334,6 +333,7 @@ always @* begin
             if (m_ip_payload_axis_tready_int_reg && s_udp_payload_axis_tvalid) begin
                 // word transfer through
                 word_count_next = word_count_reg - 16'd8;
+                m_ip_payload_axis_tvalid_int = 1'b1;
                 if (word_count_reg <= 8) begin
                     // have entire payload
                     m_ip_payload_axis_tkeep_int = count2keep(word_count_reg);
@@ -372,7 +372,6 @@ always @* begin
 
             m_ip_payload_axis_tdata_int = last_word_data_reg;
             m_ip_payload_axis_tkeep_int = last_word_keep_reg;
-            m_ip_payload_axis_tvalid_int = s_udp_payload_axis_tvalid && s_udp_payload_axis_tlast;
             m_ip_payload_axis_tlast_int = s_udp_payload_axis_tlast;
             m_ip_payload_axis_tuser_int = s_udp_payload_axis_tuser;
 
@@ -380,6 +379,7 @@ always @* begin
                 if (s_udp_payload_axis_tlast) begin
                     s_udp_hdr_ready_next = !m_ip_hdr_valid_next;
                     s_udp_payload_axis_tready_next = 1'b0;
+                    m_ip_payload_axis_tvalid_int = 1'b1;
                     state_next = STATE_IDLE;
                 end else begin
                     state_next = STATE_WRITE_PAYLOAD_LAST;