1. Pamięci ROM

1.2. Pamięci dynamiczne

Z modułów pamięci dynamicznych (DRAM) jest skonstruowana pamięć RAM. Ich budowa jest bardzo prosta. Pojedyncza komórka pamięciowa składa się z kondensatora i tranzystora (Rys. 2). Obecność lub brak ładunku na kondensatorze oznacza zapis 0 lub 1 w komórce. Tranzystor działa jak klucz umożliwiający odczyt ładunku kondensatora i tym samym danych. Ładunek jest bardzo niewielki, co więcej kondensatory samoistnie rozładowują się. Żeby dane były zapisywane w wiarygodny sposób, ładunek musi być odczytany w określonym czasie (np. co 20 ms). Ten maksymalny czas odczytu wyznacza tzw. częstotliwość odświeżania. Odświeżanie polega na odczytaniu i zapisaniu tej samej informacji. Operacja odczytu z pamięci DRAM jest niszcząca, informacja jest kasowana w wyniku rozładowania kondensatora przez współpracujący z nim tranzystor, dlatego należy powtórnie zapisać odczytane dane tak, aby nie uległy zmianie. Wszystkie pomięci dynamiczne muszą być odświeżane. Obecnie odczyt każdej komórki w określonym czasie jest zapewniany i realizowany przez logikę układu pamięci. Zaletą pamięci dynamicznych jest niski koszt i możliwość uzyskania wysokiego stopnia upakowania (dużej liczby bitów na jednostkę powierzchni).

 

Rys. 2. Komórka pamięci dynamicznej złożona z kondensatora i tranzystora CMOS

 

Wcześniejsze pamięci dynamiczne działały jako układy asynchroniczne. W układach asynchronicznych zmiana sygnałów wejściowych natychmiast powoduje zmianę wyjść. W związku z tym układy te są szybkie, ale jednocześnie podatne na zjawisko hazardu i wyścigu. Zjawisko wyścigu występuje, gdy co najmniej dwa sygnały wejściowe zmieniają swój stan w jednej chwili czasu. Jednak, ze względu na niezerowe czasy przełączania bramek i przerzutników, zmiana jednego z sygnałów może nastąpić wcześniej niż innych, powodując trudne do wykrycia błędy.

Najstarszym rodzajem pamięci asynchronicznych były pamięci FPM RAM (ang. Fast Page Mode). W tego typu pamięciach sygnały sterujące matrycą komórek pamięci generowane są niezależnie od taktów zegara. Tak więc informacja na wyjściu ukazuje się po czasie wynikającym z konstrukcji układu. Występuje też problem z zsynchronizowaniem taktów zegara systemowego i taktów pamięci. Pamięci asynchroniczne działały z częstotliwościami 66 MHz i później 100 MHz. Kolejnymi typami pamięci asynchronicznych były EDO (ang. Extended Data Out) i BEDO (ang. Burst EDO). Różnice między nimi były ukryte w sposobie adresowania.  Dostęp do danych w typowej pamięci asynchronicznej wymagał 4 cykli zegara. Czas dostępu często był przedstawiany w postaci czterech liczb, np.  4-4-4-4, gdzie każda liczba oznacza czas dostępu do danych liczony w cyklach zegarowych,  tu w czterech kolejnych cyklach dostępu do pamięci. W pamięciach FPM adres rzędu był zmieniany raz na cztery cykle, czyli w pozostałych trzech cyklach dostęp do danych był trochę szybszy (4-3-3-3). W pamięciach EDO zmieniony został tylko cykl odczytu, gdzie dzięki pozostawieniu danych dłużej na magistrali jednocześnie był realizowany odczyt danych i wystawianie adresu następnej kolumny. Pozwoliło to skrócić cykl odczytu (4-2-2-2). W pamięciach BEDO adres rzędu i kolumny był zmieniany raz na cztery cykle odczytu/zapisu. Adresy w pozostałych cyklach były generowane automatycznie (najczęściej były to kolejne adresy). Dostęp był tu więc najszybszy (4-1-1-1). Pamięci BEDO nie doczekały się szerszego zastosowania, bo zostały wyparte z rynku przez pamięci synchroniczne.

 W synchronicznych układach pamięci (SRAM) zmiana stanu wewnętrznego następuje wyłącznie w określonych chwilach, które wyznacza sygnał zegarowy. Każdy układ synchroniczny posiada wejście zegarowe CLK. Charakterystyczne dla układów synchronicznych jest to, iż nawet gdy stan wejść się nie zmienia, to stan wewnętrzny, w kolejnych taktach zegara, może ulegać zmianie. Pamięci synchroniczne mogą być taktowane wyższymi częstotliwościami zegara, niż pamięci asynchroniczne. Podstawowym elementem takich pamięci jest matryca pamięciowa (Rys. 3). Z pojedynczej matrycy (macierzy) pamięci jest wyprowadzane słowo danych (w tym przypadku 4 bity). Macierze muszą być połączone w większe jednostki, tak by wyprowadzane słowo miało pożądaną długość, np. 64 bity. W dodatku pamięć jest zorganizowana w tzw. banki. Każdy bank jest niezależnie sterowany. W ten sposób można ukryć niektóre opóźnienia przy wprowadzaniu/wyprowadzaniu danych (np. przy długich sekwencjach można symulować dostęp w cyklu 4-1-1-1-1-1-1-1-1 ….).

