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ć 2n 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 2n 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.