Co to są stany oczekiwania na pamięć flash?

10

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

MohamedEzz
źródło
1
Jeśli dobrze zrozumiałem, to sterownik można ustawić na różne prędkości; więc musi poczekać, aż rzeczywista pamięć Flash ma dostępne dane.
clabacchio

Odpowiedzi:

8

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).

supercat
źródło
Miły! Dziękujemy za pomocne wyjaśnione szczegóły!
MohamedEzz
1
@MemoryLeaks: Cała przyjemność po mojej stronie. Ważną rzeczą do zapamiętania jest to, że zmniejszenie stanów oczekiwania poniżej określonych limitów spowoduje, że system będzie działał szybciej, ale odczyty z pamięci mogą dowolnie dawać nieprawidłowe dane; ponadto „arbitralnie podawaj nieprawidłowe dane” może oznaczać „dostarczaj poprawne dane, dopóki urządzenie, które zaprojektowałeś, nie znajdzie się w rękach klienta, a następnie zacznij dostarczać nieprawidłowe dane na tyle często, aby klient był na ciebie bardzo zły”.
supercat
1
Wydaje się, że jest to bardzo równoległe podkręcanie, ale jest to raczej jego konfigurowalna opcja. Być może ciekawy sposób na podkręcenie MCU.
sherrellbc
1
@ superupat, Jedno pytanie, co należy rozumieć przez kontroler, czy jest to procesor czy kontroler pamięci?
Mouin,
1
@Mouin: Kontroler pamięci, jeśli taki istnieje, lub procesor, jeśli go nie ma.
supercat
9

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).

stevenvh
źródło
1
Konfigurując to ustawienie, mówię kontrolerowi pamięci, kiedy dokładnie zasygnalizować „dane gotowe”. Czy nie mogę po prostu powiedzieć pamięci, aby zasygnalizowała „dane gotowe”, kiedy faktycznie są gotowe?
MohamedEzz
1
@MemoryLeaks - To jest możliwe i odbywa się to przez asynchroniczne procesory, które są rzadkie. Synchronizowanie wszystkiego za pomocą zegara jest bardziej powszechne i przewidywalne. Jest to więc opóźnienie cyklu zegara (lub 2 lub 3) lub nic.
stevenvh
Dzięki za odpowiedź :) Podsumowując: opis w moim powyższym pytaniu oznacza, że ​​opóźni to „CPU”, a nie kontroler Flash
MohamedEzz
1
@stevenvh czy procesor dosłownie się rozłącza, odbiera dane z pamięci, to znaczy, czy całkowicie przestaje wykonywać, czy też wykona inne instrukcje w przypadku procesora potokowego. Co z przerwaniami, myślę, że byłyby obsługiwane, gdy procesor czeka na gotowość pamięci?
Miguel Sanchez
3

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):

Dzięki akceleratorowi ART i 128-bitowej pamięci Flash podana tutaj liczba stanów oczekiwania nie wpływa na szybkość wykonywania z pamięci Flash, ponieważ akcelerator ART pozwala na osiągnięcie wydajności równoważnej 0 wykonania programu stanu oczekiwania.

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.

Yale Zhang
źródło
Druty są dalekie od „wolnych” na chipie, ogólnie mówiąc, ale zwiększenie szerokości magistrali między macierzą pamięci a zestawem zatrzasków nie dodaje przewodów. Jeśli układ ma układ pamięci flash 256 kbit zorganizowany jako siatka 512 x 512, okablowanie i logika do kondensacji 512 kolumn do 32-bitowej szyny będą konieczne, niezależnie od tego, czy umieszcza się zatrzask o szerokości 512 bitów przed przewodami i układem „kondensującym” lub 32-bitowy zatrzask za nimi.
supercat
1
Mam na myśli, że są „darmowe” w porównaniu do zewnętrznych pinów. Wiem, że energia drutu dominuje obecnie i że lokalizacja jest ważna, więc pozwólcie, że poprawię to stwierdzenie. Można je tworzyć, ale nie można ich włączać!
Yale Zhang
1
Nie jestem pewien, co rozumiesz przez „energię drutu”, ale nawet z kosmosu duże autobusy są drogie, ale jeśli podwojenie szerokości autobusu skróci jego długość o połowę, całkowity koszt pozostanie mniej więcej taki sam.
supercat