mikrocontroller.net

Forum: FPGA, VHDL & Co. integer und case


Autor: der Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: der Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht noch ein Zusatz:

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

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

mux: process begin
(..)
    case s_sel is
  when "00" => 
  when others => 
    end case;

    s_sel <= s_sel + 1;
    if( to_integer(s_sel) >= STELLEN) then
  s_sel <= (others=>'0');
    end if;
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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.