Hallo Forum, ich habe folgende C-Code und möchte diesen in VHDL umsetzen und auf meinem DE2-115 Board laufen lassen. Bei dem Code handelt es sich um eine for-Schleife bei der eine Variable bis zu einem bestimmten Wert erhöht wird. Die Laufvariable wird mit einem Offset erhöht (0x80) und als Adresse genutzt, um aus einem Fifo etwas auszulesen. Danach muss der Offset gleich wieder abgezogen werden. Das folgende Programm benötigt diese Anweisung so. Ist nicht veränderbar. In C, weis ich das dies sequentiell abgearbeitet wird, und somit kein Problem darstellt, aber in VHDL, wenn ich diese Berechnungen einem Signal zuweise wird nur die letzte Zuweisung am Ende eines Processes übernommen. Hat einer von euch einen Tip wie ich das realisieren kann, das beim einem Takt erst der Wert + Offset einem Signal zugewiesen wird und beim nächsten Takt, dann der nächste Wert. Vielen Dank. jetzt noch der C-Code: void fifo_read(int* pArr) { for(addr =0; addr <= fifo_length; addr++) { pio_data(fifo_address, 0x80 + addr); pio_data(fifo_adress, 0x00); pArr[addr] = io_data(data); } }
if addr < fifo_lenght then addr <= addr+1; end if; Das wird dann so aber in jedem Takt gemacht. Also keine Ahnung wie schnell Du lesen/schreiben kannst. Andre Schlurch schrieb: > Das folgende Programm benötigt diese Anweisung so. In C vielleicht, in VHDL sieht das vermutlich schon ganz anders aus ... mehr Informationen wären schon nicht schlecht.
Andre Schlurch schrieb: > Das folgende Programm benötigt diese Anweisung so. Was für ein Programm? Oder meinst du die darauf folgende Hardware? Auf FPGAs laufen in der Regel keine Programme, es sei denn du beschreibst einen Prozessor im FPGA, auf den dann ein Programm läuft. Aus deinem Code werde ich nicht schlau. Was ist der Unterschied zwischen fifo_address und fifo_adress? Oder zwischen pio_data und io_data? Und wo kommt data her? Andre Schlurch schrieb im Beitrag #3504002: > wenn ich das > gleiche Signal mit zwei unterschiedlichen Werten beschreibe Grindguakn hat schon recht, musst in Hardware denken. Was du in VHDL beschreibst muss in Hardware umgesetzt werden. Was du innerhalb eines Prozesses beschreibst ist eine Schaltung und die kann von sich aus nicht zwei Werte hintereinander ausgeben. Das geht z.B. nur wenn du deine Schaltung taktest. Mit jeden Takt wird ein neuer Wert berechnet, der dann bis zum nächsten Takt gültig ist.
:
Bearbeitet durch User
Andre Schlurch schrieb: > Hat einer von euch einen Tip wie ich das realisieren kann, das beim > einem Takt erst der Wert + Offset einem Signal zugewiesen wird und beim > nächsten Takt, dann der nächste Wert. Vielen Dank. Du brauchst einen Zustandsautomaten. Wenn du es geschickt machst, reicht der Zähler als Automat aus (Zähler sind nämlich schon die einfachsten FSM, die es gibt...). Aber ich würde mal vorschlagen, du zeichnest erst mal ein zeitliches Ablausdriagramm, wass wann von wo geholt wird und nach wo geschrieben wird, aus dem C-Schnipsel wird das nicht so ganz klar...
zufällig habe ich eine ähnlichen Prozess bei mir gefunden. Lesen sieht genaus aus. Nur andersherum die Datenzuweisung data_out<=fifo_ram(to_integer(waddr)); process(wclk) begin if wclk'event and wclk = '1' then if reset = '1' then waddr <= (others => '0'); elsif wr = '1' then fifo_ram(to_integer(waddr)) <= data_in; waddr <= waddr+1; end if; end if; end process;
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.