2013-07-02 2 views
0

루트 컴플렉스에서 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는

+0

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

+0

큰 범위 (예 : 1KBytes)의 BAR0 (wr 또는 rd)에 액세스하기 위해 memcpy를 사용하더라도 작은 TLP (<= 8 바이트)가 표시됩니다. MPS (128 바이트)가 아닌 8 바이트 경계를 충족시키기 위해 memwr 요청 (HOST에서 FPGA로)이 분할 된 것처럼 보입니다. – TiisCool

답변

0

링크를 통해 사용되는 최대 페이로드 크기 (MPS)는 EPS를 MPS의 RC와 MPS 간의 최소이다. 당신의 경우, 제한된 숫자가 RC의 그것처럼 보인다.

또 다른 이유는 운전자가 FCC가 필요한 값에 도달 할 때까지 기다리는 대신 MWr을 자율적으로 선택할 수있는 충분한 유량 제어 크레딧 (FCC)이없는 경우입니다. 거기에.

건배, Nadav.

+0

답장을 보내 주셔서 감사합니다, Nadav. 나는 또한 한계가 RC에서 있다고 생각한다. 그리고 흐름 제어로 인한 것이 아닙니다. 내가 1 KBytes 데이터 (memwr)를 끝점으로 복사하기 때문에 버스는 기본적으로이 전송 전에 "유휴"상태입니다. – TiisCool