OpenCores
URL https://opencores.org/ocsvn/mpeg2fpga/mpeg2fpga/trunk

Subversion Repositories mpeg2fpga

[/] [mpeg2fpga/] [trunk/] [rtl/] [mpeg2/] [xilinx_fifo216.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 kdv
/*
2
 * xilinx_fifo216.v
3
 *
4
 * Copyright (c) 2007 Koen De Vleeschauwer.
5
 *
6
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
7
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
8
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
9
 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
10
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
11
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
12
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
14
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
15
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
16
 * SUCH DAMAGE.
17
 */
18
 
19
/*
20
 * FIFO216
21
 * Connect three 72-bit wide FIFO36_72 in parallel to create one 216-bit wide fifo.
22
 */
23
 
24
`include "timescale.v"
25
 
26
module FIFO216 (ALMOSTEMPTY, ALMOSTFULL, DO, EMPTY, FULL, RDERR, WRERR, DI, RDCLK, RDEN, RST, WRCLK, WREN);
27
 
28
  parameter [8:0]ALMOST_FULL_OFFSET=9'h080;
29
  parameter [8:0]ALMOST_EMPTY_OFFSET=9'h080;
30
  parameter DO_REG=1;
31
  parameter EN_SYN="FALSE";
32
 
33
  output ALMOSTEMPTY;
34
  output ALMOSTFULL;
35
  output [215:0]DO;
36
  output EMPTY;
37
  output FULL;
38
  output reg RDERR;
39
  output reg WRERR;
40
  input [215:0]DI;
41
  input RDCLK;
42
  input RDEN;
43
  input RST;
44
  input WRCLK;
45
  input WREN;
46
 
47
  wire fifo_wren;
48
  wire fifo_rden;
49
 
50
  wire [63:0]fifo1_di;
51
  wire [7:0]fifo1_dip;
52
  wire [63:0]fifo1_do;
53
  wire [7:0]fifo1_dop;
54
  wire fifo1_empty;
55
  wire fifo1_full;
56
  wire fifo1_almost_empty;
57
  wire fifo1_almost_full;
58
  wire fifo1_rderr;
59
  wire fifo1_wrerr;
60
 
61
  wire [63:0]fifo2_di;
62
  wire [7:0]fifo2_dip;
63
  wire [63:0]fifo2_do;
64
  wire [7:0]fifo2_dop;
65
  wire fifo2_empty;
66
  wire fifo2_full;
67
  wire fifo2_almost_empty;
68
  wire fifo2_almost_full;
69
  wire fifo2_rderr;
70
  wire fifo2_wrerr;
71
 
72
  wire [63:0]fifo3_di;
73
  wire [7:0]fifo3_dip;
74
  wire [63:0]fifo3_do;
75
  wire [7:0]fifo3_dop;
76
  wire fifo3_empty;
77
  wire fifo3_full;
78
  wire fifo3_almost_empty;
79
  wire fifo3_almost_full;
80
  wire fifo3_rderr;
81
  wire fifo3_wrerr;
82
 
83
  assign DO = {fifo3_dop, fifo3_do, fifo2_dop, fifo2_do, fifo1_dop, fifo1_do};
84
  assign {fifo3_dip, fifo3_di, fifo2_dip, fifo2_di, fifo1_dip, fifo1_di} = DI;
85
 
86
  assign EMPTY = fifo1_empty || fifo2_empty || fifo3_empty;
87
  assign FULL = fifo1_full || fifo2_full || fifo3_full;
88
  assign ALMOSTEMPTY = fifo1_almost_empty || fifo2_almost_empty || fifo3_almost_empty;
89
  assign ALMOSTFULL = fifo1_almost_full || fifo2_almost_full || fifo3_almost_full;
90
 
91
  always @(posedge RDCLK)
92
    if (RST) RDERR <= 1'b0;
93
    else RDERR <= RDEN && EMPTY;
94
 
95
  always @(posedge WRCLK)
96
    if (RST) WRERR <= 1'b0;
97
    else WRERR <= WREN && FULL;
98
 
99
  assign fifo_wren = WREN && ~FULL;
100
  assign fifo_rden = RDEN && ~EMPTY;
101
 
102
  // FIFO36_72: 72x36k Synchronous/Asynchronous BlockRAM FIFO /w ECC
103
  //             Virtex-5
104
  // Xilinx HDL Libraries Guide, version 8.2.2
105
  FIFO36_72 #(
106
     .ALMOST_FULL_OFFSET(ALMOST_FULL_OFFSET),   // Sets almost full threshold
107
     .ALMOST_EMPTY_OFFSET(ALMOST_EMPTY_OFFSET), // Sets the almost empty threshold
108
     .DO_REG(DO_REG),                           // Enable output register (0 or 1)
109
                                                //   Must be 1 if EN_SYN = "FALSE"
110
     .EN_ECC_READ("FALSE"),                     // Enable ECC decoder, "TRUE" or "FALSE"
111
     .EN_ECC_WRITE("FALSE"),                    // Enable ECC encoder, "TRUE" or "FALSE"
112
     .EN_SYN(EN_SYN),                           // Specifies FIFO as Asynchronous ("FALSE")
113
                                                //   or Synchronous ("TRUE")
114
     .FIRST_WORD_FALL_THROUGH("FALSE")          // Sets the FIFO FWFT to "TRUE" or "FALSE
115
  ) FIFO36_72_slice0 (
116
     .ALMOSTEMPTY(fifo1_almost_empty),          // 1-bit almost empty output flag
117
     .ALMOSTFULL(fifo1_almost_full),            // 1-bit almost full output flag
118
     .DBITERR(),                                // 1-bit double bit error status output
119
     .DO(fifo1_do),                             // 64-bit data output
120
     .DOP(fifo1_dop),                           // 8-bit parity data output
121
     .ECCPARITY(),                              // 8-bit generated error correction parity
122
     .EMPTY(fifo1_empty),                       // 1-bit empty output flag
123
     .FULL(fifo1_full),                         // 1-bit full output flag
124
     .RDCOUNT(),                                // 9-bit read count output
125
     .RDERR(fifo1_rderr),                       // 1-bit read error output
126
     .SBITERR(),                                // 1-bit single bit error status output
127
     .WRCOUNT(),                                // 9-bit write count output
128
     .WRERR(fifo1_wrerr),                       // 1-bit write error
129
     .DI(fifo1_di),                             // 64-bit data input
130
     .DIP(fifo1_dip),                           // 8-bit parity input
131
     .RDCLK(RDCLK),                             // 1-bit read clock input
132
     .RDEN(fifo_rden),                          // 1-bit read enable input
133
     .RST(RST),                                 // 1-bit reset input
134
     .WRCLK(WRCLK),                             // 1-bit write clock input
135
     .WREN(fifo_wren)                           // 1-bit write enable input
136
  );
137
 
138
  // FIFO36_72: 72x36k Synchronous/Asynchronous BlockRAM FIFO /w ECC
139
  //             Virtex-5
140
  // Xilinx HDL Libraries Guide, version 8.2.2
141
  FIFO36_72 #(
142
     .ALMOST_FULL_OFFSET(ALMOST_FULL_OFFSET),   // Sets almost full threshold
143
     .ALMOST_EMPTY_OFFSET(ALMOST_EMPTY_OFFSET), // Sets the almost empty threshold
144
     .DO_REG(DO_REG),                           // Enable output register (0 or 1)
145
                                                //   Must be 1 if EN_SYN = "FALSE"
146
     .EN_ECC_READ("FALSE"),                     // Enable ECC decoder, "TRUE" or "FALSE"
147
     .EN_ECC_WRITE("FALSE"),                    // Enable ECC encoder, "TRUE" or "FALSE"
148
     .EN_SYN(EN_SYN),                           // Specifies FIFO as Asynchronous ("FALSE")
149
                                                //   or Synchronous ("TRUE")
150
     .FIRST_WORD_FALL_THROUGH("FALSE")          // Sets the FIFO FWFT to "TRUE" or "FALSE
151
  ) FIFO36_72_slice1 (
152
     .ALMOSTEMPTY(fifo2_almost_empty),          // 1-bit almost empty output flag
153
     .ALMOSTFULL(fifo2_almost_full),            // 1-bit almost full output flag
154
     .DBITERR(),                                // 1-bit double bit error status output
155
     .DO(fifo2_do),                             // 64-bit data output
156
     .DOP(fifo2_dop),                           // 8-bit parity data output
157
     .ECCPARITY(),                              // 8-bit generated error correction parity
158
     .EMPTY(fifo2_empty),                       // 1-bit empty output flag
159
     .FULL(fifo2_full),                         // 1-bit full output flag
160
     .RDCOUNT(),                                // 9-bit read count output
161
     .RDERR(fifo2_rderr),                       // 1-bit read error output
162
     .SBITERR(),                                // 1-bit single bit error status output
163
     .WRCOUNT(),                                // 9-bit write count output
164
     .WRERR(fifo2_wrerr),                       // 1-bit write error
165
     .DI(fifo2_di),                             // 64-bit data input
166
     .DIP(fifo2_dip),                           // 8-bit parity input
167
     .RDCLK(RDCLK),                             // 1-bit read clock input
168
     .RDEN(fifo_rden),                          // 1-bit read enable input
169
     .RST(RST),                                 // 1-bit reset input
170
     .WRCLK(WRCLK),                             // 1-bit write clock input
171
     .WREN(fifo_wren)                           // 1-bit write enable input
172
  );
173
 
174
  // FIFO36_72: 72x36k Synchronous/Asynchronous BlockRAM FIFO /w ECC
175
  //             Virtex-5
176
  // Xilinx HDL Libraries Guide, version 8.2.2
177
  FIFO36_72 #(
178
     .ALMOST_FULL_OFFSET(ALMOST_FULL_OFFSET),   // Sets almost full threshold
179
     .ALMOST_EMPTY_OFFSET(ALMOST_EMPTY_OFFSET), // Sets the almost empty threshold
180
     .DO_REG(DO_REG),                           // Enable output register (0 or 1)
181
                                                //   Must be 1 if EN_SYN = "FALSE"
182
     .EN_ECC_READ("FALSE"),                     // Enable ECC decoder, "TRUE" or "FALSE"
183
     .EN_ECC_WRITE("FALSE"),                    // Enable ECC encoder, "TRUE" or "FALSE"
184
     .EN_SYN(EN_SYN),                           // Specifies FIFO as Asynchronous ("FALSE")
185
                                                //   or Synchronous ("TRUE")
186
     .FIRST_WORD_FALL_THROUGH("FALSE")          // Sets the FIFO FWFT to "TRUE" or "FALSE
187
  ) FIFO36_72_slice2 (
188
     .ALMOSTEMPTY(fifo3_almost_empty),          // 1-bit almost empty output flag
189
     .ALMOSTFULL(fifo3_almost_full),            // 1-bit almost full output flag
190
     .DBITERR(),                                // 1-bit double bit error status output
191
     .DO(fifo3_do),                             // 64-bit data output
192
     .DOP(fifo3_dop),                           // 8-bit parity data output
193
     .ECCPARITY(),                              // 8-bit generated error correction parity
194
     .EMPTY(fifo3_empty),                       // 1-bit empty output flag
195
     .FULL(fifo3_full),                         // 1-bit full output flag
196
     .RDCOUNT(),                                // 9-bit read count output
197
     .RDERR(fifo3_rderr),                       // 1-bit read error output
198
     .SBITERR(),                                // 1-bit single bit error status output
199
     .WRCOUNT(),                                // 9-bit write count output
200
     .WRERR(fifo3_wrerr),                       // 1-bit write error
201
     .DI(fifo3_di),                             // 64-bit data input
202
     .DIP(fifo3_dip),                           // 8-bit parity input
203
     .RDCLK(RDCLK),                             // 1-bit read clock input
204
     .RDEN(fifo_rden),                          // 1-bit read enable input
205
     .RST(RST),                                 // 1-bit reset input
206
     .WRCLK(WRCLK),                             // 1-bit write clock input
207
     .WREN(fifo_wren)                           // 1-bit write enable input
208
  );
209
 
210
`ifdef CHECK_GENERATE
211
  initial
212
    $display("%m: fifo parameters: ALMOST_FULL_OFFSET=%0d ALMOST_EMPTY_OFFSET=%0d DO_REG=%0d EN_SYN=%s",
213
      ALMOST_FULL_OFFSET, ALMOST_EMPTY_OFFSET, DO_REG, EN_SYN);
214
`endif
215
 
216
endmodule
217
/* not truncated */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.