您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 智能保险柜防控系统的设计
题目:基于VerilogHDL的智能保险柜防控系统的设计一、设计的背景、目的和意义•背景:锁是一种保险措施,是人类为了保护自己私有财产而发明的一种钥匙才能开启的装置,随着人们生活水平的提高和安全意识的加强,对锁的要求也越来越高,智能保险柜在这时应求而生。•目的和意义:满足现代社会的防盗需要,避免钥匙极易丢失的缺陷,保险柜有保密性高,使用时活性好,安全系数高的特点。二、设计任务及要求•1.设计一个密码锁,密码为一个4位的十进制数,密码固化在锁内•2.用户输入密码正确,则开锁灯亮;若不正确,则报警.•3.若用户输入密码不正确,可以按复位键重新输入密码,重复三次锁死。三、确定输入和输出变量•输入:K0,K1,K2,K3,K4,K5,ret,clk•输出:passed,error•K0,K1,K2,K3,K4,K5代表数字0-9共10个数字和1个确认键,1个复位键四、输入变量对应部件说明考虑到按键数目不够,采用了一位按键作为功能转换按键;即前5位按键输入0~4,同时按下功能转换按键时,按键0~4即转换为按键5~9,这就弥补了按键数目的不足。最后两位按键设定为确认输入按键和复位按键。密码输入完成后可以按确认键检验密码的正误,报警、输入错误或者其他情况可以按复位按键重新输入。五、方案论证•方案1:基于VerilogHDL原理实现•方案2:基于单片机原理实现•确定选择方案1,理由是单片机•操作复杂,数字电路过程容易调试六、状态机设计(状态转换图)状态图七、程序设计(状态编码)•modulepasswd_lock(clk0,passed,one1,two1,three1,four1,zero1,change,error,resetb);•inputone1,two1,three1,four1,zero1,change;•regzero,one,two,three,four;•inputyes;•inputresetb;//输入复位信号•inputclk0;//输入时钟信号•output[7:0]passed;//输出信号•output[7:0]seg;//////段选•output[7:0]dig;//////位选程序设计•reg[3:0]key;•regRXBuf0,RXBuf1,RXBuf2,RXBuf3,RXBuf4;•//display•regclk0_div;•reg[2:0]digyi;////////////yiwei////•reg[7:0]dig;/////////////weixuan•reg[3:0]seg0;/////////////duanxuan•reg[7:0]seg;•reg[12:0]CNT_R0;•reg[18:0]CNT_R1;•regclk1;•reg[21:0]CNT_R2;•regclk2;•reg[7:0]passed;程序设计•parameterPASSWORD=16'b0001000100010001;//盛放密码的参数•reg[15:0]password;//输入数值盛放寄存器•//输入的数字编码•always@(posedgeclk1)begin//检测线路的下降沿•RXBuf1=one1;•one=~(RXBuf1&(~one1));•//RXFall1=RXFall;•end•//消除多重按键•always@(posedgeclk1)begin//检测线路的下降沿•RXBuf0=zero1;•zero=~(RXBuf0&(~zero1));•//RXFall1=RXFall;•end•//消除多重按键•always@(posedgeclk1)begin//检测线路的下降沿•RXBuf2=two1;•two=~(RXBuf2&(~two1));•//RXFall1=RXFall;•end•//消除多重按程序设计•always@(posedgeclk1)•begin//检测线路的下降沿•RXBuf3=three1;•three=~(RXBuf3&(~three1));•//RXFall1=RXFall;•end•//消除多重按键•always@(posedgeclk1)•begin//检测线路的下降沿•RXBuf4=four1;•four=~(RXBuf4&(~four1));•//RXFall1=RXFall;•end•//消除多重按键•reg[2:0]main_state;//主状态•reg[2:0]next_state;//下一个状态•//主有限状态转换机的三个状态:waits、pass、alarm•parameterwaits=3'b001,•pass=3'b010,•alarm=3'b100;•reg[2:0]sub_state;•reg[2:0]next_sub_state;•//主有限状态转换机的三个状态:first、second、third、fourth、finish。•parameterfirst=3'b000,•second=3'b001,•third=3'b010,•fourth=3'b011,•finish=3'b100;•//通过计时寄存器•reg[7:0]pass_count;程序设计•//警报计时寄存器•reg[10:0]alarm_count;•//尝试次数寄存器•reg[1:0]try_count;•//输入状态寄存器:error和correct•regerror;•regcorrect;•//以上为中间状态的一些寄存器和一些所用到的参数•//主机状态机部分•always@(posedgeclk0)•begin•CNT_R2=CNT_R2+1'b1;••if(CNT_R24000000)•begin•clk1=1;•end•else•begin•clk1=0;•end•end程序设计•always@(main_stateorcorrectorerror)•begin•case(main_state)•waits:•if(correct==1)//由waits转换到pass的条件•next_state=pass;•elseif(error==1&&try_count==1)•next_state=alarm;//由waits转换到alarm的条件•else•next_state=waits;•pass:•if(pass_count[7]==1)//由pass转换到waits的条件•next_state=waits;•else程序设计•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)//复位时,开锁输出与警报输出都为零•begin•passed=8'b00000000;•end•elseif(main_state==pass)//当主机状态为pass时,开锁•begin•passed=8'b10000000;•end•elseif(main_state==alarm)//当主机状态为alarm时,警报•begin•passed=8'b00000001;•end•else//其它状态复位•begin•passed=8'b00000000;•end•end•//alarm一段时间后,自动进入waits状态•//alarm定时器程序设计•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)•alarm_count=0;•elseif(main_state==alarm)//alarm状态计时器alarm定时器加1•alarm_count=alarm_count+1;•else•alarm_count=0;•end•//锁pass以后计数开始,当规定的时间到达后自动上锁,并进入waits状态•//pass定时器•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)•pass_count=0;•elseif(main_state==pass)//pass状态计时器pass定时器加1•pass_count=pass_count+1;•else程序设计•pass_count=0;•end•//从状态机,用于输入4位密码•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)•sub_state=first;•else•sub_state=next_sub_state;•end•always@(!zero||!one||!two||!three||!four||!yesorsub_state)•//always@(keyorsub_state)•begin•if(key_pressed_flag||!yes)•if(!yes)//4个密码输完时,进行确认•next_sub_state=first;•//default为输入了某位密码,输入完自动将状态转入下一位•else•if(!zero||!one||!two||!three||!four)•case(sub_state)程序设计•next_state=pass;•alarm:•if(alarm_count[10]==1)//由alarm转换到waits的条件•next_state=waits;•else•next_state=alarm;•default://默认状态:waits•next_state=waits;•endcase•end•//状态转换•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)•main_state=waits;•else•main_state=next_state;•end•//输出控制部分程序设计•pass_count=0;•end•//从状态机,用于输入4位密码•always@(posedgeclk1ornegedgeresetb)•begin•if(!resetb)•sub_state=first;•else•sub_state=next_sub_state;•end•always@(!zero||!one||!two||!three||!four||!yesorsub_state)•//always@(keyorsub_state)•begin•if(key_pressed_flag||!yes)•if(!yes)//4个密码输完时,进行确认•next_sub_state=first;•//default为输入了某位密码,输入完自动将状态转入下一位•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;•//当输入完4位密码以后状态保持不变,等待输入enter命•//令•finish:•next_sub_state=finish;•default:next_sub_state=sub_state;•endcase•else•next_sub_state=sub_state;•end•//比较密码,产生正确或者错误信息•always@(posedgeclk1ornegedgeresetb)•begin程序设计•first:•next_sub_state=second;•second:•next_sub_state=third;•third:•next_sub_state=fourth;•fourth:•next_sub_state=finish;•//当输入完4位密码以后状态保持不变,等待输入enter命•//令•finish:
本文标题:智能保险柜防控系统的设计
链接地址:https://www.777doc.com/doc-3998265 .html