EDA verylog 智能洗衣机.docx

上传人:b****7 文档编号:11513861 上传时间:2023-03-02 格式:DOCX 页数:44 大小:685.43KB
下载 相关 举报
EDA verylog 智能洗衣机.docx_第1页
第1页 / 共44页
EDA verylog 智能洗衣机.docx_第2页
第2页 / 共44页
EDA verylog 智能洗衣机.docx_第3页
第3页 / 共44页
EDA verylog 智能洗衣机.docx_第4页
第4页 / 共44页
EDA verylog 智能洗衣机.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

EDA verylog 智能洗衣机.docx

《EDA verylog 智能洗衣机.docx》由会员分享,可在线阅读,更多相关《EDA verylog 智能洗衣机.docx(44页珍藏版)》请在冰豆网上搜索。

EDA verylog 智能洗衣机.docx

EDAverylog智能洗衣机

实验报告

 

项目名称智能洗衣机控制器的设计

课程名称电子技术课程设计

课程设计日期2012/4/24

 

班级40916

学号4091611

姓名王云枫

 

目录

一、已知条件3

二、性能指标要求3

三、输入输出设计3

四、模块对应器件的设计4

五、ASM图设计4

六、完整程序代码7

七、管脚分配30

八、时序仿真31

九、实验总结43

 

一、已知条件

用Verilog设计一个智能洗衣机控制器。

二、性能指标要求

①设计一个智能洗衣机(全自动洗衣机)控制器,能够实现洗衣,漂洗和脱水的功能。

②要求能够使用按键模拟对洗衣机的控制,能够设置工作模式,为了便于观察,将洗衣机的工作模式和所剩的工作时间用数码管显示出来,能够将洗衣机当前所处的状态用发光管或者数码管显示出来。

【模式1】:

洗特别脏的衣服(洗衣30秒钟)

【模式2】:

洗脏的衣服(洗衣20秒钟)

【模式3】:

洗一般的衣服(洗衣10秒钟)

【模式4】:

漂洗(每次漂洗5秒钟)

【模式5】:

脱水(每次脱水3秒钟)

【洗衣全过程】:

洗衣+脱水+漂洗+脱水+漂洗+脱水,注水完成使用外部传感器S=1表示。

【漂洗模式】:

漂洗+脱水+漂洗+脱水,注水完成使用外部传感器S=1表示。

【脱水模式】:

脱水。

【注】:

操作完毕使用蜂鸣器鸣叫两秒提示。

③画出洗衣机控制器的状态机,写出状态编码方案。

④用Verilog语言对设计进行描述,设计一个测试方案,通过Muxplus对设计进行仿真验证。

并能够下载到实验板上调试成功。

⑤写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。

并谈谈此次实验的收获、感想及建议

三、输入输出设计

输入:

1Hz时钟

七个按键:

复位

启动

模式选择

注水完成

洗衣全过程

漂洗

脱水

输出:

状态数码管,显示0~5

模式选择数码管,显示0~5

秒钟数码管,十位数码管、个位数码管,可显示0~30

蜂鸣器

四、模块对应器件的设计

模式选择:

一个5进制加计数器,用数码管显示0~5。

用一个按键做触发时钟

模式1:

30进制减计数器,用1Hz时钟

模式2:

20进制减计数器,用1Hz时钟

模式3:

10进制减计数器,用1Hz时钟

模式4:

5进制减计数器,用1Hz时钟

模式5:

3进制减计数器,用1Hz时钟

三个组合选择:

用三个按键

洗衣全过程:

49进制减计数器,用1Hz时钟(30+3+5+3+5+3=49)

漂洗模式:

39进制减计数器,用1Hz时钟(20+3+5+3+5+3=39)

脱水模式:

29进制减计数器,用1Hz时钟(10+3+5+3+5+3=29)

注水完成:

一个按键控制(S)

蜂鸣器:

2进制减计数器。

1Hz时钟

启动:

一个按键控制

复位:

一个按键控制

五、ASM图设计

a)整机ASM图

b)控制器ASM图

符号说明:

CR:

复位状态

S1~S5:

模式1~模式5状态

Mode:

模式选择

S:

外部传感器,表示注水完成

FullPro:

全过程洗衣

RinseMode:

漂洗模式

Beep:

蜂鸣状态

End:

终止状态

原理说明:

用户可以选择单选模式和组合模式:

在单选模式下,用户选择5种模式中的一种,模式终止之后即进入蜂鸣报警(Beep)状态,不再进行其他模式。

其中,模式1~4要保证注水完成(S=1)才能进行。

在组合模式下:

1、用户如果选择的是模式1~模式3(Mode=1~3),如果注水完成(S=1),则进行“洗衣(S1~S3)+脱水(S5)+漂洗(S4)+脱水(S5)+漂洗(S4)+脱水(S5)”,洗衣过程的时间长短由用户选择的模式1~模式3决定。

2、用户如果选择了模式4(Mode=4),如果注水完成(S=1),则进行“漂洗(S4)+脱水(S5)+漂洗(S4)+脱水(S5)”

