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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [egr_oflow.v] - Diff between revs 8 and 13

Only display areas with differences | Details | Blame | View Log

Rev 8 Rev 13
module egr_oflow
module egr_oflow
  #(parameter drop_thr=`TX_FIFO_DEPTH-10)
  #(parameter drop_thr=`TX_FIFO_DEPTH-128)
  (
  (
   input        clk,
   input        clk,
   input        reset,
   input        reset,
 
 
   input        c_srdy,
   input        c_srdy,
   output reg   c_drdy,
   output reg   c_drdy,
   input [`PFW_SZ-1:0] c_data,
   input [`PFW_SZ-1:0] c_data,
 
 
   input [`TX_USG_SZ-1:0] tx_usage,
   input [`TX_USG_SZ-1:0] tx_usage,
 
 
   output reg   p_srdy,
   output reg   p_srdy,
   input        p_drdy,
   input        p_drdy,
   output [`PFW_SZ-1:0] p_data,
   output [`PFW_SZ-1:0] p_data,
   output reg   p_commit,
   output reg   p_commit,
   output reg   p_abort
   output reg   p_abort
   );
   );
 
 
  reg   state, nxt_state;
  reg   state, nxt_state;
 
 
  localparam s_idle = 0, s_packet = 1, s_flush = 2;
  localparam s_idle = 0, s_packet = 1, s_flush = 2;
 
 
  assign p_data = c_data;
  assign p_data = c_data;
 
 
  always @*
  always @*
    begin
    begin
      c_drdy = 0;
      c_drdy = 0;
      p_srdy = 0;
      p_srdy = 0;
      p_commit = 0;
      p_commit = 0;
      p_abort = 0;
      p_abort = 0;
 
 
      case (state)
      case (state)
        s_idle :
        s_idle :
          begin
          begin
            if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_SOP))
            if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_SOP))
              begin
              begin
                nxt_state = s_packet;
                nxt_state = s_packet;
                c_drdy = 1;
                c_drdy = 1;
                p_srdy = 1;
                p_srdy = 1;
              end
              end
            else if (c_srdy)
            else if (c_srdy)
              begin
              begin
                c_drdy = 1;
                c_drdy = 1;
              end
              end
          end // case: state[s_idle]
          end // case: state[s_idle]
 
 
        s_packet :
        s_packet :
          begin
          begin
            if (c_srdy & (c_data[`PRW_PCC] == `PCC_BADEOP))
            if (c_srdy & (c_data[`PRW_PCC] == `PCC_BADEOP))
              begin
              begin
                c_drdy = 1;
                c_drdy = 1;
                p_abort = 1;
                p_abort = 1;
                nxt_state = s_idle;
                nxt_state = s_idle;
              end
              end
            else if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_EOP))
            else if (c_srdy & p_drdy & (c_data[`PRW_PCC] == `PCC_EOP))
              begin
              begin
                p_srdy = 1;
                p_srdy = 1;
                c_drdy = 1;
                c_drdy = 1;
                p_commit = 1;
                p_commit = 1;
                nxt_state = s_idle;
                nxt_state = s_idle;
              end
              end
            else if (tx_usage >= drop_thr)
            else if (!p_drdy | (tx_usage >= drop_thr))
              begin
              begin
                c_drdy = 1;
                c_drdy = 1;
                nxt_state = s_idle;
                nxt_state = s_idle;
                p_abort = 1;
                p_abort = 1;
              end
              end
            else if (c_srdy & p_drdy)
            else if (c_srdy & p_drdy)
              begin
              begin
                p_srdy = 1;
                p_srdy = 1;
                c_drdy = 1;
                c_drdy = 1;
              end
              end
          end // case: state[s_packet]
          end // case: state[s_packet]
 
 
        default : nxt_state = s_idle;
        default : nxt_state = s_idle;
      endcase // case (1'b1)
      endcase // case (1'b1)
    end // always @ *
    end // always @ *
 
 
  always @(posedge clk)
  always @(posedge clk)
    begin
    begin
      if (reset)
      if (reset)
        begin
        begin
          state <= #1 s_idle;
          state <= #1 s_idle;
        end
        end
      else
      else
        begin
        begin
          state <= #1 nxt_state;
          state <= #1 nxt_state;
        end
        end
    end // always @ (posedge clk)
    end // always @ (posedge clk)
 
 
endmodule // egr_oflow
endmodule // egr_oflow
 
 

powered by: WebSVN 2.1.0

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