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!!
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?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.