]> rtime.felk.cvut.cz Git - fpga/spartan2/qcounter.git/blob - top_counter.vhd
7a0918ac721587765e5c4298265e1c897cb3e7a3
[fpga/spartan2/qcounter.git] / top_counter.vhd
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.all;
3 use IEEE.STD_LOGIC_ARITH.all;
4 use IEEE.STD_LOGIC_UNSIGNED.all;
5
6 --------------------------------------------------------------------------------
7 -- This is the top module instantiating quadratic counter with output to the
8 -- on-board LCD. See 'top_counter.ucf' and read how a quadratic encoder is
9 -- connected.
10 --------------------------------------------------------------------------------
11
12 entity top_counter is
13   port(
14     clk       : in  std_logic;
15     reset     : in  std_logic;
16     
17     rot_A     : in  std_logic;
18     rot_B     : in  std_logic;
19     rot_press : in  std_logic;
20     rot_feed  : out std_logic;
21     
22     lcd_com   : out std_logic;
23     lcd2_dp   : out std_logic;
24     lcd1_dp   : out std_logic;
25     lcd1      : out std_logic_vector(6 downto 0);
26     lcd2      : out std_logic_vector(6 downto 0));
27 end top_counter;
28
29 --------------------------------------------------------------------------------
30
31 architecture behavioral of top_counter is
32   
33   component div_20 is
34     port (
35       clk    : in  std_logic;
36       clk_2k : out std_logic);
37   end component;
38
39   component hex2lcd is
40     port (
41       hex : in  std_logic_vector (3 downto 0);
42       lcd : out std_logic_vector (6 downto 0));
43   end component;
44
45   component lcd_mux is
46     port (
47       clk     : in  std_logic;
48       cnt     : in  std_logic;
49       data_in : in  std_logic_vector (6 downto 0);
50       lcd_seg : out std_logic_vector (6 downto 0);
51       lcd_com : out std_logic;
52       lcd_dp  : out std_logic);
53   end component;
54
55   component qcounter is
56     port (
57       clock    : in  std_logic;
58       reset    : in  std_logic;
59       a0, b0   : in  std_logic;
60       qcount   : out std_logic_vector (31 downto 0);
61       a_rise   : out std_logic;
62       a_fall   : out std_logic;
63       b_rise   : out std_logic;
64       b_fall   : out std_logic;
65       ab_event : out std_logic;
66       ab_error : out std_logic);
67   end component;
68
69
70   signal lcd_clk  : std_logic;
71   signal lcd1_out : std_logic_vector (6 downto 0);
72   signal lcd2_out : std_logic_vector (6 downto 0);
73
74   signal qcount_data  : std_logic_vector (31 downto 0);
75   signal qcount_reset : std_logic;
76
77 --------------------------------------------------------------------------------
78   
79 begin
80   
81   div_20_1 : div_20
82     port map (
83       clk    => clk,
84       clk_2k => lcd_clk);
85
86   hex2lcd_1 : hex2lcd
87     port map (
88       hex => qcount_data(5 downto 2),
89       lcd => lcd1_out);
90
91   hex2lcd_2 : hex2lcd
92     port map (
93       hex => qcount_data(9 downto 6),
94       lcd => lcd2_out);
95
96   lcd_mux_1 : lcd_mux
97     port map (
98       clk     => clk,
99       cnt     => lcd_clk,
100       data_in => lcd1_out,
101       lcd_seg => lcd1,
102       lcd_com => lcd_com,
103       lcd_dp  => lcd1_dp);
104
105   lcd_mux_2 : lcd_mux
106     port map (
107       clk     => clk,
108       cnt     => lcd_clk,
109       data_in => lcd2_out,
110       lcd_seg => lcd2,
111       lcd_com => open,
112       lcd_dp  => lcd2_dp);
113
114   qcounter_1 : qcounter
115     port map (
116       clock    => clk,
117       reset    => qcount_reset,
118       a0       => rot_A,
119       b0       => rot_B,
120       qcount   => qcount_data,
121       a_rise   => open,
122       a_fall   => open,
123       b_rise   => open,
124       b_fall   => open,
125       ab_event => open,
126       ab_error => open);
127
128 --------------------------------------------------------------------------------
129
130   rot_feed <= '1';
131
132   qcount_reset <= not reset or rot_press;
133   
134 end Behavioral;
135