플래시 메모리 대기 상태 란 무엇입니까?


10

프리 스케일 PowerPC 마이크로 컨트롤러를 사용하고 있습니다. 데이터 시트의 플래시 메모리 모듈에서 "플래시 메모리 액세스 대기 상태"수를 구성 할 수 있습니다.

다음은 내 질문에 제기 된 데이터 시트의 일부이며 PFlash 모듈 레지스터의 레지스터 설명에서 가져온 것입니다.

이 필드는 PFlash의 작동 주파수 및 PFlash의 실제 읽기 액세스 시간에 해당하는 값으로 설정해야합니다. 높은 작동 주파수는 적절한 플래시 작동을 위해이 필드에 0이 아닌 설정이 필요합니다.
0 MHz, <23 MHz, 대기 상태 = 0 ---
23 MHz, <45 MHz, 대기 상태 = 1 ---
45 MHz, <68 MHz, 대기 상태 = 2 ---
68 MHz, <90 MHz, 필요한 대기 상태 = 3 ---

(PFlash는 플랫폼 플래시 컨트롤러 모듈입니다)

프로세서가 플래시보다 빠르다는 것을 알고 있으므로 대기 상태가 발생합니다. 내가 이해하지 못하는 것은 : 프로세서가 플래시보다 빠르면 프로세서는 플래시가 아닌 속도를 늦춰야하는 프로세서이지만 위의 단락은 반대라고 말합니다 (또는 이것을 이해하지 못했습니까?). Pflash가 고주파수로 작동하는 경우 대기 상태를 추가하여 속도를 늦출 필요가 있습니다 !!

내 이해에 어떤 ​​문제가 있습니까?

감사


1
내가 올바르게 이해한다면, 다른 속도로 설정 될 수있는 컨트롤러입니다; 따라서 실제 플래시 메모리에 사용 가능한 데이터가있을 때까지 기다려야합니다.
clabacchio

답변:


8

stevenvh의 답변을 증폭하기 위해 입력 신호가 주어지면 모든 유형의 논리가 출력 신호를 생성하는 데 시간이 걸립니다. 메모리는 종종 다른 로직에 비해 매우 느립니다. 종종 출력 신호가 일정 시간 내에 유효하게 될 것이라는 보장이있을 것입니다. 특히, 신호가 해당 간격 내에서 여러 번 변경 될 수 있으며 해당 간격이 끝나기 전에 신호가 최종 "올바른"값을 달성했음을 나타내는 표시가 없습니다.

전형적인 마이크로 컨트롤러 또는 마이크로 프로세서가 바이트 (또는 워드 또는 다른 단위)의 메모리를 읽을 때, 주소를 생성하고 얼마 후 메모리가 출력 한 값을보고 작동합니다. 컨트롤러가 주소를 생성하는 시간과 메모리에서 값을 보는 시간 사이에 메모리의 출력 신호가 언제 변경되는지 여부는 신경 쓰지 않습니다. 반면에, 컨트롤러에서 신호를 볼 때까지 메모리의 신호가 최종 값으로 안정화되지 않으면 컨트롤러는 메모리가 보이는 순간에 출력 된 값을 유지 한 것으로 메모리를 잘못 읽습니다. 일반적으로 컨트롤러는 무언가를 할 준비가 되 자마자 메모리에서 값을 보지만 메모리 값이 준비되지 않으면 작동하지 않을 수 있습니다. 따라서, 많은 컨트롤러는 메모리에서 데이터를 처리 할 준비가 된 후 조금 더 기다렸다가 메모리의 출력이 실제로 유효한지 확인할 수 있습니다. 이러한 지연을 추가하면 작업 속도가 느려질 수 있지만 (컨트롤러는 메모리의 데이터에 대해 더 빨리 조치를 취할 수 있었지만) 다른 타이밍 의무를 충족 할 수 없을 정도로 속도가 느려지지 않는 한 작동 정확성에 영향을 미치지 않습니다.


좋은! 설명하신 유용한 정보에 감사드립니다!
MohamedEzz

1
@MemoryLeaks : 기쁨입니다. 주의해야 할 중요한 사항은 대기 상태를 지정된 제한 아래로 줄이면 시스템이 더 빨리 실행되지만 메모리에서 읽은 경우 부정확 한 데이터가 임의로 생성 될 수 있다는 것입니다. 또한 "잘못된 데이터를 임의로 산출"이란 "설계 한 장치가 고객의 손에 닿을 때까지 정확한 데이터를 산출 한 다음 고객에게 매우 화를 내기 위해 종종 잘못된 데이터를 산출하기 시작합니다."를 의미 할 수 있습니다.
supercat

1
이것은 오버 클러킹과 매우 유사하지만 구성 가능한 옵션이 더 많습니다. 아마도 MCU를 오버 클럭하는 흥미로운 방법입니다.
sherrellbc

1
@ supercat, 컨트롤러의 의미 중 하나는 프로세서 또는 메모리 컨트롤러입니까?
Mouin

