【文章內(nèi)容簡(jiǎn)介】
p_pos)amp。amp。cp_down_pos) //設(shè)置分?jǐn)?shù)減計(jì)數(shù)設(shè)置 begin if(setted_score[3:0]==0) begin setted_score[3:0]=9。 end else begin setted_score[3:0]=setted_score[3:0]1。 end end endend endmodule4. module time_count(cp1024hz,started,reset,flag_pressed,time_left,time_less_alarm,time_out)。//yesdinput cp1024hz,started,reset,flag_pressed。output time_left。output time_less_alarm。//倒計(jì)時(shí)到3s之后發(fā)出提醒信號(hào)output time_out。//倒計(jì)時(shí)完了之后發(fā)出信號(hào)reg [3:0] time_left。reg time_less_alarm。reg time_out。reg[9:0] temp_count。always @(posedge cp1024hz)begin if(!started) begin time_left=0。 end else begin if(reset) begin time_left=9。 time_less_alarm=0。 time_out=0。 temp_count=0。 end else begin if(time_left==3)//當(dāng)?shù)褂?jì)時(shí)剩3s時(shí)?崾臼???剩余不多 begin time_less_alarm=1。 end if(time_left==0)//當(dāng)?shù)褂?jì)時(shí)完了后,發(fā)出信號(hào) begin time_out=1。 end if(flag_pressed)//已搶答,則終止倒計(jì)時(shí),并置為初值 begin time_left=9。 end else//還未搶答,進(jìn)行倒計(jì)時(shí) begin if(temp_count==1023) begin temp_count=0。 if(time_left1) begin time_left=time_left1。 if(time_left==4) begin time_less_alarm=1。 end end else begin time_out=1。 time_left=0。 end end else begin temp_count=temp_count+1。 end end end endendendmodule5. module sound_alarm(reset,sound_en,cp1024hz,time_less_alarm,alarm)。//提示聲,包括時(shí)間少于3秒后的讀秒提示聲,搶答按鍵按下提示聲以及時(shí)間完了的提示聲input reset,sound_en,cp1024hz。//重新開始新的搶答信號(hào),發(fā)聲信號(hào),時(shí)鐘input time_less_alarm。//時(shí)間少于3s時(shí)的信號(hào)output alarm。 //所有的提示聲信號(hào)疊加,作為喇叭的驅(qū)動(dòng)信號(hào)reg [9:0] temp_count=0。reg temp。//reg alarm_time。always @(posedge cp1024hz)//(包括倒計(jì)時(shí)完,已搶答兩種情況的聲音提示)begin if(reset)//對(duì)中間變量進(jìn)行初始化 begin temp=1。 temp_count=0。 end if(sound_en==1) begin if(temp_count==1023)//sound_en==1時(shí),響1s鐘提示 begin temp=0。 end else begin temp_count=temp_count+1。 end endendwire alarm_time。assign alarm_time=temp amp。 sound_en。reg[9:0] temp1。reg time_left_alarm。always @(posedge cp1024hz)//begin if(reset) //對(duì)中間變量進(jìn)行初始化 begin temp1=1。 time_left_alarm=0。 end else begin if(time_less_alarm==0) begin temp1=0。 time_left_alarm=0。 end else begin //時(shí)間少于3s時(shí) 提示 if(temp1=512) begin temp1=temp1+1。 time_left_alarm=1。 end else begin time_left_alarm=0。 end end endendassign alarm=(time_left_alarm|alarm_time)amp。cp1024hz。endmodule6. module control(cp1024hz,started,reset,k1,k2,k3,k4,k5,k6, zero1,zero2,zero3,zero4,zero5,zero6,time_out, mode,flag_pressed,sound_en,latch_en)。//yesdinput cp1024hz,started,reset。input k1,k2,k3,k4,k5,k6。//搶答的6個(gè)按鍵,由cp1024hz掃描是否有按鍵input zero1,zero2,zero3,zero4,zero5,zero6。//6個(gè)用?的分?jǐn)?shù)是否為0,并將分?jǐn)?shù)為0的淘汰input time_out。//倒計(jì)時(shí)已完output flag_pressed,sound_en,latch_en,mode。//是否已按鍵。聲音控制。模式控制。輸出模式reg flag_pressed,sound_en,latch_en。reg[3:0] mode。always @(posedge cp1024hz)begin if(!started)//當(dāng)started=0時(shí),對(duì)系統(tǒng)進(jìn)行初始化,同時(shí)將mode置0; begin mode=0。 flag_pressed=1。 //利用設(shè)置這個(gè)將k1~k6屏蔽 sound_en=0。 latch_en=0。 end else begin if(reset) //started=1已開始,reset=1新一輪搶答 begin flag_pressed=0。 sound_en=0。 latch_en=0。 mode=7。 //mode置為搶答模式 end else begin if(time_out) begin sound_en=1。//時(shí)間完了之后,響聲提示 end else begin if(!flag_pressed amp。amp。 k1 amp。amp。 !zero1)//當(dāng)started=1時(shí),按下key1