Advertisement
Guest User

Untitled

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