Problem bei Zähler mit Reset - Bedingung

Gast #418524
Lesenswert?

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;
Angehängte Dateien:
Gast #418527
Lesenswert?

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;
Gast #418528
Lesenswert?

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?
Gast #418529
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren