OpenCores
URL https://opencores.org/ocsvn/ha1588/ha1588/trunk

Subversion Repositories ha1588

[/] [ha1588/] [trunk/] [rtl/] [tsu/] [ptp_parser.v] - Diff between revs 34 and 35

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 34 Rev 35
Line 45... Line 45...
  end
  end
end
end
 
 
// packet parser: counter
// packet parser: counter
reg [ 9:0] int_cnt, bypass_ipv4_cnt, bypass_ipv6_cnt, bypass_udp_cnt, ptp_cnt;
reg [ 9:0] int_cnt, bypass_ipv4_cnt, bypass_ipv6_cnt, bypass_udp_cnt, ptp_cnt;
reg bypass_vlan, ptp_l2, bypass_ipv4, bypass_ipv6, found_udp, bypass_udp, ptp_l4, ptp_event;
reg bypass_vlan, ptp_l2, bypass_mpls, bypass_ipv4, bypass_ipv6, found_udp, bypass_udp, ptp_l4, ptp_event;
reg [ 3:0] ptp_msgid;
reg [ 3:0] ptp_msgid;
reg [15:0] ptp_seqid;
reg [15:0] ptp_seqid;
always @(posedge rst or posedge clk) begin
always @(posedge rst or posedge clk) begin
  if (rst) begin
  if (rst) begin
    int_cnt <= 10'd0;
    int_cnt <= 10'd0;
Line 59... Line 59...
  end
  end
  else begin
  else begin
    if (int_valid && int_sop)
    if (int_valid && int_sop)
      int_cnt <= 10'd0;
      int_cnt <= 10'd0;
    else if (int_valid)
    else if (int_valid)
      int_cnt <= int_cnt + 10'd1 - bypass_vlan - (bypass_ipv4 || bypass_ipv6 || bypass_udp);
      int_cnt <= int_cnt + 10'd1 - bypass_vlan - bypass_mpls - (bypass_ipv4 || bypass_ipv6 || bypass_udp);
 
 
    if (int_valid && int_sop)
    if (int_valid && int_sop)
      bypass_ipv4_cnt <= 10'd0;
      bypass_ipv4_cnt <= 10'd0;
    else if (int_valid && bypass_ipv4)
    else if (int_valid && bypass_ipv4)
      bypass_ipv4_cnt <= bypass_ipv4_cnt + 10'd1;
      bypass_ipv4_cnt <= bypass_ipv4_cnt + 10'd1;
Line 87... Line 87...
 
 
// packet parser: comparator
// packet parser: comparator
always @(posedge rst or posedge clk) begin
always @(posedge rst or posedge clk) begin
  if (rst) begin
  if (rst) begin
    bypass_vlan  <= 1'b0;
    bypass_vlan  <= 1'b0;
 
    bypass_mpls  <= 1'b0;
    bypass_ipv4  <= 1'b0;
    bypass_ipv4  <= 1'b0;
    bypass_ipv6  <= 1'b0;
    bypass_ipv6  <= 1'b0;
    found_udp    <= 1'b0;
    found_udp    <= 1'b0;
    bypass_udp   <= 1'b0;
    bypass_udp   <= 1'b0;
    ptp_l2    <= 1'b0;
    ptp_l2    <= 1'b0;
    ptp_l4    <= 1'b0;
    ptp_l4    <= 1'b0;
    ptp_event <= 1'b0;
    ptp_event <= 1'b0;
  end
  end
  else if (int_valid && int_sop) begin
  else if (int_valid && int_sop) begin
    bypass_vlan  <= 1'b0;
    bypass_vlan  <= 1'b0;
 
    bypass_mpls  <= 1'b0;
    bypass_ipv4  <= 1'b0;
    bypass_ipv4  <= 1'b0;
    bypass_ipv6  <= 1'b0;
    bypass_ipv6  <= 1'b0;
    found_udp    <= 1'b0;
    found_udp    <= 1'b0;
    bypass_udp   <= 1'b0;
    bypass_udp   <= 1'b0;
    ptp_l2    <= 1'b0;
    ptp_l2    <= 1'b0;
