Advertisement
Guest User

Untitled

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