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?
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
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; |
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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.