PCIe 통신 중 언급되는 용어인 Configuration Space, Base Address Register 에 대해 정리하였다.
Configuration Space ?
PCI configuration space is the underlying way that the Conventional PCI, PCI-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 문서
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
'FPGA - 프로세서 그리고 데이터의 이동 > PCIe' 카테고리의 다른 글
PCIe 장치 인식 과정 (0) | 2024.07.31 |
---|---|
PCIe slot에 꽂힌 FPGA 카드를 CPU가 인식하는 과정 (0) | 2024.03.11 |
FPGA의 PCIe에 접근에 필요한 file descriptor는 무엇인가? (1) | 2024.02.05 |
PCIe - lspci , link status (0) | 2021.11.23 |
PCIe 속도 그리고 속도의 결정 (0) | 2021.07.21 |