루트 컴플렉스에서 X86 플랫폼의 엔드 포인트까지 단일 Memwr TLP (BAR ACCESS)의 최대 크기는 무엇입니까?루트 컴플렉스에서 X86 플랫폼의 엔드 포인트까지 단일 Memwr TLP (BAR ACCESS)의 최대 크기는 무엇입니까?
내 시스템의 설정은 PCIe 엔드 포인트 장치가 X86 PC에 연결되어 있으며이 장치의 bar0 크기가 1MB이고이 메모리 범위가 사용자 공간에 메모리 매핑되었습니다.
데이터를 메모리 부분에 복사하면 끝점 쪽에서 막대 액세스 (MemWr)를 얻을 수 있습니다. 하지만 큰 복사를하면 128 바이트입니다 함께 1 메가 바이트가의 Memwr 요청 아주 작은 Memwr 그 TLP (8bytes 또는 4 바이트)로를 갈라 항상 그 멀리 최대 페이로드 크기에서입니다.
왜 루트 컴플렉스가 요청을 분할 했습니까? 이것은 X86 플랫폼과 관련이 있습니까? Memwr TLP의 최대 크기는 루트 컴플렉스에서 X86 플랫폼의 끝점까지 무엇입니까?
감사합니다.
C는
DMA를 사용하면 더 나은 성능을 얻을 수 있습니다. DMA 읽기를 사용하면 하나의 TLP에서 64 바이트의 Cpl을 얻을 수 있습니다 (일반적으로 RCB). 그러나 여기서 우리가 말하는 DMA는 직접적인 "Host Memeory"액세스입니다. FPGA는 DMA를 사용하여 "호스트 메모리"에 액세스 할 수 있습니다 (rd/wr). 내 질문은 HOST가 "FPGA Memeory"가 BAR 주소에 매핑 될 때 직접 "FPGA Memeory"액세스를 수행 할 수 있는지 여부입니다. 내가 지금 관찰 한 바를 토대로, 호스트에서 FPGA까지의 memwr은 MPS 크기가 아닌 TLP 당 8 바이트로 제한됩니다. – TiisCool
큰 범위 (예 : 1KBytes)의 BAR0 (wr 또는 rd)에 액세스하기 위해 memcpy를 사용하더라도 작은 TLP (<= 8 바이트)가 표시됩니다. MPS (128 바이트)가 아닌 8 바이트 경계를 충족시키기 위해 memwr 요청 (HOST에서 FPGA로)이 분할 된 것처럼 보입니다. – TiisCool