Używam darmowego mikrokontrolera PowerPC. W module pamięci flash w arkuszu danych można skonfigurować liczbę „stanów oczekiwania na dostęp do pamięci flash”.
Poniżej znajduje się część arkusza danych, z której pochodzi moje pytanie, pochodzi z opisu rejestru rejestrów modułu PFlash:
W tym polu należy ustawić wartość odpowiadającą częstotliwości roboczej PFlash i faktycznemu czasowi dostępu do odczytu PFlash. Wyższe częstotliwości pracy wymagają niezerowych ustawień dla tego pola dla prawidłowego działania lampy błyskowej.
0 MHz, <23 MHz, wymagane stany oczekiwania = 0 ---
23 MHz, <45 MHz, wymagane stany oczekiwania = 1 ---
45 MHz, <68 MHz, wymagane stany oczekiwania = 2 ---
68 MHz, <90 MHz, wymagane stany oczekiwania = 3 ---
(PFlash to moduł kontrolera platformy Flash)
Rozumiem, że procesor jest szybszy niż flash, dlatego wprowadzono stany oczekiwania. Nie rozumiem, że: jeśli procesor jest szybszy niż flash, to procesor należy spowolnić, a nie flash, ale powyższy akapit mówi inaczej (czy nie zrozumiałem tego?) mówi, że w przypadku, gdy Pflash działa na wysokich częstotliwościach, musimy go spowolnić, dodając do niego dodatkowe stany oczekiwania !!
Co jest nie tak z moim zrozumieniem?
Dzięki
Odpowiedzi:
Aby wzmocnić odpowiedź stevenvha, każdy rodzaj logiki, gdy otrzyma sygnał wejściowy, zajmie trochę czasu, aby wytworzyć sygnał wyjściowy; pamięć jest często bardzo wolna w porównaniu z inną logiką. Często będzie istniała gwarancja, że sygnał wyjściowy stanie się ważny w określonym czasie, ale to wszystko. W szczególności możliwe jest, że sygnał może zmienić się kilka razy w tym przedziale i przed końcem tego przedziału nie będzie żadnych informacji, że sygnał osiągnął ostateczną „prawidłową” wartość.
Gdy typowy mikrokontroler lub mikroprocesor odczytuje bajt (lub słowo lub dowolną jednostkę) pamięci, generuje adres, a po pewnym czasie sprawdza wartość wyjściową pamięci i działa na nią. Pomiędzy momentem, w którym sterownik generuje adres, a czasem, kiedy patrzy na wartość z pamięci, nie ma znaczenia, kiedy lub czy zmienią się sygnały wyjściowe z pamięci. Z drugiej strony, jeśli sygnał z pamięci nie ustabilizuje się do wartości końcowej do momentu, gdy kontroler na niego spojrzy, kontroler źle odczyta pamięć jako posiadającą dowolną wartość, która była wyprowadzana w momencie, w którym patrzyła. Zwykle kontroler patrzy na wartość z pamięci, gdy tylko będzie gotów coś z tym zrobić, ale jeśli wartość pamięci nie będzie gotowa, to może nie działać. W konsekwencji, wiele kontrolerów ma opcję poczekać nieco dłużej, gdy są gotowe do przetworzenia danych z pamięci, aby upewnić się, że dane wyjściowe z pamięci są rzeczywiście prawidłowe. Zauważ, że dodanie takiego opóźnienia spowolni rzeczy (kontroler chętniej działałby na danych z pamięci wcześniej), ale nie wpłynie na poprawność działania (chyba że rzeczy zostaną spowolnione tak bardzo, że nie można spełnić innych zobowiązań dotyczących czasu).
źródło
Stany oczekiwania są dodawane do cyklu dostępu do pamięci inicjowanego przez CPU. Tak więc rzeczywiście procesor musi czekać na wolniejszą pamięć Flash. Kontroler pamięci sygnalizuje procesorowi „brak gotowości” przez szereg cykli (od 0 do 3), a gdy tak się dzieje, procesor pozostaje w aktualnym stanie, tzn. Zapisał adres Flash, ale jeszcze nie odczytał danych. Dopiero gdy kontroler pamięci zasygnalizuje „gotowość danych”, procesor odczyta dane z szyny danych i kontynuuje instrukcje (zatrzaskiwanie danych w rejestrze lub w pamięci RAM).
źródło
Procesor może wymagać zatrzymania pamięci, ale sprytna konstrukcja nie musiałaby tego robić.
Myślę, że kluczową technologią, o której nie wiesz, jest dostęp w trybie zdjęć seryjnych / w trybie strony . Dzięki temu przepustowość dostępu do pamięci jest bardzo zbliżona do prędkości procesora (ale prawdopodobnie Flash jest nadal wąskim gardłem, ponieważ nigdy nie widziałem MCU opartego na Flash, działającego z częstotliwością> 200 MHz)
Jednak opóźnienie pozostaje takie samo. Na przykład w przypadku MCU STM32F4, którego używam, #wait stwierdza = floor (clockSpeed / 30MhZ). Oznacza to, że opóźnienie wynosi zawsze 33ns, niezależnie od częstotliwości zegara. Jest takie powiedzenie: „Pieniądze mogą kupić przepustowość, ale opóźnienia są wieczne ...”
Nawet jeśli przepustowość Flash nie była wystarczająca do utrzymania zajętości procesora, możesz łatwo zaprojektować pamięć podręczną kodu, która przechowuje i pobiera instrukcje, które powinny zostać wykonane. ST ma podpowiedź na ten temat dla swoich MCU STM32F4 (168 MHz):
W rzeczywistości stwierdzenie to sugeruje również, że tryb zdjęć seryjnych nie jest konieczny i że wystarcza również bardzo szeroki interfejs pamięci. Ale pomysł jest taki sam (wykorzystanie równoległości w celu ukrycia opóźnień). Na chipie przewody są wolne, więc 128-bitowa pamięć miałaby sens.
źródło