【正文】
sound_alarm=39。139。 else sound_alarm=39。039。 end if。 end loop sound_loop。 if show_new_time=39。139。then display_time=new_time。 elsif show_a=39。139。then display_time=alarm_time。 elsif show_a=39。039。then display_time=current_time。 else assert false report uncertain display_driver control! severity waring。 end if。 end process。 disp:process(display_time) begin for i in display_time39。range loop display(i)=seven_seg(display_time(i)) end loop。 end process。 end art。 七.鬧鐘分頻器 計(jì)思路:分頻器,將 clk_in 的輸入信號(hào)經(jīng)過(guò)分頻后交與 clk_out當(dāng) reset 端口為高電平時(shí), clk_out 輸出清零。 Fq_divider library IEEE。 use 。 use 。 ENTITY fq_divider is port(clk_in,reset:in std_logic。 clk_out:out std_logic)。 end fq_divider。 ARCHITECTURE art of fq_divider is constant divide_period:t_short:=6000。 begin process(clk_in,reset) variable t:t_short。 begin if(reset=39。139。)then t:=0。 clk_out=39。039。 elsif rising_edge(clk)then if(t(divide_period/2))then clk_out=39。139。 t:=t+1。 elsif (t(divide_period1))then clk_out=39。039。 t:=t+1。 else t:=0。 end if。 end if。 end process。 end art。 八.鬧鐘的整體組裝 計(jì)思路:前面已經(jīng)把鬧鐘的各個(gè)模塊分別進(jìn)行了編譯封裝,現(xiàn)在開(kāi)始整體組裝。由于鍵盤解碼和鬧鐘移位寄存器是一體的,且輸出 新的時(shí)間或者鬧鐘值,所以二者連為一體,再者,由于鬧鐘移位寄存器輸出的新數(shù)據(jù)可能是時(shí)間值也可能是鬧鐘值,所以輸出口一分為 2,分別接入時(shí)間計(jì)數(shù)器,鬧鐘寄存器,又由于鬧鐘移位寄存器所輸出的值要顯示在 led 上,所以輸出再引出一根線接到顯示模塊上。分頻器接時(shí)間寄存器,用來(lái)計(jì)數(shù)。時(shí)間和鬧鐘工作狀態(tài)控制模塊分別接時(shí)間計(jì)數(shù)器,鬧鐘寄存器,顯示模塊。最后總體封裝。 Alarm_clock library IEEE。 use 。 use 。 use 。 ENTITY Alarm_clock is port(keypad:in std_logic_vector(9 downto 0)。 key_down,alarm_botton,time_botton,clk,reset:in std_logic。 display:out t_display。 sound_alarm:out std_logic)。 end Alarm_clock。 ARCHITECTURE art of alarm_clock is ponent decoder is port(keypad:in std_logic_vector(9 downto 0)。 value:out digital)。 end ponent decoder。 signal s0:t_digital。 signal s1,s2,s3,s4,s5:std_logic。 signal s6,s7,s8:t_clock_time。 begin u1:decoder port map(keypad,s0)。 u2:key_buffer port mao(s0,key_down,reset,s6)。 u3:alarm_contorller port map(key_down,alarm_botton,time_botton,clk,reset,s1,s2,s3,s4)。 u4:alarm_counter port map(s6,s2,s5,reset,s8)。 u5:alarm_reg port map(s6,s1,clk,reset,s7)。 u6:display_driver port map(s7,s6,s8,s3,s5,sound_alarm,display)。 u7:fq_divider port map(clk,reset,s5)。 end art。