blob: 2c68a73030f82ad222239f968b2da16fe88a913d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
-------------------------------------------------------------------------------
-- Module : cntupen
-------------------------------------------------------------------------------
-- Author : Johann Faerber
-- Company : University of Applied Sciences Augsburg
-------------------------------------------------------------------------------
-- Description: Up-Counter
-- including a low-active asynchronous reset input rst_ni
-- and a high-active enable input en_pi
-------------------------------------------------------------------------------
-- Revisions : see end of file
-------------------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY cntupen IS
PORT (clk_i : IN std_ulogic;
rst_ni : IN std_ulogic;
en_pi : IN std_ulogic;
count_o : OUT std_ulogic_vector(3 DOWNTO 0)
);
END cntupen;
ARCHITECTURE rtl OF cntupen IS
-- datatype unsigned is defined in package numeric_std
SIGNAL next_state, current_state : unsigned(3 DOWNTO 0);
BEGIN
-- package numeric_std overloads operator '+'
-- for arguments of different types, here: unsigned and integer
incrementer : next_state <= current_state + 1;
-- synthesisable construct of a d-type register with synchronrous enable
state_register : current_state <= "0000" WHEN rst_ni = '0' ELSE
next_state WHEN rising_edge(clk_i) AND (en_pi = '1');
-- type conversion from unsignd to std_ulogic_vector necessary
counter_output : count_o <= std_ulogic_vector(current_state);
END rtl;
-------------------------------------------------------------------------------
-- Revisions:
-- ----------
-- $Id:$
-------------------------------------------------------------------------------
|