Forum: FPGA, VHDL & Co. DDR2 RAM Xilinx MIG Adressbereich


von Manuel T. (tedd)


Lesenswert?

Hallo!

Ich nutze das http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Ztex 
Usb FPGA 1.15b Module mit dem Spartan 6 XC6SLX75 und einem EZUsb FX2LP.
Auf dem Board ist auch ein 128MByte DDR2 Ram verbaut.

Nun möchte ich den Ram mit dem Xilinx MIG ansprechen und als FIFO für 
Pixeldaten die von einem Aptina MT9M001 nutzen. Habe es schon mit dem 
BlockRAM versucht aber der ist zu klein sobald man einen etwas 
schnelleren Pixeltakt(>~ 12 MHz) nutzen will weil der FX2 ja immer 
seinen eigenen FIFO leeren muss. Habe dazu auch schon den ein oder 
anderen Thread hier auf dem Board gefunden :)

Ich kriege den RAM nach abändern eines Beispielcodes auch beschrieben 
bzw ausgelesen aber das Bild sieht daraufhin nicht so aus wie es sein 
sollte:
Das hier müsste der Beispielcode sein:
http://opencores.org/websvn,filedetails?repname=usb_fpga_1_2&path=%2Fusb_fpga_1_2%2Ftrunk%2Fexamples%2Fusb-fpga-1.15%2F1.15a%2Fmemtest%2Ffpga%2Fmemtest.vhd

Meine Frage bezieht sich jetzt auf die Adressierung des RAMs. Durch das 
Memory Interface welches man aus dem Xilinx MIG bekommt muss man sich ja 
nicht um irgendwelche Rows oder Columns kümmern sondern hat quasi einen 
linearen Addressraum.

Der DDR2 Ram ist 128MByte groß.
Ich beschreibe/lese den RAM mit 32 Bit Ports und die Burstlength ist auf 
64 eingestellt. Dies entspricht 32*64/8 = 256 bytes.
Ist das dann quasi eine gefüllte Adresse?
Das würde heissen, dass mir 128Mbyte/256byte = 500000 Adressen zur 
Verfügung stehen? Also ein 20 Bit Adress Signal...

Stimmt das erstmal soweit?

Danke schon einmal im vorraus :)

Gruß
tedd

von Duke Scarring (Gast)


Lesenswert?

Manuel Ted schrieb:
> Der DDR2 Ram ist 128MByte groß.
Lt. Schaltplan ist ein 16x RAM verbaut. Die minimale Burstlänge (bzw. 
Prefetch) bei DDR2 beträgt 4.
Damit werden minimal 64 Bit = 8 Byte gelesen.
Darauf bezieht sich die Adresse, die der RAM-Baustein sieht.

> Ich beschreibe/lese den RAM mit 32 Bit Ports und die Burstlength ist auf
> 64 eingestellt. Dies entspricht 32*64/8 = 256 bytes.
Was dem MCB draus macht sthet im UG388, Chapter 4 -> Addressing

> Ist das dann quasi eine gefüllte Adresse?
> Das würde heissen, dass mir 128Mbyte/256byte = 500000 Adressen zur
> Verfügung stehen? Also ein 20 Bit Adress Signal...
Ich verstehe UG388 so, das da Byteweise adresiert wird:
128 MByte = 128  1024  1024 Byte = 134217728 Byte
Der Adressbus ist dann 27 Bit breit, wobei die unteren beiden Bits immer 
'0' sind.

Du kannst Dir auch die Portbreite von c?_p0_cmd_byte_addr anschauen.
Die scheint allerdings für ein gewisses Maximum (MIG 3.9 = 30 Bit) 
ausgelegt zu sein.

Duke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.