컴퓨터의 dev 폴더에 있는 xdma라는 이름이 붙여진 file descriptor를 이용하여, 컴퓨터는 FPGA1, 2보드의 pcie에 데이터를 주고 받는다.
2가지의 file descriptor가 존재한다.
/dev/xdma0_user : FPGA의 register에 데이터를 쓰거나 읽을 때 사용
/dev/xdma0_c2h_0 : 컴퓨터가 DMA를 이용하여 FPGA에서 데이터를 load할 때 사용
file descriptor를 사용하기 위한 초기화를 수행한다.
컴퓨터가 PCIe slot에 꽂힌 FPGA 카드를 인식하고, xdma 드라이버를 정상적으로 load하였다면, dev 폴더에 위와 같은 file descriptor가 검색이 된다.
컴퓨터가 FPGA에 데이터를 쓰거나 읽기 위해서는 dev에 검색된 file descriptor에 접근해야 한다. File descriptor 접근을 위한 초기화 절차는 다음과 같다.
mFDDma0Bar0 = GetFileDescriptor(FILE_DESC_DMA0_BAR0,O_RDWR | O_SYNC);
mDma0Bar0Mem = mmap(0, REG_MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, mFDDma0Bar0, 0);
mFDDma0C2H = GetFileDescriptor(FILE_DESC_DMA0_C2H,O_RDWR);
posix_memalign((void **)&mDma0C2HBuffer, 4096 /*alignment */ , DMA_MEM_SIZE)
mDma0Bar0Mem : FPGA의 레지스터에 데이터를 쓰고 읽을 때 사용된다.
mFDDma0C2H : DMA를 이용하여 FPGA에서 데이터 load시, 경로 구분에 사용된다.
mDma0C2HBuffer : FPGA에서 DMA로 데이터를 가져오고, 이것을 컴퓨터 메모리에 저장한다. 이 때 컴퓨터 메모리의 위치
※ mmap은 "메모리 매핑"을 나타내는 Unix 및 Unix 계열 운영 체제에서 사용되는 시스템 호출입니다. 이 기능은 파일이나 기타 I/O 장치를 메모리에 매핑하여 파일의 내용을 메모리에 직접 읽고 쓸 수 있게 합니다. 이는 파일을 읽고 쓰는 데 효율적이며, 파일을 메모리에 로드하는 데 사용되는 시간과 메모리 사용량을 줄일 수 있습니다
※ posix_memalign은 POSIX 표준 함수로, 메모리 할당을 위해 사용됩니다. 이 함수는 특정 정렬 조건을 충족하는 메모리 블록을 할당합니다. 일반적으로 메모리 할당을 요청할 때 malloc과 같은 표준 함수를 사용하지만, 이러한 함수들은 메모리 블록을 특정 크기의 정렬된 주소에 배치하지 않습니다.
'FPGA - 프로세서 그리고 데이터의 이동 > PCIe' 카테고리의 다른 글
PCIe 장치 인식 과정 (0) | 2024.07.31 |
---|---|
PCIe slot에 꽂힌 FPGA 카드를 CPU가 인식하는 과정 (0) | 2024.03.11 |
PCIe - lspci , link status (0) | 2021.11.23 |
PCIe 통신 - Configuration Space, Base Address Register 개념 (2) | 2021.07.23 |
PCIe 속도 그리고 속도의 결정 (0) | 2021.07.21 |