Forum: FPGA, VHDL & Co. ARRAY 1280x1024 erstellen?


von GS (chromosoma)


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?

von Duke Scarring (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Was kommt raus, wenn Du Dein Bild so adressierst:
> address <= (line << 9) + column;
1
Syntax error near "<"
;-)

Ich würde das eher so probieren:
1
address <= line*512 + column;

von Mac G. (macgyver0815)


Lesenswert?

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

Ich glaub da fehlt ein Divisor von 8 ;-)
(Bit/Byte)

Genug Speicher ham nur die ganz fetten FPGAs - aber es ist viel billiger 
sowas extern hinzuzufügen ;-)

von Duke Scarring (Gast)


Lesenswert?

Mac Gyver schrieb:
>> Der Cyclon 2 EP2C20 hat
>> 52 x 4096 Bit = 212'992 Bit = 208 kByte als internen BlockRAM zur
>> Verfügung.
>
> Ich glaub da fehlt ein Divisor von 8 ;-)
> (Bit/Byte)
Upps. Tatsächlich.
Damit sind es natürlich nur 26 kByte an internem Speicher.

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.