Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module fifo_arbiter(
  2.     input A,
  3.     input B,
  4.     input C,
  5.     input D,
  6.     input CLK,
  7.     output reg A_take,
  8.     output reg B_take,
  9.     output reg C_take,
  10.     output reg D_take,
  11.     output reg [1:0] ADDR,
  12.     output reg READY
  13. );
  14.  
  15. reg [3:0] states;
  16. reg [2:0] cycle;
  17.  
  18. initial begin
  19.     states = 0;
  20.     A_take <= 0;
  21.     B_take <= 0;
  22.     C_take <= 0;
  23.     D_take <= 0;
  24. end
  25.  
  26. always @(posedge CLK)
  27. begin
  28.         if(A || B || C || D)
  29.         begin
  30.         READY <= 1;
  31.             if(A && ~ states[0])
  32.             begin
  33.                 ADDR <= 0;
  34.                 states[0] <= 1;
  35.                 A_take <= 1;
  36.             end
  37.             else
  38.             begin
  39.                 A_take <= 0;
  40.                 if(B && ~states[1])
  41.                 begin  
  42.                     ADDR <= 1;
  43.                     states[1] <= 1;
  44.                     B_take <= 1;
  45.                 end
  46.                 else
  47.                 begin
  48.                     B_take <= 0;
  49.                     if(C && ~states[2])
  50.                     begin
  51.                         ADDR <= 2;
  52.                         states[2] <= 1;
  53.                         C_take <= 1;
  54.                     end
  55.                     else
  56.                     begin
  57.                         C_take <= 0;
  58.                         if(D && ~states[3])
  59.                         begin
  60.                             ADDR <= 3;
  61.                             states[3] <= 1;
  62.                             D_take <= 1;
  63.                         end
  64.                         else
  65.                             D_take <= 0;
  66.                     end
  67.                 end
  68.             end
  69.  
  70.         if(states == {D, C, B, A})
  71.             states <= 0;
  72.            
  73.         end
  74.         else
  75.         begin
  76.             READY <= 0;
  77.             states <= 0;
  78.             A_take <= 0;
  79.             B_take <= 0;
  80.             C_take <= 0;
  81.             D_take <= 0;
  82.         end
  83. end
  84.  
  85. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement