基于VerilogHDL的洗衣机程序.docx

上传人:b****4 文档编号:3707752 上传时间:2022-11-24 格式:DOCX 页数:14 大小:194.45KB
下载 相关 举报
基于VerilogHDL的洗衣机程序.docx_第1页
第1页 / 共14页
基于VerilogHDL的洗衣机程序.docx_第2页
第2页 / 共14页
基于VerilogHDL的洗衣机程序.docx_第3页
第3页 / 共14页
基于VerilogHDL的洗衣机程序.docx_第4页
第4页 / 共14页
基于VerilogHDL的洗衣机程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于VerilogHDL的洗衣机程序.docx

《基于VerilogHDL的洗衣机程序.docx》由会员分享,可在线阅读,更多相关《基于VerilogHDL的洗衣机程序.docx(14页珍藏版)》请在冰豆网上搜索。

基于VerilogHDL的洗衣机程序.docx

基于VerilogHDL的洗衣机程序

EDA嵌入式系统课程设计

印刷学院

课程设计报告

——嵌入式系统EDA

课程设计名称:

EDA技术课程设计

课程设计题目:

洗衣机控制电路

专业:

电子信息工程专业

班级:

XXXXX

学生XX:

XXXXXXXXXXXXX

XXXXXXXXXXX

指导教师:

XXXXXXX

时间:

XXXXXX至XXXXX年XXXX月XXXX日

一、设计任务要求·················································3

1、根本要求···················································3

二、总体设计方案·················································3

1、系统功能···············································3

2、系统设计···············································3

1)系统构造框图···········································3

2)模块分析···············································3

1、分频模块···············································3

2、七段数码管显示模块·····································3

3、洗衣机主程序模块·······································3

三、应用设备及软件介绍···········································3

1、主要仪器设备〔实验用的软硬件环境〕······················3

2、实验的软件环境·········································4

3、操作方法与实验步骤·····································4

四、调试过程分析、遇到的问题及解决方法···························4

1、分频模块···············································3

2、七段数码管显示模块·····································3

3、洗衣机主程序模块·······································3

五、设计结论·····················································3

六、DE2管脚分配说明············································3

七、参考文献·····················································3

八、附录·························································3

附录一分频模块··················································9

附录二七段数码管显示模块········································9

附录三洗衣机主程序模块··········································9

一、设计任务要求

1、根本要求:

1〕洗衣机的状态为待机5s→正转60s→待机5s→反转60s→,并用3个LED灯和7段显示器分别表示其工作状态和显示相应工作状态下的时间。

2)可自行设定洗衣机的循环次数,这里设置最大的循环次数为15次。

3)具有紧急情况的处理功能。

当发生紧急情况时,立即转入待机状态,紧急情况解除后,继续执行后续步骤。

4)洗衣机设定循环次数递减到零时立即报警,以表示洗衣机设定的循环次数已经完毕。

二、设计方案

1、系统功能

根本功能:

能够实现洗衣机在设置洗衣次数后待机5s→正转60s→待机5s→反转60s的四种根本状态,并且可显示循环次数,当遇到紧急状态时可翻开紧急开关,暂停洗衣机的工作。

当洗衣机循环次数递减到0时洗衣机自动报警。

2、系统设计

1)系统构造框图,如图1-1所示:

通过分频模块得到1Hzclk作为标准时钟输入到洗衣机主程序模块中,rst,en,start,add,四个输入信号作为洗衣机主程序模块的总输入,所得到的led信号分别用三个红灯显示,alarm信号用一个红灯显示,numa信号、numb信号、tim信号用七段数码管显示,最终实现了洗衣机的各项功能。

图1-1

2)模块分析

1、分频模块

将系统给定的50MHZ的频率通过分频模块变成1HZ的clkclk,〔我们在这里以50分频为

例〕输入一个50MHz的信号作clkin,每当clkin上升沿来时,count计数加1,且每当

count==24时,clkout取反一次并且count<=0,这样会得到一个1MHz的信号,然后在进展

3次100分频,即可得到1HZclk作为我们后面所需的标准时钟。

其流程图及预制仿真图如

以下列图:

图2-1.1,图2-1.2,图2-1.3为100分频仿真所示:

 

N

Y

N

Y

Y

图2-1.1

图2-1.2

图2-1.3

2、七段数码管显示模块:

运用三个七段数码管显示模块,分别显示倒计时个位numa,倒计时十位numb,循环剩余次数tim,如图2-2.1,图2-2.2,图2-2.3,图2-2.4

图2-2.1

图2-2.2

图2-2.3

图2-2.4

3、洗衣机主程序模块:

如图3-1状态转换图与图3-2软件流程图所示,控制模块采用有限状态机实现对洗衣机工作状态的控制。

启动start后,控制器首先进入待机s0状态,时间从5秒倒计时,如果没有到0秒那么继续等待,时间自减;当t=0,进入洗衣机正转s1状态,时间从60秒倒计时,如果没有到0秒那么继续等待,时间自减;当t=0,进入洗衣机待机s2状态,同理等待5秒;当t为零后,进入s3洗衣机发转状态,时间从60秒倒计时,如果没有到0秒那么继续等待,时间自减;整个过程依次循环。

