Hallo zusammen, ich möchte gerne eine for generate Loop bauen, in der ich bestimmte Componenten zusammenknote. Ich möchte jedoch nicht einen Index I von 0 bis ... verwenden, sondern nur bestimmte Werte, z.B. 1,3,6,8. Ist dies in VHDL irgendwie möglich? Bisher war meine meine Websuche diesbezüglich leider erfolglos. Viele Grüße Marfel
Klingt nach LTC2175 oder LTM9011. Hab ich damals aber auch nicht gefunden als ich die Receiver für die ADCs geschrieben habe. Das scheint es nicht so direkt zu geben.
Marfel schrieb: > ich möchte gerne eine for generate Loop bauen, in der ich bestimmte > Componenten zusammenknote. > Ich möchte jedoch nicht einen Index I von 0 bis ... verwenden, sondern > nur bestimmte Werte, z.B. 1,3,6,8. > > Ist dies in VHDL irgendwie möglich? Schleife über einen Aufzählungstyp resp array über range ist möglich, also
1 | label_gen: for i in index_enum generate |
2 | //..
|
3 | end generate; |
Ist jetz nur die Frage wie man den Index bspw als enumeration definiert. http://vhdl.renerta.com/mobile/source/vhd00026.htm Der klassische Fall sind die Zustände einer FSM
1 | type enum_state is (OANS,ZWOA,DREIER); |
Denen kannst du jetzt eine Zahl im Enumeration encoding zuweisen: Example 2: http://fpgacenter.com/vhdl_dic/enumar.php Damit sollte es gehen. Ob man integer in ein Aufzählungstyp packen kann, also:
1 | type enum_by_numbers is (1,3,6,8); |
musst du selbst ausprobieren. Was geht ist auch ein range als index, alse
1 | subtype index_range is integer range 8 downto 0; |
aber da stecken dann auch Zahlen drin du du nicht dabei wolltest. MfG,
Kannst du nicht die Werte in einem Vector spechern und die nutzen ? (Ich kenne nur Verilog) Oder eine Funktion nutzen die die Werte berechnet ? or ein python Skript das dir generierte code raus spuckt ? Edit: Ops, ich sehe daß Fpgaküchle hat schon Änliche Lösungen...
:
Bearbeitet durch User
Marfel schrieb: > Ist dies in VHDL irgendwie möglich? Solange das nur ein paar einzelne Werte sind, würde ich es pragmatisch mit geschachtelten generate-Anweisungen angehen:
1 | GENERATE_LOOP: for I in 0 to 8 generate |
2 | GENERATE_CONDITION: if (i=1 or i=3 or i=6 or i=8) generate |
3 | REGX : REG port map (...) |
4 | end generate GENERATE_CONDITION; |
5 | end generate GENERATE_LOOP; |
EDIT: Pech, Zweiter... ;-)
:
Bearbeitet durch Moderator
wie wäre es damit type int_array is array(integer range <>) of integer; constant arr : int_array(0 to 3) := (1,3,6,8); gen_loop: for i in arr'range generate report arr(i); end generate;
user schrieb: > wie wäre es damit Das hatte ich auch im Sinn, der signifikante Nachteil dabei ist, dass die Werte, für die der Generate durchgeführt wird, abseits des eigentlichen Generate stehen und so m.E. die Übersicht leidet.
Hallo zusammen, vielen Dank für die Antworten! Im aktuellen Projekt haben wir eine zentrale Konfigurationsstelle, sodass die Lösung von user konzeptionell ganz gut reinpassen würde. Ein Nachteil der geschachtelten generate loop ist, dass ich beim Simulieren eine zusätzliche Ebene in den Signalnamen erhalte. Dies würde ich zumindest erwarten, ohne es bisher getestet zu haben. Marfel
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.