mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL & Zähler


Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich hab zwei zähler in VHDL geschrieben:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity ms_zaehler is

  port(  clk, reset   : in   std_logic;
      msek       : out std_logic_vector(9 downto 0)
      );

end ms_zaehler;

architecture Behavioral of ms_zaehler is

signal tmp_ms: std_logic_vector(9 downto 0);

begin
  process (clk, reset)
    begin
      
      if (reset='0') then
      tmp_ms <= "0000000000";
      
        elsif (clk'event and clk='1') then
        tmp_ms <= tmp_ms + 1;
      
          if (tmp_ms = "1111100111") then
          tmp_ms <= "0000000000";
          
          end if;
      
      end if;
  end process;
  
  msek <= tmp_ms;

end Behavioral;







library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity sek_einer_zaehler is

port(    reset       :   in   std_logic;
      ms_in       :   in   std_logic_vector(9 downto 0);
      sek_einer     :   out   std_logic_vector(3 downto 0)
      );


end sek_einer_zaehler;

architecture Behavioral of sek_einer_zaehler is

signal tmp_sek_einer  :  std_logic_vector(3 downto 0);

begin

  process (ms_in, reset)
    begin
      
      if (reset='0') then
      tmp_sek_einer <= "0000";
      
        elsif (ms_in = "1111100111") then
        tmp_sek_einer <= tmp_sek_einer + 1;
        
      
      
          if(tmp_sek_einer = "1001") then
          tmp_sek_einer <= "0000";
        
          end if;
          
      end if;
  end process;
  
  sek_einer <= tmp_sek_einer;

end Behavioral;


Mit dem ersten Zähler zähle ich bei einem 1KHz Takt, millisekunden.
Mit dem zweiten will ich dann Sekunden zählen.

Im Moment beginnt der Zweite zähler schon beim wechsel von 989 auf 999 
die Sekunden zu Zählen. Er ist also 1 ms zu früh dran. Ich weis warum 
das so ist aber leider nicht wie ich es ändern könnte.
Kann mir da bitte jemand auf die Sprünge helfen...

gruß  Andreas

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- verwende nur synchrone, getaktete Prozesse -> VHDL Grundregeln
- verwende Integer- oder Unsigned-Typen für Zähler, dann muss man nicht 
rätseln was die Zahlen dezimal darstellen sollen -> Rechnen in VHDL

Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider sind auf der Seite mit den VHDL Grundregeln noch keine einträge.
Du meinst wahrscheinlich, das ich den Prozess des zweiten Zählers auch 
vom clock-signal abhängig machen soll.

Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oja, jetzt funktioniert es. Vielen Dank.
Wenn ich schon mal die gelegenheit habe dann möchte ich dir auch einmal 
für dieses "wahnsinnig" gut gelungen Forum danken. Weiter so.

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.