1
@Mouin : 메모리 컨트롤러 (있는 경우) 또는없는 경우 프로세서.
supercat

9

대기 상태는 CPU가 시작한 메모리 액세스주기에 추가됩니다. 따라서 실제로 느린 플래시를 기다려야하는 CPU입니다. 메모리 컨트롤러는 여러주기 (0 ~ 3) 동안 CPU에 "준비되지 않음"신호를 보내고, 그렇게하는 동안 CPU는 현재 상태, 즉 플래시 주소를 기록했지만 아직 데이터를 읽지 않은 상태로 유지됩니다. 메모리 컨트롤러가 "data ready"신호를 보낼 때만 CPU는 데이터 버스에서 읽고 명령을 계속합니다 (데이터를 레지스터 나 RAM에 래치).


1
따라서 해당 설정을 구성하여 메모리 컨트롤러에 "데이터 준비"를 정확히 알리는 시점을 알려줍니다. 메모리가 실제로 준비되면 "데이터 준비"신호를 보내도록 지시 할 수 없습니까?
MohamedEzz

1
@MemoryLeaks-가능하며 비동기 프로세서에 의해 수행됩니다. 시계를 사용하여 모든 것을 동기화하는 것이 더 일반적이고 예측 가능합니다. 따라서 클럭 사이클 지연 (또는 2 또는 3)이거나 아무것도 아닙니다.
stevenvh

답변 주셔서 감사합니다 :) 그래서는 요약하기 : 수단 위의 내 문제의 설명는 "CPU"가 아닌 플래시 컨트롤러 지연됩니다
MohamedEzz

1
@stevenvh는 프로세서가 문자 그대로이 작업을 중단하여 메모리에서 데이터를 수신합니다. 실행을 완전히 중단하거나 파이프 라인 CPU의 경우 다른 명령을 실행한다는 의미입니다. CPU가 메모리가 준비되기를 기다리는 동안 서비스가 제공되는 인터럽트는 어떻습니까?
Miguel Sanchez

3

프로세서가 메모리에 멈춰야 할 수도 있지만 영리한 디자인은 필요하지 않습니다.

당신이 모르는 핵심 기술은 버스트 / 페이지 모드 액세스 라고 생각합니다 . 이를 통해 메모리 액세스 대역폭 이 프로세서 속도에 매우 근접 할 수 있습니다 (그러나 플래시는 200MhZ 이상에서 실행되는 플래시 기반 MCU를 본 적이 없기 때문에 플래시는 여전히 병목 현상입니다)

그러나 대기 시간 은 동일하게 유지됩니다. 예를 들어, 내가 사용하는 STM32F4 MCU의 경우 #wait states = floor (clockSpeed ​​/ 30MhZ). 즉, 클럭 속도에 관계없이 대기 시간은 항상 33ns입니다. "돈은 대역폭을 구입할 수 있지만 대기 시간은 영원히 ..."라는 말이 있습니다.

플래시 대역폭이 CPU 사용량을 유지하기에 충분하지 않더라도 실행할 것으로 예상되는 명령을 저장하고 프리 페치하는 코드 캐시를 쉽게 설계 할 수 있습니다. ST는 STM32F4 MCU (168MhZ)에 대한 힌트를 제공합니다.

ART 액셀러레이터와 128 비트 플래시 메모리 덕분에 ART 액셀러레이터는 0 대기 상태 프로그램 실행과 동등한 성능을 달성 할 수 있으므로 여기에 지정된 대기 상태 수는 플래시 메모리의 실행 속도에 영향을 미치지 않습니다.

실제로이 명령문은 버스트 모드가 필요하지 않으며 매우 넓은 메모리 인터페이스도 충분하다고 제안합니다. 그러나 아이디어는 동일합니다 (병렬 처리를 사용하여 대기 시간 숨기기). 칩 상에서는 와이어가 비어 있으므로 128 비트 메모리가 적합합니다.


와이어는 칩에서 "사용할 수있는"거리와는 거리가 멀지 만 일반적으로 메모리 어레이와 래치 세트 사이의 버스 너비를 늘리면 와이어가 추가되지 않습니다. 칩에 512x512 그리드로 구성된 256kbit 플래시 어레이가있는 경우 512 열을 32 비트 버스로 응축하는 배선 및 로직이 필요합니다. "콘덴싱"와이어 및 로직 앞에 512 비트 폭 래치를 배치할지 여부 또는 32 비트 너비의 래치입니다.
supercat

1
외부 핀에 비해 "무료"입니다. 요즘 와이어 에너지가 지배적이며 지역성이 중요하다는 것을 알고 있습니다. 그들은 무료로 만들 수 있지만 무료로 설정할 수는 없습니다!
Yale Zhang

1
"와이어 에너지"가 무엇을 의미하는지 잘 모르겠지만, 공간적인 관점에서도 대형 버스는 비싸지 만 버스 폭을 두 배로 줄이면 대략 절반으로 줄이면 전체 비용은 거의 동일하게 유지됩니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.