您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 全自动洗衣机的设计Verilog程序
数字逻辑课程设计报告姓名:学号:选课号:103班号:A201设计题目全自动洗衣机的设计设计要求设计全自动洗衣机控制器,为不同的洗衣阶段设置不同的时间。(洗衣阶段和时间自己定义)设计过程设计方案:全自动洗衣机有9个工作状态:空闲(idle),第一次加水(water1),洗涤(wash),第一次排水(drain1),第二次加水(water2),漂洗(rinse),第二次排水(drein2),甩干(dry),响起音乐(music)。状态转移条件有以下2个:开始(start),复位(reset)。状态转移图:注:方框内上方为状态机的状态,下方为状态机的输出。当按下reset键时,洗衣机复位到初始状态,m=0,w=0,d=0,mu=0。当按下start按钮时,则进入water1状态,w=1,加水,历时5s。然后转移到下一个状态------洗涤,停止加水w=0,电机运转m=1,历时10s。再转移到下一个状态排水,电机停止运转m=0,开始排水d=1,历时5s……直到甩干结束后,整个洗衣过程完成。然后洗衣机放出音乐,历时7s,提示用户洗衣完成。洗衣机回到初始状态。整个过程经历45s。源程序:modulewash_machine(count,clk,reset,start,w,m,d,mu,state);inputclk,reset,start;outputw,m,d,mu,state;output[3:0]count;reg[3:0]count;parameteridle=0,water1=1,wash=2,drain1=3,water2=4,rinse=5,drain2=6,dry=7,music=8;regw,m,d,mu;reg[3:0]state;always@(posedgeclk)beginif(reset)beginw=0;m=0;d=0;mu=0;state=idle;endcase(state)idle:if(start)beginw=1;m=0;d=0;mu=0;state=water1;endwater1:if(count==4)//thetimeofwateris5sbegincount=1'd0;w=0;m=1;d=0;mu=0;state=wash;endelsebegincount=count+1;endwash:if(count==9)//thetimeofwashis10sbegincount=1'd0;w=0;m=0;d=1;mu=0;state=drain1;endelsebegincount=count+1;enddrain1:if(count==4)//thetimeofdrainis5sbegincount=1'd0;w=1;m=0;d=0;;mu=0;state=water2;endelsebegincount=count+1;endwater2:if(count==4)//thetimeofwateris5sbegincount=1'd0;w=0;m=1;d=0;mu=0;state=rinse;endelsebegincount=count+1;endrinse:if(count==5)//thetimeofrinseis6sbegincount=1'd0;w=0;m=0;d=1;mu=0;state=drain2;endelsebegincount=count+1;enddrain2:if(count==4)//thetimeofdrainis5sbegincount=0;w=0;m=1;d=1;mu=0;state=dry;endelsebegincount=count+1;enddry:if(count==2)//thetimeofdryis3sbegincount=1'd0;w=0;m=0;d=0;mu=1;state=music;endelsebegincount=count+1;endmusic:if(count==6)//thetimeofmusicis7sbegincount=1'd0;state=idle;w=0;m=0;d=0;mu=0;endelsebegincount=count+1;endendcaseendendmodule仿真结果:设计结论设计结果分析:按下reset键,洗衣机复位;按下start键,开始洗衣,直到洗衣完成。设计中遇到的问题:1、每个状态无法持续,来了一个时钟就进入下一个状态了,没有判断我写的条件:例如:原来在water1的条件下,我写的是:water1:if(count(timewater-1))begincount=count+1;endelsebegincount=1'd0;w=0;m=1;d=0;mu=0;state=wash;end结果就是下图所示:(错误的仿真结果)后来改成了:water1:if(count==4)begincount=1'd0;w=0;m=1;d=0;mu=0;state=wash;endelsebegincount=count+1;end原因是:if不是循环,只要条件满足就执行下去,不会再判断条件仍旧满足而再执行if里面的语句。设计心得:1、学习并基本掌握了verilogHDL的写法,并会用verilogHDL语言设计有限状态机。会写计数器,并且在历经设计好的一段时间后跳到下一状态。2、实现经过一段时间后状态的跳转:在每个时钟上升沿到来时(always@clk),先判断时间条件是否成立,成立的话就进入下一个状态,如果时间没有到的话,时间就加1,在下一个始终上升沿到来时再先判断,没到的话再加1,如此重复。3、这是写的第一个verilog程序,还是很有成就感!附:放大的仿真图:
本文标题:全自动洗衣机的设计Verilog程序
链接地址:https://www.777doc.com/doc-2690367 .html