Hallo! In VHDL gibt es ja die Möglichkeit, mittels einer generate-Anweisung eine zunächst dynamische Anzahl von Entitäten zu instantiieren. Das funktioniert soweit ganz gut. Aber: Ist es auch möglich eine beliebige Anzahl n von Signalen auf ähnliche Weise zu generieren? Danach habe ich schon mehrmals vergeblich gesucht. Z.B. würde ich gerne wenn n ein generischer Parameter ist, damit dann n Signale vom Typ std_logic_vector(BitWidths(n)-1 downto 0) erzeugen. Wenn ich keinen Weg dafür finde, muß ich alle n Signale hintereinander in ein Signal stecken, aber das ich natürlich sehr unpraktisch. Besonders, um ein einzelnes Signal beim simulieren zu betrachten. Ich würde mich sehr freuen, wenn mir hierbei jemand weiterhelfen kann und bedanke mich im voraus, viele Grüße Hardware-Beschreiber
Du kannst einen array-Typ definieren und die Größe des arrays mit n festlegen.
Hallo Jan! Ja, so ist es ja bis jetzt. Aber ich will mit der neuen Lösung den Vektoren unterschieliche Bitbreiten zuweisen, die z.B. aus einer Datei ausgelesen werden. Dazu müßte ich Signale ähnlich wie Entitäten generieren können, weiß aber nicht ob und wie das geht. Gruß Hardware-Beschreiber
Ich meine das geht nicht, du kannst aber glaube ich mit 'alias' einzelne Teile eines Vektor neu "benennen".
Das habe ich befürchtet. Oder kennt doch noch jemand einen Weg? alias kann man wahrscheinlich auch nur manuell verwenden, also nicht generisch N Signale mit sig1 ... sigN ausweisen? Gruß Hardware-Beschreiber
@Hardware-Beschreiber: Vielleicht möchtest Du records verwenden? Die lassen sich zwar auch nicht generisch erzeugen, aber wenn in der entity nur noch clk, rst, module_in, module_out auftauchen, wird es (zumindest an dieser Stelle) übersichtilich. Modelsim kennt dann im waveform auch die einzelnen record-Elemente ohne das man sie explizit angeben müsste. Duke
@Hardware-Beschreiber: P.S.: Es bleibt Dir auch immer noch freigestellt mit einer Programmier/Skriptsprache Deiner Wahl einen Codegenerator zu erstellen.
Definier dein signal array mit
1 | std_logic_vector(MaxBitWidths-1 downto 0) |
Bei der instantierung kannst du dann folgendes verwenden: port => sig_array(n)(BitWidths(n)-1 downto 0) Gruß, Ottmar
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.