EDA洗衣机实验.docx
- 文档编号:27641861
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:24
- 大小:366.17KB
EDA洗衣机实验.docx
《EDA洗衣机实验.docx》由会员分享,可在线阅读,更多相关《EDA洗衣机实验.docx(24页珍藏版)》请在冰豆网上搜索。
EDA洗衣机实验
实训报告
课程名称:
ED(洗衣机控制的设计)
学生姓名:
肖忠亮
学号:
8000610040
专业班级:
计算机软件
南昌大学实训报告
学生姓名:
肖忠亮学号:
8000610040专业班级:
计算机软件实训类型:
口验证□综合二设计口创新实训日期:
实验成绩:
一、实训工程名称
洗衣机控制电路
1.熟悉verilog语言的程序的设计。
2.熟悉QuatusII软件的使用。
3.熟练掌握代码对硬件的烧写。
4.使用verilog语言设计具有创新的硬件电路
三、实训要求
1.熟悉EDA的开发环境QuartusII软件的使用;
2.设计原理图或者功能模块;
3.根据原理图或者功能图编写代码;
4.实现洗衣机控制系统的仿真:
四、实训基本原理(附原理图、源程序清单)
控制功能说明:
1.洗衣机的工作状态为待机5秒,正转60秒,待机5秒,反转60秒,并用3个led灯和7段显示器表示工作的状态和显示相应工作状态下的时间。
2.可以自定义来控制洗衣机的循环次数。
3.具有紧急情况的处理功能,
4.设定循环次数递减到0的时候就立刻报警,以表示设定的循环次数已经结束。
5.
设计代码如下:
2个数码管,34表后二个数码管LED洗衣机工作的的状态的显示//时钟信号
//暂停和开启按钮(相当于洗衣机遇到经济情况的时候的处理)//电源开关
//表示给增加循环次数的确定的按钮//增加循环次数的开始
//记录洗衣机的状态
//洗完后洗衣机的警报灯
//4个状态的灯管显示//洗衣机工作的时间十位//时间的个位显示//记录洗衣要循环的次数十位显示//循环次数的个位显示
//不工作状态,启动状态,第一个5秒状态,60秒状态,
洗完了状态警报状态,停止状态。
//用来对COUNTER2的数量进行的变换和计算的标志
reg[2:
0]state。
regCPB。
regALARM。
reg[35:
0]i。
reg[7:
0]COUNTER1。
reg[7:
0]COUNTER2。
reg[2:
0]cur_state。
parameter
END=3'h0,READY=3'h1STOP='h6。
/*initial
//标明状态变换
//分频的作用
//铃声的响起
//数码管的显示
//洗衣机循环次数的显示
//表示现在状态和下一个状态
FIRST=3'h2,SECOND='h3
[2:
0]
THIRD='h4,FINALLY='h5,
begin
dec=3'b000。
cur_state=END。
COUNTER1='h00。
COUNTER2='h00。
end*/
always@(posedgeCPA)
//一千万分频(这要对应你的
EDA开发板的时钟)
beginif(i==10000000)begini=0。
CPB<=1。
end
else
begini=i+1。
CPB<=0。
end
end
always@(cur_stateorGO_ST)begincase(cur_state)END:
LED='b1111。
READY:
LED='b1110。
FIRST:
LED='b1101。
SECOND:
LED='b1011。
THIRD:
LED='b0111。
FINALLY:
LED='b0000。
endcaseif(GO_ST)LED='b0000。
end
//洗衣状态的切换
//未开始状态灯全都灭了
//装备状态亮第一盏灯
//第一个5秒状态亮第二盏灯
//60状态是亮第三盏灯
//第二个5秒是亮第四盏灯
//洗完了衣服灯全都亮
//暂停的状态下是灯全亮
always@(S1orS2orstateorGO_ST)
要开启的状态,否则进入停住状态
begin
if(S1&&cur_state==END)
begin
cur_state=READY。
end
elseif(!
S1)
begincur_state=END。
end
elseif(S2&&cur_state==READY)cur_state=FIRST。
else
//洗衣机是否开启的按钮S1按钮是一直
//进入洗衣服的第一步阶
begin
case(state)
//状态的变换
//出现
//出现
'b010:
cur_state=FIRST。
'b011:
cur_state=SECOND。
'b100:
cur_state=THIRD。
'b101:
cur_state=FINALLY。
endcaseend
end
always@(posedgeCPB)//5,60,5的循环过程的计时
begin
if(!
GO_ST)
begin
case(cur_state)
READY:
begin
state='b000。
COUNTER1='h05。
end
FIRST:
begin
if(COUNTER1[3:
0]==4'h0&&COUNTER1[7:
4]==4'h0)了循环次数的过大现象
begin
state=3'b011。
COUNTER1='h60。
end
elseif(COUNTER1[3:
0]=='h0)
begin
COUNTER1[7:
4]=COUNTER1[7:
4]-'h01。
COUNTER1[3:
0]='h9。
end
else
COUNTER1[3:
0]=COUNTER1[3:
0]-'h01。
end
SECOND:
begin
if(COUNTER1[3:
0]==4'h0&&COUNTER1[7:
4]==4'h0)了循环次数的过大现象
begin
state=3'b100。
COUNTER1='h05。
end
elseif(COUNTER1[3:
0]=='h0)
begin
COUNTER1[7:
4]=COUNTER1[7:
4]-'h01。
COUNTER1[3:
0]='h9。
end
else
COUNTER1[3:
0]=COUNTER1[3:
0]-'h01。
end
THIRD:
begin
if(COUNTER1[3:
0]=='h0&&COUNTER1[7:
4]=='h0)//出现了
循环次数的过大现象
//表示洗衣机循环也结束了
//表示结束状态
//表示当洗衣机洗完了衣
//进入FIRST状态
beginif(COUNTER2=='h00)beginstate=3'b101。
ALARM='b1。
COUNTER1='hee。
服后数码管就会显示ee的字母来提示用户衣服洗完了dec=3'b011。
end
else
beginstate='b010。
if(COUNTER2[3:
0]=='h0)//下面是当做完了一个洗衣循环的时候就要减去一个循环次数begin
//表示对COUNTER2
//表示对低位的数据进
//当一轮循环了就
dec='b010。
的高位进行减数据
end
else
dec='b001。
行减少
COUNTER1='h05。
可以对COUNTER1进行从新赋值
endendelseif(COUNTER1[3:
0]=='h0)
begin
COUNTER1[7:
4]=COUNTER1[7:
4]-'h01。
COUNTER1[3:
0]='h9。
end
else
COUNTER1[3:
0]=COUNTER1[3:
0]-'h01。
end
END:
if(ADD&&cur_state==READY)begin
if(COUNTER2[3:
0]=='h9&&COUNTER2[7:
4]=='h9)//出现了循环次数的过大现象
COUNTER2=8'h01。
elseif(COUNTER2[3:
0]=='h9)
beginCOUNTER2[7:
4]=COUNTER2[7:
4]+'h01。
COUNTER2[3:
0]='h0。
endelseCOUNTER2[3:
0]=COUNTER2[3:
0]+'h01。
end
elseif(dec=='b001)//dec的不同则COUNGER2变换是不同的
beginCOUNTER2[3:
0]=COUNTER2[3:
0]-'h1。
dec='b000。
//当对个位数的数据改动后就不要进行
改动了
end
elseif(dec=='b010)beginCOUNTER2[7:
4]=COUNTER2[7:
4]-'h1。
COUNTER2[3:
0]='h9。
dec='b000。
//当对十位数的数据改动后
就不要进行改动了
end
elseif(dec=='b011)//表示洗衣机洗完了衣服begin
COUNTER2='hee。
//数码管显示EE表示洗
衣机洗完了衣服
dec='b000。
//同样要对dec进行复位
end
elseif(dec=='b100)
begin
COUNTER2='hff。
dec='b000。
end
//表示洗衣机被关闭
//数码管不显示//对dec进行复位
end
always@(COUNTER1[7:
4])begin
case(COUNTER1[7:
4])
0:
LED1[7:
0]='b11000000。
1:
LED1[7:
0]='b11111001。
2:
LED1[7:
0]='b10100100。
3:
LED1[7:
0]='b10110000。
4:
LED1[7:
0]='b10011001。
5:
LED1[7:
0]='b10010010。
6:
LED1[7:
0]='b10000010。
7:
LED1[7:
0]='b11111000。
8:
LED1[7:
0]='b10000000。
9:
LED1[7:
0]='b10010000。
//对应数据数码管的显示
'he:
LED1[7:
0]='b10000110。
'hf:
LED1[7:
0]='b11111111。
endcase
end
always@(COUNTER1[3:
0])
begin
case(COUNTER1[3:
0])
//显示e
//黑屏,这个用EDN的状态
0:
LED2[7:
0]='b11000000。
1:
LED2[7:
0]='b11111001。
2:
LED2[7:
0]='b10100100。
3:
LED2[7:
0]='b10110000。
4:
LED2[7:
0]='b10011001。
5:
LED2[7:
0]='b10010010。
6:
LED2[7:
0]='b10000010。
7:
LED2[7:
0]='b11111000。
8:
LED2[7:
0]='b10000000。
9:
LED2[7:
0]='b10010000。
'he:
LED2[7:
0]='b10000110。
'hf:
LED2[7:
0]='b11111111。
endcase
end
always@(COUNTER2[7:
4])
begin
case(COUNTER2[7:
4])
'h0:
LED3[7:
0]='b11000000。
'h1:
LED3[7:
0]='b11111001。
'h2:
LED3[7:
0]='b10100100。
'h3:
LED3[7:
0]='b10110000。
'h4:
LED3[7:
0]='b10011001。
'h5:
LED3[7:
0]='b10010010。
'h6:
LED3[7:
0]='b10000010。
'h7:
LED3[7:
0]='b11111000。
'h8:
LED3[7:
0]='b10000000。
'h9:
LED3[7:
0]='b10010000。
'he:
LED3[7:
0]='b10000110。
'hf:
LED3[7:
0]='b11111111。
endcase
end
always@(COUNTER2[3:
0])
begin
case(COUNTER2[3:
0])
0:
LED4[7:
0]='b11000000。
1:
LED4[7:
0]='b11111001。
2:
LED4[7:
0]='b10100100。
3:
LED4[7:
0]='b10110000。
4:
LED4[7:
0]='b10011001。
5:
LED4[7:
0]='b10010010。
6:
LED4[7:
0]='b10000010。
7:
LED4[7:
0]='b11111000。
8:
LED4[7:
0]='b10000000。
9:
LED4[7:
0]='b10010000。
'he:
LED4[7:
0]='b10000110。
'hf:
LED4[7:
0]='b11111111。
endcase
//显示e
//黑屏,这个用EDN的状态
//显示e
//黑屏,这个用EDN的状态
//显示e
//黑屏,这个用EDN的状态
end
endmodule
波形图的分析
开始S1信号高电位,即S1信号开始有效,洗衣机开始开启,进入状态1,当ADD高电位,循环计数的控制信号开启,图中红色的显示在ADD有效的情况下LED4显示的数据是2表示,累加到了循环2次的情况最后遇到了S2信号,表示对累加的数据进行确认,到S2到低点位的时候,状态变成了2,即开始洗衣服了。
待机5秒状态
14变成
图中红色线圈到了的是表示洗衣机待机5秒。
同样LED工作灯的显示由
13的情况
洗衣机转动60秒
1^0
AID
Ai
■£>1
AUEN
Ai
11
iliiiil11ili111
CFA
Ai
n_mT_^_rT_rLrL_rLTLrL
S
G0_ST
Ai
看4
□LED
A[1
2^L
JI
&g
0LEB1
HF
92
L
务1S
□LED2
KF
='
PX90X^6XFBX62X^X99
&2T
田LED3
K〔
凹—
召3B
田LEB4
KC
―-i■:
:
L
Si
AI
立
AI
0*47
田...t&ta
U1
F
2ii!
图中红色的圈是表示状态有待机5秒状态变成转动60秒状态,可以看到状态有2变成3,同样LED的工作灯的显示也发生了变换由13变成了11,同样LED1和LED2数据随着计时60秒倒计时显示。
这里只是刚刚工作第一个循环周期,有LED4看出是B0,表示2.
进入第二次的待机5秒
图中显示了状态4维持了5秒进入状态2,而工作的LED显示也发生相应的变换,到这里就完成了一个循环周期,LED4显示的是B0,这循环要一直到LED4变成00的情况表示洗衣机已经洗完了。
洗衣机进入结束状态
0^0
ADD
AC
<1/1
ALAEH
AC
!
!
!
I
CPA
AC
LTLOB
LrLn_^_rLTT_rLrLr
A3
GO_ST
AC
04
SLED
A[1!
ui〕V
[7]
X[01迪
&9
国LED1
HF:
CO
36Xi
Q18
国LED2
HF:
36yi:
©27
国LED3
H0
CO
J(35L
田LED4
H0
[
X関尢
SI
AC
!
「i—
"46
S2
AC
l±]・・・tate
UC
3X
斗
xcyxo
□
当循环次数成立CO(即数码管显示的是0)最后一个循环过后进入洗完后报警状态,即有状态4变成了状态5,同样报警信号ALARM也变高了。
RT图的显示
下面是上面RT图的部分引脚的显示左边的引脚显示:
cur_state[2J$latch_OUTO运cur_state[1]$latch_OUT0>2cur_state[OJ$latch_OUTO逵
OUT
COUNTER1-_OUTO>I
COUNTER1'_OUTO>I
2hi-i
DATA[7..O]
MUX
COUNTER2^OUT0)^Z>—
Mu)c36_OUT~-
Mux35_OUT>7)_-
Mux34OUT—-
右边引脚的显示:
he*
ENA
CLR
LED2[4]$latch
PRE
DQ
rhi-
ENA
CLR
LED2[3]$latch
PRE
D
ENA
CLR
—^^LED2[7..O]
LED2[2]$latch
IPR£I
DUTD
LIldcIS
OUT
IVVULAPW
EQual3
更二COUNTER2-_OUTO
»ALARM'-rL33_3UTD
:
“T
5»L1iix^OUT
•5
9血牡_QUT
3-2
-—D&C^OO1
—=&£^013
-_7—=ec_011
-—=ee_100
-_9Equal4_OUT
itStE_01J
-_5t3[£_011
-—stsle^lOO
OUQUNTE吧_QU"
五、主要仪器设备、软件及耗材
QuartusII,EDA开饭板,电脑。
六、实训步骤
1•分析要设计的工程目的,功能。
2.对各功能进行分析,划分模块。
3•编写代码实现个功能模块。
4.建工程,进行代码调试,成功后进行波形图的分析
6.波形分析没有问题,并且功能都能在波形图上显示。
7.烧写到EDA开发板上进行实验
七、调试过程及处理结果
上面已经分析很详细,这就不多加分析了。
八、思考讨论题或体会或对改进实验的建议
1.这里的洗衣机控制系统都是通过灯的显示来表示洗衣机工作的如今状态,不够切实际。
2.这个洗衣机控制系统不是很实际化,具有制动化。
3.可以对EDA开发板添加转机来具有真实性和客观性。
九、参考资料
《CPLD/FPGA与ASIC设计实践教程》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 洗衣机 实验