Hallo, ich habe einen 32Bit Up/Down Counter. Bei diesem ist das Problem, dass er zwar richtig zählt, nach oben von 0xFFFFFFFF nach 0x00000000 überläuft, aber nach unten zählend nicht von 0x00000000 nach 0xFFFFFFFF unterläuft. Was ist wohl das Problem? Hier der Code-Abschnitt: ----------------------------------------- -- step counter process(INT_CLK,COUNT_RESET,STEP_UP_sig,STEP_DOWN_sig) begin if rising_edge(INT_CLK) then if COUNT_RESET = '1' then STEP_COUNT_sig <= X"00000000"; else -- no reset, count steps if STEP_UP_sig = '1' then -- count up -- at overflow, change to 0 STEP_COUNT_sig <= STEP_COUNT_sig + 1; elsif STEP_DOWN_sig = '1' then -- count down -- at underflow, change to FFFFFFFF STEP_COUNT_sig <= STEP_COUNT_sig - 1; end if; end if; end if; -- if rising_edge.. end process; ----------------------------------------- STEP_UP_sig und STEP_DOWN_sig sind die Zählimpulse. Ideen?
Hi, was hat den STEP_COUNT_sig fuer einen Datentyp? Auserdem koenntest du COUNT_RESET, STEP_UP_sig und STEP_DOWN_sig aus der Sensivitaetsliste des Prozesses rausnehmen, du reagierst intern ja sowieso nur auf eine Flanke von INT_CLK. Gruss Tobias
Der Datentyp: -- step counter signal STEP_COUNT_sig : STD_LOGIC_VECTOR(31 downto 0); Bei Underflow bleibt der Counter auf 0 stehen, geht also nicht auf 0xFFFFFFFF
nimm als Datentyp signal STEP_COUNT_sig : unsigned(31 downto 0); Dazu muss die numeric_std Lib eigebunden werden use ieee.numeric_std.all; Mit std_logic_vector arithmetisch rechnen sollte man tunlichst vermeiden. Um das Zählsignal an die Ausgänge zu leiten (die ja bestimmt std_logic_vector) sind, kann man dann einfach eine Typcastung vornehmen mit std_logic_vector(STEP_COUNT_sig); T.M.
Hallo, und wie kann man dann auf einen Zählerwert triggern? if STEP_COUNT_SIG = "11111111" then .... bringt eine Fehlermeldung. Mfg,Dirk
Liegt vielleicht daran, dass der Vector 32 Bit hast, Du ihn aber nur mit 8 Bit fütterst.
Hallo, natürlich darf IEEE.STD_LOGIC_ARITH.ALL; nicht mehr genutzt werden. Dirk
Danke für die Unterstützung. Mit der von T.M. vorgeschlagenen Variante läuft es nun sauber. Ich hatte auch noch ein Problem in der Testbench, wahrscheinlich wäre auch die ursprüngliche Variante mit STD_LOGIC_VECTOR zum laufen gekommen. Das Thema ist für mich somit abgeschlossen. Nochmals Danke!
Hi, ich hab gestern ein Generic Counter mit UP / Down Funktion beschrieben ohne Natural Integer Unsigned (nur std_logic_vector) und konnte deinen Fehler nicht reproduzieren. Liegt es vielleicht daran das ich die Lib unsigned trotzdem mits aufrufe? Regards, Dirk
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.