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


von Alex (Gast)


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

von AxelMeineke (Gast)


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 :-)

von Hagen (Gast)


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

von AxelMeineke (Gast)


Lesenswert?

Jupp, so meinte ich das... danke Hagen

von Alexander Mundry (Gast)


Lesenswert?

Danke für die Antworten.

Probiers gleich mal aus!

Gruß
Alex

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.