Forum: FPGA, VHDL & Co. Indizierung Von Arrays


von Steffen (Gast)


Lesenswert?

Hallo nochmal,

ich hab immernoch ein Problem mit der Indizierung eines Arrays. Kann
man das so machen, denn mein Programm macht nicht das was es soll. Das
aber trotz funktionierender Simulation. Hier die entsprechende
Anweisung:

"variable fifo_adr_count:integer range 511 downto 0;

type FIFO_MEM is array(511 downto 0) of std_logic_vector(7 downto 0);
variable fifo_memo: FIFO_MEM;


GPIF_DATAL <= Fifo_Memo( fifo_adr_count);"


Hab dann noch ne Schleife die alle 4 Takte den fifo_adr_count
runterzählt.

Problem liegt anscheinend irgendwo bei FIFO_MEMO(fifo_adr_count).

Gruß Steffen

von J. Z. (zennehoy)


Lesenswert?

Hast du dir mal alle Warnings bei der Synthese durchgelesen? Kann sein,
dass dabei irgendwas passiert was nicht gewollt ist.
Mir scheint auch etwas suspekt, dass du alles als Variable deklariert
hast... vor allem bei fifo_adr_count wundert mich das ein bischen.
Haeng doch mal den gesamten Code als Attachment an, cheers!
Zen

von Steffen (Gast)


Lesenswert?

Hallo

das mit der Variable liegt daran, das ich nen Simple Fifo gebaut hab
mit Schieberegistern, Shifte also die werte bei nem neuen eingangswert
weiter, und schreibe den neuen wert an Stelle Fifo_adr_count 0. Hatte
halt Platz das Timing reichte aus, und ich hatte keine Lust auf
Adr-verwaltung.

Das VHDL Prog will ich eigentlich nicht gerne komplett einstellen, da
es zu meiner Dipl.Arbeit gehört.
Ist auch nicht mehr viel dran, noch ein bissl Steuerung und so. Das
funktioniert aber alles, hab den fifo_adr_count mal Convertiert und auf
den Ausgang gelegt, das hat funktioniert.

Die warnings kann man laut Xilinx ignorieren, allerdings finde ich die
Hilfe dazu auch sehr bescheiden bei denen.

Wenn du trotzdem mal interesse hast, kann ich dir das komplette ding
mal per email schicken.

Gruß Steffen

von J. Z. (zennehoy)


Lesenswert?

Hmm, bei einem FIFO werden normalerweise 2 Zeiger benutzt, die den
Anfang (head-pointer) und das Ende (tail-pointer) im FIFO angeben. So
muessen die Daten im Speicher nicht bewegt werden, und koennen auch zb.
im BlockRam abgelegt werden.
Wo bemerkst du denn den Fehler? In der Hardware? Hast du mal eine
post-place-and-route Simulation probiert?
Ansonsten kann ich dir nur meinen Standard-tipp geben: mach dir eine
Skizze dazu, wie du dir das FIFO als Hardware vorstellst. Danach
beschreibst du diese Skizze mit VHDL, ohne deinen jetztigen Code auch
nur anzuschauen.
Zen

von Steffen (Gast)


Lesenswert?

In der Schaltung, hab ein

http://www.cesys.de/index.php?language=de&doc=advanced&docparams=USB2FPGA&menuparams=50

Board. Die Übertragung hin klappt.

Hab die Daten dort auch schon per Single Read aus dem Fifo ausgelesen.

Simulationen hab ich jetzt alle gemacht( post place and route dauerte 2
Stunden, hab nen 600 MHz Rechner, Clock des FPGA bei 48 MHz und ne
Simulationsdauer von knapp 110µs). Bei allen Simulationen funktionierte
es. Allerdings mit der einschränkung, das ich als eingang nen anderen
Pin simulieren mußte da ich Modelsim nicht dazu gekriegt hab, mal INOUT
port vernünftig zu simulieren. Weiß irgendwie nicht weiter, und das
jetzt schon seit 3 bis 4 Wochen.

Die Hersteller von dem Board können mir leider auch nicht weiterhelfen,
da der Mitarbeiter der das entwickelt hat, und auch Beispiele Prog. hat,
nicht mehr da arbeitet. Toll.

Also meist du, die Indizierung so solte eigentlich klappen.

gruß Steffen

von FPGA-User (Gast)


Lesenswert?

wenn fifo_adr_count selbst ein counter sein soll, dann musst
Du m.E. ein Signal daraus machen.
Als Variable kannst Du es höchstens von einem anderen
Signal ableiten, z.B. um noch einen Offset zu addieren o.ä.

Was macht denn die Synthese aus Deiner RAM-Variable bzw.
was soll daraus werden? ein Schieberegister mit 4096 Flip-Flops?
Das wäre ein sehr schlechtes Design, wenn Du nur ein FIFO
brauchst, nicht nur wegen der immensen Stromaufnahme gegenüber
2 Zeigern, die man entsprechend setzt.

Also bei einer Diplomarbeit würde ich das nicht durchgehen
lasen ;-)

von Steffen (Gast)


Lesenswert?

Ja das macht der Draus.

Stromaufnahme und Platz spielt im endeffekt keine Rolle, allerdings muß
ich dir recht geben, das es eine sehr einfache und nicht gerade
durchdachte Lösung ist.
War halt die schnellste die mir so eingefallen ist, wollte es ja erst
auch nur so testen, ob die Übertragung funzt.
dann bin ich irgendwie bei geblieben, weil ich das Problem bei der
Übertragung sah, und nicht hier.

Wegen Dipl.Arbeit hab ich mir auch gedanken darüber gemacht. Allerdings
muß ich dazu sagen das der FPGA und die VHDL Beschreibung nur ein
Kleiner Teil des Projekts ist, deswegen sollte es auch nicht so viel
aufwand sein.

Bin auch eher so das es erstmal funktionieren sollte, und danach wird
optimiert.

Gruß Steffen

PS. an meiner Variante hat mir außerdem gefallen, das ich den Fifo
jeden Takt auslesen kann, und nicht jedesmal 3 Takte benötige. Brauche
das jetzt wohl aber auch nicht mehr. Also ich werd mich mal mit den
Typischen Fifos und dem Blockram und externem Ram befassen, vielleicht
findet sich da der Baum im Wald.

Obwohl es eigentlich auch so gehen müßte, naja Danke.

von Steffen (Gast)


Lesenswert?

Oh Mann, muß echt aufm Schlauch gestanden haben, nen Fifo mit nem Ram
Schreiben ist ja voll Simpel ist mir grad eingefallen. Ist ja einfacher
als mein Kram.

Man oh Meter, manchmal fällt der Groschen aber auch spät. werd mich
morgen mal ransetzen. heute ist zu warm und schön um Abends noch im
Büro zu sitzen.
Danke an euch für meinen Erkenntnisgewinn.

Gruß Steffen

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.