其实还有更简单的实现方法,用UP和DOWN启动加减计数器,计数结果相加<br />程序如下:<br />LIBRARY IEEE;<br />USE IEEE.STD_LOGIC_1164.ALL;<br />USE IEEE.STD_LOGIC_UNSIGNED.ALL;<br />ENTITY counter_up_down IS<br /> PORT(<br /> UP,DOWN : IN STD_LOGIC;<br /> res_n : IN STD_LOGIC;<br /> dout : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));<br />END;<br />ARCHITECTURE bhv OF counter_up_down IS <br />SIGNAL up_cnt,down_cnt,cnt : STD_LOGIC_VECTOR(3 DOWNTO 0);<br />BEGIN<br /><br />cnt<=up_cnt+down_cnt;--加减计数相加为结果<br />dout<=cnt;<br /><br />PROCESS(res_n,UP)--加计数器<br />BEGIN<br /><br />IF res_n='0' THEN<br /> up_cnt<="0000";<br />ELSIF UP'EVENT AND UP='1' THEN<br /> IF cnt<15 THEN<br /> up_cnt<=up_cnt+1;<br /> END IF;<br />END IF;<br /><br />END PROCESS;<br /><br />PROCESS(res_n,DOWN)--减计数器<br />BEGIN<br /><br />IF res_n='0' THEN<br /> down_cnt<="0000";<br />ELSIF DOWN'EVENT AND DOWN='1' THEN<br /> IF cnt>0 THEN<br /> down_cnt<=down_cnt-1;<br /> END IF;<br />END IF;<br /><br />END PROCESS;<br /><br />END bhv;
|