紧急状态en,当按下紧急停顿按钮后,处于正反转状态中的电机停顿转动,同时紧急报警LED灯亮,因此紧急状态不设定独立状态。

图3-1

图3-2

三、应用设备及软件介绍

1:

主要仪器设备〔实验用的软硬件环境〕

〔1〕计算机;

〔2〕DE2开发板〔ALTERACyclone2〔2C35〕〕;

〔3〕电源线一根;

〔4〕USB下载线一根。

2:

实验的软件环境

QuartusII9.0软件

3:

操作方法与实验步骤

〔1〕利用QuartusII9.0软件实现EDA的根本设计流程:

创立工程、编辑文本输设计

文件、编译前设置、全程编译、功能仿真。

(2)利用QuartusII9.0软件实现引脚锁定和编译文件下载。

四、调试过程分析、遇到的问题及解决方法

1、分频模块的调试:

分析:

如图4-1所示,每当count==24时,clkout实现一次翻转,并且count清零;

该模块总体来说思路较为简单,一般都是一次性成功的〔以50分频为例〕,其仿真图如以下列图4-1

图4-1

2、七段数码管显示模块的调试:

洗衣机对七段数码管显示的要求不太高,设计好该模块的程序后,只需将洗衣机主程序模块下的输出numa,numb,tim三个信号分别接入三个七段数码管显示模块即可显示出对应的数字。

3、洗衣机主程序模块的调试:

在设计洗衣机的时候我们小组大致的步骤如下:

1、弄清洗衣机有哪几种按键

在编写程序时我们小组决定先由易到难,从按键下手,整个洗衣机应有rst(复位键〕,add〔设置循环次数键〕、start〔开场键〕、、en〔紧急暂停键〕这四个键,并将这四个按键作为输入。

2、确立洗衣机有哪几种状态

我们小组认为该洗衣机洗衣时应有四种状态:

S0:

待机5S;S1:

正转60S;S2:

待机5S;S3:

反转60S;S4:

待机5秒。

计数的十位用numb表示,计数的个位用numa表示。

将这四种状态作为一次循环。

在编写程序时我们一开场选择从0开场计数到5,切换状态再从0开场计数到60换状态,跑板子的时候总觉得奇怪,后来经过思考,一般洗衣机计时都是倒数的,于是我们才将程序改正过来。

在编写程序时,我们把系统紧急状态也归在这四个状态当中,结果每个状态都得判断是否为紧急状态,导致程序变得非常的繁琐,后来经思考才将紧急信号作为按键输入,这样一来程序变得简练了,不必每个状态都加上紧急状态。

之后经过我们小组的努力修改和调试,最终完成了洗衣机主程序。

洗衣机的仿真如以下列图

如图4-1所示,rst置高电平,控制器复位,rst低电平后,add按下两次,设置循环次数为2,按下start后置为高电平,洗衣机开场工作。

图4-1洗衣机正常运行的仿真图

如图4-2所示,紧急状态发生,en变为高电平,洗衣机暂停工作,电机停顿运转,紧急状态完毕后,恢复原状态。

图4-2紧急暂停仿真图

如图4-3所示,紧急暂停完毕,en恢复低电平,再次开场工作,进入下一循环。

图4-3紧急状态完毕,状态恢复

五、设计结论

1〕通过设计,实现了一个能够实现洗衣机在按下add设置洗衣次数后按下start洗衣机开场待机5s待机灯亮→正转60s待机灯灭,正转灯亮→待机5s正转灯灭,待机灯亮→反转60s待机灯灭反转灯亮的四种根本状态,并且可用tim显示循环次数,当遇到紧急状态时可翻开紧急开关en,暂停洗衣机alarm灯亮的工作。

当洗衣机循环次数递减到0时洗衣机自动报警,alarm灯亮。

2〕设计体会:

通过这次课程设计使我发现了很多自己在EDA学习中被忽略的问题,一些重点。

从一次次的程序的调试中发现了自己在程序设计中的弱项,为自己敲了一个警钟。

更是我充分的认识到不断学习、不断探索的重要性。

通过查阅其它资料丰富了我们的知识,是我们所能学到的。

东西不仅仅是局限于课堂上,加强了我们自主学习的积极性。

并且从同学的相互交流中弥补了自身的弱点。

形成了一种你争我赶的良好学风。

因为这次课设题目的新颖,更提高了我们的自主创新能力,大幅的提高了我们的学习效率,快速的实现了学以致用的目的。

在整个设计工过程中,尤其是设计之前,一定要有整体的逻辑思路;然后在分块解决。

同样在检测的过程中,要学会分模块检测,这一点是很重要的,会起事半功倍的效果。

小组成员之间要及时沟通,分享思路及想法,不断改良,成员之间还要互相现任,还要有耐心。

总之,通过这次课设我受益匪浅。

3)3:

系统工程图及洗衣机效果展示图如以下列图:

图5-1至图5-6所示

图5-1

六、DE2管脚分配说明

