Recimo nesto vazno o latencijama: Razlikujemo latencije izrazene u taktovima system clocka i one izrazene u sekundama. Svaka latencija izrazena u sekundama ima pridruzenu jednu izrazenu preko system clocka. Tako tRAC, koji traje X sekunda, ima pridruzen tRCD, odnosno "RAS to CAS Delay". tRCD je broj taktova potreban da protekne tRAC, odnosno tRCD=tRAC/(system clock u sekundama). Vidimo da kako system clock postaje brzi (traje manje sekundi) tRCD raste, jer se tRAC ne mijenja (on je osobina modula). Zato za vece frekvencije system clocka tRCD raste.
Sada memorijski kontroler na adresnu sabirnicu stavlja adresu stupca u kojem je podatak, te aktivira CAS pin. Pomocu CAS dekodera dobijamo adresu stupca i sada je kombinacija red*stupac potpuna. Kao i kod RAS-a i ovdje je potrebna odredjena kolicina vremena od aktivacije CAS-a pa do trena dok se ne stabilizira, kada dekoderi povuku adresu stupca sa adresne sabirnice. Ta latencija je tCAC "Column Access time". Ovu latenciju cemo prosiriti na vrijeme od aktivacije CAS pina pa do trena kad se podatak odredjen red*stupac adresom ne pojavi na podatkovnim vodovima modula. Zasto? Zato sto tada tCAC latencija ima vecu prakticnu vrijednost, ne moramo izmisliti jos jednu koja bi obuhvacala vrijeme od dekodiranja stupca do pojave podataka. Latencija koja izrazava tCAC u otkucajima system clocka je tCAS, te je jednaka tCAS=tCAC/(system clock u sekundama). Ova jednadzba ipak nije tocna ako uzmemo u obzir da je tCAC vrijednost koja se ne moze promijeniti, a tCAS mozemo mijenjati na istom system clocku. Zasto je to tako?
Tijekom tCAS latencije podatak odredjen red*stupac kombinacijom putuje podatkovnim vodovima iz malih matrica u cijelom banku te odlazi do ruba modula. Tada prestaje tCAS latencija. Dok podatak putuje prema rubu modula, prelazi neku fizicku udaljenost. Podatak je zapravo signal, te kao takav slabi tijekom putovanja. Zbog toga putem staje u buffere na modulu gdje se zadrzava po jedan takt, te nastavlja putovanje. Svaki put kad posjeti buffer, tCAS latencija je veca za jedan takt, ali je podatak sigurniji, jer je mala sansa da ce se destabilizirati na putu. Kada mijenjamo tCAS, zapravo mijenjamo broj buffera koje ce podatak posjetiti na putu do ruba modula. Prvi dio CAS latencije (vrijeme od aktivacije CAS-a do dekodiranja stupca) je osobina modula koja je nepromjenjiva i ovisi o kvaliteti modula. Sjetimo se da je mem. kontroler poslao ove naredbe cijelom banku, tako da sada na podatkovnim pinovima modula imamo podatke od svakog cipa koji je sadrzavao bank. Odnosno, opisani proces se odvijao u svim malim matricama koje su dio banka. Proces je trajao tRCD+tCAS, a taj zbroj jos oznacavamo sa tRAS latencijom. Znaci tRAS=tRCD+tCAS. Zbroju se obicno doda odredjena kolicina "praznih" taktova sabirnice u kojima se ne radi nista, da budemo sigurni da je tCAS zavrsio. Prije nego sto opet mozemo koristiti modul, znaci opet dovesti adresu retka na adresni vod, moramo cekati da se RAS pin stabilizira ("oporavi" od prijasnje upotrebe). Tu latenciju nazivamo tRP "Ras Precharge". Kada ona zavrsi, opet mozemo poceti proces citanja na istom banku. Zbroj tRCD+tCAS+tRP (odnosno tRAS+tRP) oznacavamo sa tRC. To je zapravo najmanje vrijeme aktivnosti memory banka. On nije tocno jednak zbroju tih latencija, jer bankovima uglavnom treba jos malo vremena prije nego sto ih mozemo koristiti, jos samo 1-2 takta system clocka "odmora". Tako ispada da je tRC malo veci od zbroja i u BIOS-u obicno imamo opciju da ga postavimo na vrijednost 1T, 2T itd. sto znaci da ce biti jednak tRAS+tRP+1T/2T itd.
Sto se dogadja sa podacima koji su dosli na memorijsku sabirnicu? Mem. kontroler postaje bus master i salje ih nazad procesoru, kraj price

