FPGA - 프로세서 그리고 데이터의 이동/PCIe

PCIe 통신 - Configuration Space, Base Address Register 개념

망고토마토 2021. 7. 23. 21:41
반응형

PCIe 통신 중 언급되는 용어인 Configuration Space, Base Address Register 에 대해 정리하였다.

 

 

Configuration Space ?

 

PCI configuration space is the underlying way that the Conventional PCIPCI-X and PCI Express perform auto configuration of the cards inserted into their bus.  

 

프로세서의 PCIe slot에 PCIe 장치들이 연결되어 있다. 프로세서는 어떻게 PCIe 장치를 인식할 수 있을까 ? PCIe장치가 나 이런 장치에요 라고 프로세서한테 알려주는것인가? 아니다!

 

PCIe 장치는 Configuration Space를 가지고 있다. Configuration Space에는 bus, device, function,device ID, Vender ID , Base Address Register 등의 정보가 적혀 있다.  

 

프로세서와 PCIe 장치에 전원이 켜지면, 

프로세서(Root complex)는 PCIe (End Point)  장치 검색 (enumeration) 을 수행한다(root complex와 End point가 link training을 서로 수행한 다음, 프로세서가 PCIe 장치를 등록하는 과정).

프로세서는 PCIe 장치의 Configuration space에 적힌 내용으로 PCIe 장치가 무엇인지 확인하고, PCIe 장치와 통신하기 위해 어느정도의 메모리를 배정해야할지를 결정한다.

 

BAR(Base Address Register)란?

 

BAR은  Configuration Space에 적힌 항목들 중 한개이다.   Configuration Space 표를 보면 BAR0~BAR5까지 6개의 BAR이 있다. 

 

BAR 정보 1

 

출처 : PCISIG 문서

  Base Address Registers exist within Configuration Space and are used to determine the amount of system memory space needed by a Function and to provide the base address for a mapping to Function memory space. A Base Address Register may map to memory space or I/O space.
 

BAR 정보 2 

 

출처 : MicroZed Alveo Edition: understanding Base Address Registers(BARs) for Alveeo Application Development

 

Base Address Registers(BARs) enable communication and data transfer between the host and card PCIe devices. A BAR defines the contiguous memory allocation or I/O space required by a PCIe device. 

 

PCIe device BAR registers define the size required for each BAR with the device. This is communicated toe the system by the BAR registers. 

 

 

BAR에 적힌 내용을 바탕으로, 운영체제는 프로세서(Root complex)와 PCIe 장치 간에 데이터 전송에 필요한 메모리를 얼만큼 배정할지를 결정할 수 있다. (PCIe 장치 제조사가 제공하는 커널모듈(드라이버)이 메모리 배정을 진행 )

 

With the address space known the system is able to allocate the address space, writing back the assigned base address to the PCIe device BARs. This means in the system address apce we now have several reegions allocated for both endpoints and the root complex. This allows not only the root to communicate with and end points but also, an end point to communicate with a en point via the root 

 

배정 된 메모리는  프로세서(Root complex)와 PCIe 장치가 공유하는 공간이다. 프로세서가 PCIe 장치에 데이터를 전송할 수 있으며, 반대로 PCIe 장치가 프로세서에 데이터를 전송할 수 있다. 프로세서가 보유한 메모리 중 어떤 부분을 PCIe 장치와 사용할지를 BAR에 적힌 내용을 바탕으로 정한다. 

 

 

다음 그림은 커널모듈을 load하기 전, lspci로 검색된 PCIe 정보를 나타낸 것이다. 

노란색 부분이 BAR 정보이다. 2개의 BAR가 있으며, 공간의 크기는 64KByte이다. 

 

프로세서는 이 PCie 장치와 데이터 통신을 하기 위해 64KByte의 메모리 공간을 2개 배정해야 한다. 

 

 

커널모듈 load가 완료되면, disabled 표시가 사라지고, 해당 PCIe 장치 제어에 사용되는 커널모듇의 명칭이 표시 된다. 

 

 

커널모듈(디바이스 드라이버) : PCIe 장치를 OS가 제어하기 위해 필요한 소프트웨어. 커널모듈은 PCIe 장치 제조사에서 제공한다. 

 

다음 그림은

커널모듈이 BAR 정보를 바탕으로 PCIe Root complex와 Endpoint가 서로 공유할 메모리 공간을 배정한 결과이다. 

64KByte 공간 2개가 배정되었다.

 

 

PCIe 장치 인식의 과정

 

전원 ON > Root complex, Endpoint간 Link training > PCIe enumeration > Kernel module load 

 
반응형