Az eredetileg feltett kérdésekre adandó válaszok sajnos megkövetelnek némi háttérinformációt a szinkron-memóriák müködéséröl, úgyhogy attól tartok ez egy kicsit hosszú lesz...
A szinkron RAM-ok gyakorlati müködése valami ilyesmi 4-bankos SDRAM-ot, és kezdetben inaktív bankokat feltételezve:
- Elsö lépésben a Bank Activate / Row Address Select parancsot kell kiadni (vagyis elöször a sorcímet adjuk meg, valamint az ''eredeti'' lineáris címböl valamelyik 2 bit kerül Bank Select (B0/B1) jelként ide).
- A RasToCas Delay által meghatározott órajelszám után kell kiadni a Read/Write parancsot az aktivált bankra (a B0/B1 itt is érvényes, de már aktív bankra kell hivatkoznia), illetve az oszlopcímet megadni (Coloumn Address Select), valamint ha memóriaírásról van szó, akkor már ebben az órajelben az elsö érvényes adatnak a D0-Dx vezetéken kell lennie (írásnál nincs CAS Latency).
- Memóriaolvasás esetén a CAS Latency által meghatározott órajellel késöbb kerül az elsö adat a D0-Dx vezetékekre, majd ez után az aktuális datarate-nek megfelelöen (SDR: 1X, DDR: 2X) az ezt követö címekre vonatkozó a Burst Lenght által meghatározott számú további adatblokk kerül átvitelre további vezérlöjelek kiadása nélkül (illetve a megkezdett tranzakció megszakítható egy Burst Terminate paranccsall).
- Az átvitel után (illetve a specifikáció alapján meghatározott mennyiségü órajellel akár korábban) kiadható a Bank Close / Row Precharge parancs, ez után az illetö bank a Precharge Time által meghatározott minimális órajelig nem elérhetö. Ez utóbbi parancs kiadása késleltethetö szintén a specifikációban meghatározott (általában 100000-es nagyságrendü órajeles) maximális ideig, illetve létezik egy un. Auto Precharge mód is, ahol minden tranzakció végén automatikusan végrehajtásra kerül a precharge parancs (tipikusan NoteBook-ok használják a kisebb teljesítményfelvétel érdekében, hogy egy bank minimális ideig legyen aktív).
Amennyiben a kezdeményezett tranzakció (írás/olvasás) egy már aktív bankra történik, úgy az elsö pont és a RasToCas delay kimarad (a klasszikus fast-page mode analógiájára), tehát a memóriavezérlönek érdemes optimalizálva menedzselnie a Bank Activate / Close parancsokat a maximális teljesítmény érdekében.
A parancsok közti ''üres'' órajelekben más bankokra vonatkozó parancsok kiadhatók, vagyis a tranzakciók átlapolhatóak a maximális átviteli sebesség érdekében (végülis ezért van a multibank), tehát a memóriavezérlö ma már nem egy buta jószág...
A memória-idözítési paraméterek (pl. a CAS latency) a memóriachip-en speciális parancsok által beállítható paraméter, tehát attól függetlenül, hogy a BIOS-on keresztül állítod be, egy érték gyakorlati alkalmazhatóságát alapvetöen maga a memória befolyásolja. A legjobb példa pont a CAS latency, amiböl tipikusan kétféle (egy gyorsabb és egy lassabb) értéket támogatnak a memóriák, vagyis a BIOS-ban hiába lehet pl: 1.5/2/2.5/3 órajelet is beállítani, ha a memória csak a 2/2.5-et támogatja...
A Bank-interleaveing-röl:
Egy SDRAM chip teljes címtarománya 4 bankba van szervezve. Egy meghatározott adat teljes címzéséhez 3 információra van szükség:
- Bank select (B0/B1)
- Row address (A0-Ar)
- Coloumn address (A0-Ac)
Ez a gyakorlatban azt jelenti, hogy a memória címtartományból két bit az aktuális bank-ot választja ki, az viszont kizárólag a memóriakontrolleren múlik, hogy ez a teljes (eredeti lineáris) cím melyik két bitje. Legegyszerübb esetben (interleave nélkül) a cím legfelsö két bitjét kötik a bank-select lábakra. Ez a gyakorlatban azt eredményezi, hogy pl. egy 256Mb-es chip alsó 64Mb-jét a Bank0, a következöt a Bank1, satöbbi blokkok adják. Ennek hátránya, hogy mivel a programok adatai általában többé-kevésbé lokálisan helyezkednek el, így az esetek döntö többségében csak egy bank-ot használunk, ami egyrészt jó a kisebb teljesítményfelvétel, másrészt rossz a kihasználatlan multi-banking képesség miatt.
Bank interleave úgy érhetö el, hogy azokat a címbiteket kötjük a B0/B1 lábakra, amik pl. lapméretenkénti bankváltást okoznak (vagyis a sor és az oszlopcím bitjei közé rakjuk a bank-select biteket). Ez a ma alkalmazott memóriák esetén tipikusan 2kB-onkénti (jellemzö lapméret) bankváltást okoz, ami egyrészt javítja a bankok párhuzamos kihasználhatóságát, másrészt a lapméretet látszólag megtöbbszörözve (az interleave faktorral) javítja a sokkal gyorsabb Fast-page elérések valószinüségét.
Na, ha ezen átrágtátok magatokat, és még van kérdés, akkor bátran...
''A felmerülö problémákra minden jelenlevönek van egy megoldási javaslata - ami nem müködik...''