全自动洗衣机的设计-Verilog程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告2016年5月24学院:大数据与信息工程学院专业:电子与通信工程学号:2015021718学生姓名:杨鹏举指导教师:李良荣目录一、实验题目··················································································3二、实验目的··················································································3三、实验要求··················································································3四、洗衣机工作原理与功能说明····················································3状态图如下·······················································································4程序RTL视图如下············································································5五、详细代码如下··············································································5模块一实现洗衣机状态转换和各状态输出控制·····························6模块二实现复位信号的异步复位同步释放·····错误!未定义书签。模块三实现当前状态的数码管显示················································6模块四实现按键检测······································································14模块五实现顶层的调用··································································16一、实验题目自动洗衣机设计二、实验目的1、熟练掌握QuartusII工程文件的建立过程。2、掌握Verilog的基本语法、语句、模块的使用。3、了解模块的建立与使用。4、了解FPGA的开发基本流程。三、实验要求1、初始状态,准备启动。2、开始进水;为防止进水过程出现故障,故不用定时器控制,而是手动给一个信号模拟水位检测传感器,表示进水完成。3、开始洗涤:正反洗涤4次开始排水。4、排水后立即脱水。5、洗涤之后漂洗2次,每次漂洗过后都排水甩干。6、整个过程全部用数码管来显示状态机状态,并用两个led灯表示电机的正转与反转状态。四、洗衣机工作原理与功能说明自动洗衣机的工作原理:洗衣机有7个工作状态分别为空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、漂洗(rinse)、结束音乐提示(music)。一次完整的洗涤,进水3次、洗涤1次、漂洗两次、排水3次、甩干3次。一次完整的状态转换为:空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、结束音乐提示(music)。程序功能说明:程序有4个输入start启动信号、water_test水满检测信号,水满了就置一、drain_test排水检测,水排完了就置一、emergency紧急停止信号,任何情况下输入都进入idle状态,即停止工作。一开上电过后系统处于空闲状态,当输入信号start后进入加水状态,水满过后进入浸泡状态,浸泡完毕进入洗衣状态,洗衣完毕进入排水状态,第一次排水完毕进入甩干状态,第一次甩干完成进入加水状态,第二次加水完成后进入第一次漂洗状态,第一次漂洗完毕进入第二次排水状态,排水完毕进入第二次甩干状态,第二次甩干完毕进入第三次加水状态,再进入第二次漂洗状态,第三次排水状态,第三次甩干状态,进入结束音乐提醒状态,回到空闲状态。洗衣服和漂洗为洗衣电机的低速档位,在排水过程中将电机档位变为高档位。当甩干完毕变到其他状态时,就把电机档位变到低档位。洗涤和漂洗时,电机正转和反转之间有3秒钟的延时(即让电机自动减速,不至于电机突然反转时负荷太大烧毁电机)。状态图如下程序RTL视图如下4个输入由外部按键输入,经过模块key按键消抖确定按键是否被按下。按键输入到模块washer作为一些状态转换的条件。washer的状态输出到数码管显示模块segmain显示系统当前处于什么状态。系统有4个输出clockwise正转信号0表示转,1表示不转、anticlockwise反转信号0表示转,1表示不转、finish结束信号0表示结束,1表示未结束、cstate表示当前状态。经调试实现了想要的功能。五、详细代码如下模块一实现洗衣机状态转换和各状态输出控制//----------------------------------------------------//用1段式状态机,分成3段来写//----------------------------------------------------modulewasher(clk,rst_n,start,water_test,//水满信号drain_test,//排水检测emergency,//紧急情况处理clockwise,//正转信号anticlockwise,//反转信号finish,//结束信号level,//档位显示0为高档位1为低档位cstate//用于显示处于哪个状态);parameteridle=0,inwater=1,steep=2,//浸泡wash=3,//洗涤drain=4,//排水dry=5,rinse=6,//漂洗music=7;regsteep_test;//浸泡结束信号regwash_test;//洗涤结束信号regdry_test;//甩干结束信号regrinse_test;//漂洗结束信号regmusic_test;//音乐结束信号inputclk,rst_n;//时钟复位inputstart;//启动信号inputwater_test;//水满信号inputdrain_test;//排水检测inputemergency;//紧急停止信号outputregclockwise;//正转信号0表示转,1表示不转outputreganticlockwise;//反转信号0表示转,1表示不转outputregfinish;//结束信号0表示结束,1表示未结束output[2:0]cstate;//表示现在的状态outputreglevel;//显示电机档位reg[2:0]cstate_r;assigncstate=cstate_r;reg[1:0]water_time;//洗涤一次漂洗两次reg[1:0]drain_time;//排水三次reg[1:0]dry_time;//甩干三次always@(posedgeclk)if(~rst_n)begincstate_r=idle;endelsebegincase(cstate_r)idle:if(start)begin//0cstate_r=inwater;//一开始就进入进水状态endelsecstate_r=idle;//1inwater:if(emergency)cstate_r=idle;//遇到紧急情况就停止elseif(water_test)begincase(water_time)2'b00:cstate_r=steep;//水满了就进入浸泡状态2'b01:cstate_r=rinse;2'b10:cstate_r=rinse;default:;endcaseendelsecstate_r=inwater;//2steep:if(emergency)cstate_r=idle;//遇到紧急情况就停止elseif(steep_test)cstate_r=wash;//浸泡完毕就进入洗涤状态elsecstate_r=steep;//3wash:if(emergency)cstate_r=idle;//遇到紧急情况就停止elseif(wash_test)cstate_r=drain;//洗完就进入排水状态elsecstate_r=wash;//4drain:if(emergency)cstate_r=idle;elseif(drain_test)begincstate_r=dry;endelsecstate_r=drain;//5dry:if(emergency)cstate_r=idle;elseif(dry_test)begincase(dry_time)2'b01:cstate_r=inwater;2'b10:cstate_r=inwater;2'b11:cstate_r=music;default:;endcaseendelsecstate_r=dry;//6rinse:if(emergency)cstate_r=idle;elseif(rinse_test)cstate_r=drain;elsecstate_r=rinse;//7music:if(emergency)cstate_r=idle;elseif(music_test)cstate_r=idle;elsecstate_r=music;default:cstate_r=idle;endcaseendreg[28:0]counter;reg[3:0]num;//regin_water;always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginsteep_test=1'b0;wash_test=1'b0;dry_test=1'b0;rinse_test=1'b0;music_test=1'b0;water_time=2'd0;drain_time=2'd0;dry_time=2'd0;counter=29'd0;num=4'd0;music_test=1'b0;clockwise=1'b1;anticlockwise=1'b1;finish=1'b1;endelsebegincase(cstate_r)idle:begin//0music_test=1'b0;//音乐结束信号复位clockwise=1'b1;anticlockwise=1'b1;//电机旋转方向信号finish=1'b1;//结束信号wash_test=1'b0;//洗涤完成信号复位rinse_test=1'b0;dry_test=1'b0;//将甩干标志清零steep_test=1'b0;//将浸泡结束标志位复位music_test=1'b0;endinwater:begin//1water_test不用置零clockwise=1'b1;anticlockwise=1'b1;level=1'b1;//档位跳到低位档dry_test=1'b0;//将甩干标志清零if(water_test)begin//进水完成信号为外部输入信号if(water_time==2'b11)beginwater_time=2'b00;endelsewater_time=water_time+1'b1;endendsteep:begin//2clockwise=1'b1;anticlockwise=1'b1;if(counter==29'd2500

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功