Forum: FPGA, VHDL & Co. Vektoren variabler Breite?


von Ben (Gast)


Lesenswert?

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?

von Klaus F. (kfalser)


Lesenswert?

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

von Ben (Gast)


Lesenswert?

Vielen Dank! Scheint gut zu funktionieren!

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
Noch kein Account? Hier anmelden.