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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [ring_arb.v] - Diff between revs 12 and 21

Show entire file | Details | Blame | View Log

Rev 12 Rev 21
Line 6... Line 6...
   input [`NUM_PORTS-1:0] rarb_req,
   input [`NUM_PORTS-1:0] rarb_req,
   output reg [`NUM_PORTS-1:0] rarb_ack
   output reg [`NUM_PORTS-1:0] rarb_ack
   );
   );
  integer                      i;
  integer                      i;
  reg [`NUM_PORTS-1:0]         nxt_rarb_ack;
  reg [`NUM_PORTS-1:0]         nxt_rarb_ack;
  reg [$clog2(`NUM_PORTS)-1:0] nxt_ack;
  //reg [$clog2(`NUM_PORTS)-1:0] nxt_ack;
 
 
 
  function [`NUM_PORTS-1:0] nxt_grant;
 
    input [`NUM_PORTS-1:0] cur_grant;
 
    input [`NUM_PORTS-1:0] cur_req;
 
    reg [`NUM_PORTS-1:0]   msk_req;
 
    reg [`NUM_PORTS-1:0]   tmp_grant;
 
    begin
 
      msk_req = cur_req & ~((cur_grant - 1) | cur_grant);
 
      tmp_grant = msk_req & (~msk_req + 1);
 
 
 
      if (msk_req != 0)
 
        nxt_grant = tmp_grant;
 
      else
 
        nxt_grant = cur_req & (~cur_req + 1);
 
    end
 
  endfunction // if
 
 
 
  //assign nxt_rarb_ack = nxt_grant (rarb_ack, rarb_req);
 
 
  always @*
  always @*
    begin
    begin
      nxt_rarb_ack = rarb_ack;
      nxt_rarb_ack = rarb_ack;
      nxt_ack = 0;
 
 
 
      if (rarb_req == 0)
      if (rarb_req == 0)
        nxt_rarb_ack = 0;
        nxt_rarb_ack = 0;
      else if ((rarb_ack == 0) |
      else if ((rarb_req & rarb_ack) == 0)
          ((rarb_req & rarb_ack) == 0))
 
        begin
        begin
          nxt_ack = 0;
          nxt_rarb_ack = nxt_grant (rarb_ack, rarb_req);
          for (i=`NUM_PORTS; i>0; i=i-1)
/* -----\/----- EXCLUDED -----\/-----
            if (rarb_req[i-1])
          nxt_ack = 0;
              nxt_ack = i-1;
          for (i=`NUM_PORTS; i>0; i=i-1)
          nxt_rarb_ack = 1 << nxt_ack;
            if (rarb_req[i-1])
 
              nxt_ack = i-1;
 
          nxt_rarb_ack = 1 << nxt_ack;
 
 -----/\----- EXCLUDED -----/\----- */
        end
        end
    end // always @ *
    end // always @ *
 
 
  always @(posedge clk)
  always @(posedge clk)
    begin
    begin
      if (reset)
      if (reset)
        rarb_ack <= #1 0;
        rarb_ack <= #1 0;
      else
      else if ((rarb_req & rarb_ack) == 0)
        rarb_ack <= #1 nxt_rarb_ack;
        rarb_ack <= #1 nxt_rarb_ack;
    end
    end
 
 
 
 
endmodule // ring_arb
endmodule // ring_arb

powered by: WebSVN 2.1.0

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