diff --git a/hdl/common/network_stack.sv b/hdl/common/network_stack.sv
index d056e152022d20168bd8e43b1b38da1061c80da1..ad233acde4f5d6cc714d36b08ae2e9fb0a53b8a2 100755
--- a/hdl/common/network_stack.sv
+++ b/hdl/common/network_stack.sv
@@ -1599,13 +1599,6 @@ register_slice_wrapper #(.WIDTH(WIDTH)) axis_register_arp_in_slice(
  .aresetn(net_aresetn),
  .s_axis(axis_iph_to_arp_slice),
  .m_axis(axis_arp_slice_to_arp)
-);
- // ICMP Input Slice
-register_slice_wrapper #(.WIDTH(WIDTH)) axis_register_icmp_in_slice(
-  .aclk(net_clk),
-  .aresetn(net_aresetn),
-  .s_axis(axis_iph_to_icmp_slice),
-  .m_axis(axis_icmp_slice_to_icmp)
 );
  // UDP Input Slice
 register_slice_wrapper #(.WIDTH(WIDTH)) axis_register_upd_in_slice(
@@ -1642,6 +1635,72 @@ register_slice_wrapper #(.WIDTH(WIDTH)) axis_register_roce_out_slice(
 .s_axis(axis_roce_to_roce_slice),
 .m_axis(axis_roce_slice_to_merge)
 );