3、用户如果选择了模式5(Mode=4),则进行“脱水(S5)”

组合模式结束后,进入蜂鸣报警状态(Beep),系统终止。

 

六、完整程序代码

//============================washer.v=============================//

modulewasher(State,Mode,Second,Beep,CP,nCR,En,ModeCh,FullPro,Rinse,Dehy,_500hz,S);

inputCP,nCR,En,ModeCh,FullPro,Rinse,Dehy,_500hz,S;

output[7:

0]Second;

output[3:

0]State,Mode;

outputBeep;

reg[7:

0]Second;

reg[3:

0]State,Mode;

regBeep;

regModeEnd;

wireMode_En;

wireveryEn,dirtyEn,normEn,rinseEn,dehyEn,fModeEn,rModeEn,dModeEn;

wireStop;

supply1Vdd;

reg[3:

0]State1,State2,State3,State4,State5,State6,State7,State8;

reg[7:

0]Second1,Second2,Second3,Second4,Second5,Second6,Second7,Second8;

regcountEnd,countEnd1,countEnd2,countEnd3,countEnd4,countEnd5,countEnd6,countEnd7,countEnd8;

/************模式选择*********/

assignMode_En=Vdd&&(~En);

count5ascU1(Mode,ModeEnd,nCR,Mode_En,ModeCh);

/************单选模式*********/

assignveryEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(~Dehy)&&(Mode==4'b0001)&&S;

assigndirtyEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(~Dehy)&&(Mode==4'b0010)&&S;

assignnormEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(~Dehy)&&(Mode==4'b0011)&&S;

assignrinseEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(~Dehy)&&(Mode==4'b0100)&&S;

assigndehyEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(~Dehy)&&(Mode==4'b0101);

verydirtyU2(State1,Second1,countEnd1,CP,nCR,veryEn);//模式1

dirtyU3(State2,Second2,countEnd2,CP,nCR,dirtyEn);//模式2

normalU4(State3,Second3,countEnd3,CP,nCR,normEn);//模式3

rinseU5(State4,Second4,countEnd4,CP,nCR,rinseEn);//模式4

dehydrationU6(State5,Second5,countEnd5,CP,nCR,dehyEn);//模式5

/************组合模式*********/

assignfModeEn=Vdd&&En&&(~Stop)&&(FullPro)&&(~Rinse)&&(~Dehy)&&(Mode>=4'b0001&&Mode<=4'b0011);

assignrModeEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(Rinse)&&(~Dehy)&&(Mode==4'b0100);

assigndModeEn=Vdd&&En&&(~Stop)&&(~FullPro)&&(~Rinse)&&(Dehy)&&(Mode>=4'b0101);

fullU7(State6,Second6,countEnd6,CP,nCR,fModeEn,Mode,S);//全过程

RinseModeU8(State7,Second7,countEnd7,CP,nCR,rModeEn,S);//漂洗模式

dehydrationU9(State8,Second8,countEnd8,CP,nCR,dModeEn);//脱水模式

/************选择切换模块*********/

always@(veryEnordirtyEnornormEnorrinseEnordehyEnorfModeEnorrModeEnordModeEnornCRorcountEnd)

begin

if(veryEn)

beginSecond<=Second1;State<=State1;countEnd<=countEnd1;end

if(dirtyEn)

beginSecond<=Second2;State<=State2;countEnd<=countEnd2;end

if(normEn)

beginSecond<=Second3;State<=State3;countEnd<=countEnd3;end

if(rinseEn)

beginSecond<=Second4;State<=State4;countEnd<=countEnd4;end

if(dehyEn)

beginSecond<=Second5;State<=State5;countEnd<=countEnd5;end

if(fModeEn)

beginSecond<=Second6;State<=State6;countEnd<=countEnd6;end

if(rModeEn)

beginSecond<=Second7;State<=State7;countEnd<=countEnd7;end

if(dModeEn)

beginSecond<=Second8;State<=State8;countEnd<=countEnd8;end

if(~nCR)

beginSecond<=8'h00;State<=4'b0000;countEnd<=1'b0;end

if(countEnd==1'b1)

beginSecond<=8'h00;State<=4'b0000;end

end

/************蜂鸣器模块*********/

BeeperU10(Beep,CP,nCR,countEnd,_500hz);

/************终止模块*********/

assignStop=countEnd;

endmodule

//=======================verydirty.v=============================//

moduleverydirty(State,Second,countEnd,CP,nCR,En);

inputCP,nCR,En;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

count30U1(Second[7:

4],Second[3:

0],countEnd,nCR,En,CP);

always@(posedgeCP)

if(En)

begin

State<=4'b0001;

end

endmodule

//========================dirty.v=============================//

moduledirty(State,Second,countEnd,CP,nCR,En);

inputCP,nCR,En;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

count20U1(Second[7:

4],Second[3:

0],countEnd,nCR,En,CP);

always@(posedgeCP)

if(En)

begin

State<=4'b0010;

end

endmodule

//========================normal.v=============================//

modulenormal(State,Second,countEnd,CP,nCR,En);

inputCP,nCR,En;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

count10U1(Second[3:

0],countEnd,nCR,En,CP);

always@(posedgeCP)

if(En)

begin

State<=4'b0011;

Second[7:

4]<=4'b0000;

end

endmodule

//========================rinse.v=============================//

modulerinse(State,Second,countEnd,CP,nCR,En);

inputCP,nCR,En;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

count5U1(Second[3:

0],countEnd,nCR,En,CP);

always@(En)

if(En)

begin

State<=4'b0100;

Second[7:

4]<=4'b0000;

end

endmodule

//======================dehydration.v=============================//

moduledehydration(State,Second,countEnd,CP,nCR,En);

inputCP,nCR,En;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

count3U1(Second[3:

0],countEnd,nCR,En,CP);

always@(En)

begin

Second[7:

4]<=4'b0000;

if((~En)||(countEnd==1'b1))

begin

State<=4'b0000;

end

elseif(Second>8'b00000000)

begin

State<=4'b0101;

end

end

endmodule

//========================full.v=============================//

modulefull(State,Second,countEnd,CP,nCR,En,Mode,S);

inputCP,nCR,En,S;

input[3:

0]Mode;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second,Second1,Second2,Second3;

regcountEnd,countEnd1,countEnd2,countEnd3;

regflag;

wirecomEn1;

wirecomEn2;

wirecomEn3;

 

wireVdirty_En,dirty_En,norm_En;

supply1Vdd;

assignVdirty_En=Vdd&&(Mode==4'b0001);

assigndirty_En=Vdd&&(Mode==4'b0010);

assignnorm_En=Vdd&&(Mode==4'b0011);

count49U1(Second1[7:

4],Second1[3:

0],countEnd1,nCR,comEn1,CP);

count39U2(Second2[7:

4],Second2[3:

0],countEnd2,nCR,comEn2,CP);

count29U3(Second3[7:

4],Second3[3:

0],countEnd3,nCR,comEn3,CP);

always@(Vdirty_Enordirty_Enornorm_En)

begin

if(Vdirty_En)

beginSecond<=Second1;countEnd<=countEnd1;end

if(dirty_En)

beginSecond<=Second2;countEnd<=countEnd2;end

if(norm_En)

beginSecond<=Second3;countEnd<=countEnd3;end

end

always@(Second)

begin

if(countEnd==1'b1)

begin

State<=4'b0000;

end

elseif(Second>8'b00011000&&comEn1)

State<=4'b0001;

elseif(Second>8'b00011000&&comEn2)

State<=4'b0010;

elseif(Second>8'b00011000&&comEn3)

State<=4'b0011;

elseif((Second<=8'b00011000&&Second>8'b00010101)||

(Second<=8'b00010000&&Second>8'b00000111)||

(Second<=8'b00000010&&Second>=8'b00000000))

State<=4'b0101;

else

State<=4'b0100;

end

always@(posedgeCPorposedgeSornegedgenCR)

begin

if(~nCR)

flag<=1'b0;

elseif(S)

flag<=1'b1;

elseif((Second==8'b00010110)||(Second==8'b00001000))

flag<=1'b0;

else

flag<=flag;

end

assigncomEn1=Vdirty_En&&flag&&En;

assigncomEn2=dirty_En&&flag&&En;

assigncomEn3=norm_En&&flag&&En;

 

endmodule

//========================RinseMode.v=============================//

moduleRinseMode(State,Second,countEnd,CP,nCR,En,S);

inputCP,nCR,En,S;

output[3:

0]State;

output[7:

0]Second;

outputcountEnd;

reg[3:

0]State;

reg[7:

0]Second;

regcountEnd;

regflag;

wirecomEn;

count16U5(Second[7:

4],Second[3:

0],countEnd,nCR,comEn,CP);

always@(Second)

begin

if(countEnd==1'b1)

begin

State<=4'b0000;

end

elseif((Second<=8'b00010110&&Second>=8'b00010001)||(Second<8'b00001000&&Second>=8'b00000011))

begin

State<=4'b0100;

end

else

begin

State<=4'b0101;

end

 

end

always@(posedgeCPorposedgeSornegedgenCR)

begin

if(~nCR)

flag<=1'b0;

elseif(S)

flag<=1'b1;

elseif((Second==8'b00010110)||(Second==8'b00001000))

flag<=1'b0;

end

assigncomEn=En&&flag;

endmodule

//========================Beeper.v=============================//

moduleBeeper(alarm,CP,nCR,BeepEn,_500hz);

input_500hz,CP,nCR,BeepEn;

outputalarm;

regEndS;

reg[3:

0]Q;

supply1Vdd;

count2U1(Q,EndS,nCR,BeepEn,CP);

assignalarm=BeepEn&&_500hz&&(~EndS);

endmodule

//========================count49.v=============================//

modulecount49(CntH,CntL,EndS,nCR,EN,CP);

inputCP,nCR,EN;

output[3:

0]CntH,CntL;

outputEndS;

regEndS;

reg[3:

0]CntH,CntL;

always@(posedgeCPornegedgenCR)

begin

if(~nCR){CntH,C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1