Rys. 3. Budowa modułu synchronicznej pamięci dynamicznej – SDRAM

 

W dynamicznych pamięciach synchronicznych (SDRAM) najpierw jest podawany adres rzędu i dopiero w następnym kroku adres kolumny. Układy wewnętrzne pamięci muszą też zadbać o jej odświeżanie. Każda komórka pamięci musi być w odpowiednim czasie odczytana i ponownie zapisana. Z macierzy pamięci dane nie są wyprowadzane bezpośrednio. Zawsze są one wprowadzane do bufora I/O. Zadaniem tego bufora jest połączenie pamięci z magistralą danych. W ten sposób delikatne sygnały z macierzy pamięciowych są w pewien sposób chronione. Bufor I/O może być taktowany z większą częstotliwością niż macierze pamięci.

Macierze pamięci mogą być połączone w różny sposób w celu otrzymania pożądanej długości słowa. Uważa się, że im mniej macierzy pamięci (które są implementowane często jako osobne układy scalone), tym pamięć jest bardziej niezawodna. Na Rys. 4 przedstawiono niektóre możliwe formy organizacji pamięci SDRAM. W tym przypadku pożądaną długością słowa jest 64 bity. Można jednak zauważyć, że w niektórych przypadkach liczba bitów jest zdublowana. Mówimy wtedy o pamięci dwurzędowej. Oprócz banków pamięci istnieją jeszcze rzędy. Oczywiście w danej chwili może być aktywny tylko jeden rząd. Jeśli chodzi o liczbę macierzy pamięciowych, to w przypadku tych wyprowadzających 4 bity musimy połączyć aż 16 układów, aby uzyskać słowo 64 bitowe. Jeśli liczba wyprowadzanych bitów jest równa 16, to wystarczy połączyć tylko cztery takie układy.

 

Rys. 4. Formy organizacji pamięci SDRAM

 

Płyta główna pozwala łączyć pamięci w tzw. kanały. Możemy mieć systemy 2, 3, 4 kanałowe. Pojedynczy układ pamięci RAM, montowany na płycie głównej, wyprowadza 64 bity danych. Pamięci wielokanałowe możemy rozumieć jako połączenie takich układów w celu zwielokrotnienia długości szyny danych odpowiednio 2, 3, 4 krotnie.

Błędy, które powstają w pamięciach, można sklasyfikować w dwóch głównych grupach:

  • błędy powtarzalne – trwałe uszkodzenia,
  • błędy sporadyczne – np. powstałe na skutek promieniowania jonizacyjnego α, β.

W celu wykrywania i eliminacji błędów w pamięciach niekiedy stosuje się specjalne, dodatkowe układy. Na początku stosowana była kontrola parzystości. Sposób ten ma wiele wad, np. nie wykrywa błędów na parzystej liczbie bitów. Stąd też kontrola parzystości została szybko zastąpiona inną metodą. W pamięciach z kontrolą ECC (ang. Error Correcting Code) stosuje się dodatkowy układ wykrywania i korekcji błędów. Zwykle jest to 8 dodatkowych bitów na 64 bitowe słowo pamięci. Specjalnie zaprojektowane algorytmy z bardzo dużym prawdopodobieństwem potrafią wykryć błąd i go skorygować. Ponieważ przeprowadzane są w tym celu dodatkowe obliczenia zwykle pamięci z ECC mają 1% do 3% gorsze wyniki wydajnościowe, niż pamięci bez takiej korekcji.

