2011-09-09 2 views
2

저는 LEON2 (SparcV8) 프로세서를 사용하는 프로젝트에서 작업 중이며 다른 FPGA와 프로세서를 연결하는 PCI 버스가 있습니다.프로세서 동시 PCI 읽기

우리가 RTEMS를 사용하여 멀티 태스킹 응용 프로그램이 있고 지금은 내가 깨달음에 대한 너희들에 올 이유가 전혀 프로세서와 PCI 아키텍처에 익숙하지 않다

C.

작성이에서 실행.

문제는 다음과 같습니다. PCI 버스에서 메모리 읽기를 수행하는 RTEMS 작업이 하나 있다고 가정합니다. 우리 보드에서 PCI 액세스는 대략 2us입니다. 이제 제 동료가 문제를 제기했습니다. PCI를 읽는 동안 RTEMS의 작업 스케줄러가 다른 작업이 시작될 때가되었고,이 작업 작업이 PCI 읽기를 수행하는 경우에는 어떨까요? 요점은 작업 전환 이전에 수행 된 첫 번째 PCI 읽기가 첫 번째 PCI 읽기가 수행되기 전에 두 번째 작업에서 수행되는 두 번째 PCI 읽기에 의해 손상된다는 것입니다.

이 경우가 발생할 수 있습니까?

저의 경우, PCI 읽기는 다른 메모리 읽기와 같기 때문에이 문제는 발생하지 않아야합니다. 예를 들어 주소 0x4000'0000의 로컬 RAM을 읽는 대신 읽기 전용으로 읽어야합니다. 주소 0xA020'0000을 입력하면 프로세서는 이것을 PCI 버스의 주소로 변환하고 버스를 통해이 읽기를 수행합니다. 확실히이 읽기는 로컬 메모리 읽기보다 길지만 중간에 인터럽트 가능하지 않아야합니다. 저의 이해가 완전히 끝났을 수도 있습니다. 그럴 경우 저를 고쳐주십시오!

답변

2

참고 : 저는 PCI Express (PCIe)를 언급하고 있습니다. PCI는 조금 다를 수 있습니다 - 나는 그것에 익숙하지 않습니다.

이는 읽기를 수행하는 PCIe 코어 (모듈)에 따라 다릅니다.

기본적으로 메모리 읽기를 수행하기 위해 PCIe 코어는 태그가 지정된 버스에서 MemRd 패킷을 전송합니다. 데이터 자체는 동일한 태그가있는 완료 패킷에 도착합니다. 그래서 읽기는 "손상"되지 않습니다.

이제 Completion 패킷이 수신 될 때까지 PCIe 코어가 CPU를 차단하거나 MemRd 패킷이 전송 된 직후에 CPU를 해제 할 수 있습니다. 이 경우 PCIe 코어는 여러 동시 보류 읽기를 처리 할 수 ​​있어야합니다.

관련 문제