integer und case

Gast #1558114
Lesenswert?

Eine Frage zum case Konstrukt habe ich. Wenn ich in einem Prozess einen 
Mux bauen will, geht das ja u.A. mit case...when.
Benutze ich als Auswahlkriterium einen unsigned Vektor funktioniert es. 
Ich habe nun probiert einen integer zu benutzen und dabei bin ich 
gescheitert.
Wenn ich den integer durch unsigned(int, breite) caste, hätte ich 
erwartet, daß das geht - ergibt aber die Fehlermeldung " Array select 
expression is not constrained."

Wie mache ich das, daß ich für einen Mux ein integer Signal benutzen 
kann? Der Grund ist, daß ich aus unterschiedlich langen Worten (generic 
soll es richten) immer 4 bit nibble multiplexen will und ein integer 
range 0 to 3 (für 3 Nibble, also 24 bit Wort) würde ja automatisch 
rundlaufen bei increment und zudem den Vorteil bieten, später als Index 
in irgendwas benutzt werden zu können ohne cast.

Oder ist es sinnfrei über integer zu machen und ich bleibe bei einem 
unsigned Vektor, den ich ggf. bei 3 zu fuß umbrechen lasse. (Was doch 
auch casts auf integer bedürfen würde?)

danke euch!!
Gast #1558144
Lesenswert?

Vielleicht noch ein Zusatz:

angenommen der unsigned Vektor ist zu empfehlen:
1
entity probe is
2
 generic(STELLEN : natural := 2);
3
 (..)
4
end probe;
5

6
architecture Behavioral of probe is
7
(...)
8
 signal s_sel: unsigned(1 downto 0) := (others=>'0');
9
(...)
10

11
mux: process begin
12
(..)
13
    case s_sel is
14
  when "00" => 
15
  when others => 
16
    end case;
17

18
    s_sel <= s_sel + 1;
19
    if( to_integer(s_sel) >= STELLEN) then
20
  s_sel <= (others=>'0');
21
    end if;
22
end process

Wie berechne ich dann am besten, wie breit s_sel sein muss? Also den Weg 
von 3 Stellen -> 2 bits allgemein STELLEN -> x bit?

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