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