본문 바로가기
Digital Design/SoC

[SoC] DMA Controller

by 스테고사우르스 2023. 3. 6.

Direct Memory Access Controller에 대해 공부해볼까 합니다.

 

AMBA Protocol을 공부하면서 알게된건데 DMAC가 꽤 많이 언급이 되더라고요

AXI기반 DMAC ~~ 이런 자료를 많이 봐서 저게 뭔지 궁금해졌습니다.

 

SoC를 공부하시다보면 이런 그림을 몇 번 보셨을 겁니다.

그림을 보면 대충 CPU와 정보를 주고받고, 메모리에 R/W를 하는 것 같이 생겼습니다.

 

CPU가 맨날 메모리에 접근하면 낭비되는 시간이 많으니까,

컨트롤러가 도와주는게 아닐까 하는 추측을 할 수 있습니다.

 

이번 게시물을 IDEC에 올라온 강의를 참고했습니다.

기안도 교수님의 AMBA Protocol 강의인데,

개인적으로 IDEC에서 들은 강의 중 가장 좋았습니다.

동영상 강의인데 코드도 제공하고 강의노트도 제공됩니다.

주소: https://www.idec.or.kr/vod/apply/view/?pay=&search_val=amba&no=257

 

그럼 이제 DMAC를 구체적으로 알아볼까요?

 


Direct Memory Access Controller

먼저 DMA가 뭘까요?

직역하면 '직접 메모리 접근'입니다.

 

풀어서 말하면,

특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근하는 것입니다.

 

전송되는 데이터가 엄청 적다면 CPU가 메모리에 직접 접근하는게 좋을 수는 있겠지만

요즘은 전송되는 데이터가 무척 많죠..

 

많은 양의 데이터 이동으로 인한 CPU의 부담이 커지는데,

이 문제를 해결하기 위해 DMA 방식의 컨트롤러,

Direct Memory Access Controller를 사용하는 것입니다.

 

데이터 한 블록을 이동시킬 때, DMAC덕분에 CPU의 개입이 필요 없게 되는 것입니다.

 

그러면 동작 원리를 살펴보겠습니다.

 

먼저 I/O 정보를 전송합니다.

이후 DMA 컨트롤러가 CPU에게 Bus를 사용해도 되냐고 요청합니다.

사용해도 된다면 승인(grant)해주겠죠?

그러면 이제 DMAC와 주변 장치 간 데이터 R/W가 진행되는 것입니다.

마지막으로 완료가 되면 DMAC에서 CPU에 인터럽트 신호를 보내줍니다.

 


위에 올린 강의를 들어보면 AXI와 DMAC에 대해 자세히 알 수 있습니다.

관련 Verilog code도 있는데 한 번 시뮬레이션 돌려보시는 것을 추천드려요.

 

마음같아선 코드 리뷰를 해보고 싶은데,

아무래도 저작권 문제 때문에 힘들 것 같습니다.

솔직히 말하면 너무 어려워서 저도 아직 파악하는 중이랍니다..ㅎㅎ

 

기회가 된다면 다음에 리뷰해보도록 하겠습니다!

댓글