【正文】
setm : in std_logic:=39。139。 alarmm : in std_logic:=39。139。 ma : in integer:=12。 mts : in integer:=12。 qtm1 : out integer:=12。 qtm2: out integer:=12。 clk4 : out std_logic。 mx : out integer:=12。 my : out integer:=12)。 end ponent。 begin DUT :month port map(clkm,setm,alarmm,ma,mts,qtm1,qtm2,clk4,mx,my)。 clk_process :processbegin clkm = 39。139。 wait for clk_period/2。 clkm = 39。039。 wait for clk_period/2。end process。stim_proc: processbegin setm=39。139。wait for clk_period*100。setm = 39。039。wait for clk_period*100。alarmm=39。139。wait for clk_period*100。ma=0。wait for clk_period*100。mts=0。wait for clk_period*100。wait。end process。end。Years模塊:library ieee。use 。use 。use 。entity year isport ( clky: in std_logic。 sety: in std_logic。 alarmy: in std_logic。 ya: in integer range 2013 to 2099。設置從2013年到2099年 ys: in integer range 2013 to 2099。 qty1: out integer range 2013 to 2099。 qty2: out integer range 2013 to 2099。 yx: out integer range 2013 to 2099。 yy: out integer range 2013 to 2099) 。 end year。architecture nian of year issignal qy:integer range 2013 to 2099。begin process(clky,sety,ys) begin if sety=39。139。 then qy=ys。 elsif(clky39。event and clky=39。139。) then if(qy=2099) then qy=2013。 else qy=qy+1。 end if。 end if。end process。process(alarmy,ya)beginif alarmy=39。139。 then yx=ya。end if。end process。qty1=qy。qty2=qy。yy=qy。end nian。年testbenchlibrary ieee。use 。use 。entity test is end test。architecture one of test issignal clky : std_logic:=39。039。signal sety : std_logic:=39。039。signal alarmy : std_logic:=39。139。 signal ya : integer :=2013。 signal ys : integer :=2013。 signal qty1 : integer :=2013。 signal qty2 : integer :=2013。 signal clk2 : std_logic。 signal yx : integer :=2013。 signal yy : integer :=2013。 constant clk_period : time := 1ms。 ponent year port( clky : in std_logic:=39。139。 sety : in std_logic:=39。139。 alarmy : in std_logic:=39。139。 ya : in integer:=2013。 ys : in integer:=2013。 qty1 : out integer:=2013。 qty2: out integer:=2013。 yx : out integer:=2013。 yy : out integer:=2013)。 end ponent。 begin DUT :year port map(clky,sety,alarmy,ya,ys,qty1,qty2,yx,yy)。 clk_process :process begin clky = 39。139。 wait for clk_period/2。 clky = 39。039。 wait for clk_period/2。 end process。 Stimulus process stim_proc: process begin sety=39。139。wait for clk_period*100。sety = 39。039。wait for clk_period*100。alarmy=39。139。wait for clk_period*100。ya=0。wait for clk_period*100。ys=0。wait for clk_period*100。wait。 end process。END。Alarm_clock(鬧鐘)模塊: library ieee。use 。use 。entity alarm_clock isport( run:in integer range 2013 to 2099。 s1a:in integer range 0 to 59。 mn1a:in integer range 0 to 59。 h1a: in integer range 0 to 23。 d1a: in integer。 m1a: in integer range 1 to 12。 y1a: in integer range 2013 to 2099。 s2a:in integer range 0 to 59 。 mn2a:in integer range 0 to 59。 h2a: in integer range 0 to 59。 d2a: in integer。 m2a: in integer range 1 to 12。 y2a: in integer range 2013 to 2099。 ring: out std_logic )。end alarm_clock。architecture one of alarm_clock is beginprocess(s2a,mn2a,h2a,d2a,m2a,y2a,s1a,mn1a,h1a,d1a,m1a,y1a ,run)beginif ( run rem 4 =0 ) then ring=39。139。 是閏年,提醒elsif (mn1a=mn2a and h1a=h2a ) then ring=39。139。時間比較一致(這里只設計時分作為鬧鐘,如果要設置年月日時分秒的鬧鐘,可以添加各個對應時間的比較),提醒else ring=39。039。end if。end process。end。鬧鐘testbenchlibrary ieee。use 。use 。entity test is end test。architecture one of test issignal run:integer :=2013。signal s1a: integer:=0 。signal mn1a: integer:=30 。signal h1a: integer:=12 。signal d1a: integer:=1。signal m1a: integer:=12 。signal y1a: integer :=2013。signal s2a: integer:=0 。signal mn2a: integer:=20 。signal h2a: integer:=10 。signal d2a: integer:=1。signal m2a: integer:=12 。signal y2a: integer:=2013 。signal ring: std_logic:=39。039。 。 constant clk_period:time:=1ms。 ponent alarm_clock port( run:in integer :=2016。 s1a:in integer:=0 。 mn1a:in integer:=30 。 h1a: in integer:=12 。 d1a: in integer:=1。 m1a: in integer:=12 。 y1a: in integer:=2013 。 s2a:in integer:=0 。 mn2a:in integer:=20 。 h2a: in integer:=10 。 d2a: in integer:=1。 m2a: in integer:=12 。 y2a: in integer:=2013 。 ring: out std_logic:=39。039。 )。 end ponent。 Begin DUT:alarm_clock port map(run,s1a,mn1a,h1a,d1a,m1a,y1a,s2a,mn2a,h2a,d2a,m2a,y2a,ring)。 clk_process :process begin run=2013。 wait for clk_period*50。 run = 2016。 wait for clk_period*20。run=2013。wait for clk_period*300。 end process。 cmp1:processbegins1a=0。wait for clk_period*70。mn1a=30。wait for clk_period*10。h1a=12。wait for clk_period*10。 d1a=1。wait for clk_period*10。m1a=12。wait for clk_period*10。y1a=2013。wait for clk_period*10。s2a=0。wait for clk_period*10。d2a=1。wait for clk_period*10。m2a=12。wait for clk_period*10。y2a=2013。end process。cmp2:processbeginmn2a=20。wait for clk_