문제

PowerPC 프로세서를 사용하는 임베디드 시스템에서 프로세서 캐시를 비활성화하려고 합니다.우리는 어떤 조치를 취해야 합니까?

좀 더 명확하게 말하자면, 문제의 애플리케이션은 가능한 한 일정한 실행 속도를 가져야 합니다.동일한 코드 경로를 실행할 때의 가변성은 허용되지 않습니다.이것이 캐시를 끄는 이유입니다.

도움이 되었습니까?

해결책

질문에 좀 늦었고 PPC에서 모든 저수준 프로세서 초기화 코드를 작성한 지 꽤 시간이 지났지만 캐시와 MMU가 꽤 밀접하게 결합되어 있었던 것으로 기억합니다. 다른 하나를 활성화) 그리고 나는 생각하다 MMU 페이지 테이블에서 캐시 가능 속성을 정의할 수 있습니다.

그래서 내 요점은 이것이다:결정론적 시간에 실행되어야 하는 특정 코드 하위 집합이 있는 경우 페이지 테이블에서 캐시할 수 없는 것으로 정의된 메모리 영역에서 해당 코드를 링커 명령 파일을 통해 찾을 수 있습니까?그런 식으로 캐시의 혜택을 받을 수 있거나 있어야 하는 모든 코드는 혜택을 누리고, (희망적으로) 그렇지 않은 코드 하위 집합은 그렇지 않습니다.

어쨌든 나는 이 방법으로 처리할 것이므로 나중에 시스템 일부에 대해 캐싱을 활성화하려면 초기화 코드를 (다시) 작성하는 대신 MMU 페이지 테이블에서 몇 비트만 뒤집으면 됩니다. 모든 페이지 테이블 및 캐싱을 설정합니다.

다른 팁

E600 참조 매뉴얼에서:
HID0 특수 목적 레지스터에는 명령어 및 데이터 캐시를 무효화, 비활성화 및 잠그는 여러 비트가 포함되어 있습니다.

데이터 캐시를 비활성화하려면 HID0[DCE] = 0을 사용해야 합니다.
명령어 캐시를 비활성화하려면 HID0[ICE] = 0을 사용해야 합니다.

전원을 켜면 두 캐시가 모두 비활성화됩니다.이를 어셈블리 코드로 작성해야 합니다.

아마도 캐시를 전체적으로 비활성화하고 싶지 않고 특정 주소 범위에 대해서만 비활성화하고 싶습니까?

일부 프로세서에서는 각 범위에서 캐싱을 활성화하거나 비활성화할 수 있도록 주소 범위에 대한 TLB(변환 참조 버퍼) 항목을 구성할 수 있습니다.이렇게 하면 메모리 매핑된 I/O에 대한 캐싱을 비활성화하고 RAM의 기본 블록에 대한 캐싱을 계속 유지할 수 있습니다.

내가 이 작업을 수행한 유일한 PowerPC는 PowerPC 440EP(IBM, 그 다음에는 AMCC)였기 때문에 모든 PowerPC가 동일한 방식으로 작동하는지 여부는 알 수 없습니다.

어떤 종류의 PPC 코어입니까?캐시 제어는 공급업체마다 코어마다 매우 다릅니다.또한 캐시를 비활성화하는 것은 일반적으로 시스템에 매우 나쁜 일로 간주됩니다.성능이 너무 느려져서 기존 8비트 프로세서에서도 마찬가지입니다(약간 과장됨).일부 ARM 변형에는 캐시 대신 작동하는 긴밀하게 결합된 메모리인 TCM이 있지만 해당 기능이 있는 PPC 변형은 본 적이 없습니다.

어쩌면 더 나은 해결책은 레벨 1 캐시를 활성 상태로 유지하고 대신 온칩 L2 캐시를 정적으로 매핑된 RAM으로 사용하는 것일까요?이는 적어도 최신 PowerQUICC 장치에서는 일반적입니다.

캐시를 끄면 전혀 소용이 없습니다.실행 속도가 몇 배로 떨어집니다.이와 같은 시스템은 절대로 출시되지 않으므로 이러한 조건에서의 성능은 중요하지 않습니다.

안정적인 실행 속도를 얻으려면 다음 접근 방식 중 하나를 고려하세요.

1) 캐시의 일부 또는 전부를 잠급니다.Freescale, IBM 및 AMCC의 모든 현재 PowerPC 칩은 이 기능을 제공합니다.

2) L2 캐시가 있는 Freescale 칩인 경우 해당 캐시의 일부를 온칩 메모리로 매핑하는 것을 고려하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top