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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [egr_oflow.v] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 ghutchis
module egr_oflow
2 13 ghutchis
  #(parameter drop_thr=`TX_FIFO_DEPTH-128)
3 8 ghutchis
  (
4
   input        clk,
5
   input        reset,
6
 
7
   input        c_srdy,
8
   output reg   c_drdy,
9
   input [`PFW_SZ-1:0] c_data,
10
 
11
   input [`TX_USG_SZ-1:0] tx_usage,
12
 
13
   output reg   p_srdy,
14
   input        p_drdy,
15
   output [`PFW_SZ-1:0] p_data,
16
   output reg   p_commit,
17
   output reg   p_abort
18
   );
19
 
20
  reg   state, nxt_state;
21
 
22
  localparam s_idle = 0, s_packet = 1, s_flush = 2;
23
 
24
  assign p_data = c_data;
25
 
26
  always @*
27
    begin
28
      c_drdy = 0;
29
      p_srdy = 0;
30
      p_commit = 0;
31
      p_abort = 0;
32
 
33
      case (state)
34
        s_idle :
35
          begin
36
            if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_SOP))
37
              begin
38
                nxt_state = s_packet;
39
                c_drdy = 1;
40
                p_srdy = 1;
41
              end
42
            else if (c_srdy)
43
              begin
44
                c_drdy = 1;
45
              end
46
          end // case: state[s_idle]
47
 
48
        s_packet :
49
          begin
50
            if (c_srdy & (c_data[`PRW_PCC] == `PCC_BADEOP))
51
              begin
52
                c_drdy = 1;
53
                p_abort = 1;
54
                nxt_state = s_idle;
55
              end
56
            else if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_EOP))
57
              begin
58
                p_srdy = 1;
59
                c_drdy = 1;
60
                p_commit = 1;
61
                nxt_state = s_idle;
62
              end
63 13 ghutchis
            else if (!p_drdy | (tx_usage >= drop_thr))
64 8 ghutchis
              begin
65
                c_drdy = 1;
66
                nxt_state = s_idle;
67
                p_abort = 1;
68
              end
69
            else if (c_srdy & p_drdy)
70
              begin
71
                p_srdy = 1;
72
                c_drdy = 1;
73
              end
74
          end // case: state[s_packet]
75
 
76
        default : nxt_state = s_idle;
77
      endcase // case (1'b1)
78
    end // always @ *
79
 
80
  always @(posedge clk)
81
    begin
82
      if (reset)
83
        begin
84
          state <= #1 s_idle;
85
        end
86
      else
87
        begin
88
          state <= #1 nxt_state;
89
        end
90
    end // always @ (posedge clk)
91
 
92
endmodule // egr_oflow

powered by: WebSVN 2.1.0

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