0
Synchronous FIFO 5.0
DS256 May 21, 2004
0 0
Product Specification
Introduction
The Synchronous FIFO is a First-In-First-Out memory queue with control logic that manages the read and write pointers, generates status flags, and provides optional handshake signals for interfacing with the user logic.
Incorporates Xilinx Smart-IP technology for utmost parameterization and optimum implementation To be used with version 6.2i or later of the Xilinx CORE Generator System
Functional Description
Figure Top x-ref 1
About This Revision
Version 5.0 is the final release of the Synchronous FIFO core. For new designs, Xilinx suggests you use the FIFO Generator Logicore, which includes expanded support for applications requiring independent (asynchronous) or common (synchronous) read/write clock domains. See FIFO Generator for detailed information.
Features
Drop-in module for Virtex, Virtex-E, Virtex-II, Virtex-II Pro, Virtex-4, Spartan-II, Spartan-IIE, and Spartan-3 FPGAs Supports data widths up to 256 bits
Supports memory depths of up to 65,536 locations
Memory is implemented in either Distributed RAM or SelectRAM+ Supports full and empty status flags Invalid read or write requests are rejected without affecting the FIFO state Four optional handshake signals (WR_ACK, WR_ERR, RD_ACK, RD_ERR) provide feedback (acknowledgment or rejection) in response to write and read requests in the prior clock cycle Optional count vector provides visibility into the number of data words currently in the FIFO
Uses relationally placed macro (RPM) mapping and placement technology for maximum and predictable performance
2004 Xilinx, Inc. All rights reserved. All Xilinx trademarks, registered trademarks, patents, and further disclaimers are as listed at [Link] All other trademarks and registered trademarks are the property of their respective owners. All specifications are subject to change without notice. NOTICE OF DISCLAIMER: Xilinx is providing this design, code, or information "as is." By providing the design, code, or information as one possible implementation of this feature, application, or standard, Xilinx makes no representation that this implementation is free from any claims of infringement. You are responsible for obtaining any rights you may require for your implementation. Xilinx expressly disclaims any warranty whatsoever with respect to the adequacy of the implementation, including but not limited to any warranties or representations that this implementation is free from claims of infringement and any implied warranties of merchantability or fitness for a particular purpose.
DS256 May 21, 2004 Product Specification
is
co
nt in
[Link] 1-800-255-7778 Figure 1: Core Schematic Symbol
ue
The Synchronous FIFO has a single clock port for both data-read and data-write operations. Data presented at the module's data-input port (DIN) is written into the next available empty memory location on a rising clock edge when the write-enable input (WR_EN) is High. The memory full status output (FULL) indicates that no more empty locations remain in the module's internal memory. Data can be read out of the FIFO via the module's data-output port (DOUT) in the order in which it was written by asserting read-enable (RD_EN) prior to a rising clock edge. The memory-empty status output (EMPTY) indicates that no more data resides in the module's internal memory.
IP
Synchronous FIFO 5.0
The FIFO status cannot be corrupted by invalid requests. Requesting a read operation while the EMPTY flag is active will not cause any change in the current sate of the FIFO. Similarly, a write operation while the FULL flag is active will not cause any change in the current state of the FIFO. If enabled, the RD_ERR and WR_ERR handshake signals will indicate the rejection of these invalid requests. In addition to the EMPTY and FULL flags, you can enable a count vector (DATA_COUNT) to provide a more granular measure of the FIFO state. The width of this vector is user programmable to provide easy generation of additional flags. For instance, a vector width of one creates a half-full flag; a width of two creates binary-encoded quadrant flags, and so on. The Synchronous FIFO clock (CLK) is rising edge active for the FIFO core. However, it can be made falling edge active (relative to the clock source) by inserting an inverter between the clock source and the FIFOs clock input.
D
DIN[N:0] WR_EN RD_EN CLK SINIT FULL DATA_ COUNT[C:0] WR_ACK 2
Behavior of Status Signals
The activation of the synchronous initialization input (SINIT) will reset the internal pointers and initialize the EMPTY output to 1 and FULL output to 0. This effectively empties the FIFO, discarding any data that may have been stored in the module but which had not been read-out. Optional handshaking signals are provided to simplify the user control logic designed to interact with the FIFO. The WR_ACK and WR_ERR signals indicate acknowledgement or rejection of requested write operations (WR_EN active) respectively. Similarly, RD_ACK and RD_ERR signals indicate the acknowledgement or rejection of read operations (RD_EN active). Each of these control signals, shown in Figure 1, can be made Active High or Low from the GUI. Because an acknowledgement or error response depends on an active request (WR_EN or RD_EN), the acknowledge and error signals are not always the inverse of each other. If no operation is requested then both the acknowledge and the error signals will be inactive during the subsequent clock period. For an example of expected signal sequencing, refer to the timing diagram shown in Figure 2.
Pinout Description
Table 1: Core Signal Pinout
Signal names are described in Table 1.
is
Signal
co
nt
Direction
Input Input Input Input Input Output Output Output
in
[Link] 1-800-255-7778
ue
Data Input
Description
Write Enable (request) Read Enable (request)
Clock for read and write operations (rising edge) Synchronous initialization of all FIFO functions, flags, and pointers Full: No additional writes can be performed Data Count: Vector (unsigned binary) of number of data words currently in FIFO Write Acknowledge: Handshake signal indicates that data was written to the FIFO on the previous CLK edge while WR_EN was active
IP
DS256 May 21, 2004 Product Specification
Synchronous FIFO 5.0
Table 1: Core Signal Pinout (Continued)
Signal
WR_ERR DOUT[N:0] EMPTY
Direction
Output Output Output Output
Description
Write Error: Handshake signal indicates that no data word was written to the FIFO on the previous CLK edge while WR_EN was active Data Output: Synchronous to CLK Empty: No additional reads can be performed Read Acknowledge: Handshake signal indicates that data was read from the FIFO and placed on the DOUT output pins on the previous CLK edge while RD_EN was active Read Error: Handshake signal indicates that no data word was read from the FIFO on the previous CLK edge while RD_EN was active and subsequently data on DOUT output pins was not updated
RD_ACK
DS256 May 21, 2004 Product Specification
D
RD_ERR
Output
CORE Generator Parameters
The main CORE Generator parameterization default values can be found in Table 2, and the parameter descriptions are as follows: Component Name: The component name is used as the base name of the output files generated for this module. Names must begin with a letter and must be composed from the following characters: a to z, 0 to 9 and _. Memory Type: Distributed Memory radio button will implement the FIFOs memory using LUT-based SRL16 elements. Select the appropriate radio button for the type of memory desired. Block Memory implements the FIFOs memory using SelectRAM+. Data Width: The width of the input data bus (also the width of the output data bus). The valid range is 1-256. FIFO Depth: Select the available depth from the pull-down list. Depths are (2N). N can be any integer from 4 to 16, with additional restrictions based on Memory Type and Data Width. Data Count: When selected, the corresponding data count width dialog box becomes active. Data Count Width: Valid count widths are any integer from 1 to N+1 (where 2N = FIFO Depth). If an integer greater than N+1 is entered, the core generation will be inhibited until it is corrected. For example, for a FIFO Depth of 16, the internal counter will have a width of 5-bits, or INT_COUNT[4:0]. There are two cases to be considered:
- Case 1: The selected width of DATA_COUNT is equal to the internal counter (C=5). In this case the output vector generated is equal to the internal counter: DATA_COUNT[4:0] = INT_COUNT[4:0]. - Case 2: The selected width of the DATA_COUNT is less than the internal counter (C<5). In this case, the output vector generated is: DATA_COUNT[(C-1):0] = INT_COUNT[(C-2):(log2(FIFO Depth)-C) For C=4, DATA_COUNT[3:0]=INT_COUNT[3:0] For C=3, DATA_COUNT[2:0]=INT_COUNT[3:1] For C=2, DATA_COUNT[1:0]=INT_COUNT[3:2]
is
co
nt
in
[Link] 1-800-255-7778
ue
IP
Synchronous FIFO 5.0
For C=1, DATA_COUNT[0]=INT_COUNT[3] The optional handshaking control signals (acknowledge and/or error) can be enabled via the Handshaking Options button. Read Acknowledge Flag: Asserted active on the clock cycle after a successful read has occurred. This signal can be made active high or low through the GUI. Read Error Flag: Asserted active on the clock cycle after a read from the FIFO was attempted, but not successful. This signal can be made active high or low through the GUI. Write Acknowledge Flag: Asserted active on the clock cycle after a successful write has occurred. This signal can be made active high or low through the GUI. Write Error Flag: Asserted active on the clock cycle after a write to the FIFO was attempted, but not successful. This signal can be made active high or low through the GUI.
D
4
Parameter Values in XCO File
Names of XCO file parameters and their parameter values are identical to the names and values shown in the GUI, except that underscore characters (_) are used instead of spaces. The text in an XCO file is case insensitive. The format for the XCO file should be as follows: CSET <parameters> = <desired_options>
is
co
nt in
[Link] 1-800-255-7778
ue d IP
DS256 May 21, 2004 Product Specification
Synchronous FIFO 5.0
SINIT CLK
RD_ACK
RD_ERR
DOUT
FULL
Figure 2: Write/Read Waveform for FIFO Depth of 16
For example: CSET component_name = my_fifo_name
DS256 May 21, 2004 Product Specification
[Link] 1-800-255-7778
DATA_COUNT
DIN
WR_EN
WR_ACK
WR_ERR
RD_EN
EMPTY
D is co nt in ue d IP
5
Synchronous FIFO 5.0
Table 2 shows the XCO file parameters and values, as well as summarizes the GUI defaults.
Table 2: XCO File Values and Default GUI Settings
Parameter
component_name
XCO File Values
ASCII text starting with a letter and based upon the following character set: a..z, 0..9, and _ One of the following keywords: Distributed Memory, Block Memory Integer in the range 1 to 256 Integer in the range 15 to 65536. Must be equal to (2^N; N = 4 to 16) One of the following keywords: true, false One of the following keywords: active_high, active_low One of the following keywords: true, false One of the following keywords: active_high, active_low
Default GUI Setting
blank
memory_type data_width fifo_depth
Distributed Memory 1 16 false active_high false active_high false active_high false active_high false 1
D
write_error_flag read_error_flag data_count
write_acknowledge_flag write_acknowledge_sense
write_error_sense
read_acknowledge_flag
read_acknowledge_sense
read_error_sense
data_count_width
Core Resource Utilization
The resource requirements of the synchronous FIFO are highly dependent on the memory size and the presence of optional ports. For some memory depths extra logic is required to decode the address and multiplex the output from various primitives. Table 3 shows the maximum number of slices for various depth and width combinations for the Virtex family. Similarly, Table 4 and Table 5 show maximum resource utilizations for the Virtex-II and Virtex-II Pro families.
Table 3: Virtex Distributed RAM Resource Utilizations
is
Depth
16 32
co
Min Width
1 1
One of the following keywords: true, false One of the following keywords: active_high, active_low One of the following keywords: true, false
nt
Max Width
256 256
in
One of the following keywords: active_high, active_low One of the following keywords: true, false
Integer in the range 1 to N+1, where N is determined by the fifo_depth
ue
Max Size (bits)
4096 8192
IP
270 655
Max Number of Slices
[Link] 1-800-255-7778
DS256 May 21, 2004 Product Specification
Synchronous FIFO 5.0
Table 3: Virtex Distributed RAM Resource Utilizations
Depth
64 128 256
Min Width
1 1 1
Max Width
256 144 72
Max Size (bits)
16384 18432 18432
Max Number of Slices
1680 1961 2000
Table 4: Virtex-II Distributed RAM Resource Utilizations
Depth
16
Min Width
1 1 1 1 1
Max Width
256 256 256 256 256
Max Size (bits)
4096 8192 16384 32768 65536
Max Number of Slices
271 400 913 1683 3221
DS256 May 21, 2004 Product Specification
D
32 64 128 256
Table 5: Virtex-II Pro Distributed RAM Resource Utilizations Depth
16 32 64 128 256
Performance Benchmarking
To properly constrain the Synchronous FIFO, place an appropriate period constraint on the FIFO clock (CLK). The Synchronous FIFO benchmark results are shown in Tables 6 and 7 for Distributed Memory implementation, and Tables 9 and 10 SelectRam+ implementation.
Table 6: Virtex-E Synchronous FIFO Performance Benchmarking (Distributed Memory implementation)
Data Width Depth=64
Note: These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions.
is co
Min Width
1 1 1 1 1
Max Width
256 256
Max Size (bits)
4096 8192 16384 32768 65536
Max Number of Slices
396 397 783 1552 3218
159 MHz (6.3 ns)
nt
8 16
137 MHz (7.3 ns)
in
256 256 256
[Link] 1-800-255-7778
ue
32
130 MHz (7.7 ns)
IP
64
125 MHz (8.0 ns)
128
110 MHz (9.0 ns)
Synchronous FIFO 5.0
Table 7: Virtex-II Synchronous FIFO Performance Benchmarking (Distributed Memory implementation)
Data Width Depth=64 Depth=128 Notes:
8
200 MHz (5.0 ns) 181 MHz (5.5 ns)
16
185 MHz (5.4 ns) 166 MHz (6.0 ns)
32
185 MHz (5.4 ns) 166 MHz (6.0 ns)
64
169 MHz (5.9 ns) 156 MHz (6.4 ns)
128
156 MHz (6.4 ns) 145 MHz (6.9 ns)
1. These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions. 2. These results were obtained using preview speed files.
D
Data Width
Depth = 64 Depth = 128
Table 8: Virtex-E Synchronous FIFO Performance Benchmarking (Distributed Memory Implementation)
Notes:
1. These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions. 2. These results were obtained using preview speed files.
Table 9: Virtex-E Synchronous FIFO Performance Benchmarking (SelectRAM+ implementation)
Note: These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions.
is
8 Part
V50E -7 -8
16
339 MHz (2.9ns)
32
318 MHz (3.1 ns) 234 MHz (4.3 ns)
64
204 MHz (4.9 ns) 220 MHz (4.6 ns)
128
167 MHz (6.0 ns) 152 MHz (6.6 ns)
339 MHz (2.9ns)
co
290 MHz (3.5ns) 256 x 16 204 MHz (4.9 ns)
245 MHz (4.1ns)
nt
192 MHz - (5.2 ns)
in
ue
512 x 8 188 MHz (5.3 ns) 200 MHz (5 ns)
FIFO Implementation
1024 x 8 182 MHz (5.5 ns) 200 MHz (5 ns)
IP
[Link] 1-800-255-7778
DS256 May 21, 2004 Product Specification
Synchronous FIFO 5.0
Table 10: Virtex-II Synchronous FIFO Performance Benchmarking (SelectRAM+ implementation)
Part
2V250 -5 256 x 16 250 MHz (4 ns)
FIFO Implementation
512 x 8 250 MHz (4 ns) 1024 x 8 250 MHz (4 ns)
Note: These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions.
Table 11: Virtex-II Pro Synchronous FIFO Performance Benchmarking (SelectRAM+ implementation)
Part
FIFO Implementation
256 x 16 360 MHz (2.8ns) 512 x 8 330 MHz (3.0ns) 1024 x 8 348 MHz (2.9ns)
DS256 May 21, 2004 Product Specification
D
2VP20 -7
Note: These benchmark designs contain only one FIFO without any additional logic, so benchmark numbers approach the performance ceiling rather than representing performance under typical conditions.
is
co
nt in
[Link] 1-800-255-7778
ue d IP
9
Synchronous FIFO 5.0
Ordering Information
This core may be downloaded from the Xilinx IP Center for use with the Xilinx CORE Generator System v6.2i and later. The Xilinx CORE Generator System tool is bundled with all Alliance Series Software packages, at no additional charge. To order Xilinx software, please visit the Xilinx Silicon Xpresso Cafe or contact your local Xilinx sales representative. Information on additional Xilinx LogiCORE modules is available on the Xilinx IP Center.
Revision History
The following table shows the revision history for this document.
D
Date
03/28/03 05/21/04 10
Version
1.0
Revision
Revision History added to document. Updated for Virtex-4 and Xilinx Core Generator v6.2i.
is
1.1
co nt in
[Link] 1-800-255-7778
ue d IP
DS256 May 21, 2004 Product Specification