Up-Down Counter VHDL Code
In digital design, a counter is a device which stores the number of times a particular event has occurred, often with respect to a clock signal. The most common type is a sequential digital logic circuit with an input line called the clock and multiple output lines representing the count. The values on the output lines represent a number in the binary or BCD number system. Each pulse applied to the clock input increments or decrements the number in the counter.
VHDL Code:library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
entity U_DCOUNTER is
Port ( RESET : in STD_LOGIC;
U_D : in STD_LOGIC;
CLK : in STD_LOGIC;
Cout : out STD_LOGIC_VECTOR (3 downto 0));
end U_DCOUNTER;
architecture U_DCOUNTER of U_DCOUNTER is
begin
process(CLK,RESET)
variable temp:STD_LOGIC_VECTOR (3 downto 0):="0000";
begin
if (RESET='1')then
temp:="0000";
elsif(CLK'event and CLK='1')then
if(U_D='1')then
temp:=temp+1;
else
temp:=temp-1;
end if;
end if;
Cout<=temp;
end process;
end U_DCOUNTER;
Testbench:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY Up_dn_count_tb IS
END Up_dn_count_tb;
ARCHITECTURE behavior OF Up_dn_count_tb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT U_DCOUNTER
PORT(
RESET : IN std_logic;
U_D : IN std_logic;
CLK : IN std_logic;
Cout : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal RESET : std_logic := '0';
signal U_D : std_logic := '0';
signal CLK : std_logic := '0';
--Outputs
signal Cout : std_logic_vector(3 downto 0);
-- Clock period definitions
constant CLK_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: U_DCOUNTER PORT MAP (
RESET => RESET,
U_D => U_D,
CLK => CLK,
Cout => Cout
);
-- Clock process definitions
CLK_process :process
begin
CLK <= '0';
wait for CLK_period/2;
CLK <= '1';
wait for CLK_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
reset <='1'; wait for 25 ns;
reset <= '0'; wait for 100 ns;
U_D <= '1'; wait for 100 ns;
end process;
END;
Output:
Up to 25 ns, reset signal is active and output will remain Zero. After that, till 125 ns, U_D ='0' thus the circuit is in down count mode. At 125ns U_D='1', will force the design to start up counting.
The above code is tested on Xilinx ISE Design Suite 14.7 Webpack.
It is intended only for educational purpose.
Comments
Post a Comment