Pamięci RAM
Pamięci – wstęp
Pamięci są układami logicznymi wykorzystywanymi do przechowywania, wydawania i
przyjmowania zakodowanych danych informacyjnych. Podstawowym typem pamięci,
powszechnie dzisiaj wykorzystywanym jest pamięć półprzewodnikowa. Przekazywana
informacja jest zapisywana w postaci binarnej, jest to więc ciąg zer i jedynek. Każdy z
podstawowych elementów danej nazywany jest bitem, gdy połączymy ze sobą 8 bitów
dostaniemy jeden bajt, natomiast 16 bitowy element nazywany jest słowem. Podstawowymi
parametrami opisującymi każdy typ pamięci są:
Szybkość
Pojemność
Pobór mocy
Koszt
Pojemność każdej pamięci, to ilość informacji którą dana pamięć jest w stanie przechować.
Mierzy się ją zazwyczaj w bitach, bajtach i słowach. Wyrażana jest w kilobitach - kb,
megabitach - Mb, gigabitach - GB, oraz analogicznie w kilobajtach - kB, megabajtach MB i w
gigabajtach GB. Obecnie ilość pamięci mierzy się już tylko korzystając z miar megabajtów
oraz gigabajtów. Pojemność pamięci jest zatem określana liczbą słów i długością słowa.
Liczbę słów podaje się za pomocą odpowiednich przedrostków, którym odpowiadają
określone mnożniki.
Zależności pomiędzy jednostkami pojemności:
1 KB pojemności odpowiada liczbie 1024 bajtów
1 MB pojemności odpowiada liczbie 1024 * 1024 bajtów
1 GB pojemności odpowiada liczbie 1024 * 1024 * 1024 bajtów
Szybkość jest parametrem określającym jak często procesor, lub inne urządzenie
wykorzystujące pamięć mogą z niej korzystać. Szybkość pamięci jest określana kilkoma
precyzyjnymi parametrami:
Czasem dostępu - access time. Jest to czas upływający od momentu w którym
wysyłane jest żądanie dostępu do pamięci do czasu w którym informacja zwrotna
ukaże się na jej wyjściu. Czas dostępu szybkich pamięci operacyjnych waha się w
granicach od 20 do 200 ns.
Czasem cyklu - cycle time. Jest to czas najkrótszy, który upływa między dwoma
kolejnymi żądaniami dostępu do pamięci. Czas ten jest zawsze dłuższy od czasu
dostępu, co wynika z fizycznej budowy pamięci, chodzi tu głównie o opóźnienia
wnoszone przez wszystkie elementy elektroniczne.
Szybkością transmisji - transfer speed. Szybkość transmisji mierzymy liczbą bitów,
bądź bajtów, którą jesteśmy w stanie przesłać pomiędzy urządzeniem, a pamięcią. Ten
parametr jest bardzo ważny w pamięciach, adresowanych ilością bitów większą od
słowa, na przykład pamięci na dyskach magnetycznych. Ze względu na konieczność
odczytu i zapisu bloku słów, mniej istotny staje się czas dostępu, natomiast ważniejszy
jest czas w którym porcja danych może zostać przesłana. Szybkość transmisji
mierzymy w bajtach lub bitach na sekundę.
Każda nowo wprowadzana technologia pozwala zmniejszyć koszt produkcji pamięci oraz
ulepszyć zarazem jej parametry. Dlatego nowe pamięci dosyć szybko się starzeją, naturalnie
pod względem technologicznym. Bardzo często czas użytkowania danego typu pamięci na
przykład w komputerach klasy PC wynosi zaledwie kilka lat, później należy zaopatrzyć się w
nowsze rozwiązania. Los taki spotkał popularne w latach sześćdziesiątych ubiegłego wieku
ferrytowe pamięci rdzeniowe, które obecnie można spotkać już chyba tylko w muzeum. Na
dzień dzisiejszy najniższym kosztem, a także dobrymi parametrami charakteryzują się
pamięci półprzewodnikowe. Istnieje ich ogromne zróżnicowanie ze względu na pojemność,
szybkość działania oraz oczywiście cenę. Tanie pamięci półprzewodnikowe oparte na
układach scalonych cechują się niewielką szybkością działania. Szybkie pamięci mają
zazwyczaj mniejsze pojemności przy dosyć dużej cenie. Z tych powodów szuka się ciągle
nowych rozwiązań architektury komputerów, które pozwoliłyby na optymalną ich współpracę
z posiadanymi na pokładzie pamięciami. Pewnym rozwiązaniem pamięci operacyjnych jest
stosowanie dwóch rodzajów pamięci półprzewodnikowych, pamięci bardzo szybkich o
małych pojemnościach, oraz pamięci wolniejszych o dużych pojemnościach, które nie są zbyt
często czytane przez procesor. Dzięki temu będziemy posiadali pamięć operacyjną o dużej
pojemności, a także o szybkim działaniu w przypadku procesów krytycznych do poprawnego
działania systemu operacyjnego. Bardzo szybka pamięć o małej pojemności, która
współpracuje z pamięcią operacyjną jest nazywana pamięcią typu Cache.
Również pobór mocy stanowi bardzo ważny parametr, który staje się problemem przy
budowaniu urządzeń zasilanych bateryjnie, jak komputery kieszonkowe, laptopy. Również
urządzenia wyposażone w pamięci operacyjne o bardzo dużych pojemnościach. Istnieje wtedy
problem z połączeniem wielkiej liczby układów scalonych oraz z odpowiednim
odprowadzeniem wydzielanego ciepła.
Pamięć zbudowana jest z rejestrów komórek pamięci, w których zapamiętane są słowa
jednobitowe, czterobitowe lub bajtowe. W każdej komórce odpowiada jej adres, czyli numer
zapisany w postaci dwójkowej, który oznacza położenie tej informacji w pamięci. Chcąc
dokonać operacji odczytu lub zapisu na pamięci należy podać na wejścia adresowe tej
pamięci odpowiedni numer komórki którą chcemy modyfikować lub odczytać, a na wejścia
sterujące odpowiednią daną, w przypadku zapisu. Chcąc zaadresować 2
n
komórek pamięci
należy użyć n wejść adresowych. Przykładowo do zaadresowania pamięci o pojemności
64KB, czyli 65536 bajtów, należy użyć 16 wejść adresowych. Jak wiadomo informacje są
zapisywane w pamięci w postaci binarnej, dlatego najwygodniej jest używać liczb zapisanych
w postaci szesnastkowej, zwanej też heksadecymalną.
Pamięci posiadają następujące piny wejścia/wyjścia:
Wejścia adresowe oznaczane A0….An, gdzie n - liczba wyprowadzeń potrzebna do
zaadresowania 2
n
komórek pamięci.
Wejścia/wyjścia informacji - danych D0.…Dm, gdzie m jest długością słowa
zapisywanego pod jedną komórką pamięci.
Wejścia sterujące, które służą do wyboru funkcji jaką pamięć ma wykonać. Są to
wejścia WE - Write Enable, CS - Chip Selekt, CE - Clock Enable oraz OE - Output
Enable.
Wejścia strobu adresu: ALE - Adress Latch Enable, RAS - Row Adress Select, CAS -
Column Adress Select.
Pamięci dynamiczne o swobodnym czasie dostępu - RAM
W dzisiejszych czasach pamięć RAM realizowana jest sprzętowo, w postaci układów
scalonych, które występują w różnych technologiach, także jako fragmenty znacznie bardziej
złożonych układów scalonych, na przykład pamięć podręczna procesora. Pamięci RAM z
jakimi mamy najczęściej do czynienia znajdują swe największe zastosowanie w komputerach
osobistych.
Pamięć RAM jest wykorzystywana do operacji ciągłego zapisu danych w postaci bajtu
lub słowa, do tymczasowego zapamiętywania oraz odczytu informacji. Znając podstawy teorii
automatów wiadomo, że każda czynność zapamiętywania pociąga za sobą stosowanie
odpowiednich układów sekwencyjnych, w których informacje tego typu mogą być
zapisywane, bądź odczytywane zgodnie z określoną kolejnością. Dostęp do danej komórki
pamięci zależy od miejsca w którym się ona znajduje oraz czasu, który mija przed
rozpoczęciem operacji zapisu lub odczytu.
Podział pamięci RAM
Rozróżniamy dwa podstawowe rodzaje pamięci RAM:
Pamięci statyczne - SRAM. Elementem pamiętającym w tego typu pamięci jest
bistabilny przerzutnik asynchroniczny typu RS. Komórki wykonywane były dawniej
w technologii bipolarnej, obecnie stosuje się specjalne układy MOS. Informacja w
tych pamięciach jest utrzymywana dopóty, dopóki nie zostanie zastąpiona inną lub
napięcie zasilające nie zostanie odłączone.
Pamięci dynamiczne - DRAM. Elementem pamiętającym w tego typu pamięciach są
pojemności wejściowe tranzystorów typu MOS, które gromadzą ładunek, lub go
odprowadzają. Istnieje konieczność odświeżania tego typu pamięci w celu
uzupełniania ładunku, który dosyć szybko zanika. Do poprawnej pracy tej pamięci nie
wystarczy więc tylko podłączenie go do zasilania, w przypadku braku częstych cykli
zapisu lub odczytu, zawartość komórki zostałaby stracona.
Pamięci DRAM możemy dodatkowo podzielić na kilka podtypów, w zależności od
implementacji na:
EDO DRAM - Extended Data Out DRAM
FPM DRAM - Fast Page Mode DRAM
SDRAM - Synchroneus DRAM
DDR
GDDR
W pamięciach RAM poszczególne komórki są ułożone w wybierane liniami adresu
wejściowego słowa. Dla łatwiejszego wyobrażenia sobie struktury pamięci, przedstawmy ją
jako dwuwymiarową matrycę, która składa się z n słów zawierających m bitów, dodatkowo
podzieloną na obszary robocze zwane strefami.
Dekodery wejścia oraz wyjścia kooperują z równoległymi rejestrami pamiętającymi
przychodzące dane, ponieważ operacja odczytu i zapisu do pamięci trwa zwykle przez sporą
ilość cykli zegarowych. Zawartości linii adresowej i danych mogą się w tym momencie
zmienić, dzięki użyciu rejestrów o odpowiednich długościach, żadna z informacji nie jest
tracona.
Zależnie od stanu logicznego na wejściu R/W komórki pamięciowe przyjmują informację z
rejestru danych, następuje wtedy cykl zapisu pamięci, albo wyprowadzają na rejestr danych
zawartość komórki pamięci, w cyklu odczytu. Rejestr przekazuje dalej informację lub ją
odbiera z szyny danych, stanowi on zatem bufor dwukierunkowy.
Charakterystyka pamięci DRAM
Informacje przechowywane są w pamięci DRAM, pod postacią ładunku
zgromadzonego przez kondensator Cs. Na skutek rozładowania kondensatora, ustala na nim
napięcie odpowiadające logicznemu zeru, natomiast poprzez proces ładowania, ustalone
napięcie odpowiada jedynce logicznej.
Organizując adres jak na rysunku, komórka posiada wejście adresowe W dla wierszy,
oraz pojedynczą linię danych wspólną dla komórek o adresie określanym przez kolumnę B.
Wspólny dla kolumny adresowej B jest wzmacniacz odczytu. Po wybraniu komórki, na
wejściach adresowych B oraz W ustala się stan wysoki, a pojemność Cs jest dołączana do
linii danych. Podczas zapisu doprowadzane jest do niej napięcie ze wzmacniacza zapisu, które
odpowiada logicznej jedynce lub zeru. Po fazie odczytu ładunek znajdujący się w pojemności
Cs stopniowo ładuje dużo większą pojemność Cb, na którą składa się dodatkowo pojemność
drenu, dlatego napięcie odczytu powinno być dużo wyższe od napięcia na kondensatorze Cs.
Odczyt powinien być wzmacniany dobrym układem uzupełnionym o elementy odświeżające
pamięć, które będą odświeżały poszczególne kolumny niezależnie od wykonywanego cyklu.
Innym rozwiązaniem jest zastosowanie wielotranzystorowych komórek pamięciowych z dużo
prostszym układem odświeżania oraz prostym wzmacniaczem odczytu/zapisu.
Typowa struktura pamięci dynamicznej, posiadającej pojemność 64 kilobitów,
przedstawia się jako matryca zbudowana z 256 wierszy oraz 256 kolumn. Aby zmniejszyć
liczbę wyprowadzeń pamięci dynamicznej oraz ułatwić jej odświeżanie, należy
multipleksować wejścia adresowe. Adresowanie pamięci polega na podaniu ośmiu
ważniejszych bitów adresu, co stanowi adres wiersza, następnie podawane są wartości ośmiu
młodszych bitów, stanowiących adres kolumny. Adres wiersza wpisywany jest do rejestru
wiersza przy opadającym zboczu sygnału ~RAS. Następnie dekoder adresu, którym jest
zwykły multiplekser wybiera odpowiadający żądanemu adresowi wiersz. Podobnie adres
kolumny wpisywany jest z wejść do rejestru kolumny po stwierdzeniu opadającego zbocza
sygnału CAS. Demultiplekser wybiera odpowiednią kolumnę o żądanym adresie. Wybranie
wiersza oraz kolumny w matrycy pamięciowej odpowiada wskazaniu jednej konkretnej
komórki pamięci, przy zaoszczędzeniu połowy wyprowadzeń. Jeżeli podczas operacji
wskazania adresu, na pinie WE był stan logicznego 0, to zawartość komórki przesyłana jest
na wyjście układu, ma wtedy miejsce operacja odczytu. Gdy WE = 1 następuje zapis
wejściowej informacji do komórki o podanym adresie.
Charakterystyka pamięci SRAM
Podstawowym elementem pamiętającym pamięci statycznych RAM jest bistabilny,
który tworzą tranzystory T1, T2 oraz dwa rezystory. Pozostałe rezystory widoczne na rysunku
stanowią klucze przełączające oraz odłączające przerzutnik bistabilny od linii bitów. Gdy
komórka pamięci jest odczytywana lub zapisywana tranzystory te stanowią zwarcie, dzięki
temu przerzutnik bistabilny jest przyłączany do linii bitu, którą łączymy z
wejściem/wyjściem. Również w tym wypadku komórki pamięci tworzą wspólnie matrycę
zbudowaną z linii wierszy oraz kolumn. To, gdzie dana komórka jest położona wewnątrz
matrycy, jednoznacznie określa adres powstały z połączenia numeru wiersza oraz kolumny
Pamięć statyczna RAM posiada trzy wejścia sterujące, są to:
Uaktywnienie pamięci
Zezwolenie na zapis
Zezwolenie na odczyt
Jeżeli wejście ~CS jest w stanie logicznym 1 to pamięć nie jest dostępna i jej wszystkie
wejścia oraz wyjścia znajdują się w stanie wysokiej impedancji, czyli są odłączone. Wraz ze
zmianą wartości wejścia ~CS na logiczne 0 pamięć jest aktywowana. Jeżeli w tym czasie WE
jest w stanie logicznego 0, to jest wykonywana operacja odczytu danych z komórki określonej
przy pomocy wejść adresowych. Jeżeli WE jest w stanie logicznej jedynki, układ zapisze
wystawione na szynie dane do komórki pamięci znajdującej się pod wskazanym adresem.
Przykładowa pamięć SRAM zbudowana jest z ośmiu matryc, każda po 128 wierszy i
kolumn. Aby poprawnie zaadresować tego typu pamięć należy użyć 14 wejść adresowych.
Bity bardziej znaczące A0…A6 podawane są na wejścia demultipleksera, który wybiera jeden
spośród 128 wierszy. Mniej znaczące bity A7…A13 podawane są na wejścia drugiego
demultipleksera, który wybiera jedną spośród 128 kolumn. Tym sposobem wybranych zostało
dokładnie 8 komórek pamięci, każda przechowująca jeden bit informacji. Możliwy więc jest
zapis lub odczyt słowa jedno - bajtowego. Można spotkać wiele różnych rozwiązań
adresowania, odczytywania i zapisywania pamięci RAM. Pamięci aktualnie stosowane,
charakteryzujące się dużymi pojemnościami są organizowane do opisanego adresowania
matrycowego, czyli najpierw na liniach adresowych podaje się numer wiersza a potem
kolumny. W ten sposób wymagana ilość połączeń zmniejsza nam się o połowę, co bardzo
upraszcza cały układ.
Pamięci SRAM są szybsze od pamięci DRAM, najczęściej stosuje się jednak te drugie,
głównie ze względu na znacznie niższą cenę. Pojedyncza komórka pamięci SRAM zawiera aż
czterokrotnie więcej tranzystorów od analogicznej pamięci DRAM, w związku z tym posiada
czterokrotnie większe zapotrzebowanie na moc, wzrasta również drastycznie stopień
skomplikowania układu scalonego oraz jego wielkość. Pamięci o dużych rozmiarach są
realizowane w zasadzie wyłącznie jako dynamiczne. Tranzystory MOS, które
wykorzystywane są w tego typu układach zapewniają bardzo wysokie rezystancje wejściowe
oraz wyjściowe, utrzymują ładunek przez względnie długi czas, a ponadto pobierają
wielokrotnie mniej mocy od ich bipolarnych odpowiedników. Ze względu na upływność
ładunku zgromadzonego w kondensatorze Cs w czasie liczonym w ms, należy zadbać o
cykliczne odświeżanie tych pamięci z częstotliwością co najmniej kilkuset herców.