This project demonstrates multi-clock domain data synchronization using clock domain crossing (CDC) techniques, including clock steering, MMCM-based clock generation, and an asynchronous FIFO for safe data transfer between different clock domains.
This design shows how to transfer data from a fast-changing clock domain to a slower one using:
- 🕘 Multiple Clock Inputs (150 MHz and 200 MHz)
- 🧭 Clock Steering (select one clock at runtime)
- 🔁 Basic Mixed-Mode Clock Manager (MMCM) to generate internal clocks
- 📦 CDC FIFO (asynchronous FIFO) for safe data transfer across domains
- 🎯 Producer-Consumer model for data movement and monitoring
This project is written in SystemVerilog and is intended for use with Xilinx Vivado.
-
Open Vivado and create a new project.
-
Add Design Sources:
- Add all files from
hdl/src/:cdc_fifo.svdata_consumer.svdata_producer.svmixed_mode_clock_manager.sv
- Add
hdl/top.svand set it as your Top Module.
- Add all files from
-
Add Simulation Sources:
- Add
test/tb_top.svto the simulation sources.
- Add
-
Run Simulation:
- Set
tb_topas the simulation top module. - Run a behavioral simulation to verify functionality.
- Set
