Gibt es eine Möglichkeit ein VHDL-Modul so zu deklarieren, dass man an den Eingang sowohl einen std_logic_vector mit variabler Breite als auch ein std_logic Signal anschließen kann. Generics können nach Außen keine Verwendung finden, da das Modul in einem Top-Level-Schematic eingebunden ist. Also ähnlich wie bei Funktionen, nur eben als Modul.
> Generics können nach Außen keine Verwendung finden, > da das Modul in einem Top-Level-Schematic eingebunden ist. Du könntest es trotzdem als Generic schreiben und für konkrete Instanzen je einen nicht-generic-Wrapper schreiben. Ansonsten hängt es ganz von den Fähigkeiten des konkreten Schematic-Editors ab.
> Du könntest es trotzdem als Generic schreiben und für konkrete Instanzen > je einen nicht-generic-Wrapper schreiben. ... Sehr unschön. Das geht natürlich, der Aufwand ist aber nicht sehr schön. Eine andere Lösung gibt es nicht?
> Eine andere Lösung gibt es nicht?
Wie schon gesagt, das hängt ganz von den Features des Schematic-Editors
ab, und wie der mit Vektoren ohne Größenangaben bzw. generics umgeht.
Die Wrapper sind halt die einzige Möglichkeit, die mir einfällt, die mit
jedem Schematic-Editor kann.
@Matthias G.: Ein std_logic_vector(0 downto 0) gefällt Dir wohl nicht? Duke
> Ein std_logic_vector(0 downto 0) gefällt Dir wohl nicht?
Das in der Portdliste bedeutet ja trotzdem, dass ich nur ein
std_logic_vector(0 downto 0) anschließen kann (ev. klappt das auch mit
std_logic) aber ich will ja auch beispielsweise ein std_logic_vector(3
downto 0) anschließen ohne ein neues Modul zu generieren.
Ich verstehe dein Argument gegen generics nicht. Warum kannst du die nicht verwenden?
1 | generic( |
2 | breite : integer: |
3 | );
|
4 | port( |
5 | port : std_logic_vector(breite-1 downto 0); |
6 | );
|
7 | |
8 | |
9 | signal signal_0 : std_logic; |
10 | signal signal_3 : std_logic_vector(2 downto 0); |
Dort kannst du dann die Breite einstellen und ein Signal der jeweils passenden Breite anschliessen:
1 | generic map(breite => 1) port map (port(0) <= signal_0); |
2 | generic map(breite => 3) port map (port <= signal_3); |
> Ich verstehe dein Argument gegen generics nicht. Warum kannst du die > nicht verwenden? Ich habe nichts gegen Generics, wie aber schon erwähnt sollen die Module in einem Top-Level-Schematic eingebunden werden. Dort sind Generics leider nicht möglich.
Ach, schematics mal wieder... sorry, damit habe ich keine Erfahrungen. Diese Variante hast du aber schon ausprobiert?
1 | sel_in: in std_logic_vector; |
Mein kurzer Test in ise sieht so aus, als ob du da jetzt jeden beliebigen Vektor anschließen könntest - std_logic geht allerdings trotzdem nicht, signal(0 downto 0) hingegen schon.
Sollte sowas funktionieren, dass im Portmap ein std_logic_vector ohne Längendefinition verwendet werden kann? So z.B.:
1 | entity modul is port |
2 | (
|
3 | in_vector : in std_logic_vector; |
4 | out_vector : out std_logic_vector((in_vector'length - 1) downto 0); |
5 | :
|
6 | );
|
7 | end modul; |
8 | architecture behavior of modul is |
9 | begin
|
10 | modul_proc: process(clk) |
11 | begin
|
12 | if rising_edge(clk) then |
13 | out_vector <= in_vector; |
14 | endif; |
15 | endif; |
16 | end process; |
Hallo zusammen, nochmal die Frage: Funktioniert der obige Code, bzw. ist so was zulässig?
Nein, du kannst die Länge von out_vector nicht als Funktion von in_vector angeben. Wenn schon, dann musst Du die Länge bei out_vector auch weglassen. Im Prinzip kann man bei VHDL schon unconstraint arrays in den ports verwenden, aber was XST bei der Synthese macht, weiss ich nicht. Wahrscheinlich akzeptiert es die VHDL Synthese aber nicht. Die wenigsten arbeiten noch mit Schematics, deshalb können dir hier wahrscheinlich wenige helfen. In den 2 Tagen zwischen deinen Anfragen hättest Du es ja selbst einmal probieren können ...
Hallo Klaus, danke für Deine Antwort. > Die wenigsten arbeiten noch mit Schematics, deshalb können dir hier > wahrscheinlich wenige helfen. Schematics sind als Topsheets bzw. für größere Blöcke durchaus sehr praktisch, da sie eine gute Übersicht über die Zusammenhänge der Module liefern. Sie sind damit auch gleichzeitig ein Stück Dokumentation und tragen zum Verständnis bei. Allerdings empfehle ich davon abstand zu nehmen komplexere Schaltungen eines FPGAs als Schematic auszuführen. > In den 2 Tagen zwischen deinen Anfragen hättest Du es ja selbst einmal > probieren können ... Ja und nein. Leider habe ich schon mehrfach erlebt, dass einige Tools Dinge akzeptieren, die allerdings am Standard vorbei gehen. Dies führt immer wieder zu problemen. Deshalb ist es mir lieber es kann jemand eine fundierte Aussage machen.
Jan M. wrote: > Ach, schematics mal wieder... sorry, damit habe ich keine Erfahrungen. > Diese Variante hast du aber schon ausprobiert? >
1 | sel_in: in std_logic_vector; |
> Mein kurzer Test in ise sieht so aus, als ob du da jetzt jeden > beliebigen Vektor anschließen könntest Mit Vektoren ohne Längenangabe in der Entität arbeite ich seit Jahren. Das geht sowohl in der ISE/Actel Libero als auch Modelsim. Nur
1 | sel_in <= (others => '0'); |
geht nicht. Aber dafür gibt es das range Attribut. Tom
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.