Back to Home
Zoi3D Interactive Lab

Hardware Workbench

Step into a physical-like electronics breadboard. Switch inputs, tune frequencies, and watch hardware logic execute in real time.

Active ProjectAsynchronous FIFO

Tactile Controls

Hardware Parameters
Auto Clock Run❚❚ Paused (Step Mode)
wclk (Write Domain)Freq: 1.0Hz
rclk (Read Domain)Freq: 0.6Hz
wr_en (Write Enable)Authorize push into memory
rd_en (Read Enable)Authorize pop from memory
wrst_nActive (1)
rrst_nActive (1)
Input PayloadHex byte value

3D Interactive PCB Breadboard

PAUSED
FIFO Alert: Buffer is empty! Waiting for data input.
async fifo
SRAM Occupancy:0 / 8 Slots
[0]--
[1]--
[2]--
[3]--
[4]--
[5]--
[6]--
[7]--

Logic Monitor

Cycle #0
Write Domain (wclk)1.0 Hz
b_wptr (Binary):0 [0000]
g_wptr (Gray):0000
Read Domain (rclk)0.6 Hz
b_rptr (Binary):0 [0000]
g_rptr (Gray):0000
2-Stage Flip-Flop CDC Bridges
g_rptr_sync (to wclk):0000
g_wptr_sync (to rclk):0000
wfull Flag0
rempty Flag1 (EMPTY)
data_out busActive Read Strobe
0x00

Real-time RTL Code Analyzer

1module asynchronous_fifo #(parameter DEPTH=8, DATA_WIDTH=8) (
2 input wclk, wrst_n,
3 input rclk, rrst_n,
4 input w_en, r_en,
5 input [DATA_WIDTH-1:0] data_in,
6 output reg [DATA_WIDTH-1:0] data_out,
7 output reg full, empty
8);
9 parameter PTR_WIDTH = $clog2(DEPTH);
10 synchronizer #(PTR_WIDTH) sync_wptr (rclk, rrst_n, g_wptr, g_wptr_sync);
11 synchronizer #(PTR_WIDTH) sync_rptr (wclk, wrst_n, g_rptr, g_rptr_sync);
12 wptr_handler #(PTR_WIDTH) wptr_h(wclk, wrst_n, w_en, g_rptr_sync, b_wptr, g_wptr, full);
13 rptr_handler #(PTR_WIDTH) rptr_h(rclk, rrst_n, r_en, g_wptr_sync, b_rptr, g_rptr, empty);
14 fifo_mem fifom(wclk, w_en, rclk, r_en, b_wptr, b_rptr, data_in, full, empty, data_out);
15endmodule
Architecture Breakdown

This is the top-level module (asynchronous_fifo) wrapper. It instantiates the dual-port memory core, the write pointer handler, the read pointer handler, and the dual 2-stage Flip-Flop pointer synchronizer bridges to resolve clock domain crossing (CDC) metastability.

Logic Analyzer Console

Console idle. Clock domain messages will output here...