← 전체 글로 돌아가기
Protocol

𝗔𝗫𝗜𝟰-𝗟𝗶𝘁𝗲 𝗪𝗿𝗶𝘁𝗲 │ 주소와 데이터는 따로 온다

AXI4-Lite write: independent AW/W handshakes, response dependency, and slave buffering

AXI4-Lite write: independent AW/W handshakes, response dependency, and slave buffering 인포그래픽
Daily ASIC original infographic · English labels

레지스터 write가 가끔 멈추는 AXI4-Lite slave를 보게 됐다고 해봅시다. RTL에는 AWVALID && WVALID가 같은 cycle에 들어올 때만 write를 처리하는 조건이 있습니다. 얼핏 자연스럽지만, 이 조건이 문제의 시작일 수 있습니다.

AXI4-Lite의 write address(AW)와 write data(W)는 각각 VALID/READY handshake를 합니다. 한 번의 write에 속하더라도 두 handshake가 같은 clock edge에서 일어날 필요는 없습니다. AW가 먼저 올 수도, W가 먼저 올 수도 있습니다.

예를 들어 첫 번째 rising edge에서 WVALID와 WREADY가 모두 1이라 데이터가 수락됐고, 두 cycle 뒤에 AWVALID와 AWREADY가 1이 되어 주소가 수락됐다고 해봅시다. W를 받은 slave가 WDATA와 WSTRB를 보관하지 않았다면, 나중에 들어온 AWADDR와 짝지을 데이터가 없습니다. 같은 cycle의 AWVALID와 WVALID만 기다리는 설계는 이런 정상적인 순서를 놓칩니다.

구현에서는 AW와 W를 각각 handshake 순간에 저장하고, 두 조각이 모두 모였을 때 해당 register write를 처리합니다. BVALID는 두 handshake가 끝난 뒤에만 올릴 수 있고, BREADY가 늦어지면 응답을 유지해야 합니다. AXI4-Lite는 single-beat이므로 WLAST 신호가 따로 없습니다.

리뷰할 때는 W가 먼저 오는 경우, AW가 먼저 오는 경우, 같은 edge에 오는 경우, BREADY가 여러 cycle 낮은 경우를 나눠 보세요. 특히 수락한 WDATA/WSTRB와 AWADDR가 한 write로 정확히 묶이고, 응답이 빠지거나 중복되지 않는지 확인해야 합니다. 단일 outstanding으로 구현한다면 응답 대기 중 READY를 낮춰 단순화할 수 있지만, 그만큼 연속 write 처리율은 제한됩니다.

근거: Arm, AMBA AXI and ACE Protocol Specification, IHI 0022H, §A3.3 및 §B1.1
https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/IHI0022H_amba_axi_protocol_spec.pdf
Arm, Introduction to AMBA AXI4, §3.2 및 §4.4
https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Learn%20the%20Architecture/102202_0100_01_Introduction_to_AMBA_AXI.pdf

ORIGINAL POSTLinkedIn에서 원문 보기 ↗
이전 글𝗖𝗗𝗖 𝗠𝗧𝗕𝗙 │ 2-FF를 넣었는데 왜 배치가 중요할까?다음 글𝗦𝗩𝗔 │ READY가 낮을 때 VALID와 data를 어떻게 검사할까?