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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [port_ring_tap_fsm.v] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 ghutchis
module port_ring_tap_fsm
2
  #(parameter rdp_sz = 64,
3
    parameter portnum = 0)
4
  (
5
   input               clk,
6
   input               reset,
7
 
8
   output reg               lfli_drdy,
9
   output reg               lprx_drdy,
10
   output reg[rdp_sz-1:0]    lptx_data,
11
   output reg               lptx_srdy,
12
   output reg               lri_drdy,
13
   output reg[rdp_sz-1:0]    lro_data,
14
   output reg               lro_srdy,
15
 
16
   input [rdp_sz-1:0]   lfli_data,
17
   input               lfli_srdy,
18
   input [rdp_sz-1:0]   lprx_data,
19
   input               lprx_srdy,
20
   input               lptx_drdy,
21
   input [rdp_sz-1:0]   lri_data,
22
   input               lri_srdy,
23
   input               lro_drdy
24
   // End of automatics
25
   );
26
 
27
  reg [6:0]            state, nxt_state;
28
 
29
  wire [`NUM_PORTS-1:0] port_mask;
30
  reg [`NUM_PORTS-1:0]  pe_vec, nxt_pe_vec;
31
 
32
  assign port_mask = 1 << portnum;
33
 
34
  parameter s_idle = 0,
35
              s_rcmd = 1,
36
              s_rfwd = 2,
37
              s_rcopy = 3,
38
              s_rsink = 4,
39
              s_tcmd = 5,
40
              s_tdata = 6;
41
 
42
  always @*
43
    begin
44
      lro_data = lri_data;
45
 
46
      case (1'b1)
47
        state[s_idle] :
48
          begin
49
            if (lfli_srdy)
50
              begin
51
              end
52
            else if (lri_srdy)
53
              begin
54
                if (lri_data[`PRW_DATA] & port_mask)
55
                  begin
56
                    // packet is for our port
57
                    nxt_pe_vec = lri_data[`PRW_DATA] & ~port_mask;
58
 
59
                    // if enable vector is not empty, send the
60
                    // vector to the next port
61
                    if ((nxt_pe_vec != 0) & lro_drdy)
62
                      begin
63
                        lro_data[`PRW_DATA] = nxt_pe_vec;
64
                        lro_data[`PRW_PVEC] = 1;
65
                        lro_srdy = 1;
66
                        lri_drdy = 1;
67
                        nxt_state = ns_rcopy;
68
                      end
69
                    else
70
                      begin
71
                        lri_drdy = 1;
72
                        nxt_state = ns_rsink;
73
                      end // else: !if((nxt_pe_vec != 0) & lro_drdy)
74
                  end // if (lri_data[`PRW_DATA] & port_mask)
75
                else
76
                  // packet is not for our port, forward it on the
77
                  // ring
78
                  begin
79
                    if (lro_drdy)
80
                      begin
81
                        lri_drdy = 1;
82
                        lro_srdy = 1;
83
                        nxt_state = ns_rfwd;
84
                      end
85
                  end // else: !if(lri_data[`PRW_DATA] & port_mask)
86
              end // if (lri_srdy)
87
          end // case: state[s_idle]
88
 
89
        default : nxt_state = ns_idle;
90
      endcase // case (1'b1)
91
    end // always @ *
92
 
93
 
94
 
95
endmodule // port_ring_tap_fsm

powered by: WebSVN 2.1.0

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