SRAM Hastighet

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

SRAM Hastighet

Inlägg av chille »

Jag kommer behöva läsa/skriva, säg 200k gånger per sekund. Men jag vill ha väldigt låg accesstid, vill iaf inte behöva vänta 10 cykler på att datat ska komma fram. Spelar det någon roll vilket RAM jag väljer? Om jag tar exempelvis ett 20MHz SRAM, kommer jag kunna läsa direkt från det, eller måste jag vänta lite?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

SRAM hastigheter anges inte i MHz men i ns.

Du ska välja en hastighet på minnet som motsvarer den setup-tiden som din CPU har. Många MCU med inbyggd RAM som kan tugga iväg med skaplig hastighet (20MHz+) kräver 1-2 wait-state för att komma åt det interna minne, själv använder jag en 16-bit från Fujitsu som ruller 16MHz och då fungerar ett 80ns bra men jag har lagt in 1 wait-state för att vara säker.

Så om du har en CPU på 20MHz (50ns cyklus) lägger du in 1-2 wait-states och ruller på med ett 80ns minne.

Tar du ett 20ns minne behöver du 0 wait-state men du måste ju tänka på att om du har en del adress-väljar logik ska den tid tas med i beräkningerna, om du vill läsa 200K/sek och ska sampla någonting mer än ett par ms behövs ju en viss minnesbank som består av fler kretsar.

Jag kollade lite på ELFAs sida med minnen och den billigaste ligger på 26:- (32Kx8) med 20ns.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Okej, men processorn rullar på i 75MHz och jag behöver minst 256k*32 :)

Iofs har den ju DMA, då borde jag slippa wait-state?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Det finns både synkrona och asynkrona SRAM, synkrona "mäts" i MHz då de klockas...

Men om processorn inte specifikt anger stöd för den sortens minne är det nog vanliga asynkrona du ska använda. I databladet bör det finnas timing-info så du kan räkna ut hur snabbt minnet måste vara. För att hinna med i 75MHz så behövs nog 10ns eller så (!).

Att du har DMA betyder att du kan köra med waitstate utan att märka av det, så länge det bara är DMA som använder det externa minnet... Finns det internt SRAM och/eller cache i processorn?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

DMA betyder "Direct Memory Access" och medger att CPU:n stoppas en kort stund medan en viss block överförs mellan CPU och minne. Det är en bit hårdvara som gör det och CPU:n behöver då inte att utföra en interrupt med spara registrar, göra en liten grej, återställa registrar och återuppta jobbet. Detta sparar tid och var en stor grej då det kom fram fast då var CPU:erna på 8-12MHz för de tunga grabbarna!

Minnesåtkomsten är likadan som om CPU:n hade skrivit aktivt.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Nja, DMA gör att data kan överföras mellan olika minnen och/eller IO-enheter *utan* att CPUn stoppas (såvida det inte blir en kollision, t.ex. att båda vill använda den externa bussen - och DMA har prioritet). Så om kan köra sin kod helt i snabbt internt minne, och använder DMA för att kopiera data till/från långsamt externt minne i bakgrunden, behöver det långsamma minnet inte påverka hastigheten på koden man kör.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Jo den har 34k*32 intern SRAM och den har även cache, som jag är osäker på om man kan använda. Enligt databladet verkar det inte vara någon skillnad som man märker som programmerare, då man slår på det.

Det interna RAM:et är zero wait state, så det blir nog det billigaste SRAM jag får tag i och DMA för att skyffla mellan internt och extern.

Och som cyr säger, DMA körs parallellt med processorn.

En fråga angående DMA också. Jag antar att kanalerna begränsar hur många olika grejer DMA kan göra? Så om man har tre DMA-kanaler borde det vara som om tre DMA körs parallellt med varann? Hur blir det med bussarna isof? Borde väl kunna bli kollision väldigt lätt!?
Skriv svar