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

Subversion Repositories loadbalancer

[/] [loadbalancer/] [trunk/] [ethernet_parser_32bit.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 atalla
///////////////////////////////////////////////////////////////////////////////
2
// $Id: ethernet_parser_32bit.v 1976 2007-07-20 00:59:57Z grg $
3
//
4
// Module: ethernet_parser_32bit.v
5
// Project: NF2.1
6
// Description: parses the Ethernet header for a 32 bit datapath
7
//
8
///////////////////////////////////////////////////////////////////////////////
9
`timescale 1ns/1ps
10
  module ethernet_parser_32bit
11
    #(parameter DATA_WIDTH = 32,
12
      parameter CTRL_WIDTH=DATA_WIDTH/8,
13
      parameter NUM_IQ_BITS = 3,
14
      parameter INPUT_ARBITER_STAGE_NUM = 2
15
      )
16
   (// --- Interface to the previous stage
17
    input  [DATA_WIDTH-1:0]            in_data,
18
    input  [CTRL_WIDTH-1:0]            in_ctrl,
19
    input                              in_wr,
20
 
21
    // --- Interface to output_port_lookup
22
    output reg [47:0]                  dst_mac,
23
    output reg [47:0]                  src_mac,
24
    output reg [15:0]                  ethertype,
25
    output reg                         eth_done,
26
    output reg [NUM_IQ_BITS-1:0]       src_port,
27
 
28
    // --- Misc
29
 
30
    input                              reset,
31
    input                              clk
32
   );
33
 
34
 
35
   // ------------ Internal Params --------
36
 
37
   parameter NUM_STATES = 5;
38
   parameter READ_WORD_1 = 1;
39
   parameter READ_WORD_2 = 2;
40
   parameter READ_WORD_3 = 4;
41
   parameter READ_WORD_4 = 8;
42
   parameter WAIT_EOP = 16;
43
 
44
   // ------------- Regs/ wires -----------
45
 
46
   reg [NUM_STATES-1:0]                state;
47
   reg [NUM_STATES-1:0]                state_next;
48
 
49
   reg [47:0]                          dst_mac_next;
50
   reg [47:0]                          src_mac_next;
51
   reg [15:0]                          ethertype_next;
52
   reg                                 eth_done_next;
53
   reg [NUM_IQ_BITS-1:0]               src_port_next;
54
 
55
   // ------------ Logic ----------------
56
 
57
   always @(*) begin
58
      dst_mac_next = dst_mac;
59
      src_mac_next = src_mac;
60
      ethertype_next = ethertype;
61
      eth_done_next = eth_done;
62
      src_port_next = src_port;
63
      state_next = state;
64
      case(state)
65
        /* read the input source header and get the first word */
66
        READ_WORD_1: begin
67
           if(in_wr && in_ctrl==2) begin
68
              src_port_next = in_data[NUM_IQ_BITS-1:0];
69
           end
70
           else if(in_wr && in_ctrl==0) begin
71
              dst_mac_next[47:16] = in_data;
72
              state_next = READ_WORD_2;
73
           end
74
        end // case: READ_WORD_1
75
 
76
        READ_WORD_2: begin
77
           if(in_wr) begin
78
              dst_mac_next[15:0] = in_data[31:16];
79
              src_mac_next [47:32] = in_data[15:0];
80
              state_next = READ_WORD_3;
81
           end
82
        end
83
 
84
        READ_WORD_3: begin
85
           if(in_wr) begin
86
              src_mac_next [31:0] = in_data[31:0];
87
              state_next = READ_WORD_4;
88
           end
89
        end
90
 
91
        READ_WORD_4: begin
92
           if(in_wr) begin
93
              ethertype_next = in_data[31:16];
94
              eth_done_next = 1;
95
              state_next = WAIT_EOP;
96
           end
97
        end
98
 
99
        WAIT_EOP: begin
100
           if(in_wr && in_ctrl!=0) begin
101
              eth_done_next = 0;
102
              state_next = READ_WORD_1;
103
           end
104
        end
105
      endcase // case(state)
106
   end // always @ (*)
107
 
108
   always @(posedge clk) begin
109
      if(reset) begin
110
         src_mac <= 0;
111
         dst_mac <= 0;
112
         ethertype <= 0;
113
         eth_done <= 0;
114
         src_port <= 0;
115
         state <= READ_WORD_1;
116
      end
117
      else begin
118
         src_mac <= src_mac_next;
119
         dst_mac <= dst_mac_next;
120
         ethertype <= ethertype_next;
121
         eth_done <= eth_done_next;
122
         state <= state_next;
123
         src_port <= src_port_next;
124
      end // else: !if(reset)
125
   end // always @ (posedge clk)
126
 
127
endmodule // ethernet_parser_64bit

powered by: WebSVN 2.1.0

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