Hallo zusammen, ich hab mal ein nettes Problem für euch: ich habe mehrere Inputs vom Typ std_logic_vector und möchte die weiter verarbeiten. Das Problem dabei ist, dass die Vektoren variable Breiten haben sollen, also kann ich nicht irgendwie eine feste Begrenzung im Stile von "(7 downto 0)" machen. Leider möchten sowohl Quartus als auch Modelsim eine Festlegung der Grenzen und geben ohne diese eine entsprechende Fehlermeldung ("...is not constrained...") beim Compilieren aus, eine Deklarierung ohne Angabe der Breite ist also anscheinend nicht möglich... Hier ein Beipiel: einmal soll der Vektor "000101" als Input_A akzeptiert werden, ein anderes Mal soll z.B. der Vektor "101" als Input_A akzeptiert werden, wie muss in diesem Fall der Input_A in der Entity deklariert sein? Evtl. mit generic, aber auch hier wäre für mich die Frage, wie das da gehen soll?
Mit Generics schauts folgendermaßen aus
1 | entity var is |
2 | |
3 | generic ( |
4 | WIDTH : integer := 3); -- Breite |
5 | |
6 | port ( |
7 | ...
|
8 | vec : in std_logic_vector(WIDTH - 1 downto 0) |
9 | ... ); |
10 | |
11 | end entity var; |
und die Instanzierung
1 | signal MyVector : std_logic_vector[7 downto 0]; |
2 | |
3 | |
4 | Instanz_1: var |
5 | generic map ( |
6 | WIDTH => MyVector'length) |
7 | port map ( |
8 | ...
|
9 | vec => MyVector); |
Die Breiten der übergebenen Vektoren müssen bei der Synthese bekannt sein, weil daraus dann entsprechen viele Register, Latches usw. erzeugt werden müssen. Klaus
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.