.
Znaci, procesor je od zahtjeva za podacima (kada je poslao LOAD naredbu) cekao neko vrijeme dok zahtjev dodje do mem. kontrolera, onda neko vrijeme dok memorija ispuni zahtjev i onda jos neko vrijeme dok podaci dodju nazad do njega. To je poprilicno ubilo bandwith sabirnice, jer se vecinu vremena nije dogadjalo - nista. Memorija to kompenzira tzv. Burst nacinom rada u kojem salje odredjeni broj podataka i iza trazenog podatka, tako da sabirnica stalno bude puna. Tako procesor zatrazi adresu X, dolazi do tRCD latencije, aktivira se red, dolazi do tCAS latencije, podatak je na podatkovnim pinovima... Ali umjesto da se red koji citamo deaktivira i RAS otidje na precharge, ostavljamo red aktiviran i povecavamo adresu stupca koji nam je kontroler poslao - tako da sada dohvacamo sljedeci podatak u matrici. Nakon sto je taj na podatkovnim pinovima, uzimamo sljedeci, pa opet... Posljedica toga je da ovo citanje izgleda kao tRCD+tCAS+tCAS+tCAS...+tRP. Dobra stvar je sto je procesor nakon prvotnog dugog cekanja ostale podatke poceo dobijati velikom brzinom (koja ovisi o tCAS latenciji). Nacin na koji ce memorija burst-ati podatke zapisan je u tzv. Load Mode registru. Tu su zapisane i latencije koje mijenjamo u BIOS-u i omogucuje nam interakciju sa modulom. Podatak koji je procesor trazio zove se "critical word" i obicno je on prvi koji mu dostavimo tijekom burst-a, ali se mijenjanjem nacina burst-a moze staviti na bilo koje mjesto u nizu podataka koje ispucamo.
Sto ako procesor odluci zapisati neki podatak u memoriju? Proces je vise manje jednak. Salje STORE naredbu, izvrsi se tRCD, ali tada aktiviramo WE pin (Write-enable). Tako cip zna da podatke na podatkovnoj sabirnici mora zapisati na trazenu lokaciju. Nakon tCAS podatak je zapisan. Zatim tRP...
Zasto se memorija organizira u bankove i zasto je dobro imati ih sto vise?
Kada banku posaljemo odredjenu adresu reda preko adresnog voda i aktiviramo RAS pin na svim cipovima gdje se bank nalazi (i odgovarajuce BA pinove koji cipu govore kojoj maloj matrici u njemu saljemo naredbe) on podatke iz trazenog reda povuce u pojacala signala. Kada mu posaljemo adresu stupca, podatci odredjeni red*stupac kombinacijom iz pojacala putuju globalnim pa centralnim vodovima do data pinova na cipu. Trazeni red ostaje u pojacalu, pa mozemo reci da je "ostao otvoren". Ako sljedeci put budemo trazili podatak u tom istom redu (npr. traje burst) dovoljno je cekati samo tCAS latenciju, jer tRCD ne postoji (red je vec u pojacalu). Veliki broj bankova - veliki broj redova koji su istovremeno otvoreni - velika vjerojatnost da ce podatak biti u vec aktiviranom redu i da ce ukupna latencija biti manja. Takodjer, dok jedan bank mijenja red, drugi moze uskociti sa podacima iz svoga aktivnog reda i puniti memorijsku sabirnicu. Ako je trazeni podatak u istom banku ali nekom drugom redu, onda trenutno otvoreni red iz pojacala vracamo u matricu i cijeli proces citanja pocinjemo od tRCD latencije.
Na pocetku smo rekli da je osobina DRAM memorije da sa vremenom gubi podatke pohranjene u njoj, jer naboj curi iz celija. Dakle, na neki ga nacin stalno treba obnavljati. Primjecujemo da se naboji u odredjenom redu obnavljaju kada taj red procitamo, sto znaci da bi stalnim citanjem odredjenog reda sprijecili da se podaci u njemu izgube s vremenom - stalno bi obnavljali naboj. U svakom cipu postoji logika koja radi upravo to - koristi vrijeme kada nitko ne cita podatke i prolazi kroz sve redove matrica, osvjezavajuci naboje. Zato memorijske matrice imaju manje redova nego stupaca, da omoguce sto krace trajanje osvjezavanja. Iako se refresh trudi ne smetati zahtjevima procesora za memorijom, to je neizbjezno, jer se naboj mora obnavljati jako brzo, pa je refresh cest, a obavlja se nakon primanja AUTO REFRESH signala. U BIOS-u se moze promijeniti Row Refresh Cycle latencija, koja oznacava vrijeme osvjezavanja celija u matrici.
U pricu dodajemo i jos i latenciju "Command Rate" koja oznacava broj taktova koje prolazi izmedju aktiviranja CS "Chip select" pina na odredjenom cipu kojeg trebamo, do vremena kada cip mozemo koristiti.
Jos neki signali koji se koriste u radu sa memorijom su:
PRECHARGE - Odredjenom banku govorimo da cemo ga uskoro koristiti, te mu porucujemo da se pripremi za primanje adrese retka.
BURST TERMINATE - Prekidamo zapoceti burst, kako bi mogli ispuniti neki drugi zahtjev procesora.
NO-OPERATION - Ovom naredbom mem. kontroler porucuje banku da ostane aktivan ali da ne radi nista. Koristi se da ispuni taktove koji prolaze za vrijeme raznih latencija (npr. tCAS) i da se osigura da dok latencija traje, bank ne radi nista.
DDR SDRAM "Double Data Rate SDRAM" memorija je vrsta SDRAM memorije koja moze primiti naredbu svakih 0.5 taktova system clocka, odnosno po dvije naredbe u jednom taktu. Logika koja to omogucuje neznatno komplicira modul, zove se DQS i nema potrebe objasnjavati je. Moduli koji podrzavaju DDR oznacavaju se dvojako - preko oznake frekvencije koju podrzavaju i preko bandwitha kojeg pruzaju.
Prvo, sto se tice frekvencije - nekada je PCX oznaka (PC100, PC133...) oznacavala frekvenciju na kojoj memorijski modul radi. Kod DDR-a oznacava frekvenciju kojom modul moze primati naredbe. Buduci da moze primiti dvije po Herz-u, uzimamo frekvenciju na kojoj modul radi i mnozimo je sa dva. PC400 tako oznacava modul koji radi na 200Mhz.
Sto se tice bandwitha, ta oznaka se dobija tako da pomnozimo sirinu memorijske sabirnice sa frekvencijom na kojoj modul radi, opet puta 2. Zamislimo da je sirina sabirnice 64 bita (8 byteova) a frekvencija 200Mhz. Bandwith=8*200Mhz*2=3200byte/Mhz. To mozemo pretvoriti u 3.2GB/s. Ovaj bandwith nas modul nikada nece postici i ne sluzi nam previse (osim sto nam indirektno govori o frekvenciji na kojoj modul radi). Bandwith tako visok ne moze se postici zbog vremena koje prolazi nakon sto procesor posalje naredbu pa do stizanja do mem kontrolera, latencija samog modula etc. Povecavanjem velicine burst-a (podataka koji se salju iza onoga kojeg je procesor trazio) povecava se bandwith i burst spasava sabirnicu od katastrofalne propusnosti.