2016-03-18 12 views
0

Obwohl es aus der Forschung unmöglich scheint: Passing parameter to xci corePass Parameter während der Instanziierung von IP-Core in vivado

Ich bin der Gestaltung eines benutzerdefinierten Kern, der eine Instanz eines Xilinx-FIFO verwendet. Das oberste Modul weist jedoch Parameter auf, die im IP Packager verfügbar gemacht werden, und sollte den enthaltenen FIFO-Kern ändern.

module top(); 
parameter C_FIFO_DEPTH = 256 
xilinx_fifo_core #(
    .FIFO_DEPTH(C_FIFO_DEPTH) 
) my_fifo_instance (...); 

diese Weise, wenn jemand mein Modul instanziiert, indem Parameter C_FIFO_DEPTH überschreiben, ändern sie auch die Tiefe des eingebetteten FIFO.

Obwohl dies für vom Benutzer geschriebene Module funktionieren würde, funktioniert es nicht für Instanzen von IP-Kernen (xci), die nur über die "Customize IP" -Gu konfigurierbar zu sein scheinen.

Ich habe deaktiviert Out-of-Context-Generation, aber immer noch keine Würfel.

Ich arbeite derzeit an einer (sehr chaotischen) Lösung mit tcl-Skripten im Paketkern, aber eine elegante Lösung wird dringend benötigt.

Antwort

1

kann ich mir keinen elegante Lösung, aber hier sind drei weitere unordentlich diejenigen:

(1) nur die größte FIFO verwenden Sie jemals brauchen werden. (Offensichtlich eine Verschwendung von Fläche.)

(2) Erstellen Sie eine Reihe von FIFOs in verschiedenen Größen und verwenden Sie generate case, um die richtige zu wählen. (Nur gut, wenn der Bereich nützlicher Größen angemessen begrenzt ist.)

(3) Verwenden Sie keinen IP-Block - entwerfen Sie Ihren eigenen FIFO. (Sie haben wahrscheinlich daran gedacht.)

+0

Vielen Dank für Ihre Antwort! 1.) Verschwendung von Fläche UND wird zu anderen Problemen führen - in meinem Fall kann diese * kommerziell genutzt werden. 2.) Verschiedene Größen wären gut, wenn sie diskret und spezifisch wären. Es gibt jedoch den Fall, dass sich auch die ** Breite ** ändern kann, was zu zu vielen Kombinationen und Möglichkeiten führt. 3.) Bester Fall, aber verschiebt nur das Problem. Erstelle ich alle IP-Blöcke, die ich verwenden werde? – GCon

+0

@GCon Ich sehe nicht, wie (3) das Problem verschiebt. Wenn Ihr FIFO groß genug ist, um einen RAM zu benötigen, stellen Sie sicher, dass Sie es in einem Stil codieren, so dass Vivado einen RAM ableitet. Ich sehe nicht, warum es notwendig ist, einen IP-Block überhaupt zu verwenden. –

+0

Sorry, wenn ich feindselig zu sein schien; Ich arbeite seit Tagen daran. Was ich meinte war, dass, obwohl Sie möglicherweise einen FIFO-Kern entwerfen können und keine Xilinx verwenden, dies ziemlich ineffizient wäre, wenn Sie ein benutzerdefiniertes HDL für alle von Ihnen verwendeten IP-Kerne entwerfen müssen. Von was ich aber verstehe, ist deine Antwort so nah wie möglich. Verwenden Sie entweder TCL, um Änderungen am übergeordneten Kern (dem benutzerdefinierten Kern) vorzunehmen, der die untergeordnete IP (FIFO) mit den geänderten Parametern neu paketiert, oder verwenden Sie einen benutzerdefinierten Kern (Ihren Vorschlag). Da es an diesem Problem keinen Weg gibt, akzeptiere ich Ihren Vorschlag als Antwort. – GCon