Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. module srl_fifo#(
  2. parameter DATA_WIDTH = 32,
  3. parameter DEPTH = 16
  4. )(
  5. input clk,
  6. input enq_enable,
  7. input [DATA_WIDTH-1:0] enq_data,
  8. output reg enq_ready,
  9. input deq_enable,
  10. output reg deq_ready,
  11. output reg [DATA_WIDTH-1:0] deq_data
  12. );
  13.  
  14. localparam ADDR_WIDTH = $clog2(DEPTH);
  15. localparam FULL = DEPTH-1;
  16. localparam EMPTY = -1;
  17.  
  18. integer i;
  19.  
  20. reg [DATA_WIDTH-1:0] array[0:DEPTH-1];
  21. reg [ADDR_WIDTH:0] read_pos = EMPTY;
  22.  
  23. always @(posedge clk) begin
  24. deq_data <= array[read_pos[ADDR_WIDTH-1:0]];
  25.  
  26. if (deq_enable && deq_ready)
  27. read_pos = read_pos - 1;
  28.  
  29. if (enq_enable && enq_ready) begin
  30. read_pos = read_pos + 1;
  31.  
  32. array[0] <= enq_data;
  33. for (i = 1; i < DEPTH; i = i+1)
  34. array[i] <= array[i-1];
  35. end
  36.  
  37. deq_ready <= read_pos != EMPTY;
  38. enq_ready <= read_pos != FULL;
  39. end
  40.  
  41. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement