Zaehler.vhd


1
----------------------------------------------------------------------------------
2
-- Zählertest
3
----------------------------------------------------------------------------------
4
library IEEE;
5
use IEEE.STD_LOGIC_1164.ALL;
6
use IEEE.NUMERIC_STD.ALL ; 
7
8
entity Zaehler is
9
   Port ( 
10
      CLK      : in  STD_LOGIC := '0' ;    -- 10 Mhz Eingangstakt
11
      QZeiZei   : out STD_LOGIC_VECTOR(2 downto 0) := (others => '0') ;
12
      ADR       : out STD_LOGIC_VECTOR(16 downto 0) := (others => '0') 
13
      );
14
end Zaehler;
15
16
architecture VERHALTEN of Zaehler is
17
  signal  ZeilenjeZeichen_Zaehler  : UNSIGNED (2 downto 0) := (others => '0'); -- zählt Zeilen je Zeichen
18
  signal  Zeichen_Zaehler      : UNSIGNED (6 downto 0)  := (others => '0'); -- zählt Zeichen je Zeile
19
  signal  Zeilen_Zaehler        : UNSIGNED (8 downto 0)  := (others => '0'); -- zählt Zeilen je Bild
20
21
-- ***********************************************************************************
22
begin
23
24
-- ZeilenjeZeichenzähler zählt bis 8 = 8 Zeilen je Zeichen
25
Zaehler1:
26
process(CLK)      -- 
27
  begin
28
    if rising_edge(CLK) then 
29
      if ZeilenjeZeichen_Zaehler   < 5 then      -- zählt 0..5
30
        ZeilenjeZeichen_Zaehler    <= ZeilenjeZeichen_Zaehler + 1 ;
31
      else
32
        ZeilenjeZeichen_Zaehler    <= "000"; 
33
      end if ; 
34
    end if;
35
end process Zaehler1; 
36
  
37
  QZeiZei  <= STD_LOGIC_VECTOR(ZeilenjeZeichen_Zaehler(2 downto 0)) ;
38
  
39
  
40
--Zeichenzähler je Zeile, zählt bis 80 = 80 Zeichen je Zeile
41
Zaehler2:
42
process(CLK)
43
  begin
44
    if rising_edge(CLK) then
45
      if ZeilenjeZeichen_Zaehler = 5 then
46
        if Zeichen_Zaehler   <= 62 then
47
          Zeichen_Zaehler   <= Zeichen_Zaehler + 1  ;
48
        else
49
          Zeichen_Zaehler   <= "0000000" ;
50
        end if ; 
51
      end if;
52
    end if;
53
end process Zaehler2 ;        
54
55
  ADR(6 downto 0)    <= STD_LOGIC_VECTOR(Zeichen_Zaehler(6 downto 0)) ;
56
  ADR(7)   <= '1' ; -- Testausgang
57
  
58
-- ZeilenZähler zählt Zeilen 0 bis 320
59
Zaehler3:
60
process(CLK)
61
  begin
62
  if rising_edge(CLK) then 
63
    if Zeichen_Zaehler = 63 and ZeilenjeZeichen_Zaehler = 5 then     -- Zeilenzähler bei Zählerstand 1 weiterschalten
64
      if Zeilen_Zaehler <319 then -- bis 320 zählen
65
            Zeilen_Zaehler <= Zeilen_Zaehler + 1 ; --zählen..
66
        else  Zeilen_Zaehler <= "000000000"    ; 
67
      end if ; 
68
    end if ;
69
   end if;
70
end process Zaehler3;
71
72
  ADR(16 downto 8)   <= STD_LOGIC_VECTOR(Zeilen_Zaehler)   ;
73
74
        
75
end VERHALTEN;