Vektoren variabler Breite?

Gast #510274
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?
#510343
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren