Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
73
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(states == {D, C, B, A} || fifo_take == {D, C, B, A})
  24.             begin
  25.                 states_rst <= 1;
  26.             end
  27.             if(A && (~ states[0] || states == {D, C, B, A} || fifo_take == {D, C, B, A}))
  28.             begin
  29.                 READY <= 1;
  30.                 ADDR <= 0;
  31.                 if(states == {D, C, B, A} || fifo_take == {D, C, B, A})
  32.                 begin
  33.                     states <= 1;
  34.                     fifo_take <= 1;
  35.                     states_rst <= 0;
  36.                 end
  37.                 else
  38.                 begin
  39.                     states[0] <= 1;
  40.                     fifo_take <= 1;
  41.                 end
  42.             end
  43.             else
  44.             begin
  45.                 if(B && (~states[1] || states == {D, C, B, A} || fifo_take == {D, C, B, A}))
  46.                 begin
  47.                     READY <= 1;
  48.                     ADDR <= 1;
  49.                     if(states == {D, C, B, A} || fifo_take == {D, C, B, A})
  50.                     begin
  51.                         states <= 2;
  52.                         fifo_take <= 2;
  53.                         states_rst <= 0;
  54.                     end
  55.                     else
  56.                     begin
  57.                         states[1] <= 1;
  58.                         fifo_take <= 2;
  59.                     end
  60.                 end
  61.                 else
  62.                 begin
  63.                     if(C && (~states[2] || states == {D, C, B, A} || fifo_take == {D, C, B, A}))
  64.                     begin
  65.                         READY <= 1;
  66.                         ADDR <= 2;
  67.                         if(states == {D, C, B, A} || fifo_take == {D, C, B, A})
  68.                         begin
  69.                             states <= 4;
  70.                             fifo_take <= 4;
  71.                             states_rst <= 0;
  72.                         end
  73.                         else
  74.                         begin
  75.                             states[2] <= 1;
  76.                             fifo_take <= 4;
  77.                         end
  78.                     end
  79.                     else
  80.                     begin
  81.                         if(D && (~states[3] || states == {D, C, B, A} || fifo_take == {D, C, B, A}))
  82.                         begin
  83.                             READY <= 1;
  84.                             ADDR <= 3;
  85.                             if(states == {D, C, B, A} || fifo_take == {D, C, B, A})
  86.                             begin
  87.                                 states[3] <= 8;
  88.                                 fifo_take <= 8;
  89.                                 states_rst <= 0;
  90.                             end
  91.                             else
  92.                             begin
  93.                                 states[3] <= 1;
  94.                                 fifo_take <= 8;
  95.                             end
  96.                         end
  97.                         else
  98.                         begin
  99.                             READY <= 0;
  100.                             states <= 0;
  101.                             fifo_take <= 0;
  102.                         end
  103.                     end
  104.                 end
  105.             end
  106.         end
  107.         else
  108.         begin
  109.             READY <= 0;
  110.             states <= 0;
  111.             fifo_take <= 0;
  112.         end
  113. end
  114.  
  115. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement