Zugriff auf Verilog Genvar generierte Instanzen im Simulationscode
-
27-10-2019 - |
Frage
Dies ist eine Verilog -Related -Frage. Ich arbeite mit Xilinx ISE als Entwicklerumgebung.
Ich versuche, in der Simulation, die automatisch mit Genvar generiert werden
Problembeispiel:
genvar i;
generate
for(i=0; i < N; i=i+1)
begin:Sys_Modules
TypeXModule #(.width(10)) xmod(.dataY(dataY)));
end
endgenerate
Wenn ich die Synthese oder Simulation betrug, kann ich sehen, dass sys_modules [0..n-1] .xmod-Instanzen erstellt werden.
Wenn ich versuche, der Simulation eine Zeile hinzuzufügen, die auf das Sys_Modules -Array zugreift:
Sys_modules [i] .xmod.datay
Ich bekomme den folgenden Fehler:
HdlCompiler: 71 Datay wird nicht unter Präfix XMOD deklariert
Gibt es eine Möglichkeit, in der Simulation automatisch generierte Werte zuzugreifen?
Vielen Dank!
Lösung
Es ist legal, einen hierarchischen Verweis auf eine generierte Instanz zu schreiben. Die Funktionalität ist in den Abschnitten 2.7.2 und 12.1.3 des IEEE Verilog -Standards beschrieben. Das Instanz -Index muss jedoch konstant sein, sodass es zum Kompilierungszeit gelöst werden kann.
Andere Tipps
Sie können hierarchische Referenzen für Cross-Instance in synthetisiertem Verilog nicht verwenden.
Ich denke, Sie haben kein Glück. Simulatoren scheinen nicht mögliche Referenzen (OMRs) zu mögen, die in generierte Blöcke zeigen, wie Sie entdeckt haben.
Ich habe kürzlich auf ein ähnliches Problem gestoßen, als ich einen Parameterizable TestBench Monitor erstellt habe. Ich würde eine variable Anzahl von Unterblockern je nach a instanziiert parameter
. In diesem Zusammenhang musste ich ein Toplevel haben .start()
Aufgabe, die die nannte .start()
Aufgaben in jedem der instanziierten Module. Ich konnte keine benutzen for
Schleife, um dies wegen dieses OOMR -Problems zu tun.
Also musste ich:
- definieren a
reg
das das Toplevel.start()
Aufgabe umgeschaltet - Schreib 'ein
always @
Block ausgelöst daraufreg
- schreiben Ein weiterer
generate
Abschnitt innerhalb dieses Blocks immer zu rufen.start()
auf jedem der Submodules.
Wenn Sie wirklich in Ihre sehen müssen generate
D Module, vielleicht könnten Sie eine Problemumgehung wie oben ausprobieren? Haben Sie beispielsweise einen Bus im Toplevel und verwenden Sie agenerate
Aussage zum Blick in Ihr Original generate
D Instanziationen zum Kopieren/Zuweisen interessanter Signale in diesen Toplevel -Bus.