FPGA och SD-RAM
FPGA och SD-RAM
Hej!
Jag har en fpga som jag jag kodar i vhdl. Till det har jag ett sdram på 8 mb som jag vill använda till att spara undan data på och såklart även läsa ut det.
Vad jag förstått så måste minnet refreshas regelbundet. Vet någon om jag måste koda allt detta själv eller om det finns något smidigt att ladda ner som jag kan använda?
Håller på med ett kort från Altera och jobbar i Quartus.
Hoppas på hjälp!
Jag har en fpga som jag jag kodar i vhdl. Till det har jag ett sdram på 8 mb som jag vill använda till att spara undan data på och såklart även läsa ut det.
Vad jag förstått så måste minnet refreshas regelbundet. Vet någon om jag måste koda allt detta själv eller om det finns något smidigt att ladda ner som jag kan använda?
Håller på med ett kort från Altera och jobbar i Quartus.
Hoppas på hjälp!
*
Skrevs av Samot
det är DDR ram teknologie som använder "memory refresh" för att
uppdatera data i minnet , dessutom refresh proceduren görs internt i
minnets hårdvara . du som ska använda detta minnet behöver inte oroa
dig över detta , du bara läser data från eller skriver data till minnet . data
försvinner när ström försvinner .
SDRAM använder inte refresh proceduren .
- Om du själv skulle vilja refresha data som finns i minnet :
- Allokera en extern buffer som räcker till hela eller delvis av data som
finns i minnet .
- Kopiera data från minnet till buffer .
- vänta den tid det krävs innan refresh bör exekveras .
- kopiera data från buffer till minnet .
- upprepa proceduren i en loop . din processor kommer inte att göra nåt
annat än att refresha data !!!! .
*
Skrevs av Samot
Kod: Markera allt
Vad jag förstått så måste minnet refreshas regelbundet. Vet någon om jag måste koda allt detta själv eller om det finns något smidigt att ladda ner som jag kan använda?
det är DDR ram teknologie som använder "memory refresh" för att
uppdatera data i minnet , dessutom refresh proceduren görs internt i
minnets hårdvara . du som ska använda detta minnet behöver inte oroa
dig över detta , du bara läser data från eller skriver data till minnet . data
försvinner när ström försvinner .
SDRAM använder inte refresh proceduren .
- Om du själv skulle vilja refresha data som finns i minnet :
- Allokera en extern buffer som räcker till hela eller delvis av data som
finns i minnet .
- Kopiera data från minnet till buffer .
- vänta den tid det krävs innan refresh bör exekveras .
- kopiera data från buffer till minnet .
- upprepa proceduren i en loop . din processor kommer inte att göra nåt
annat än att refresha data !!!! .
*
Nja, det där stämmer väl inte. För när man programmerar FPGA och interface:ar mot SDRAM så måste man ha en speciell drivare. Vad jag har fått höra så måste man som sagt ha den drivaren för att fippla med minnet regelbundet för att det inte ska tappa data. Som sagt så finns såna att köpa. Men jag tror även det finns kod. Mycket möjligt att det finns att ladda hem hos några av de stora tillverkarna, typ Xilinx, Altera med flera. Dock lär det vara konstiga licenser bakom koden, så det är ju inget att rekomendera om du ska sälja produkten. Om jag inte minns helt fel så tror jag även jag har sätt någon som var hemmasnickrad. Kan söka runt lite senare idag och se ifall jag hittar det igen eller om jag bara hallucinerat fram det.
Om du kan tänka dig DDR SDRAM så finns nåt slags kod här:
http://www.opencores.org/browse.cgi/by_category
Fast jag vet inte om den funkar på din Altera.
Arvid
http://www.opencores.org/browse.cgi/by_category
Fast jag vet inte om den funkar på din Altera.
Arvid
DRAM behöver "refresh":as då det använder 1-transistorceller (en transistor med kondensator ungefär ) medans SRAM använder 6-transistorceller ("latch":ar) som inte behöver "refresh":as, SDRAM är sykroniserat DRAM vilket borde behöva "refresh" samma borde gälla för "Double DataRate" SDRAM...
DRAM är billigare (och du får ofta mycket mer minne) än SRAM men kräver extra jobb i hårdvaran.
problemet med dom flesta opencores projekt är ju att dom använder WishBone som localbus och därför tvingas man implementera det eller någon omvandlare...
Manticore projektet använder en SDRAM kontroller till sitt grafikkort (jag jobbar med ett liknande projekt) http://icculus.org/manticore/links.php vet dock inte vilket gränssnitt dom har från minnes kontrollanten.
DRAM är billigare (och du får ofta mycket mer minne) än SRAM men kräver extra jobb i hårdvaran.
problemet med dom flesta opencores projekt är ju att dom använder WishBone som localbus och därför tvingas man implementera det eller någon omvandlare...
Manticore projektet använder en SDRAM kontroller till sitt grafikkort (jag jobbar med ett liknande projekt) http://icculus.org/manticore/links.php vet dock inte vilket gränssnitt dom har från minnes kontrollanten.
Abra Hana, har du verkligen belägg för vad du skriver, jag tror nämligen inte på det du säger. SDRAM kräver visst refresh och OM det finns någon hårdvara som sköter om det så finns den _inte_ i själva minnet utan i den busskontroller man använder!
Och algoritmen för att göra manuell refresh.. var det ett skämt månne?
Och algoritmen för att göra manuell refresh.. var det ett skämt månne?
Tack för tips å ideér.
Jag är utlämnad till att änvända ett sdram 8 mb. Vad jag förstått så måste det refreshas.
Abra Hana. Tack för svar, men jag fundarar på en sak. Om du tror att det inte behöver refreshas, varför skulle jag då skriva en rutin för att refresha det?
Jag har ett utvecklingskort från Altera där allt sitter förmonterat å klart. Då kan man tycka att man borde kunna hitta det på deras hemsida. Men så är inte fallet. Jag ska ha ett möte med min handledare i morgon så vi får se vad han säger. Jag gör alltså ett examensarbete, det borde jag kanske inlett med för att räta ut lite frågetecken, sorry !
Jag är utlämnad till att änvända ett sdram 8 mb. Vad jag förstått så måste det refreshas.
Abra Hana. Tack för svar, men jag fundarar på en sak. Om du tror att det inte behöver refreshas, varför skulle jag då skriva en rutin för att refresha det?
Jag har ett utvecklingskort från Altera där allt sitter förmonterat å klart. Då kan man tycka att man borde kunna hitta det på deras hemsida. Men så är inte fallet. Jag ska ha ett möte med min handledare i morgon så vi får se vad han säger. Jag gör alltså ett examensarbete, det borde jag kanske inlett med för att räta ut lite frågetecken, sorry !
*
Ojsam : det var första april skämtet ?????? : Jag förväxlar SRAM med SDRAM . Seven11 har pointerat detta .
Jag utgick ifrån att att även SRAM , SDRAMM , DDR är som andra hård varor ( med många in- och utpinnar) som säljs på markander har ett inbyggt kontroll som reducerar antal pinnar och där med minskar antal kontroll commands .
( ???? Här pratar jag inte om refresh eller RAM minnet ????). men som exampel kan man jämföra detta med SD , MMC och så vidare som har högst om jag minns rätt bara 9 eller 11 pinnar , och med dessa pinnar kan man manupulera upp till ett 1GByte internt data minnet .
samot Vill du posta SDRAMS:datablad ?
Jag kör själv ochså quartus6 ! .
http://www.freemodelfoundry.com/fmf_mod ... 60832c.vhd
Ojsam : det var första april skämtet ?????? : Jag förväxlar SRAM med SDRAM . Seven11 har pointerat detta .
Jag utgick ifrån att att även SRAM , SDRAMM , DDR är som andra hård varor ( med många in- och utpinnar) som säljs på markander har ett inbyggt kontroll som reducerar antal pinnar och där med minskar antal kontroll commands .
( ???? Här pratar jag inte om refresh eller RAM minnet ????). men som exampel kan man jämföra detta med SD , MMC och så vidare som har högst om jag minns rätt bara 9 eller 11 pinnar , och med dessa pinnar kan man manupulera upp till ett 1GByte internt data minnet .
samot Vill du posta SDRAMS:datablad ?
Jag kör själv ochså quartus6 ! .
http://www.freemodelfoundry.com/fmf_mod ... 60832c.vhd
SD kort använder en egen standard som fins i tre upplagor tror jag (1.0, 1.1 och 2.0) vilket kan fås efter ett NDA kontrakt (som skyddar SD standarden från att implementeras i open source miljö). CF använder ATA/ATAPI bussen...
Iom med att jag inte läst SD standarden så kan jag inte säga hur den funkar med ATA/ATAPI är inte i närheten av RAM minnes standarden från JEDEC (används av RAM minnen).
RAM minnena skulle kunna ha väldigt många fler pinnar... du slipper ju skapa alla CS signaler till dom latch:ar eller kondensatorer som håller datan
I CF / SD fallet är det så att där skickas datan och addressering över en och samma ledningsgrupp medans standard 168-pins RAM har 64 dataledningar och 32 addressledningar. Resten av ledningar går bort till kontroll och spänningsmatning ungefär.
Kolla Manticore:s SDRAM kontroller http://svn.icculus.org/manticore/trunk/ ... iew=markup den verkar vara väl skriven...
vilken hastighet hade du tänkt dig på minnet förresten? Maticore kör med 66 MHz detta verkar lagomt med tanka på att det kn vara svårt att få ett stort projekt att gå väldigt mycket snabbare.
Iom med att jag inte läst SD standarden så kan jag inte säga hur den funkar med ATA/ATAPI är inte i närheten av RAM minnes standarden från JEDEC (används av RAM minnen).
RAM minnena skulle kunna ha väldigt många fler pinnar... du slipper ju skapa alla CS signaler till dom latch:ar eller kondensatorer som håller datan
I CF / SD fallet är det så att där skickas datan och addressering över en och samma ledningsgrupp medans standard 168-pins RAM har 64 dataledningar och 32 addressledningar. Resten av ledningar går bort till kontroll och spänningsmatning ungefär.
Kolla Manticore:s SDRAM kontroller http://svn.icculus.org/manticore/trunk/ ... iew=markup den verkar vara väl skriven...
vilken hastighet hade du tänkt dig på minnet förresten? Maticore kör med 66 MHz detta verkar lagomt med tanka på att det kn vara svårt att få ett stort projekt att gå väldigt mycket snabbare.
*
SDRAM:s schemat i databladet , sidan 2 visar att det redan finns det två inbygda refresh kontroller .
- REFRESH CONTROLLER
och
- Self REFRESH CONTROLLER
Detta betyder att du inte behöver skriva en komplex algoritm eller köpa en extern buskontroll som vissa har hävdat här tidigare.
Det enda du gör för att refresha data i minnet är att skicka ett tydligt bestämt kommandot under en viss tids period .
- Self refresh och auto refresh förklaras i databladet sidan 5 .
- Self refresh och auto refresh kommand finns i tabell , sidan 6 .
*
SDRAM:s schemat i databladet , sidan 2 visar att det redan finns det två inbygda refresh kontroller .
- REFRESH CONTROLLER
och
- Self REFRESH CONTROLLER
Detta betyder att du inte behöver skriva en komplex algoritm eller köpa en extern buskontroll som vissa har hävdat här tidigare.
Det enda du gör för att refresha data i minnet är att skicka ett tydligt bestämt kommandot under en viss tids period .
- Self refresh och auto refresh förklaras i databladet sidan 5 .
- Self refresh och auto refresh kommand finns i tabell , sidan 6 .
*
Principen är fortfarande att det behövs refresh och den är inte så självgående att användaren kan strunta i det.
Däremot är det riktigt att processen har blivit enklare och enklare för varje generation DRAM. På dom tidiga minnena var man tvungen att adressera och läsa ut varje rad eller kolumn i minnet manuellt vid refresh. Idag finns räknare och annat för detta inbyggt i minnena så det är mycket enklare. Men proceduren måste fortfarande göras, eller ges tid att göras.
Däremot är det riktigt att processen har blivit enklare och enklare för varje generation DRAM. På dom tidiga minnena var man tvungen att adressera och läsa ut varje rad eller kolumn i minnet manuellt vid refresh. Idag finns räknare och annat för detta inbyggt i minnena så det är mycket enklare. Men proceduren måste fortfarande göras, eller ges tid att göras.