Line 116... Line 118...
    else if (int_valid && int_cnt==10'd4 && int_data[31:16]==16'h8100 && bypass_vlan)  // svlan_type == cvlan
    else if (int_valid && int_cnt==10'd4 && int_data[31:16]==16'h8100 && bypass_vlan)  // svlan_type == cvlan
      bypass_vlan <= 1'b1;
      bypass_vlan <= 1'b1;
    else if (int_valid && bypass_vlan)
    else if (int_valid && bypass_vlan)
      bypass_vlan <= 1'b0;
      bypass_vlan <= 1'b0;
 
 
 
    // bypass mpls
 
    if      (int_valid && (int_cnt==10'd3 || bypass_vlan && int_cnt==10'd4) &&
 
            (int_data[31:16]==16'h8847 || int_data[31:16]==16'h8848))  // ether_type == mpls
 
      bypass_mpls <= 1'b1;
 
    else if (int_valid &&  int_cnt==10'd4 && bypass_mpls &&
 
             int_data[24]==1'b0)  // bottom of label stack == 0
 
      bypass_mpls <= 1'b1;
 
    else if (int_valid && bypass_mpls)
 
      bypass_mpls <= 1'b0;
 
 
    // bypass ipv4
    // bypass ipv4
    if      (int_valid && (int_cnt==10'd3 || bypass_vlan && int_cnt==10'd4) && bypass_ipv4_cnt==10'd0 &&
    if      (int_valid && (int_cnt==10'd3 || (bypass_vlan || bypass_mpls) && int_cnt==10'd4) && bypass_ipv4_cnt==10'd0 &&
             int_data[31:16]==16'h0800 && int_data[15:12]==4'h4)  // ether_type == ipv4, ip_version == 4
            (int_data[31:16]==16'h0800 || bypass_mpls) && int_data[15:12]==4'h4)  // ether_type == ipv4, ip_version == 4
      bypass_ipv4 <= 1'b1;
      bypass_ipv4 <= 1'b1;
    else if (int_valid && bypass_ipv4_cnt==10'd4)
    else if (int_valid && bypass_ipv4_cnt==10'd4)
      bypass_ipv4 <= 1'b0;
      bypass_ipv4 <= 1'b0;
 
 
    // bypass ipv6
    // bypass ipv6
    if      (int_valid && (int_cnt==10'd3 || bypass_vlan && int_cnt==10'd4) && bypass_ipv6_cnt==10'd0 &&
    if      (int_valid && (int_cnt==10'd3 || (bypass_vlan || bypass_mpls) && int_cnt==10'd4) && bypass_ipv6_cnt==10'd0 &&
             int_data[31:16]==16'h86dd && int_data[15:12]==4'h6)  // ether_type == ipv6, ip_version == 6
            (int_data[31:16]==16'h86dd || bypass_mpls) && int_data[15:12]==4'h6)  // ether_type == ipv6, ip_version == 6
      bypass_ipv6 <= 1'b1;
      bypass_ipv6 <= 1'b1;
    else if (int_valid && bypass_ipv6_cnt==10'd9)
    else if (int_valid && bypass_ipv6_cnt==10'd9)
      bypass_ipv6 <= 1'b0;
      bypass_ipv6 <= 1'b0;
 
 
    // check if it is UDP
    // check if it is UDP
Line 156... Line 168...
 
 
    // check if it is PTP Event message
    // check if it is PTP Event message
    if      (int_valid && (int_cnt==10'd3 || bypass_vlan && int_cnt==10'd4) && int_data[31:16]==16'h88F7       &&
    if      (int_valid && (int_cnt==10'd3 || bypass_vlan && int_cnt==10'd4) && int_data[31:16]==16'h88F7       &&
            (int_data[11: 8]== 4'h0 || int_data[11:8]==4'h2))  // ptp_message_id == sync || delay_req
            (int_data[11: 8]== 4'h0 || int_data[11:8]==4'h2))  // ptp_message_id == sync || delay_req
      ptp_event <= 1'b1;
      ptp_event <= 1'b1;
    else if (int_valid && (int_cnt==10'd4 || bypass_vlan && int_cnt==10'd5) && bypass_udp_cnt==10'd1 && ptp_l4 &&
    else if (int_valid && int_cnt==10'd4 && bypass_udp_cnt==10'd1 && ptp_l4 &&
            (int_data[11: 8]== 4'h0 || int_data[11:8]==4'h2))  // ptp_message_id == sync || delay_req
            (int_data[11: 8]== 4'h0 || int_data[11:8]==4'h2))  // ptp_message_id == sync || delay_req
      ptp_event <= 1'b1;
      ptp_event <= 1'b1;
  end
  end
end
end
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.