图6-1

七、参考文献

[1]夏宇闻.Verilog数字系统设计教程(第3版).航空航天.2021.

[2]夏宇闻.Verilog嵌入式数字系统设计教程.航空航天.2021.

八、附录

附录1:

分频模块〔此处选取50分频,其余分频模块省略〕

modulefenping50(clockin,clockout);

inputclockin;

outputclockout;

reg[9:

0]count;

regclockout;

parameterN=24;//改变N的值可以显示任意偶分频

always(posedgeclockin)//clockin上升沿触发

begin

if(count==N)

begin

count<=3'b000;

clockout<=~clockout;//counter==24的时候clockout实现一次翻转

end

else

count<=count+3'b001;

end

Endmodule

附录2:

七段数码管显示模块

moduleseg7(code,display);

input[3:

0]code;

output[6:

0]display;

reg[6:

0]display;

always(code)

begin

case(code)

4'b0000:

display<=7'b1000000;//0

4'b0001:

display<=7'b1111001;//1

4'b0010:

display<=7'b0100100;//2

4'b0011:

display<=7'b0110000;//3

4'b0100:

display<=7'b0011001;//4

4'b0101:

display<=7'b0010010;//5

4'b0110:

display<=7'b0000011;//6

4'b0111:

display<=7'b1111000;//7

4'b1000:

display<=7'b0000000;//8

4'b1001:

display<=7'b0011000;//9

default:

display<=7'b1000000;//F

endcase

end

Endmodule

附录3:

洗衣机主程序模块

modulewasher(clk,rst,en,start,add,fore,back,numa,numb,alarm,led,tim);

inputclk,rst,start,add,en;//en为紧急状态信号

outputregfore,back,alarm;//displayled,wait:

led[0],fore:

led[1],back:

led[2]

outputreg[3:

0]numa,numb,tim;//numa为倒计时个位,numb为倒计时十位

outputreg[2:

0]led;

reg[3:

0]state;

reg[3:

0]count;

parameters0=4'b0001,

s1=4'b0010,

s2=4'b0100,

s3=4'b1000;

always(posedgeaddorposedgerst)//循环次数count设置

begin

if(rst)

count<=1'b0;

else

begin

if(start==0)

begin

if(count<15)

count<=count+1'b1;

else

count<=1'b0;

end

end

end

always(posedgeclkorposedgerst)

begin

if(rst)//系统复位

begin

back<=1'b0;

fore<=1'b0;

numa<=4'b0000;

numb<=4'b0000;

state<=s0;

led<=3'b001;

alarm=1'b0;

end

else

begin

if(!

en&&start)//start为1,en为0那么正常工作

begin

alarm<=0;

if(tim)//循环次数tim>0,开场工作

begin

case(state)

s0:

begin

if(numb==0&&numa==0)//时间为0,状态转移

begin

state<=s1;

numa<=4'b0100;//4

numb<=4'b0000;//0

led<=3'b001;

back<=1'b0;

fore<=1'b0;

end

else

begin

state<=s0;

led<=3'b100;

back<=1'b0;

fore<=1'b0;

end

end

s1:

begin

if(numb==0&&numa==0)

begin

state<=s2;

numa<=4'b1001;//9

numb<=4'b0101;//5

back<=1'b0;

fore<=1'b1;

led<=3'b010;

end

else

begin

state<=s1;

led<=3'b001;

back<=1'b0;

fore<=1'b0;

end

end

s2:

begin

if(numb==0&&numa==0)

begin

state<=s3;

numa<=4'b0100;//4

numb<=4'b0000;//0

back<=1'b0;

fore<=1'b0;

led<=3'b001;

end

else

begin

state<=s2;

back<=1'b0;

fore<=1'b0;

led<=3'b010;

end

end

s3:

begin

if(numb==0&&numa==0)

begin

state<=s0;

numa<=4'b1001;//9

numb<=4'b0101;//5

led<=3'b100;

back<=1'b1;

fore<=1'b0;

end

else

begin

state<=s3;

back<=1'b0;

fore<=1'b0;

led<=3'b001;

end

end

default:

state<=s0;

endcase

if({numb,numa}>0)//倒计时控制局部

begin

if(numa==0)//numa为0,那么numa赋值9,numb自减1

begin

numa<=9;//9

numb<=numb-1'b1;

end

else

numa<=numa-1'b1;

end

elseif(numa==0&&numb==0&&state==s0&&!

en&&led==3'b100)

begin//一次循环完毕tim自减1

tim<=tim-1'b1;

end

end

else

begin

back<=1'b0;

fore<=1'b0;

numa<=4'b0000;

numb<=4'b0000;

alarm<=0;

state<=s0;

led<=3'b001;

end

end

elseif(en&&start)//en为1,进入紧急状态

begin

back<=1'b0;

fore<=1'b0;

alarm<=1'b1;

end

else//start为0,给循环次数tim赋值

begin

tim<=count;

numa<=0;

numb<=0;

alarm<=1'b0;

end

end

end

endmodule

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

当前位置:首页 > 求职职场 > 简历

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

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