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; } } }
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!
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.