Also habe ich generate-Anweisungen verwendet, um einige Oszillatoren in einer Testbench zu erstellen, an der ich gearbeitet habe.SystemVerilog weist generierten Blöcken Werte zu
Ich habe auch eine Reihe von Reals namens OSC_PER wo jedes Element im Array ist die Periode in ns für den Oszillator.
Ich habe versucht, meine Testbench arbeiten so, dass ich geben Sie einen Parameter (Anzahl der Geräte zu testen) und die Generate-Anweisungen in meiner Testbench und Simulation ausgehen, instanziieren die Module und alles verdrahten. Bisher ist das gut gelaufen, aber ich glaube, ich bin in eine Wand gerannt und habe meinen Oszillatoren die Perioden zugewiesen.
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
end
endgenerate
Also hier ist, wie ich versucht habe, die Werte zuweisen:
foreach(OSC_PER[i])
generate_my_oscillators[i].osc_c_osc.per = OSC_PER[i];
Das gibt mir einen NOTPAR Fehler; Ich denke, es ist illegal, über die Instanznummer außerhalb einer genvar-Anweisung zu iterieren. Okay, vielleicht kann ich Brute sein und legen Sie sie einfach alle aus manuell:
generate_my_oscillators[1].osc_c_osc.per = OSC_PER[1]
if(number_devices >= 2)
generate_my_oscillators[2].osc_c_osc.per = OSC_PER[2]
if(number_devices >= 3)
generate_my_oscillators[3].osc_c_osc.per = OSC_PER[3]
.
.
.
Allerdings, wenn ich number_devices haben = 2, dann auf der dritten Bedingung, bekomme ich CUVFGS (Ungültig für generieren Index), gefolgt von CUVUNF (Fehler beim Suchen des Komponentennamens für das dritte Gerät).
Wenn ich Werte habe, die ich jeder Instanz des erzeugten Oszillators zuweisen möchte, wie soll ich das machen? Ich bin an dieser Stelle etwas ratlos. Vielleicht kann ich es in der generate-for-Schleife zugewiesen bekommen?
EDIT: Ich habe ein paar mehr Dinge ausprobiert:
Wenn ich über die Definitionen von OSC_PER meiner Testumgebung bewegen und versuchen, den Wert der Periode in der generieren Anweisung wie folgt ich aufwenden erhalten zuweisen " erwartet Stichwort 'end' ":
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
.per = OSC_PER[i];
end
endgenerate
okay, ich versuchte, diese:
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
osc_c_osc.per = OSC_PER[i];
end
endgenerate
... und ich EXPLA: erwarten linke Klammer.
Zeit ist ein internes Signal in jedem osc, also kann ich es nicht als solche platzieren:
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]), .per(OSC_PER[i]);
end
endgenerate
Wenn ich das tue, ich CUVPOM erhalten: Portname ‚pro‘ ist ungültig oder mehrere Verbindungen hat.
Jetzt habe ich wirklich keine Ideen mehr. Irgendwelche Vorschläge?
Ist 'pro' ein' Parameter', 'reg' oder' wire'? – Greg
per ist ein 'real' –