FPGA - Xilinx Cache에 대한 고찰

Xilinx SDK Cache에 대한 고찰

enter image description here

Xilinx Cache에 대한 고찰

Rev. 0.1
2020/07/02

Contents

  1. Cache 란?
  2. Xilinx Cache 종류
  3. Xilinx Cache Flush와 Invalidate

1. Cache 란?

  • CPU에 가까이 있는 저장소로 일반적인 메모리보다 latency 없이 접근 할 수 있는 저장소 이다. 데이터 및 명령어를 저장하여 사용할 수 있으며 “한번 사용된 데이터 및 명령어는 다시 사용할 가능성이 높다” 는 것을 가정하여 Cache를 사용하게 된다. 일반적인 메모리보다 Cache가 빠르므로 Cache의 사용은 전체 시스템의 성능향상을 가져온다.

2. Xilinx Cache 종류

  • Cache Hit는 CPU가 참조하고자하는 메모리가 Cache에 있을 때를 뜻하고 Cache Miss는 CPU가 참조하고자 하는 메모리가 Cache에 없을 때를 뜻한다. 당연히 Cache Hit일 경우 메모리가 아닌 Cache에서 데이터 또는 명령어를 가져오기 때문에 Cache Miss 보다 속도가 빠르다.
  • Xilinx 에서 제공하는 ARM API에서 Cache를 제어할 수 있는 두 가지 종류가 있는데 DCache와 ICache이다. DCache는 Data를 저장하는 Cache를 말하고 ICache는 Instruction을 저장하는 Cache를 말한다.

Data Cache를 메모리와 동기화 하였지만 저장되어 있던 Instruction Cache로 인해 원하지 않는 데이터 불일치가 발생할 수 있다.

3. Xilinx Cache Flush와 Invalidate

  • 일반적으로 CPU에서만 메모리에 접근하고 사용한다면 Cache Flush와 Invalidate를 신경쓸 필요가 없다. 그러나 주변장치들보다 속도가 빠른 CPU를 효율적으로 사용하기 위해 DMA를 사용하게 되는데 DMA는 메모리에 직접접근하여 데이터 변화를 발생시키기 때문에 Cache와 메모리의 데이터 불일치가 발생할 수 있다.
  • DMA를 사용함으로써 Cache와 메모리 데이터 불일치가 발생하게 되면 DMA를 통해 변경된 메모리의 데이터를 CPU가 접근할 때 메모리 데이터가 변경되었는지 알 수 없으므로 Cache에 접근하여 데이터를 읽어오게되면 이는 심각한(?) 시스템 오류를 발생시킨다. 때문에 Cache Invalidate 실행하여 CPU가 메모리에 접근하여 데이터를 읽어오도록 할 수 있다.
  • 반대의 경우도 발생할 수 있는데 CPU에서 데이터를 메모리로 저장할 경우 Cache Hit상황이면 Cache에 저장되게 된다. 이후 DMA가 메모리 데이터를 가져가려고 하면 CPU에서 변경된 데이터는 Cache에 저장되어 있으므로 DMA는 잘못된 데이터를 가져가게된다. 이를 방지하기 위해 Cache의 데이터를 메모리로 동기화 시켜주는 것이 Cache Flush 이다.

Xilinx 에서 제공하는 Cache Flush와 Invalidate API는 아래 표와 같다.

API Description
Xil_DCacheFlush Data Cache의 내용을 메모리로 동기화
Xil_DCacheInvalidate Data Cache의 내용을 무효화
Xil_ICacheFlush Instruction Cache의 내용을 메모리로 동기화
Xil_ICacheInvalidate Instruction Cache의 내용을 무효화
Xil_ICacheDisable ICashe 비활성
Xil_L1ICacheDisable L1ICache 비활성
Xil_L2CacheDisable L2Cache 비활성

도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)

댓글 쓰기

0 댓글