Wszystkie parametry potrzebne do poprawnej pracy pamięci synchronicznej są przechowywane w specjalnym pliku rejestrów (ang. Mode Register) wewnątrz układu pamięci. Parametry te są ustawiane przez producenta, ale wiele z nich można zmienić korzystając z ustawień w BIOS’ie. Jednak chęć przyspieszenia działania pamięci, może skutkować jej niestabilnym działaniem. Dlatego warto wiedzieć co oznaczają przynajmniej podstawowe parametry pamięci. Podstawowe parametry definiujące sposób pracy pamięci (tzw. timing) są często zapisywane w postaci czterech liczb: CL – RCD – RP – RAS. Sposób dostępu do danych jest pokazany na Rys. 5. Najpierw kontroler pamięci określa adres wiersza komórki pamięci, do której chcemy uzyskać dostęp. Adres kolumny jest wysyłany po upływie czasu tRCD. Następnie musi minąć czas oznaczony przez tCL, podczas którego dane są przesyłane do rejestru wyjściowego. Później w kolejnych cyklach zegarowych, na magistrali pojawiają się kolejne słowa z pamięci. Ich liczba, w tym przypadku 8, jest wcześniej programowana. Cały proces może rozpocząć się od nowa po upłynięciu czasów tRAS oraz tRP.

 

 

Rys. 5. Dostęp do danych w pamięci

 

Obecnie na rynku dominują pamięci DDR (ang. Double Data Rate). W tym przypadku pamięć jest taktowana dwoma komplementarnymi sygnałami zegarowymi, które są w przeciwfazie. Dane są transferowane w chwili przecięcia się sygnałów zegarowych, czyli dwukrotnie w czasie cyklu zegarowego. Bufory wyjściowe pamięci DDR zostały przystosowane do takiego trybu pracy. Ponieważ w trakcie taktu zegara dane są transferowane dwukrotnie, to przepustowość takiej pamięci również wzrosła dwukrotnie. Nieco inaczej działają pamięci DDR2 i DDR3. W tym przypadku istnieje różnica w taktowaniu macierzy pamięciowych i ich buforów wyjściowych. W pamięciach DDR2 macierze pamięciowe są taktowane dwa razy wolniej, a w pamięciach DDR3 4 razy wolniej niż bufory wyjściowe. Z kolei w jednym takcie wyprowadzane są 4 bity z pamięci DDR2 i 8 bitów z pamięci DDR3 (Rys.6).

 

Rys. 6. Porównanie pamięci DDR-400, DDR2-400 i DDR3-400

 

Macierze pamięciowe są taktowane wolniej, co wydłuża czas oczekiwania na dane, ale umożliwia konstruowanie pamięci o większych pojemnościach. Zwiększenie przepustowości pamięci jest osiągane dzięki szybkiemu taktowaniu buforów pamięci i doprowadzaniu do nich szerszych słów (4, 8 bitów).  Tak więc pamięci DDR2-800 pracują z częstotliwością 400 MHz, pamięci DDR2-1066 i DDR3-1066 z częstotliwością 533 MHz, pamięci DDR3-1333 z częstotliwością 666.6 MHz, itd. Pamięci DDR3 (np. 9-9-9-24) mają większe opóźnienia liczone w cyklach zegarowych do momentu rozpoczęcia transferu danych w porównaniu z pamięciami DDR2 (np. 4-4-4-11). Podobnie pamięci DDR2 mają większe opóźnienia liczone w cyklach zegarowych do momentu rozpoczęcia transferu danych niż DDR (np. 2.5-3-3-8). Nie koniecznie oznacza to dłuższy czas oczekiwania na dane (prawda dla pamięci pracujących z taką samą szybkością zegara). Typowo, pamięci DDR są zasilane napięciem 2.5 V, pamięci DDR2 napięciem 1.8 V, a DDR3 – 1.5 V (chociaż moduły wymagające napięcia 1.6 V albo 1.65 V są również w powszechnym użyciu).

Najnowsze pamięci DDR4 umożliwiają zastosowanie napięcia zasilania 1,2 V. Dzięki temu pamięć DDR4 charakteryzuje się zmniejszonym poborem mocy o około 20% w stosunku do pamięci DDR3. Opracowano moduły DDR4 o taktowaniu ponad 4000 MHz (większa przepustowość ) i pojemności 32 GB. Pamięci DDR4 nie są kompatybilne wstecz, tzn. nie współpracują z chipsetami obsługującymi DDR, DDR2 i DDR3. W tym przypadku nie zwiększono liczby bitów wyprowadzanych z pamięci w takcie zegara i wynosi ona 8, identycznie jak w pamięciach DDR3.