C Schleife in VHDL umsetzen

OP #3503817
Lesenswert?
• ▲
▼
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);
   }
}
Persönliche Seite #3504030
Lesenswert?
• ▲
▼
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.
Moderator (Firma: Titel) Persönliche Seite #3504749
Lesenswert?
• ▲
▼
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...
(Firma: www.dossmatik.de) #3505244
Lesenswert?
• ▲
▼
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;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.