Hallo zusammen, momentan muss/darf ich mich gerade in die CPLD - programmierung mit VHDL - einarbeiten. Dazu verwende ich die ISE von Xilinx und das CoolRunner II - Design Kit. Als ersten Test habe ich einen Zähler programmiert, der sich bei einem bestimmten Zählerstand resettet. Das Programm funktioniert soweit, allerdings gibt ab und zu "Fehler" bei dem LSB im Moment des resettens (rote Markierung im Analyzer - Bild). Kann mir jemand erklären, woher diese rühren und wie ich diese vermeiden kann? Hier mein Programm: library IEEE; use IEEE.std_logic_1164.all; -- defines std_logic types use ieee.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity jc2_top is port ( CLK : in STD_LOGIC; Q : inout STD_LOGIC_VECTOR (11 downto 0) := "000000000000" ); end jc2_top; architecture jc2_top_arch of jc2_top is signal QINT : std_logic_vector (11 downto 0) := "000000000000"; begin process (CLK) begin if (CLK'event and CLK='1') then -- CLK rising edge QINT <= QINT + 1; end if; if (QINT > "000000001010") then -- reset QINT <= "000000000000"; end if; end process; Q <= QINT; end jc2_top_arch;
Schiebe mal die Umschaltoperation in den geclockte Teil hinein, daß das ein vernüftiges Register ist.
@Jürgen Schuhmacher: Könntest du mir das bitte etwas genauer erklären? Was (bzw. wo) ist der gelockte Teil?
Hi, [vhdl] library IEEE; use IEEE.std_logic_1164.all; -- defines std_logic types use ieee.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity jc2_top is port ( CLK : in STD_LOGIC; Q : inout STD_LOGIC_VECTOR (11 downto 0) := "000000000000" ); end jc2_top; architecture jc2_top_arch of jc2_top is signal QINT : std_logic_vector (11 downto 0) := "000000000000"; begin process (CLK) begin if (CLK'event and CLK='1') then -- CLK rising edge QINT <= QINT + 1; if (QINT > "000000001010") then -- reset QINT <= "000000000000"; end if; end if; end process; Q <= QINT; end jc2_top_arch;
Super, danke, das hat funktioniert (ich musste nur zu meinem Bitmuster '1' addieren, um das selbe Zählergebnis zu erhalten). Die Störungen sind aber weg. Könnte mir aber bitte noch jemand den Unterschied zwischen den beiden Varianten erklären?
Die erste Variante dürfte den Zählerstand auch zurücksetzen, wenn eine fallende Clock-Flanke kommt (Gibt es noch weitere CLK'Events?). Die zweite Variante reagiert nur bei der steigenden Flanke. Rick
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.