FPGA의 FIFO에 담긴 내용을 프로세서가 읽는 방법은 여러가지가 있는데, 기존의 방법과 DMA를 사용하여 읽는 방법을 정리하였다.
DMA는 FPGA에 담긴 데이터를 프로세서가 빠르게 가져오는 방법 중에 한개이다.
FPGA에 DMA 엔진을 구현한 다음, DMA 엔진이 FPGA에 쌓인 데이터를 순식간에 프로세서의 램에 옮겨버린다.
프로세서의 서버프로그램이 fpga에 데이터를 쌓으라고 명령을 내린다. 그러면 fpga는 데이터를 fifo에 쌓는다. 그러면 서버프로그램이 fpga dma엔진을 이용하여 fpga의 fifo에 저장된 데이터를 쭉 읽어온다.
근데 여기서 의문이 드는 것이 fifo에 저장된 것을 읽기에 기존의 fifo를 읽는 것과 똑같은것아닌가? fifo는
First input first output 이기 때문에 dma라고 할지라도 그냥 한개씩 차례대로 읽는것 아닌가?
기존의 방법과 DMA를 이용한 방법의 차이를 보자
프로세서 서버프로그램이 FPGA에 데이터를 생성하라고 명령한다. 그리고 서버프로그램은 FPA의 FIFO에 데이터가 저장되어 있는지를 확인한다. 그리고 FIFO에 접근해서 FIFO의 데이터를 RAM에 가져간다.
DMA 방법
기존의 방법처럼 FPA와 프로세서 사이에 PCIe로 데이터를 송수신 하는 것은 동일하다. 다만 FPGA의 PCIe 모듈에 DMA모듈이 더해졌다는 것이 다르다. 그리고 FPGA의 FIFO에 데이터가 저장되었는지는 확인하지 않고, 데이터를 읽을 때 FIFO에 매번 접근하지 않는다. FIFO가 data 생성모듈이 출력한 데이터를 받고, 그대로 내보내면, FPGA의 DMA 모듈이 FIFO출력 데이터를 프로세서의 RAM으로 이동시킨다. FIFO가 데이터를 출력하면, 출력된 데이터는 족족 RAM으로 이동한다. 기존의 방법의 경우 FIFO에 저장된 데이터를 빼낼 때 한줄씩 읽을 수 있으므로, 프로세서가 매번 FIFO에 접근 했어야 했다. (예를 들어 FIFO가 32비트짜리 4096 줄이라면, 프로세서는 FIFO에 4096번 접근해야 한다.) 하지만 DMA를 사용할 경우 프로세서가 FIFO에 여러번 접근할 필요가 없다.
소개된 DMA 방법 또한 FIFO를 사용한다는 점은 기존의 방법과 같으며, 차이점은 FIFO에 저장된 데이터를 읽을 때 프로세서가 관여하는 시간과 횟수가 기존의 방법보다 작다는 점이다.
'FPGA - 프로세서 그리고 데이터의 이동' 카테고리의 다른 글
FPGA - MGT bank의 신호 지원 규격 (0) | 2021.08.24 |
---|---|
LVDS 신호의 형태와 송수신 구조의 예시 (0) | 2021.08.18 |
IOBUF (0) | 2021.08.04 |
SPI 통신 (0) | 2021.08.03 |
ADC - 성능지표 (0) | 2021.06.25 |