[CDC] 10_Multi Bit CDC: Asynchronous FIFO (Code, Simulation)
·
VLSI/Design
Asynchronous FIFO의 SystemVerilog 코드와 시뮬레이션을 확인해보자. Codemodule async_fifo #( parameter int DEPTH = 8, parameter int DWIDTH = 16)( input logic wclk, input logic rclk, input logic rst_n, input logic wr_en, input logic rd_en, input logic [DWIDTH-1:0] din, output logic [DWIDTH-1:0] dout, output logic..
[CDC] 9_Multi Bit CDC: Asynchronous FIFO (Full 판단, Pointer Jump)
·
VLSI/Design
Gray CDC한 Pointer를 비교하여 Empty, Full 판단을 정확하게 하는 것이 중요하다. Empty 판단은 직관적으로 두 포인터가 같을 때이다. CDC 처리만 잘 되었다면 문제가 발생하지 않는다. 이해하기 어렵지 않다. 문제는 Full 판단이다. Full 판단은 Synchronous FIFO와 조금 다르다. Synchronous FIFO에서 Full 판단DEPTH = 8wr_ptr : 4비트 (MSB 포함)rd_ptr : 4비트 (MSB 포함) 조건 wr_ptr == rd_ptr만으로 판단하면 문제가 생김:wr_ptr == rd_ptr → Empty 또는 Full 중 어느 상태인지 구분 불가그래서 wrap bit / MSB를 추가해서 Full과 Empty를 구분함:Empty: 포인터 완전히..
[CDC] 8_Multi Bit CDC: Asynchronous FIFO (Full/Empty Pessimistic Design)
·
VLSI/Design
Asynchronous FIFO란? Asynchronous FIFO는 서로 다른 클럭 도메인(write clock / read clock) 사이에서 연속적인 멀티비트 데이터 스트림을 순서 깨짐 없이 안전하게 전달하기 위한 FIFO 구조다. 구분Synchronous FIFOAsynchronous FIFOWrite Clockclkwr_clkRead Clockclkrd_clk클럭 도메인동일서로 다름CDC 고려불필요필수 즉, Write와 Read가 서로 다른 시간축에서 동작하는 FIFO로 이해할 수 있다. 실제 실무에서는Fast IP → Slow IPCPU/APB → Pixel clockSensor clock → System clock처럼 서로 다른 클럭 도메인 간 데이터 스트림 전달이 훨씬 더 흔하다. 단순 ..
[CDC] 6_Multi Bit CDC: Asynchronous FIFO (Introduction)
·
VLSI/Design
Asynchronous FIFO는서로 다른 클럭 도메인(src/dst) 사이에서 연속적인 멀티비트 데이터 스트림을 순서 깨짐 없이 안전하게 전달하기 위한 구조다. 지금까지 학습해왔던 CDC 기법은 단발성 이벤트 또는 상태 전달 정도만 가능했다. 하지만 Asynchronous FIFO는 데이터 스트림을 CDC하여 전달가능케 한다. 기존 CDC 기법의 한계Handshake CDC의 한계Handshake CDC는 단일 데이터 전송에는 안전하지만, 연속적인 스트림 전송에는 구조적으로 부적합하다.SRC: data_valid → ack 기다림 → 다음 데이터 매 전송마다 ACK 대기 → Latency 큼Throughput = 1 / handshake고속 파이프라인 불가즉, 고속의 스트림 데이터에는 부적합하다. G..