Fifo Ug
Fifo Ug
Agate Logic 1
FIFO User Guide
Contents
1.1 Device Family Support .............................................................................................4
1.2 Introduction...................................................................................................................4
1.3 Features .........................................................................................................................4
2.1 FIFO Interfaces ................................................................................................................6
2.1.1. Interface Signals: Asynchronous FIFO .............................................................6
2.1.2. Interface Signals: Synchronous FIFO ...............................................................9
2.2 FIFO Usage and Control ................................................................................................14
2.2.1 Asynchronous FIFO Write Operation .................................................................14
2.2.2 Asynchronous FIFO Read Operation..................................................................15
2.2.3 Synchronous FIFO Write and Read Operation ......................................................16
2.2.4 Asynchronous FIFO Handshaking flags ................................................................16
2.2.5 Synchronous FIFO Handshaking flags ..................................................................19
2.2.5 Asynchronous FIFO programmable flags ..............................................................21
2.2.6 Synchronous FIFO Programmable Flags ........................................................25
2.2.7 Asynchronous FIFO Data Counts ...................................................................28
2.2.8 Synchronous FIFO Count ...............................................................................29
2.2.9 Reset Behavior ................................................................................................29
6.1 Resource Utilization and Performance........................................................................40
About Agate Logic ..................................................................................................................41
Technical Support Assistance..........................................................................................41
Agate Logic 2
FIFO User Guide
Agate Logic 3
FIFO User Guide
The synchronous or asynchronous FIFO supports the following target Agate Logic device
families:
z Angelo
1.2 Introduction
As design complexities increase, the vendor-specific IP blocks has become a common design
methodology. Agate Logic provides parameterized IPs that are optimized for Agate Logic
device architecture. Using IP instead of coding your own logic saves your valuable design
time.
The FIFO is built from EMB9K and can be configured with either asynchronous or
synchronous for both write and read operations. The asynchronous configuration of the FIFO
enables the user to implement unique clock domains on the write and read ports. A
synchronous FIFO implementation optimizes the core for data buffering within a single clock
domain.
1.3 Features
Agate Logic 4
FIFO User Guide
half_full_negate/half_empty_negate.
z Invalid read or write requests are rejected without affecting the FIFO state
z Four optional handshake signals (wr_ack, rd_ack, overflow, underflow) provide
feedback ( acknowledgment or rejection) in response to write and read requests in the
prior clock cycle
z Optional count vector(s) provide visibility into number of data words currently in the
FIFO, synchronized to either clock domain
z Support different input and output data widths for asynchronous FIFO
Agate Logic 5
FIFO User Guide
Getting Started
Section 2
The following two sections provide definitions for the FIFO interface signals. Figure 1
illustrates these signals (both the standard and optional ports) for the asynchronous FIFO.
Table 2 defines the signals for the write interface of an asynchronous FIFO. The write
interface signals are divided into required and optional signals and all signals are synchronous
to the write clock (wr_clk).
Table 2 Write Interface Signals for Asynchronous FIFO
Name Direction Description
Required
data input: The input data bus used when writing the
din[dw1-1:0] Input
FIFO.
Agate Logic 6
FIFO User Guide
Optional
almost full: When asserted, this signal indicates that only
almost full Output one more write can be performed before the FIFO is full.
This signal is active high.
Reset signals
Agate Logic 7
FIFO User Guide
Table 3 defined the signals on the read interface of an asynchronous FIFO. The read interface
signals are divided into required signals and optional signals, and all signals are synchronous
to the read clock(rd_clk).
Table 3 Read Interface Signals for Asynchronous FIFO
Name Direction Description
Required
read clock: All signals on the read domain are synchronous
rd_clk Input
to this clock.
data output: The output data bus is driven when reading the
dout[dw2-1:0] Output
FIFO.
Optional
almost empty flag: When asserted, this signal indicates that
almost_empty Output the FIFO is almost empty and one word remains in the
FIFO. This signal is active high.
Agate Logic 8
FIFO User Guide
Required
rst_syn Input synchronous reset: An synchronous
Agate Logic 9
FIFO User Guide
asynchronous reset: An
asynchronous reset that initializes
rst_asyn Input all internal pointers and output
registers. Active low or high is
optional.
Optional
data count: This bus indicates the
count[aw-1:0] Output
number of words stored in the FIFO.
Agate Logic 10
FIFO User Guide
Agate Logic 11
FIFO User Guide
Agate Logic 12
FIFO User Guide
Agate Logic 13
FIFO User Guide
This section describes the behavior of a asynchronous FIFO write and the associated status
flags. When write enable is asserted and the FIFO is not full, data is added to the FIFO from
the input bus and write acknowledge is asserted. If the FIFO is continuously written to without
being read, it fills with data. Write operations are only successful when the FIFO is not full.
When the FIFO is full and a write is initiated, the request is ignored, the overflow flag is
asserted and there is no change in the state of the FIFO.
The almost_full flag indicates that only one more write can be performed before full is asserted.
This flag is active high and synchronous to the write clock.
The full flag indicates that the FIFO is full and no more writes can be performed until data is
read out. This flag is active high and synchronous to the write clock. If a writes is initiated when
full is asserted, the write request is ignored and overflow is asserted.
Example Operation
Figure 3 shows a typical write operation. The user asserts wr_en, causing a write operation to
occur on the next rising edge of the wr_clk. Since the FIFO is not full, wr_ack is asserted,
acknowledging a successful write operation. When only one additional word can be written into
the FIFO, the FIFO asserts the almost_full flag. When almost_full is asserted, one additional
write causes the FIFO to assert full. When a write occurs after full is asserted, wr_ack is
deasserted and overflow is asserted, indicating an overflow condition. Once the user performs
one or more read operations, the FIFO deasserts full, and data can successfully be written to the
FIFO, as is indicated by the assertion of wr_ack and deassertion of overflow.
Agate Logic 14
FIFO User Guide
This section describes the behavior of an asynchronous FIFO read operation and the associated
status flags. When read enable is asserted and the FIFO is not empty, data is read from the FIFO
on the output bus, and the rd_ack flag is asserted. If the FIFO is continuously read without
being written, the FIFO empties. Read operation are successful when the FIFO is not empty.
When the FIFO is empty and a read is requested, the read operation is ignored, the underflow
flag is asserted and there is no change in the state of the FIFO.
The almost empty flag indicates that the FIFO will be empty after one more read operation.
This flag is active high and synchronous to rd_clk. This flag is asserted when the FIFO has one
remaining word that can be read.
The empty flag indicates that the FIFO is empty and no more reads can be performed until data
is written into the FIFO. This flag is active high and synchronous to the rd_clk. If a read is
initiated when empty is asserted, the request is ignored and underflow is asserted.
Example Operation
Figure 4 shows a typical read operation. The user asserts rd_en, causing a read operation to
occur on the next rising edge of the rd_clk. Since the FIFO is not empty, rd_ack is asserted,
acknowledging a successful read operation. When only one additional word can be read out
from the FIFO, the FIFO asserts the almost_empty flag. When almost_empty is asserted, one
additional read causes the FIFO to assert empty. When a read occurs after empty is asserted,
rd_ack is deasserted and underflow is asserted, indicating an underflow condition. Once the
user performs one or more write operations, the FIFO deasserts empty, and data can
successfully be read from the FIFO, as is indicated by the assertion of rd_ack and
deassertion of underflow.
Agate Logic 15
FIFO User Guide
Figure 5 shows a typical write and read operation. A write is issued to the FIFO, resulting in the
deassertion of the empty flag. A simultaneous write and read is then issued, resulting in no
change in the status flags. Once two or more words are present in the FIFO, the almost_empty
flag is deasserted. Write requests are then issued to the FIFO, resulting in the assertion of
almost_full when the FIFO can only accept one more write. A simultaneous write and read is
then issued, resulting in no change in the status flags. Finally one additional write without a
read result in the FIFO asserting full, indicating no further data can be written until a read
request is issued.
Handshaking flags (read acknowledge, underflow, write acknowledge and overflow) are
supported to provide additional information regarding the status of the write and read operations.
The handshaking flags are optional and active high. These flags are illustrated in Figure 6.
Write Acknowledge(wr_ack)
The write acknowledge flag is asserted at the completion of each successful write operation and
indicates that the data on the din port has been stored in the FIFO. This flags is synchronous to
the write clock.
Example Operation
Figure 6 illustrates the behavior of the FIFO flags. On the write interface, full is not asserted
and writing to the FIFO is successful. When a write occurs after full is asserted, wr_ack is
deasserted an overflow is asserted, indicating an overflow condition.
Agate Logic 16
FIFO User Guide
Read acknowledge(rd_ack)
The read acknowledge is asserted at the rising edge of rd_clk for each successful read operation,
and indicates that the data on the dout bus is valid. When a read request is unsuccessful, read
acknowledge is not asserted. This flags is synchronous to the read clock.
Example Operation
Figure 7 illustrates the behavior of the FIFO flags. On the read interface, once the FIFO is not
empty, the FIFO accepts read requests. In FIFO operation, rd_ack is asserted and dout is
updated on the clock cycle following the read request.
Underflow
The underflow flag is used to indicate that a read operation is unsuccessful. This occurs when a
read is initiated and the FIFO is empty. This flag is synchrounous with the read clock.
Underflowing the FIFO does change the state of the FIFO.
Agate Logic 17
FIFO User Guide
Example Operation
On the read interface, once the FIFO is not empty, the FIFO accepts read requests. Following a
read request, rd_ack is asserted and dout is updated. When a read request is issued while empty
is asserted, rd_ack is deasserted and underflow is asserted, indicating an underflow condition.
Overflow
The overflow flag is used to indicate that a write operation is unsuccessful. This flag is asserted
when a write is initiated to the FIFO while full is asserted. The overflow flag is synchronous to
the write clock. Overflowing the FIFO does not change the state of the FIFO.
Example Operation
On the write interface, full is deasserted and therefore writes to the FIFO are successful. When a
write occurs after full is asserted, wr_ack is deasserted and overflow is asserted, indicating an
overflow condition.
Agate Logic 18
FIFO User Guide
Handshaking flags (read acknowledge, underflow, write acknowledge and overflow) are
supported to provide additional information regarding the status of the write and read operations.
The handshaking flags are optional and active high. These flags are illustrated in Figure 10.
Write Acknowledge(wr_ack)
The write acknowledge flag is asserted at the completion of each successful write operation and
indicates that the data on the din port has been stored in the FIFO. This flags is synchronous to
the clock.
Example Operation
Figure 10 illustrates the behavior of the FIFO flags. On the write interface, full is not asserted
and writing to the FIFO is successful. When a write occurs after full is asserted, wr_ack is
deasserted an overflow is asserted, indicating an overflow condition.
Read Acknowledge(rd_ack)
The read acknowledge is asserted at the rising edge of rd_clk for each successful read operation,
and indicates that the data on the dout bus is valid. When a read request is unsuccessful, read
acknowledge is not asserted. This flags is synchronous to the clock.
Example Operation
Figure 11 illustrates the behavior of the FIFO flags. On the read interface, once the FIFO is not
empty, the FIFO accepts read requests. In FIFO operation, rd_ack is asserted and dout is
updated on the clock cycle following the read request.
Agate Logic 19
FIFO User Guide
Underflow
The underflow flag is used to indicate that a read operation is unsuccessful. This occurs when a
read is initiated and the FIFO is empty. This flag is synchrounous with the clock. Underflowing
the FIFO does change the state of the FIFO.
Example Operation
Once the FIFO is not empty, the FIFO accepts read requests. Following a read request, rd_ack is
asserted and dout is updated. When a read request is issued while empty is asserted, rd_ack is
deasserted and underflow is asserted, indicating an underflow condition.
Overflow
The overflow flag is used to indicate that a write operation is unsuccessful. This flag is asserted
when a write is initiated to the FIFO while full is asserted. The overflow flag is synchronous to
the write clock. Overflowing the FIFO does not change the state of the FIFO.
Agate Logic 20
FIFO User Guide
Example Operation
Full signal is deasserted and therefore writes to the FIFO are successful. When a write occurs
after full is asserted, wr_ack is deasserted and overflow is asserted, indicating an overflow
condition.
The FIFO supports programmable flags to indicate that the FIFO has reached a user-defined fill
level.
Programmable full (half_full) indicates that the FIFO has reached a user-defined full threshold.
Programmable empty (half_empty) indicates that the FIFO has reached a user-defined empty
threshold.
For these thresholds, the user can set a constant value or choose to have dedicated input ports,
enabling the threshold to change dynamically in circuit. Detailed information about these
options is provided below.
Programmable Full
The FIFO supports four ways to define the programmable full threshold:
z Single threshold constant
z Single threshold with dedicated input port
z Assert and negate thresholds constants
z Assert and negate thresholds with dedicated input ports
The programmable full flag (half_full) is asserted when the number of entries in the FIFO is
greater than or equal to the user-defined assert threshold. When the programmable full flag is
asserted, the FIFO can continue to be written to until full flag is asserted. If the number of
words in the FIFO is less than the negate threshold, the flag is deasserted.
Agate Logic 21
FIFO User Guide
half_full,. When the number of entries in the FIFO is greater than or equal to the threshold
value, half_full is asserted. When the number of entries in the FIFO is less than the threshold
value, half_full is deasserted.
There are two options for implementing this threshold:
z Single threshold constant. User specifies the threshold value through the IP WIZARD
GUI. Once the IP is generated, this value can only be changed by regenerating the IP
CORE.
z Single threshold with dedicated input port. User specifies the threshold value through
an input port on the core. This input can be changed while the FIFO is in reset,
providing the user the flexibility to change the programmable full threshold in-circuit
without re-generating the core.
Figure 14 shows the programmable full flag with a single threshold. The user writes to the
FIFO until there are seven words in the FIFO. Since the programmable full threshold is set to
seven, the FIFO asserts half_full once seven word are written into the FIFO. Note that both
write data count and half_full have one clock cycle of delay. Once the FIFO has six or fewer
words in the FIFO, half_full is deasserted.
Agate Logic 22
FIFO User Guide
Figure 15 Half full signal with Assert and Negate Threshold: Assert Set to 10 and
Negate Set to 7
Programmable Empty
The FIFO supports fours ways to define the programmable empty thresholds:
z Single threshold constant
z Single threshold with dedicated input port
z Assert and negate threshold constants
z Assert and negate threshold with dedicated input ports
The programmable empty flag is asserted when the number of entries in the FIFO is less than or
equal to the user-defined assert threshold. If the number of words in the FIFO is greater than the
negate threshold, the flag is deasserted.
Programmable empty: single threshold
This option enables the user to set a single threshold value for the assertion and deassertion of
half_empty. When the number of entries in the FIFO is less than or equal to the threshold value,
half_empty is asserted. When the number of entries in the FIFO is greater than the threshold
value, half_empty is deasseerted.
There are two options for implementing this threshold.
Single threshold constant: User specifies the threshold value through the IP WIZARD GUI.
Once the core is generated, this value can only be changed by re-generating the core. This
option consumes fewer resources than the single threshold with dedicated input port.
Single threshold with dedicated input port: User specifies the threshold value through an input
port on the core. This input can be changed while the FIFO is in reset, providing the user the
flexibility to change the programmable empty threshold in-circuit without re-generating the
core.
Figure 16 show the programmable empty flag with a single threshold. The user writes to the
FIFO until there are five words in the FIFO. Since the programmable empty threshold is set to
four, half_empty is asserted until more than four words are present in the FIFO. Once five
words are present in the FIFO, half_empty is deasserted. Both read data count and half_empty
have one clock cycle of delay.
Agate Logic 23
FIFO User Guide
Figure 17 Half full signal with Assert and Negate Threshold: Assert Set to 7 and
Negate Set to 10
Agate Logic 24
FIFO User Guide
The FIFO supports programmable flags to indicate that the FIFO has reached a user-defined fill
level.
Programmable full (half_full) indicates that the FIFO has reached a user-defined full threshold.
Programmable empty (half_empty) indicates that the FIFO has reached a user-defined empty
threshold.
For these thresholds, the user can set a constant value or choose to have dedicated input ports,
enabling the threshold to change dynamically in circuit. Detailed information about these
options is provided below.
Programmable Full
The FIFO supports four ways to define the programmable full threshold:
z Single threshold constant
z Single threshold with dedicated input port
z Assert and negate thresholds constants
z Assert and negate thresholds with dedicated input ports
The programmable full flag (half_full) is asserted when the number of entries in the FIFO is
greater than or equal to the user-defined assert threshold. When the programmable full flag is
asserted, the FIFO can continue to be written to until full flag is asserted. If the number of
words in the FIFO is less than the negate threshold, the flag is deasserted.
Agate Logic 25
FIFO User Guide
Figure 19 Half full signal with Assert and Negate Threshold: Assert Set to 10 and
Negate Set to 7
Programmable Empty
The FIFO supports fours ways to define the programmable empty thresholds:
z Single threshold constant
z Single threshold with dedicated input port
Agate Logic 26
FIFO User Guide
Agate Logic 27
FIFO User Guide
providing the user the flexibility to change the values of the programmable empty assert and
negate thresholds in-circuit without regenerating the core.
Figure 21 shows the programmable empty flag with assert and negate thresholds. The user writes
to the FIFO until there are eleven words in the FIFO. Since the programmable empty deassert
values is set to ten, half_empty is deasserted when there are more than ten words in the FIFO.
Once the FIFO contains less than or equal to the programmable empty negate value, half_empty is
asserted. Both read data count and half_empty have one clock cycle of delay.
Figure 21 Half full signal with Assert and Negate Threshold: Assert Set to 7 and
Negate Set to 10
data_count tracks the number of words in the FIFO. You can specify the width of the data
count bus with a maximum width of log2(FIFO depth)+1. If the width specified is smaller than the
maximum allowable width, the bus is truncated by removing the lower bits.
Read data count pessimistically reports the number of words available for reading. The count
is guaranteed to never over-report the number of words available in the FIFO to ensure that the
user never underflows the FIFO. The user can specify the width of the read data count bus
width a maximum width of log2(read depth)+1. If the width specified is smaller than the maximum
allowable width, the bus is truncated width the lower bits removed.
Agate Logic 28
FIFO User Guide
Write data count pessimistically reports the number of words written into the FIFO. The count
is guaranteed to never under-report the number of words in the FIFO to ensure that the user
never overflows the FIFO. The user can specify the width of the write data count bus width a
maximum width of log2(write depth)+1. If the width specified is smaller than the maximum
allowable width, the bus is truncated with the lower bits removed.
Count
Count output accurately reports the number of words available in a synchronous FIFO. You can
specify the width of the count bus with a maximum width of log2(depth). If the width specified is
smaller than the maximum allowable width, the bus it truncated with the lower bits removed.
For example, you can specify to use two bits out of a maximum allowable three bits (provided a
FIFO depth is eigth). These two bits indicate the number of words in the FIFO with a quarter
resolution, providing the status of the contents of the FIFO for read and write operations.
The FIFO IP provides reset input that reset all counters, output registers, and memories when
asserted. There are two reset options: asynchronous and synchronous. The asynchronous reset
port is rst_asyn, the synchronous reset port is rst_syn and they can be active high or low.
Table 5 defines the FIFO reset values.
Table 5 FIFO reset values
signal Asynchronous reset Synchronous reset
dout 0 0
full 0 0
empty 1 1
Agate Logic 29
FIFO User Guide
wr_ack 0 0
rd_ack 0 0
half_full 0 0
half_empty 1 1
underflow 0 0
overflow 0 0
almost_full 0 0
almost_empty 1 1
wr_count 0 -
rd_count 0 -
count - 0
Agate Logic 30
FIFO User Guide
FIFO Parameters
Section 3
Customers can set FIFO read and write data width, depth and optional handshaking flags by
some parameters. Table 6 describes the parameters.
Table 6 FIFO Parameters
Asynchronous FIFO
Asynchronous FIFO
dw Data width
aw FIFO depth
Agate Logic 31
FIFO User Guide
Agate Logic 32
FIFO User Guide
FIFO Instantiation
Section 4
module ip_module_name(
din,
half_full_thresh,
half_empty_thresh,
half_empty_assert,
half_empty_negate,
half_full_assert,
half_full_negate,
rd_clk,
rd_en,
rst_syn,
rst_asyn,
wr_clk,
wr_en,
almost_empty,
almost_full,
dout,
empty,
full,
overflow,
half_empty,
half_full,
rd_ack,
rd_count,
underflow,
wr_ack,
wr_count);
Agate Logic 33
FIFO User Guide
async_fifo inst (
.din(din),
. half_full_thresh (half_full_thresh),
. half_empty_thresh (half_empty_thresh),
.half_empty_assert (half_empty_assert),
.half_empty_negate (half_empty_negate),
.half_full_assert (half_full_assert),
.half_full_negate (half_full_negate),
Agate Logic 34
FIFO User Guide
.rd_clk (rd_clk),
.rd_en (rd_en),
.rst_syn (rst_syn),
.rst_asyn (rst_asyn),
.wr_clk (wr_clk),
.wr_en (wr_en),
.almost_empty (almost_empty),
.almost_full (almost_full),
.dout (dout),
.empty (empty),
.full (full),
.overflow (overflow),
.half_empty (half_empty),
.half_full (half_full),
.rd_ack (rd_ack),
.rd_count (rd_count),
.underflow (underflow),
.wr_ack (wr_ack),
.wr_count (wr_count));
endmodule
Agate Logic 35
FIFO User Guide
module ip_module_name(
din,
half_full_thresh,
half_empty_thresh,
half_empty_assert,
half_empty_negate,
half_full_assert,
half_full_negate,
clk,
rd_en,
rst_syn,
rst_asyn,
wr_en,
almost_empty,
almost_full,
dout,
empty,
full,
overflow,
half_empty,
half_full,
rd_ack,
underflow,
wr_ack,
count);
Agate Logic 36
FIFO User Guide
_type is 4
input [aw-1:0] half_full_negate; // programmable full signal negate threshold, it is valid port only the half_
full _type is 4
input [aw-1:0] half_full_thresh; //programmable full signal threshold, it is valid port only the half_full_type
is 3
input [aw-1:0] half_empty_thresh; //programmable empty signal threshold, it is valid port only the
half_empty_type is 3
input clk; //clock
input rd_en; //read enable
input rst_syn; //synchronous reset
input rst_asyn; //asynchronous reset
input wr_en; //write enable
output almost_empty; //almost empty signal
output almost_full; //almost full signal
output [dw-1 : 0] dout; //data out from FIFO
output empty; //empty signal
output full; //full signal
output overflow; //overflow signal
output half_empty; //programmable empty signal
output half_full; //programmable full signal
output rd_ack; //read valid signal
output [aw-1 : 0] count; //data amount of in FIFO
output underflow; //underflow signal
output wr_ack; //write acknowledge
sync_fifo inst (
.din(din),
. half_full_thresh (half_full_thresh),
. half_empty_thresh (half_empty_thresh),
.half_empty_assert (half_empty_assert),
.half_empty_negate (half_empty_negate),
.half_full_assert (half_full_assert),
.half_full_negate (half_full_negate),
.clk (clk),
.rd_en (rd_en),
.rst_syn (rst_syn),
.rst_asyn (rst_asyn),
.wr_en (wr_en),
.almost_empty (almost_empty),
.almost_full (almost_full),
.dout (dout),
.empty (empty),
.full (full),
.overflow (overflow),
Agate Logic 37
FIFO User Guide
.half_empty (half_empty),
.half_full (half_full),
.rd_ack (rd_ack),
.underflow (underflow),
.wr_ack (wr_ack),
.count (count));
endmodule
Agate Logic 38
FIFO User Guide
Simulating Design
Section 5
The Agate Logic provide the behavioral model to customers for simulation.
The behavioral models are considered to be zero-delay models, as the modeled write-to-read
latency is nearly zero. The behavioral models are functionally correct, and will represent the
behavioral of the configured FIFO, although the write-to-read latency and the behavioral of the
status flags will differ from the actual implementation of the FIFO design.
Agate Logic 39
FIFO User Guide
Performance Information
Section 6
Performance and resource utilization for a FIFO varies depending on the configuration and
features selected when customizing the core. The tables below provide example FIFO
configurations and the maximum performance and resources required.
Table 7 FIFO Performance and Resources
Resources
FIFO Type WidthxDepth Family Performance(MHz)
LUTs FFs EMB9K
1x8k 53 99 47 1
2x4k 47 93 44 1
4x2k 52 85 41 1
8x1k 48 80 38 1
Angelo
Synchronous 16x512 56 73 35 1
32x256 52 66 32 1
9x1k 44 80 38 1
18x512 57 73 35 1
36x256 48 66 32 1
1x8k 30 158 94 1
2x4k 34 148 88 1
4x2k 43 138 82 1
8x1k 50 125 76 1
Asynchronous 16x512 Angelo 41 118 70 1
32x256 58 109 64 1
9x1k 43 125 76 1
18x512 40 118 70 1
36x256 51 109 64 1
Agate Logic 40
FIFO User Guide
Agate Logic is the global pioneer and leader of the innovative Adaptable Programmable
Gate Array (APGA) technologies. The company offers a full spectrum of
programmable logic devices, software design tools, intellectual property (IP) and
design services. Focusing on multiple applications such as telecommunication
equipments, industrial control systems and consumer products, we use the Chinese
leading foundry partner, SMIC, to manufacture our chips to offer solutions tailored for
the market in China.
E-mail: [email protected]
Website: www.agatelogic.com.cn
Agate Logic 41
FIFO User Guide
Copyright © 2005-2009 Agate Logic, Inc. All rights reserved. No part of this document may be
copied, transmitted, transcribed, stored in a retrieval system, or translated into any language or
computer language, in any form or by any means, electronic, mechanical, magnetic, optical,
chemical, manual or otherwise, without the written permission of Agate Logic, Inc. All trademarks
are the property of their respective companies.
Agate Logic 42