LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY second IS PORT( clk,reset,setmin:STD_LOGIC; enmin:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ENTITY second; ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL enmin_1,enmin_2:STD_LOGIC; ——enmin_1為59秒時的進位信號 BEGIN ——enmin_2由clk調(diào)制后的手動調(diào)分脈沖信號串 daout<=count; enmin_2<=(setmin and clk); ——setmin為手動調(diào)分控制信號,高電平有效 enmin<=(enmin_1 or enmin_2); ——enmin為向分進位信號 PROCESS(clk,reset,setmin) BEGIN IF(reset='0')THEN count<="0000000"; ——若reset為0,則異步清零 ELSIF(clk 'event and clk='1')then ——否則,若clk上升沿到 IF(count(3 downto 0)="1001")then ——若個位計時恰好到“1001”即9 IF(count<16#60#)then ——又若count小于16#60#,即60H IF(count="1011001")then ——又若已到59D enmin_1<='1';count<="0000000";——則置進位為1及count復0 ELSE ——未到59D count<=count+7; ——則加7,而+7=+1+6,即作“加6校正” END IF; ELSE ——若count不小于16#60#(即count等于或大于16#60#) count<="0000000"; ——count復0 END IF; ——END IF(count<16#60#) ELSIF(count<16#60#)then ——若個位計數(shù)未到“1001”則轉(zhuǎn)此句再判 count<=count+1; ——若count<16#60#則count加1 enmin_1<='0'after 100 ns; ——沒有發(fā)生進位 ELSE ——否則,若count不小于16#60# count<="0000000"; ——則count復0 END IF; ——END IF(count(3 DOWNTO 0)=“1001”) END IF; ——END IF(reset=‘0’) END PROCESS; END fun;
|