AXI-Stream Interface HLS/ VHDL

OP #7598535
Lesenswert?

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 #7598620
Lesenswert?

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.

#7598673
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren