--============================= -- Listing 14.20 up/down counter w/ 2 bodies --============================= library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity updown_counter is generic(WIDTH: natural:=4); port( clk, reset: in std_logic; q: out std_logic_vector(WIDTH-1 downto 0) ); end updown_counter; -- architecture for the count-up sequence architecture up_arch of updown_counter is signal r_reg: unsigned(WIDTH-1 downto 0); signal r_next: unsigned(WIDTH-1 downto 0); begin -- register process(clk,reset) begin if (reset='1') then r_reg <= (others=>'0'); elsif (clk'event and clk='1') then r_reg <= r_next; end if; end process; -- next-state logic r_next <= r_reg + 1; -- output logic q <= std_logic_vector(r_reg); end up_arch; -- architecture for the count-down sequence architecture down_arch of updown_counter is signal r_reg: unsigned(WIDTH-1 downto 0); signal r_next: unsigned(WIDTH-1 downto 0); begin -- register process(clk,reset) begin if (reset='1') then r_reg <= (others=>'0'); elsif (clk'event and clk='1') then r_reg <= r_next; end if; end process; -- next-state logic r_next <= r_reg - 1; -- output logic q <= std_logic_vector(r_reg); end down_arch;
Saturday, 4 November 2017
VHDL UP DOWN counter
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment