mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem bei Zähler mit Reset - Bedingung


Autor: Black Friday (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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;

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schiebe mal die Umschaltoperation in den geclockte Teil hinein, daß das
ein vernüftiges Register ist.

Autor: Black Friday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jürgen Schuhmacher:
Könntest du mir das bitte etwas genauer erklären?
Was (bzw. wo) ist der gelockte Teil?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Black Friday (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.