ARRAY 1280x1024 erstellen?

OP #3033590
Lesenswert?

Hallo.

In meinem Hobbyprojekt wird ein s/w CCD-kamera(512x582) über externen 
ADC(30 MSPS) ausgelesen. Die Bild wird auf 512 Kbyte  SRAM gespeichert 
und über VGA Anschluss auf dem Display   wiedergegeben.

Die Bilddaten liegen im SRAM  in Reihenfolge  vor,d.h.
Adresse 512 ist das letzte Pixel der 1. Reihe des Bildes,
Adresse 513 ist das erste Pixel der 2. Reihe des Bildes usw.


Diese Indexierung ist nicht besonders bequem, falls ich das Bild später 
analysieren will. Insgesamt ist es übersichtlicher, wenn ich ein 
Displaybuffer als ARRAY 1280x1024 erstelle. Dann kann ich ganz einfach 
auf den gewünschten Pixel zugreifen.

Da ich sowieso mit S/W Bild arbeite, sollte mein array so aussehen:


TYPE BILD IS ARRAY (1280 downto 0, 1024 downto 0) of STD_LOGIC_VECTOR(3 
downto 0);

Naja, leider verweigert Quartus sowas zu generieren und gibt critical 
eror aus.

Ist auch logisch , denn 1280x1024x4=5.24 Mbyte, soviel Speicher kann 
mein  Cyclon 2 mit 18K LE nicht generieren (oder doch?).

Jetzt ist die Frage, ob es ein schonender Umweg gibt, der nicht so viele 
LE frisst, aber gleichzietig  mir erlaubt das Bild im Buffer zu 
generieren, und nicht auf SRAM oder SDRAM.

Gibt es in VHDL sowas wie "zeiger" auf bestimmte Adresse im Speicher?

Welche Methoden  gibt es hier noch?
Gast #3033720
Lesenswert?

Anton R. schrieb:
> Ist auch logisch , denn 1280x1024x4=5.24 Mbyte, soviel Speicher kann
> mein  Cyclon 2 mit 18K LE nicht generieren (oder doch?).
1280 x 1024 x 4 Bit  = 5'242'880 Bit  = 655'360 Byte = 640 kByte
1280 x 1024 x 4 Byte = 5'242'880 Byte = 5'120 kByte

Dein Sensor (+ADC) liefert:
512 x 582 x 4 Bit = 1'191'936 Bit = 148'992 Byte = 145.5 kByte

Der Cyclon 2 EP2C20 hat
52 x 4096 Bit = 212'992 Bit = 208 kByte als internen BlockRAM zur 
Verfügung.

Jetzt kannst Du Dir überlegen wo welches Bild hinpasst.

Anton R. schrieb:
> Adresse 512 ist das letzte Pixel der 1. Reihe des Bildes,
> Adresse 513 ist das erste Pixel der 2. Reihe des Bildes usw.
Was kommt raus, wenn Du Dein Bild so adressierst:
1
address <= (line << 9) + column;

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren