Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
70
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 [3:0] fifo_take,
  8.     output reg [1:0] ADDR,
  9.     output reg READY
  10. );
  11.  
  12. reg [3:0] states;
  13.  
  14. initial begin
  15.     states = 0;
  16.     fifo_take <= 0;
  17. end
  18.  
  19. always @(posedge CLK)
  20. begin
  21.         if(A || B || C || D)
  22.             begin
  23.             if(A && ~ states[0] || states == {D, C, B, A} || fifo_take == {D, C, B, A})
  24.             begin
  25.                 READY <= 1;
  26.                 ADDR <= 0;
  27.                 states[0] <= 1;
  28.                 fifo_take <= 1;
  29.             end
  30.             else
  31.             begin
  32.                 if(B && ~states[1] || states == {D, C, B, A} || fifo_take == {D, C, B, A})
  33.                 begin
  34.                     READY <= 1;
  35.                     ADDR <= 1;
  36.                     states[1] <= 1;
  37.                     fifo_take <= 2;
  38.                 end
  39.                 else
  40.                 begin
  41.                     if(C && ~states[2] || states == {D, C, B, A} || fifo_take == {D, C, B, A})
  42.                     begin
  43.                         READY <= 1;
  44.                         ADDR <= 2;
  45.                         states[2] <= 1;
  46.                         fifo_take <= 4;
  47.                     end
  48.                     else
  49.                     begin
  50.                         if(D && ~states[3] || states == {D, C, B, A} || fifo_take == {D, C, B, A})
  51.                         begin
  52.                             READY <= 1;
  53.                             ADDR <= 3;
  54.                             states[3] <= 1;
  55.                             fifo_take <= 8;
  56.                         end
  57.                         else
  58.                         begin
  59.                             READY <= 0;
  60.                             states <= 0;
  61.                             fifo_take <= 0;
  62.                         end
  63.                     end
  64.                 end
  65.             end
  66.         end
  67.         else
  68.         begin
  69.             READY <= 0;
  70.             states <= 0;
  71.             fifo_take <= 0;
  72.         end
  73. end
  74.  
  75. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement