Forum: FPGA, VHDL & Co. AXI-Stream Interface HLS/ VHDL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Beruk (manitou)


Angehängte Dateien:

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


}

von Bernd G. (Gast)


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.

von Antti L. (trioflex)


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!

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
Noch kein Account? Hier anmelden.