Forum: FPGA, VHDL & Co. integer und case


von der Steff (Gast)


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!!

von der Steff (Gast)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Also den Weg von 3 Stellen -> 2 bits allgemein STELLEN -> x bit?
Das wäre ein Logarithmus zur Basis 2 aufgerundet auf die nächste 
Ganzzahl...
Beitrag "Re: VHDL: aufrunden log2(n)"
http://www.alteraforum.com/forum/showthread.php?t=1702

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.