Imported Upstream version 3.0
[debian/gnuradio] / usrp / fpga / models / fifo_1c_2k.v
1 // Model of FIFO in Altera
2
3 module fifo_1c_2k ( data, wrreq, rdreq, rdclk, wrclk, aclr, q,
4                     rdfull, rdempty, rdusedw, wrfull, wrempty, wrusedw);
5
6    parameter width = 32;
7    parameter depth = 2048;
8    //`define rd_req 0;  // Set this to 0 for rd_ack, 1 for rd_req
9       
10    input [31:0] data;
11    input        wrreq;
12    input        rdreq;
13    input        rdclk;
14    input        wrclk;
15    input        aclr;
16    output [31:0] q;
17    output        rdfull;
18    output        rdempty;
19    output [10:0]  rdusedw;
20    output        wrfull;
21    output        wrempty;
22    output [10:0]  wrusedw;
23    
24    reg [width-1:0] mem [0:depth-1];
25    reg [7:0]       rdptr;
26    reg [7:0]       wrptr;
27    
28 `ifdef rd_req
29    reg [width-1:0] q;
30 `else
31    wire [width-1:0] q;
32 `endif
33    
34    reg [10:0]       rdusedw;
35    reg [10:0]       wrusedw;
36    
37    integer          i;
38
39    always @( aclr)
40      begin
41         wrptr <= #1 0;
42         rdptr <= #1 0;
43         for(i=0;i<depth;i=i+1)
44           mem[i] <= #1 0;
45      end
46    
47    always @(posedge wrclk)
48      if(wrreq)
49        begin
50           wrptr <= #1 wrptr+1;
51           mem[wrptr] <= #1 data;
52        end
53    
54    always @(posedge rdclk)
55      if(rdreq)
56        begin
57           rdptr <= #1 rdptr+1;
58 `ifdef rd_req
59           q <= #1 mem[rdptr];
60 `endif
61        end
62    
63 `ifdef rd_req
64 `else
65    assign q = mem[rdptr];
66 `endif
67    
68    // Fix these
69    always @(posedge wrclk)
70      wrusedw <= #1 wrptr - rdptr;
71    
72    always @(posedge rdclk)
73      rdusedw <= #1 wrptr - rdptr;
74
75    assign wrempty = (wrusedw == 0);
76    assign wrfull = (wrusedw == depth-1);
77    
78    assign rdempty = (rdusedw == 0);
79    assign rdfull = (rdusedw == depth-1);
80    
81 endmodule // fifo_1c_2k