www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL Typumwand. 4stell. Integerzahl in 4 einstell. Intzahlen


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bräuchte wieder mal eure Hilfe. Ich habe einen 4-stellige
Integer-Zähler definiert:

signal Count : integer range 9999 downto 0 := 0;

Dieser Integer-Wert soll anschließend in 4 einstellige Integerzahlen
umgewandelt werden:

signal EinstellInt : integer range 9 downto 0 := 0;

z. B.: 7653 => '7'  '6'  '5'  '3'

Wie kann ich die Umwandlung vornehen?

Mit einfachem Dividieren durch 1000/100/10 funktionierts leider nicht!

Gruß
Alex

Autor: AxelMeineke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Na ich bin ja auch nicht grad der Profi schlechthin, aber ich habe das
mit einer statemachine gemacht. Dabei zähle ich einfach einen counter
je um eins hoch. im ersten State zähle ih bin 9 hoch. Im nächsten
schritt zählt er dann im nächsten State die nächste variable um eins
hoch und geht anschliessend wieder in state 1 bis er wieder 9 erreicht
hat. wenn er im State 2 (für die zehnerstellen also),) den wert 9
erreicht hat geht er in state 3 und zählt den hunderter einen hoch.
Dannach springt er wieder in state 1. usw.
Das soll er machen, bis der counter den gleichen wert wie den
anzuzeigenden hat. Ich habe den Code leider grad nicht hier. Wenn du
aber die unprofessionelle Lösung haben willst stelle ich sie hier mal
ins Forum. Ich denke aber am besten wirds mit einer Funktion klappen.
Da habe ich aber keine Lösung für.

Hammer das hab ich irgendwie saublöde beschrieben... na der Code folgt
heute abend, wenn nicht bis dahin der "FPGA-User" die perfekte Lösung
präsentiert hat :-)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde ich aus so machen.

Also statt einem binärem Counter: integer Range 9999 downto 0. benutzt
du für jede Dezimale Stelle einen Counter oder eventuell einen Ripple
Counter.

signal Count10,Count100,Count1000,Count1000: integer range 9 downto 0;

process(Clock)
begin
  if rising_edge(Clock) then
    if Count10 < 9 then
      Count10 <= Count10 +1;
    else
      Count10 <= 0;
      if Count100 < 9 then
        Count100 <= Count100 +1;
      else
        Count100 <= 0;
        if Count1000 < 9 then
          Count1000 <= Count1000 +1;
        else
          Count1000 <= 0;
          if Count10000 < 9 then
            Count10000 <= Count1000 +1;
          else
            Count10000 <= 0;
          end if;
        end if;
      end if;
    end if;
  end if;
end process;

Decimal <= conv_std_logic_vector(Count10000, 4) &
conv_std_logic_vector(Count1000, 4) & conv_std_logic_vector(Count100,
4) & conv_std_logic_vector(Count10, 4);

Decimal : std_logic_vector(4*4-1 downto 0);

Gruß Hagen

Autor: AxelMeineke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp, so meinte ich das... danke Hagen

Autor: Alexander Mundry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.

Probiers gleich mal aus!

Gruß
Alex

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.