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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [ring_arb.v] - Blame information for rev 21

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 ghutchis
module ring_arb
2
  (
3
   input        clk,
4
   input        reset,
5
 
6
   input [`NUM_PORTS-1:0] rarb_req,
7
   output reg [`NUM_PORTS-1:0] rarb_ack
8
   );
9
  integer                      i;
10
  reg [`NUM_PORTS-1:0]         nxt_rarb_ack;
11 21 ghutchis
  //reg [$clog2(`NUM_PORTS)-1:0] nxt_ack;
12
 
13
  function [`NUM_PORTS-1:0] nxt_grant;
14
    input [`NUM_PORTS-1:0] cur_grant;
15
    input [`NUM_PORTS-1:0] cur_req;
16
    reg [`NUM_PORTS-1:0]   msk_req;
17
    reg [`NUM_PORTS-1:0]   tmp_grant;
18
    begin
19
      msk_req = cur_req & ~((cur_grant - 1) | cur_grant);
20
      tmp_grant = msk_req & (~msk_req + 1);
21
 
22
      if (msk_req != 0)
23
        nxt_grant = tmp_grant;
24
      else
25
        nxt_grant = cur_req & (~cur_req + 1);
26
    end
27
  endfunction // if
28
 
29
  //assign nxt_rarb_ack = nxt_grant (rarb_ack, rarb_req);
30
 
31 12 ghutchis
  always @*
32
    begin
33
      nxt_rarb_ack = rarb_ack;
34
 
35
      if (rarb_req == 0)
36
        nxt_rarb_ack = 0;
37 21 ghutchis
      else if ((rarb_req & rarb_ack) == 0)
38 12 ghutchis
        begin
39 21 ghutchis
          nxt_rarb_ack = nxt_grant (rarb_ack, rarb_req);
40
/* -----\/----- EXCLUDED -----\/-----
41 12 ghutchis
          nxt_ack = 0;
42
          for (i=`NUM_PORTS; i>0; i=i-1)
43
            if (rarb_req[i-1])
44
              nxt_ack = i-1;
45
          nxt_rarb_ack = 1 << nxt_ack;
46 21 ghutchis
 -----/\----- EXCLUDED -----/\----- */
47 12 ghutchis
        end
48
    end // always @ *
49
 
50
  always @(posedge clk)
51
    begin
52
      if (reset)
53
        rarb_ack <= #1 0;
54 21 ghutchis
      else if ((rarb_req & rarb_ack) == 0)
55 12 ghutchis
        rarb_ack <= #1 nxt_rarb_ack;
56
    end
57
 
58
 
59
endmodule // ring_arb

powered by: WebSVN 2.1.0

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