+generate
+if (WIDTH==64) begin
+// ICMP Input Slice
+register_slice_wrapper #(.WIDTH(WIDTH)) axis_register_icmp_in_slice(
+  .aclk(net_clk),
+  .aresetn(net_aresetn),
+  .s_axis(axis_iph_to_icmp_slice),
+  .m_axis(axis_icmp_slice_to_icmp)
+);
+end
+if (WIDTH==128) begin
+// ICMP Input Slice
+//axis_register_slice_512 axis_register_icmp_in_slice(
+axis_128_to_64_converter icmp_in_data_converter (
+  .aclk(net_clk),
+  .aresetn(net_aresetn),
+  .s_axis_tvalid(axis_iph_to_icmp_slice.valid),
+  .s_axis_tready(axis_iph_to_icmp_slice.ready),
+  .s_axis_tdata(axis_iph_to_icmp_slice.data),
+  .s_axis_tkeep(axis_iph_to_icmp_slice.keep),
+  .s_axis_tlast(axis_iph_to_icmp_slice.last),
+  .m_axis_tvalid(axis_icmp_slice_to_icmp.valid),
+  .m_axis_tready(axis_icmp_slice_to_icmp.ready),
+  .m_axis_tdata(axis_icmp_slice_to_icmp.data),
+  .m_axis_tkeep(axis_icmp_slice_to_icmp.keep),
+  .m_axis_tlast(axis_icmp_slice_to_icmp.last)
+);
+end
+if (WIDTH==256) begin
+// ICMP Input Slice
+//axis_register_slice_512 axis_register_icmp_in_slice(
+axis_256_to_64_converter icmp_in_data_converter (
+  .aclk(net_clk),
+  .aresetn(net_aresetn),
+  .s_axis_tvalid(axis_iph_to_icmp_slice.valid),
+  .s_axis_tready(axis_iph_to_icmp_slice.ready),
+  .s_axis_tdata(axis_iph_to_icmp_slice.data),
+  .s_axis_tkeep(axis_iph_to_icmp_slice.keep),
+  .s_axis_tlast(axis_iph_to_icmp_slice.last),
+  .m_axis_tvalid(axis_icmp_slice_to_icmp.valid),
+  .m_axis_tready(axis_icmp_slice_to_icmp.ready),
+  .m_axis_tdata(axis_icmp_slice_to_icmp.data),
+  .m_axis_tkeep(axis_icmp_slice_to_icmp.keep),
+  .m_axis_tlast(axis_icmp_slice_to_icmp.last)
+);
+end
+if (WIDTH==512) begin
+// ICMP Input Slice
+//axis_register_slice_512 axis_register_icmp_in_slice(
+axis_512_to_64_converter icmp_in_data_converter (
+  .aclk(net_clk),
+  .aresetn(net_aresetn),
+  .s_axis_tvalid(axis_iph_to_icmp_slice.valid),
+  .s_axis_tready(axis_iph_to_icmp_slice.ready),
+  .s_axis_tdata(axis_iph_to_icmp_slice.data),
+  .s_axis_tkeep(axis_iph_to_icmp_slice.keep),
+  .s_axis_tlast(axis_iph_to_icmp_slice.last),
+  .m_axis_tvalid(axis_icmp_slice_to_icmp.valid),
+  .m_axis_tready(axis_icmp_slice_to_icmp.ready),
+  .m_axis_tdata(axis_icmp_slice_to_icmp.data),
+  .m_axis_tkeep(axis_icmp_slice_to_icmp.keep),
+  .m_axis_tlast(axis_icmp_slice_to_icmp.last)
+);
+end
+endgenerate
+
 
 /*
  * Network Controller
diff --git a/projects/network_stack.tcl b/projects/network_stack.tcl
index fb7fd4b9874a37bf3ce41839915e20e1be9b3320..ad7b57d1b5bf8eefd195787423d74ba0dd6f1b15 100755
--- a/projects/network_stack.tcl
+++ b/projects/network_stack.tcl
@@ -118,11 +118,21 @@ set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {8} CONFIG.M_TDATA_NUM_BYTES {
 generate_target {instantiation_template} [get_files $device_ip_dir/axis_64_to_128_converter/axis_64_to_128_converter.xci]
 update_compile_order -fileset sources_1
 
+create_ip -name axis_dwidth_converter -vendor xilinx.com -library ip -version 1.1 -module_name axis_128_to_64_converter -dir $device_ip_dir
+set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {16} CONFIG.M_TDATA_NUM_BYTES {8} CONFIG.HAS_TLAST {1} CONFIG.HAS_TKEEP {1} CONFIG.HAS_MI_TKEEP {1} CONFIG.Component_Name {axis_128_to_64_converter}] [get_ips axis_128_to_64_converter]
+generate_target {instantiation_template} [get_files $device_ip_dir/axis_128_to_64_converter/axis_128_to_64_converter.xci]
+update_compile_order -fileset sources_1
+
 create_ip -name axis_dwidth_converter -vendor xilinx.com -library ip -version 1.1 -module_name axis_64_to_256_converter -dir $device_ip_dir
 set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {8} CONFIG.M_TDATA_NUM_BYTES {32} CONFIG.HAS_TLAST {1} CONFIG.HAS_TKEEP {1} CONFIG.HAS_MI_TKEEP {1} CONFIG.TDEST_WIDTH {1} CONFIG.Component_Name {axis_64_to_256_converter}] [get_ips axis_64_to_256_converter]
 generate_target {instantiation_template} [get_files $device_ip_dir/axis_64_to_256_converter/axis_64_to_256_converter.xci]
 update_compile_order -fileset sources_1
 
+create_ip -name axis_dwidth_converter -vendor xilinx.com -library ip -version 1.1 -module_name axis_256_to_64_converter -dir $device_ip_dir
+set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {32} CONFIG.M_TDATA_NUM_BYTES {8} CONFIG.HAS_TLAST {1} CONFIG.HAS_TKEEP {1} CONFIG.HAS_MI_TKEEP {1} CONFIG.Component_Name {axis_256to_64_converter}] [get_ips axis_256_to_64_converter]
+generate_target {instantiation_template} [get_files $device_ip_dir/axis_256_to_64_converter/axis_256_to_64_converter.xci]
+update_compile_order -fileset sources_1
+
 #HLS IP cores
 
 create_ip -name toe -vendor ethz.systems -library hls -version 1.6 -module_name toe_ip -dir $device_ip_dir