AXI-Stream Interface HLS/ VHDL

OP #7598535

Hallo liebe Leute,

ich bin ganz frisch in der FPGA-welt und stoße gerade auf eine Situation. Ich habe ADC-Werte aufgenommen und in einem FIFO-Generator IP als Zwischenspeicher gelagert. Da der FIFO-Ausgang kein AXI-Stream ist, kann ich diese Werte nicht in einem zB. DMA schreiben. Meine Frage lautet: Wie kann ich den Übergang erledigen, also von einem 16 Bits Breite kanal zu einem AXI-Stream Bus. Ich habe mehrere Beispiele gesehen und probiert aber bisher ist mir leider nicht gelungen. Anbei hänge ich ein HLS-Beispiel. Ich würde mich auf ihre Hilfe sehr freuen.

Beste Grüße

#include "ap_axi_sdata.h" #include "hls_stream.h"

#define N 512

void example(//hls::stream< ap_axis<32,2,5,6> > &A, hls::stream< ap_axis<32,2,5,6> > &B, int data_s2mm[N]) { //#pragma HLS INTERFACE axis port=A #pragma HLS INTERFACE axis port=B #pragma HLS INTERFACE mode=ap_fifo port=data_s2mm #pragma hls interface s_axilite port=return

ap_axis<32,2,5,6> tmp; int i ; while(1) { A.read(tmp); tmp.data = tmp.data.to_int() ; B.write(tmp); i = i + 1 ; if(tmp.last || i == N) { i = 0 ; break; } }

}

Angehängte Dateien:
Gast

Ohne Einsicht in diese "FIFO - Generator IP" und deren Interface wird es schwer zu beurteilen, was an deinem Code nicht funktionieren könnte. Was sagt denn die Doku dazu?

Beruk schrieb:

ADC-Werte aufgenommen

FPGAs zu programmieren scheint heute sehr komplex zu sein.

Wir haben früher(tm) die ADC-Werte einfach mit ein paar Zeilen Verilog in einen Zwischenspeicher geschoben. Dazu brauchte es einen Zähler für die SRAM-Adresse, ein Inkrement als enable, ein reset und einen Umschalter für Daten- und Adressbus, damit ein zweiter ähnlich gestalteter Teil auf aufs RAM kommt, um mit seinem Tempo an beliebiger Stelle zu lesen. Macht 50% Bandbreite für beide. Am Einschreibezähler hingen ein paar mehr Bit für die Strobes zum ADC. 20ns fürs RAM, 40ns für jeden Zugriff macht 25 MHz maximale ADC-Frequenz.

Hingeschrieben in 1h.

Wahrscheinlich ist diese Methode aber heute zu old style und nicht hip genug.

Beruk schrieb:

Hallo liebe Leute,

ich bin ganz frisch in der FPGA-welt und stoße gerade auf eine Situation. Ich habe ADC-Werte aufgenommen und in einem FIFO-Generator IP als Zwischenspeicher gelagert. Da der FIFO-Ausgang kein AXI-Stream ist,

Am besten du änderst deine ADC eingangs HDL code zu AXI stream, das sollte sehr einfach sein, man kann vielleicht den FIFO_Write direct als TVALID nehmen. Dann kannst du den ADC_AXIS mit einem AXIS FIFO verbinden, und die andere seite der AXIS FIFO geht dann als ganz normales AXIS stream in dein HLS code rein!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.