강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

pjhyun0546님의 프로필 이미지
pjhyun0546

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)

[HDL 39장] Mem copy IP. DMA WDMA 설계 - 실습편

AXI_VIP 사용 시 glitch 발생

작성

·

46

1

안녕하세요 🙂

안녕하세요, 맛비님 강의 잘 듣고 AXI 프로토콜 실습 중인 대학원생입니다.

현재 Xilinx AXI VIP를 사용해 DUT(Master)를 검증하고 있는데, WREADY 신호가 시스템 클록(ap_clk)과 맞지 않게 토글되는 현상을 관찰했습니다.

현상 요약:

AXI VIP 환경에서 슬레이브 측 WREADY 신호 생성을 RANDOM 모드를 사용하고 있습니다.

" rgen.set_ready_policy(XIL_AXI_READY_GEN_RANDOM);"

이 설정을 사용하자, VIP가 생성하는 m00_axi_wready 신호가 저희 DUT의 시스템 클럭(ap_clk)과 동기화되지 않은 상태로 토글되는 것을 확인했습니다. 즉, WREADY가 클럭 엣지에 맞지 않게 변경되면서, 의도치 않은 시점에 WVALID && WREADY 조건이 만족되어 w_hs (write handshake)가 발생하게 됩니다.

결과적으로 클록 엣지 기준으로는 WREADY = 0이어야 하는데, δ‑사이클(글리치) 동안 1로 인식되는 문제가 생깁니다.

질문:

위와 같은 상황에서 2가지 질문이 있는데요,

1. PS(혹은 PL)의 DRAM 데이터를 AXI를 통해 PL영역(제가 설계한 DMA)으로 전송할 때, 위와 같은 WREADY 글리치가 FPGA 상 혹은 실제 ASIC 칩을 찍는다고 했을 때 실제로 발생하는 현상인가요?

2. 현업에서는 이러한 경우가 발생한 경우에 어떻게 해결하는지 궁금합니다. (AXI4 protocol 사용 혹은 일반적인 signal)

  • (추가로 좀 찾아보니 synchronizer를 사용해 latch한다고 하는데 AXI4 protocol에는 적합하지 않다고 판단됩니다.)

답변 1

0

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요. 질문 잘 읽었습니다.
AXI VIP로 실습을 진행하면서 굉장히 본질적인 부분을 고민하고 계신 것 같습니다.

Xilinx 사의 AXI VIP 의 전부를 알고있는건 아니라서, 제 개인적인 경험을 바탕으로 정리해볼께요. (옵션 같은건.. 문서가 정확합니다 ㅎㅎ)

1. VIP에서 관찰된 WREADY 글리치, 실제 시스템에서도 발생하는가?

결론부터 말씀드리면, VIP에서 관찰된 것처럼 클럭 엣지 기준으로 안정되지 않은 WREADY 토글 현상은 실제 FPGA나 ASIC에서는 발생하지 않습니다.
AXI4 프로토콜은 기본적으로 동기식 클럭 도메인을 전제로 설계되어 있으며, 실물 시스템에서는 WREADY 같은 핸드셰이크 신호는 반드시 클럭에 맞춰서 토글되도록 설계됩니다.

현재 사용하신 VIP 옵션인 XIL_AXI_READY_GEN_RANDOM일부러 비정형적인 타이밍을 생성해서 DUT의 견고성을 테스트하려는 목적이 있는 설정입니다. 시뮬레이션 환경에서만 가능한 동작이며, 실제 회로나 합성 가능한 RTL에서 저런 타이밍이 나오는 경우는 없습니다.

2. 현업에서는 어떻게 대응하는가?

이런 상황에서는 보통 다음과 같은 방식으로 대응합니다.

첫째, VIP 설정을 조정합니다.
WREADY가 랜덤하게 생성되면서 클럭 엣지 기준이 맞지 않는 문제가 있다면, XIL_AXI_READY_GEN_VALID 같은 설정으로 바꿔서 VALID 신호에 반응하는 방식으로 동작하게 만듭니다. 이렇게 하면 DUT가 오동작하는 일 없이 정상적으로 테스트를 이어갈 수 있습니다.

둘째, 일부러 랜덤 모드를 유지하더라도 VIP 쪽 신호를 DUT의 클럭으로 샘플링해서 입력하는 식의 조치가 들어갑니다. 이건 strict한 CDC 처리처럼 복잡하게 가는 건 아니고, 단순히 handshake 조건이 클럭에 맞춰서 잡히도록 정리해 주는 정도입니다.

셋째, 좀 더 복잡한 시스템에서는 DUT와 VIP 사이에 CDC-safe 인터페이스나 스티키 버퍼 등을 추가해서 안정성을 확보하기도 합니다. 하지만 보통 AXI 검증 수준에서는 위 두 가지 방법만으로 충분한 경우가 많습니다.

덧붙여서

말씀하신 것처럼 AXI 프로토콜 내에서는 CDC를 유연하게 다룰 수 있는 구조가 아니기 때문에, VIP 측에서 비동기 조건을 일부러 걸었다 하더라도 이를 DUT가 직접 처리하는 방식은 적절하지 않습니다. AXI의 신호는 기본적으로 모두 동기 클럭에 맞춰 설계되어야 하며, CDC 처리는 일반적으로 인터페이스 밖에서 해결하는 구조를 따릅니다.

저도 전부를 알고 있지는 못하지만, 전체적으로 실습을 정확히 바라보고 계시고, 고민의 방향도 아주 좋다고 생각됩니다. 도움이 되셨기를 바랍니다. 즐공하세요!

pjhyun0546님의 프로필 이미지
pjhyun0546

작성한 질문수

질문하기