【正文】
b)//復(fù)位 時,開鎖輸出與警報輸出都為零 begin passed=839。b00000000。 alarmed=839。b00000000。 end else if(main_state==pass)//當(dāng)主機(jī)狀態(tài)為 pass 時,開鎖 begin passed=839。b00000001。 alarmed=839。b00000000。 end else if(main_state==alarm)//當(dāng)主機(jī)狀態(tài)為 alarm 時,警報 begin passed=839。b00000000。 alarmed=839。b00000001。 end else//其它狀態(tài)復(fù)位 begin passed=839。b00000000。 alarmed=839。b00000000。 end end //alarm 一段時間后,自動進(jìn)入 waits 狀態(tài) //alarm 定時器 always@(posedge clk1 or negedge resetb) begin if(!resetb) alarm_count=0。 else if(main_state==alarm)//alarm 狀態(tài)計時器 alarm 定時器加 1 alarm_count=alarm_count+1。 else alarm_count=0。 end //鎖 pass 以后計數(shù)開始,當(dāng)規(guī)定的時間到達(dá)后自動上鎖,并進(jìn)入 waits 狀態(tài) //pass 定時器 always@(posedge clk1 or negedge resetb) begin if(!resetb) pass_count=0。 else if(main_state==pass) //pass 狀態(tài)計時器 pass 定時器加 1 pass_count=pass_count+1。 else pass_count=0。 end //從狀態(tài)機(jī),用于輸入 4 位密碼 always@(posedge clk1 or negedge resetb) begin if(!resetb) sub_state=first。 else sub_state=next_sub_state。 end always@(!zero||!one||!two||!three||!four||!yes or sub_state) //always@(key or sub_state) begin if(key_pressed_flag||!yes) if(!yes)//4 個密碼輸完時,進(jìn)行確認(rèn) next_sub_state=first。 //default 為輸入了某位密碼,輸入完自動將狀態(tài)轉(zhuǎn)入下一位 else if (!zero||!one||!two||!three||!four) case(sub_state) first: next_sub_state=second。 second: next_sub_state=third。 third: next_sub_state=fourth。 fourth: next_sub_state=finish。 //當(dāng)輸入完 4 位密碼以后狀態(tài)保持不變,等待輸入 enter 命 //令 finish: next_sub_state=finish。 default: next_sub_state=sub_state。 endcase else next_sub_state=sub_state。 end //比較密碼,產(chǎn)生正確或者錯誤信息 always@(posedge clk1 or negedge resetb) begin if(!resetb) begin correct=0。 error=0。 end else if(!key_pressed_flagamp。amp。!yes) if(password==PASSWORD)//密碼正確 時 begin correct=1。 error=0。 end else//密碼錯誤時 begin error=1。 correct=0。 end else begin correct=0。 error=0。 end end //記錄密碼 always@(posedge clk1 or negedge resetb) begin if(!resetb) password=0。 else if(!zero||!one||!two||!three||!four) case(sub_state) first: password[15:12]=key。 second: password[11:8]=key。 third: password[7:4]=key。 fourth: password[3:0]=key。 default: password=password。 endcase else password=password。 end //記錄錯誤次數(shù) always@(posedge clk1 or negedge resetb) begin if(!resetb) try_cou