Hallo,
TLDR: Hat es schon mal jemand geschafft für einen synchronen xpm AXI-Stream FIFO URAM zu verwenden; und wenn ja, wie?
Ich verwende für ein Xilinx US+-Design die RAM/FIFO-Templates aus der Xilinx XPM-Library [1] [2]. Das funktioniert soweit.
Nun hat US+ sowohl 4K BRAM als auch größere 32K URAM. Für große RAMs/FIFOs möchte ich gern, dass Vivado URAMs instanziiert. Für URAM muss der Speicherausgang mehrere Pipelinestufen haben.
Für RAMs hat das xpm-template ein generic READ_LATENCY, welches automatisch Register am Ausgang einfügt.
Das AXIS-FIFO xpm hat keinen generic, um Register einzufügen (abgesehen von CDC_STAGES für async FIFOs). Ich habe entsprechend versucht, selbst Register an den AXIS tdata-Ausgang und tvalid hinzuzufügen. (tready wird kombinatorisch zurückgegereicht). Allerdings erkennt Vivado das nicht als Pipelinestufen, die es für den URAM nehmen kann, die Meldung ist
" INFO: [Synth 8-6793] RAM (testram) is implemented using BRAM instead of URAM due to insufficient pipeline registers. Available pipeline stages = 0, Minimum required pipeline stages = 1 "
Es könnte nun entweder sein, dass das xpm-template selbst dazu führt, dass eine externe Pipeline am Ausgang nichts nützt (weil da drin z.B. wegen AXI-Stream-Handshake verschiedene Ausgangsregister gemuxt werden und deswegen keine lineare Pipeline intern vorhanden ist). Oder es könnte sein, dass ich das einfach anders machen muss. Evtl. kann da jemand helfen?
Um die Bedingung nochmal zu wiederholen: ich möchte das xpm-template verwenden. Andere Lösungsansätze ohne xpm sind mir klar.
[1] https://docs.xilinx.com/r/en-US/ug974-vivado-ultrascale-libraries/XPM_MEMORY_SPRAM
[2] https://docs.xilinx.com/r/en-US/ug974-vivado-ultrascale-libraries/XPM_FIFO_AXIS