Advertisement
Guest User

Untitled

a guest
Jul 9th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module i2s_asynchronous_fifo
  2. (
  3.     // clocks
  4.     input r_clk,
  5.     input w_clk,
  6.     // resets
  7.     input r_rst_n,
  8.     input w_rst_n,
  9.     // enables
  10.     input fifo_read_en,
  11.     input fifo_write_en,
  12.     input direct_read,
  13.     input direct_write,
  14.     // control signals
  15.     input fifo_clear,
  16.     input [ADDRESS_WIDTH-1:0] fifo_threshold,
  17.     output reg [ADDRESS_WIDTH-1:0] fifo_fill_level,
  18.     // flag signals
  19.     output fifo_empty,
  20.     output fifo_almost_empty,
  21.     output fifo_full,
  22.     output fifo_almost_full,
  23.     // data access ports
  24.     input [DATA_WIDTH-1:0] fifo_write_data,
  25.     output reg [DATA_WIDTH-1:0] fifo_read_data,
  26.     // input
  27.     // debug FIFO memory access
  28.     input fifo_debug_en,
  29.     input fifo_debug_read_en,
  30.     input fifo_debug_write_en,
  31.     input [ADDRESS_WIDTH-1:0] fifo_mem_write_address,
  32.     input [ADDRESS_WIDTH-1:0] fifo_mem_read_address,
  33.     input [DATA_WIDTH-1:0] fifo_mem_write_data,
  34.     output reg [DATA_WIDTH-1:0] fifo_mem_read_data 
  35. );
  36.  
  37. parameter DATA_WIDTH = 32;
  38. parameter ADDRESS_WIDTH = 5;
  39. parameter FIFO_DEPTH = (1 << ADDRESS_WIDTH);
  40.  
  41. // internal signals
  42. reg next_read_addr_en, next_write_addr_en;
  43. reg [ADDRESS_WIDTH-1:0] next_read_addr, next_write_addr;
  44. reg direct_read, direct_write;
  45. reg gray_clear_read, gray_clear_write;
  46.  
  47. // component instantiations
  48. i2s_gray_counter
  49. #(
  50.     .COUNTER_WIDTH(ADDRESS_WIDTH)
  51. )
  52. i2s_gray_counter_read_i
  53. (
  54.     .clk(r_clk),
  55.     .clear(gray_clear_read),
  56.     .direct_access(direct_read),
  57.     .en(next_read_addr_en),
  58.     .gray_count_out(next_read_addr)
  59. );
  60.  
  61. i2s_gray_counter
  62. #(
  63.     .COUNTER_WIDTH(ADDRESS_WIDTH)
  64. )
  65. i2s_gray_counter_write_i
  66. (
  67.     .clk(w_clk),
  68.     .clear(gray_clear_write),
  69.     .direct_access(direct_write),
  70.     .en(next_write_addr_en),
  71.     .gray_count_out(next_write_addr)
  72. );
  73.  
  74. // read process
  75. always @(posedge r_clk or posedge direct_read or negedge r_rst_n) begin
  76.     if !(r_rst_n) begin
  77.         fifo_read_data <= '0;
  78.     end
  79.     else begin
  80.     end
  81. end
  82.  
  83. // write process
  84. always @(posedge w_clk or posedge direct_write or negedge w_rst_n) begin
  85.     if !(w_rst_n) begin
  86.     end
  87.     else begin
  88.     end
  89. end
  90.  
  91. // continuous assignments
  92. assign gray_clear_read = ~r_rst_n | fifo_clear;
  93. assign gray_clear_write = ~w_rst_n | fifo_clear;
  94.  
  95. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement