Advertisement
Katsushika_Hokusai

RRFA

Oct 22nd, 2023
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Round_Robin_FIFO_Arbiter(clk, rst_n, wen, a, b, c, d, dout, valid);
  2.     input clk;
  3.     input rst_n;
  4.     input [3:0] wen;
  5.     input [7:0] a, b, c, d;
  6.     output [7:0] dout;
  7.     output reg valid;
  8.  
  9.     reg [1:0] fifo_read;
  10.     wire [3:0] error;
  11.     wire [7:0] out [3:0];
  12.     reg [3:0] ren;
  13.  
  14.     always @ (posedge clk) begin
  15.         if(rst_n == 1'b0) fifo_read <= 2'b00;
  16.         else fifo_read <= fifo_read + 1'b1;
  17.     end  
  18.  
  19.     always @ (error or fifo_read) begin
  20.         if(wen[fifo_read - 1'b1] == 1'b1) valid = 1'b0;
  21.         else if(error[fifo_read - 1'b1] == 1'b1) valid = 1'b0;
  22.         else valid = 1'b1;
  23.     end
  24.  
  25.     always @ (fifo_read or wen) begin
  26.         if(wen[fifo_read] == 1'b1) ren = 4'b0000;
  27.         else begin
  28.             case(fifo_read)
  29.                 2'b00: ren = 4'b0001;
  30.                 2'b01: ren = 4'b0010;
  31.                 2'b10: ren = 4'b0100;
  32.                 2'b11: ren = 4'b1000;
  33.             endcase
  34.         end
  35.     end
  36.    
  37.     assign dout = valid ? out[fifo_read - 1'b1] : 8'd0;
  38.     FIFO_8 fa(clk, rst_n, wen[0], ren[0], a, out[0], error[0]);
  39.     FIFO_8 fb(clk, rst_n, wen[1], ren[1], b, out[1], error[1]);
  40.     FIFO_8 fc(clk, rst_n, wen[2], ren[2], c, out[2], error[2]);
  41.     FIFO_8 fd(clk, rst_n, wen[3], ren[3], d, out[3], error[3]);
  42. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement