Synchronous FIFO Design
Dr. Shailaja Mudengudi Laxmi Amargol
Department of Electronics and Department of Electronics and
Communication Engineering Communication Engineering
Visvesvaraya Technological University, Visvesvaraya Technological University,
Belagavi Gadag, Karnataka, India Belagavi Gadag, Karnataka, India
Komal Mane Vani Sarvi
Department of Electronics and Department of Electronics and
Communication Engineering Communication Engineering
Visvesvaraya Technological University, Visvesvaraya Technological University,
Belagavi Gadag, Karnataka, India Belagavi Gadag, Karnataka, India
-----------------------------------------------------------------***----------------------------------------------------------------
Abstract : of storing and retrieving data in the order it
arrives. Synchronous FIFO's operate under a
This Survey paper discusses the design and common clock domain,making them suitable for
implementation of synchronous First-In-First-Out systems.
memory buffer. Synchronous FIFO is a sequential
storage mechanism used in digital systems to where clock synchronization exists. Applications
control data flow between processes synchronized range from buffering in UARTs to inter-module
by a single clock domain. This design is essential communication in complex [Link] paper
in digital signal processing, communications, and outlines the theoretical principles, design
computer systems where predictable and reliable methodologies, and implementation strategies
data buffering is required. The paper explores key
design parameters such as memory size, pointer necessary to create efficient and reliable FIFO
logic, and flag generation, while also considering structures.
resource usage and speed. The implementation is Image of FIFO Operation:
realized in Verilog and tested through simulation
and hardware synthesis.
Index Terms:
Synchronous FIFO, Verilog, HDL, Digital
Systems, Buffer Design, RTL Design, FPG
Introduction:
In digital systems, managing flow of the data
between producer and consumer modules is
crucial. FIFO buffers provide a systematic method
FIFO Architecture and Operation: settings. Parameterization allows designers to
tailor FIFO size and data width for reuse across
A FIFO (First-In, First-Out) buffer primarily multiple designs. Additional logic for status
consists of a memory array, read and write monitoring, error handling (e.g., overflow,
pointers, and associated control logic. The underflow), and performance optimization (e.g.,
memory array temporarily holds the data, while pipelining, Gray-coded pointers for asynchronous
the pointers track the current read and write variants) may be included based on system
positions. The relationship between these pointers requirements.
is used to detect when the FIFO is either full or
empty. Since both pointers operate under a Verilog Implementation and Simulation:
common clock in a synchronous FIFO, issues like
metastability are inherently avoided. The FIFO is implemented in Verilog HDL with
modules for memory, control, and top-level
The FIFO reaches a full condition when the write integration. Behavioral modeling and
pointer advances to the position of the read synthesizable constructs are used. Testbenches
pointer, and it is considered empty when both verify functionality under different conditions
pointers are at the same location. Accurate flag such as burst writes, reads under empty
management is crucial to prevent reading invalid conditions, andreset sequences. Simulation tools
data or overwriting data that hasn't been read yet. like ModelSim or Vivado are used..
The read and write operations are enabled based
on the state of these status flags. Additionally, Sample logic includes synchronous write and read
auxiliary signals such as almost_full and enable signals, always blocks sensitive to the
almost_empty can provide early warnings for rising clock edge, and case handling for flag
flow control, especially useful in applications with setting. Assertions and coverage analysis help
strict latency requirements. Operating within a ensure the testbench adequately exercises all
unified clock domain ensures reliable and operational modes.
deterministic behavior of the FIFO. Hardware Synthesis and Results
Design Considerations The FIFO was synthesized using Xilinx Vivado
Key design parameters include the FIFO's depth targeting an Artix-7 FPGA. The design achieved
(number of storage locations) and width (bit size timing closure at 100 MHz with minimal logic
of each word), which directly influence system utilization (under 1% of LUTs) and used two
throughput, latency, and resource utilization. BRAMs for data storage. Post-synthesis timing
Design must balance performance with hardware analysis showed a critical path delay of 5.2 ns,
cost. Power consumption, area efficiency, and indicating scope for further frequency scaling
critical path timing must be analyzed and with minor optimization.
optimized. Circular pointer logic supports Hardware-in-the-loop (HIL) testing validated real-
continuous data flow with minimal latency. world performance. The design was subjected to
Reset mechanisms and pointer synchronization high-volume, randomized traffic patterns and
require careful handling to avoid spurious flag verified for stability, data integrity, and correct
flag operation across all scenarios. The FIFO
handled edge conditions such as simultaneous Functional Description:
write-read cycles, pointer wraparounds, and reset
recovery without error.
Applications:
Synchronous FIFOs are widely used in systems
where continuous and orderly data transfer is
essential, such as in data streaming, buffering
sensor outputs, and converting serial data to
parallel formats. Their synchronized operation
makes them well-suited for environments that
demand consistent and reliable timing. With Functional Block Diagram:
appropriate design scaling, they can also support
high-performance interfaces like AXI and USB. The diagram above illustrates the fundamental
components of a synchronous FIFO: the memory
Thanks to their scalability and configurability, array, write control logic, and read control logic. The
synchronous FIFOs can be tailored for both low- memory array may be constructed using either a flip-
data-rate tasks and bandwidth-intensive flop array or a dual-port RAM, both of which support
operations. Advanced FIFO architectures are concurrent read and write operations. This concurrent
often integrated into larger functional blocks, access is central to the FIFO’s synchronous nature, as
it eliminates timing constraints between the two ports.
including DMA controllers, data routing units,
The only limitation is that read and write operations
and pipeline stages within custom processors or
must not target the same memory location at the same
FPGA-based designs. time. The synchronous FIFO operates using a single
clock signal (clk) that drives both read and write
Block diagram of Synchronous FIFO:
actions. When the write-enable signal (write_enable) is
active during a rising clock edge, the data on the input
line (write_data) is stored in the next available free
location in memory. The fifo_full signal indicates that
the FIFO cannot accommodate additional data because
it has reached capacity. Data retrieval occurs through
the output line (read_data) in the same sequence it was
stored, enabled by asserting the read_enable signal
before a rising clock edge. When there is no more data
to read, the fifo_empty flag is set. Additionally,
fifo_aempty and fifo_afull signals serve as early
warnings of the FIFO nearing empty or full conditions,
allowing dynamic control of data flow between the
source and the requester.