설계독학맛비 YouTube/05 AMBA System 구축하기

AXI Write bvalid 에 대해서 (완벽하게 목적지에 Data 가 Write 가 되었습니까?)

반응형

Introduction

AMBA 의 AXI 공부하다보면, Channel 의 개수가 Read 는 2개 Write 는 3개 인 것을 보게 됩니다.

Write 는 B Chaanel 이 별도로 존재해서 이고, 왜 Write 는 1개가 더 추가되었지? 의 의문을 해소합니다.

 

Write Channel  (노란색 화살표)

AW: Write address channel signals

W : Write data channel signals

B : Write response channel signals 가 존재합니다.

 

B : Write response channel signals

B 는 Write Response 로 Write 가 정상적으로 목적지까지 전달이 완료되었는지를 확인하는 채널입니다.

BRESP 의 응답 결과를 보고 정상적으로 Write 가 되었다면 OKAY (2'b00) 을 전달받을 수 있습니다.

정석대로라면 IP 에서 WDMA 를 설계할때, OKAY 외의 예외 Case 의 동작을 정의해줘야합니다... 만?

저의 경험상 이는 System 의 문제이기 때문에 HW IP 를 설계하는 입장에서는 예외처리는 하지 않았습니다.

이 말은 BRESP 가 OKAY 가 아닌 다른 결과가 리턴되는 상황은 고려하지 않는다. 라는게 현업에서의 Rule 이었던 것 같아요. (예외처리 해준 사람 본적없음.)

이야기가 셋는데, 결국 B Channel 을 통해 Write Transaction 이 목적지까지 정상적으로 Write 가 되었는지 알 수 있습니다.

 

B Channel  현상을 보면

burst 마지막 data의 wlast와, bvalid 신호를 캡쳐하였습니다. 각각 6번의 tick 신호를 확인 할 수 있습니다.

여기서 bvalid 가 o_wlast 보다 늦게 발생되는 것을 확인할 수 있습니다.

wlast는 axi bus 를 통해 mem ctrl 까지 제대로 전송 되었음을 확인할 수 있는 신호로, 실제 DDR 메모리에 데이터가 쓰여진 상태가 아닙니다. (mem ctrl에서 buffer 에 명령을 쌓아두고 있습니다. 이는 아직 목적지까지 Write 를 완료하지 못한거죠.)

실제 메모리에 데이터가 write 되면, 그 때 bvalid 신호가 전송되게 됩니다.

 

B Channel 의 존재가 중요한 이유는

예를들어, WDMA (Write Direct Memory Access) 설계시 마지막 data를 쓰고 done 을 띄우는 시나리오가 있다고 가정해보겠습니다.

실제 user는 done을보고 DDR에 접근하는데, wlast 신호로 cnt 하여 done 을 띄우게 되면 (Write data channel signals 을 이용), Write 가 완료되지 않은 값을 읽을 수 밖에 없습니다. 혹은 이를 방지하기 위해 쓰여질 때 까지의 "모르는 시간"을 Delay 할 수 밖에 없습니다.

 

결론

그럼으로 꼭!!

"bvalid 를 보고 정확한 done 을 띄워야 user 입장에서 성능 열하 없이 사용가능함"을 명심하고 설계하시면 되겠습니다. :)

반응형