www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Test Applikation für UDP/IP Core


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze den UDP/IP Core von Opencores.org (auch hier zu finden: 
http://wwwkramer.in.tum.de/exelixis/software.html)

Mein Problem ist, eine minimale Testapplikation für eine "best effort" 
Übertragung FPGA->PC zu bauen. Momentan sieht das Modul, das direkt am 
UDP-Core hängt und möglichst schnell immer die gleichen Daten übertragen 
soll, wie folgt aus:

send_proc : process (ctrl_clk)
  begin
  if rising_edge(ctrl_clk) then
    if ctrl_reset = '0' then -- global reset
        datagram_length <= MAX_DGRAM_LENGTH;
        if cnt < datagram_length then
          if ctrl_tx_phase_on = '1' then
            dgram_sent <= '0';
            ctrl_tx_data_out <= "01010101";
            cnt <= cnt + 1;
          else
            cnt <= 0;
          end if;
        else
          dgram_sent <= '1';
          cnt <= 0;
        end if;
    end if; -- reset
  end if; --clk
  end process send_proc;

  enable_proc : process(ctrl_clk)--frame_buf_valid, cnt)
    variable i : integer := 0;
    variable k : integer := 0;
  begin
    if rising_edge(ctrl_clk) then
      if dgram_sent = '1' and i = 0 then
        if k < 100000 then
          k := k + 1;
        else
          i := i + 1;
          ctrl_tx_start_enable <= '1';
        end if;
      else
        k := 0;
        i := 0;
        ctrl_tx_start_enable <= '0';
      end if;
    end if;
  end process enable_proc;

Im Sendeprocess wird einfach immer das gleiche UDP-Datagramm geschickt 
und im enable Prozess wird das start-enable zum UDP-Core gesetzt, wenn 
ein neues Datagram gesendet werden kann. Außerdem habe ich dort mithilfe 
der variable k ein delay zwischen 2 Datagrammen eingebaut - damit 
funktioniert die Übertragung fehlerfrei. Wenn ich dieses delay weglasse 
(-> best effort), kann ich fehlerhafte Datagramme in Wireshark 
beobachten, was konkret heißt, dass in der payload nicht die korrekte 
anzahl an datanbytes ist (i.d.R. immer zu wenige datenbytes vorhanden).
Kann mir jemand einen Tipp geben wo mein Fehler liegt bzw. wie man so 
eine Funktionalität richtig angeht?
Auf PC-Seite habe ich für den Empfang einfach ein C-Programm mit einem 
UDP Socket und recvfrom() in einer Endlosschleife.

Besten Dank im Voraus!
Sebastian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.