完整Verilog HDL课程设计Word格式文档下载.docx
- 文档编号:20882627
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:17
- 大小:330.65KB
完整Verilog HDL课程设计Word格式文档下载.docx
《完整Verilog HDL课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《完整Verilog HDL课程设计Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
全自动洗衣机中,这4个过程可做到全自动依次运行,直至洗衣结束。
全自洗衣机的洗衣桶(外桶)和脱水桶(内桶)是以同一心安放的,内桶可以旋转,作为脱水用。
内桶的周围有许多小孔,使内桶和外桶的水流相通,洗衣机的进水和排水分别由进水电磁阀和排水电磁阀来执行。
进水时通过控制系统将进水电磁阀打开,经进水管将水注入到外桶。
排水时,通过控制系统将排水电磁阀打开,将水由外桶排到机外。
洗涤正转、反转由洗涤电动机驱动波盘的正、反转来实现,此时脱水桶并不旋转。
脱水时,控制系统将离合器合上,由洗涤电动机带动内桶正转进行甩干。
高、中、低水位控制开关分别用来检测高、中、低水位。
启动按钮用来启动洗衣机工作,停止按钮用来实现手动停止进水、排水、脱水及报警.排水按钮用来实现手动排水。
普通洗衣机的工作流程示意图
当按下复位按钮时,洗衣机上电,控制电路复位到初始状态(默认水位为“中”;
使用)者可根据衣服的多少,按下水位控制按钮,改变水位设置,以控制上水时加水的多少;
当按下启动/暂停按钮时,洗衣机开始洗衣的第一个操作:
进水阀门打开,开始上水,并根据水位设置(高、中、低、少)历时不同的时间timeadd(8s、7s、6s、5s);
然后进水阀门关闭,电机开始运转,开始洗衣过程,并历时9s;
然后电机停止运转,排水阀门打开,开始排水,并根据水位设置(高、中、低、少)历时不同的时间timedrain(7s、6s、5s、4s);
然后排水阀门关闭,进水阀门打开,开始第二次上水,并历时timeadd……当甩干结束后,整个洗衣过程完成,扬声器发出持续15秒的急促的“嘀嘀”音,提示用户洗衣结束。
正常运行状态下全自动洗衣机工作过程:
空闲(idle)→第一次加水(water1)7s→洗衣(wash)9s→第一次排水(drain1)6s→第二次加水(water2)7s→漂洗(rinse)9s→第二次排水(drain2)6s→甩干(dry)5s→蜂鸣15s.洗衣机整个工作过程可分为9个状态,运用有限状态机的设计思想来实现。
二、洗衣机控制器的工作原理
有限状态机(FSM,FiniteStateMachine)是一种重要的时序逻辑电路单元,尤其适合于设计数字系统的控制模块。
状态机可以认为是组合逻辑和寄存器逻辑的特殊组合,它一般包括两个部分:
组合逻辑部分和寄存器部分。
组合逻辑部分又包括次态逻辑和输出逻辑,分别用于状态译码和产生输出信号;
寄存器部分用于存储状态.状态机的次态是现态及输入信号的函数,输出信号根据状态机的现态或输入信号而定。
根据输出信号产生方法的不同,状态机可分为两类:
摩尔(Moore)型状态机和米里(Mealy)型状态机.对于Moore型状态机,其输出只为状态机当前状态的函数,而与输入无关.而对于Mealy型状态机,其输出不仅与状态机当前状态有关,而且与输入有关。
实用的状态机一般都设计为同步时序电路,它在时钟信号的触发下,完成各状态之间的转移,并产生相应的输出。
采用VerilogHDL语言实现基于状态机的控制电路设计,就是在时钟信号的触发下,完成两项任务:
(1)用case或if—else语句描述出状态的转移,
(2)描述状态机的输出信号(通常是控制信号)。
1.洗衣机的工作状态
洗衣机有9个工作状态分别为:
空闲(idle)、第一次加水(water1)、洗衣(wash)、第一次排水(drain1)、第二次加水(water2)、漂洗(rinse)、第二次排水(drain2)、甩干(dry)、蜂鸣(beep)。
2.全自动洗衣过程
在洗衣机上电后(默认水位为“中”,通过水位控制按钮设置好合适的)水位,然后按下start_pause启动/暂停按钮,使洗衣机全自动完成整个洗衣过程,此洗衣机控制器状态转移图如下图所示:
洗衣机控制器状态转移图
分析上图:
一旦按下rst按钮,则电路复位到初始状态,控制信号m=0,w=0,d=0。
当按下start_pause启动/暂停按钮时,则进入water1状态,w=1,使进水阀门打开,开始上水,并历时7s。
然后转移到下一状态——wash,w=0,使进水阀门关闭;
同时m=1,使电机开始运转,开始洗衣过程,并历时9s。
再转移到下一状态--drain1,……直到当甩干结束后,整个洗衣过程完成,扬声器发出持续15秒的急促的“嘀嘀”音,提示用户洗衣结束,控制器又返回到初始状态.
3。
单独执行某个洗衣程序
有时候,人们可能需要单独执行某个洗衣程序,如洗涤或脱水,这时可以在洗衣前通过按动洗衣模式选择按钮来选择不同的洗衣程序。
在这种情况下,洗衣机控制器的状态转移图就会比全自动洗衣机控制器状态转移图更复杂一些。
首先在idle状态下,当按下启动/暂停按钮时,控制器要根据不同的洗衣模式跳转到不同的状态:
若默认是全自动洗衣程序或选择浸泡程序,则跳转到water1;
若选择洗涤程序,则跳转到wash;
若选择漂洗程序,则跳转到water2;
若选择甩干,则跳转到dry。
而当洗衣机执行完相应的洗衣程序后,则所有控制信号、计时器应清零,同时控制器应返回初始状态。
因此,在water1状态下,当加好水时控制器不是直接跳转到wash,而是要先判断洗衣模式是否为浸泡程序,若是,则跳转到idle;
若不是,才直接跳转到wash.同理,在drain1状态下,当排完水时控制器不是直接跳转到water2,而是要先判断洗衣模式是否为洗涤程序,若是,则跳转到idle;
若不是,才直接跳转到water2。
在drain2状态下,当排完水时控制器不是直接跳转到dry,而是要先判断洗衣模式是否为漂洗程序,若是,则跳转到idle;
若不是,才直接跳转到dry.
三、洗衣机的状态转换图
1.洗衣机的状态转换图
由上面全自动洗衣机的工作原理,可知洗衣机控制器的状态转换图如下图所示:
洗衣机控制器的状态转换图
2.设计思路
洗衣机控制器系统结构图如下图所示,将整个设计划分为两个子模块:
时钟分频子模块和洗衣机状态控制器子模块。
洗衣机控制器系统结构图
a.时钟分频子模块clkdiv.v
将系统时钟50MHz分频为1KHz,再将1KHz分频为1Hz,以产生洗衣结束时的提示蜂鸣音speaker=clk_1Hz&clk_1KHz&alarm(每间隔1s产生一个音频为1KHz的提示音)。
1Hz的时钟信号还作为洗衣机状态控制器子模块的输入时钟信号,驱动洗衣定时器计数。
b洗衣机状态控制器子模块wash_ctrl。
v
设计时,首先应画出状态转移图并仔细分析,明确在每个状态下控制器要输出哪些控制信号,计数器该怎样计数;
当希望洗衣机暂停时,所有控制信号应都变为0,计数器暂停计数。
当计数器正常计数到预定值时,应跳转到下一状态。
然后用case语句、if—else语句对状态转移和输出进行描述。
信号定义:
inputclk_1KHz,clk_1Hz,rst,start_pause,mode,level,open_door;
start_pause:
启动/暂停按钮信号,高有效;
mode:
洗衣模式选择信号,高有效.不按时,默认全程执行浸泡、洗涤、漂洗、甩干这4个程序;
每按一下,单独选择浸泡,或洗涤,或漂洗,或甩干程序。
level:
水位控制信号(负脉冲),每按一下,循环选择水位(高、中、低、少);
open_door:
洗衣机盖打开信号(负脉冲)第一次按是,“开盖”,再按一次则是合盖。
四、设计程序
1。
全自动洗衣机主程序
timescale1s/100us
Modulewash_FSM([0:
3]times,Clock,,Rst,Start,W,M,D,Speaker);
InputClock,Start,Rst;
Output[0:
3]timees;
OutputW,M,D,Speaker;
Reg[0:
3]times;
Parameter
Idle=0,Water1=1,Wash=2,Drain1=3,Water2=4,Rinse=5,Drain2=6,Dry=7,Beep=8;
Rg[0:
4]wash_state;
always@(negedgeClock)
case(wash_state)
Idle;
If(rst)
begin
State=1;
Wash_state=water1;
else
Wash_state=idle;
end
Water1:
W=1;
If(tims=7s)
Wash_state=wash;
else
Wash_state=water1;
Wash:
M=1;
If(times=9s)
Wash_state=drain1;
Drain1:
D=1;
If(times=6s)
Wash_state=water2;
Water2:
If(times=7s)
Wash—state=rinse;
Rinse:
Wash_state=dry;
Wash_state=rinse;
Dry:
Begin
If(times=5s)
Wash_state=beep;
Wash-state=dry;
endcase
endmodule
对程序进行分析如下:
outputW,M,D;
//W是进水阀门控制信号,M是引擎工作信号,D是放水阀门控制信号
output[3:
0]times;
//定时计数器,用于洗衣各过程的定时计数
outputspeaker;
//洗衣结束提示音信号,驱动扬声器发声
0]nextstate;
//状态机,描述洗衣机的状态转移过程为方便设计,这里还定义了一些中间变量:
reg[3:
0]modestate;
//洗衣模式计数器,0:
默认全自动洗程序,1:
只执行浸泡程序,2:
只执行洗涤程序,3:
只执行漂洗程序,4:
只执行甩干程序。
根据其值决定控制器从idle状态应跳转到哪一状态。
reg[3:
0]waterlevel;
//水位计数器,用来控制加水时间,当水位为高、中、低、少时其值为0、1、2、3.
0]timeadd;
//加水时间计数器,根据水位选择控制加水时间,当水位为高、中、低、少时其值为8s、7s、6s、5s.
reg[3:
0]timedrain;
//排水时间计数器,根据水位选择控制排水时间,当水位为高、中、低、少时其值为7s、6s、5s、4s;
regdoorstate;
//洗衣机盖的状态,为“1”表示盖是打开的,为“0”表示盖是合上的。
regstart_pause_level;
//将启动/暂停脉冲信号转换为相应的高低电平信号。
regalarm;
//蜂鸣状态信号,蜂鸣时alarm为“1”,平时为“0”整个模块包括8大部分:
5
①用parameter常量定义状态机的状态,洗衣、漂洗、甩干和蜂鸣的时间长度
②将启动/暂停脉冲信号转换为高低电平信号always@(posedgestart_pauseorposedgerst)……
③洗衣模式选择(对modestate赋值)always@(posedgerstorposedgemode)…
④水位控制(对waterlevel赋值)always@(posedgerstornegedgelevel)//复位时默认水位为“中”……
⑤open_door信号控制always@(posedgerstornegedgeopen_door)……
⑥根据水位选择控制加水时间和排水时间always@(posedgeclk_1KHz)begincase(waterlevel)……endcaseend
⑦状态机输出及状态转移always@(posedgeclk_1Hzorposedgerst)beginif(rst)//控制信号清零,计数器清零,状态机回到空闲状态elsebegincase(nextstate)idle:
⑧speaker信号输出assignspeaker=clk_1Hz&
clk_1KHz&
alarm;
(1)空闲状态//根据modestate的值判断应跳转到哪个状态water1:
(2)第一次加水beginif(!
start_pause_level)begin……end
暂停操作elsebeginif(times<
timeadd-1)begin……end
若未加好水,则一直加水elsebegin……end
否则根据modestate是否为4’d1判断应跳转到空闲态或下一个状态endendwash
(3)洗衣6drain1:
(4)第一次排水//若未排完水,则一直排水
否则根据modestate是否为4'
d2判断应跳转到空闲态或下一个状态water2:
(5)第二次加水rinse:
(6)漂洗drain2:
(7)第二次排水//若未排完水,则一直排水
否则根据modestate是否为4’d3判断应跳转到空闲态或下一个状态dry:
(8)甩干beep:
(9)蜂鸣endcaseendend
2。
全自动洗衣机测试程序
moduleWash_FSM_test_v;
regclock;
regstart;
regrst;
wireW;
wireM;
wireD;
wirespeak;
alwaysbegan
#3clk=1;
#3clk=0;
initialbegin
W=0;
M=0;
D=0;
#3;
W=1;
M=0;
#7;
M=1;
W=0;
D=0;
#9;
D=1;
#6;
#7;
M=1;
#9;
D=1;
#6;
#5;
Speaker=1;
#15;
#3;
五、步骤及仿真图
在代码提示框架中完成核心子模块wash_ctrl。
v的设计
对核心子模块wash_ctrl。
v进行时序仿真
(1)仿真全程自动顺序执行浸泡、洗涤、漂洗、甩干这4个程序当rst信号来到时,所有的信号置零;
当start_pause信号有效时,进入加水状态;
只要不再按下start_pause按钮,洗衣机将按照预定的时序自动完成洗衣的全过程。
洗衣过程全部自动完成的仿真图
(2)仿真人工干预洗衣过程
在洗衣过程全部自动完成后,再分别给rst和start_pause一个正脉冲,模拟一次新的洗衣过程。
在洗衣状态(wash)下,第二次按下start_pause按钮,则M从“1”变为“0”,洗衣机暂停操作;
稍后第三次按下start_pause按钮时,则M从“0”变为“1”,洗衣机继续操作。
(3)仿真选择洗衣模式
在人工干预洗衣过程结束后,再给rst一个正脉冲,模拟一次新的洗衣过程。
当第一次按下mode按钮时,洗衣机进入浸泡程序操作;
第二次按下mode按钮时,洗衣机进入洗涤程序。
当然,若依次按下mode按钮时,洗衣机会依次进入漂洗、甩干程序(后两个程序限于篇幅不作图解).仔细观察modestate和nextstate的变化。
选择洗衣模式的仿真图
(4)仿真进行水位控制
在上述洗衣过程结束后,再给rst一个正脉冲,模拟一次新的洗衣过程。
先给level一个负脉冲,设置水位为低,再启动;
到第二次加水期间,给level一个负脉冲,设置水位为少。
观察洗衣和漂洗过程中的加水时间和排水时间是否分别与设置的水位相一致。
设置水位分别为低和少时的仿真图
(5)仿真在甩干过程中,打开洗衣机盖的现象
在甩干过程中,先后打开和合上洗衣机盖时的仿真图
六、功能图
设计顶层图形文件,编译
这里用未消抖按键9、按键10(低有效),作为水位控制信号level_n与洗衣机盖打开信号open_door_n的控制键,因此还需要增加按钮消抖模块。
顶层图形文件
2.功能引脚锁定
(1)输入信号:
clk(f=50MHz)接Pin28;
rst接键1(Pin233);
start_pause接键4(Pin236);
mode接键7(Pin239);
level_n:
水位控制信号,负脉冲有效,接键9(Pin132);
open_door_n:
洗衣机盖打开信号,负脉冲有效,接键10(Pin128).
(2)输出信号:
W接发光二极管D8(Pin168);
M接D7(Pin167)接D6(Pin166);
D;
times[3。
.0]:
当前状态工作时间,接数码管1,从高位到低位分别接Pin16、Pin15、Pin14、Pin13;
nextstate[3..0]:
当前工作状态,接数码管2,从高位到低位分别接Pin20、Pin19、Pin18、Pin17;
modestate[3。
。
0]:
所选洗衣模式,接数码管7,从高位到低位分别接Pin140、Pin139、Pin138、Pin137;
10waterlevel[3。
0]:
当前水位档位,接数码管8,从高位到低位分别接Pin160、Pin159、Pin158、Pin141;
speaker接Pin174。
心得体会
通过本次课程设计,我认为,在这学期的课设中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在课设过程中,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践.
我们采用Verilog语言作为执行核心,通过了种从无到有,从不会到自由运用的过程。
在某种意义上说,这是一种锻炼,一种知识的积累,能力的提高。
完全可以把这个当作基础东西,只有掌握了这些最基础的,才可以更进一步,取得更好的成绩。
很少有人会一步登天吧。
永不言弃才是最重要的.
而且,这对于我们的将来也有很大的帮助.以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。
”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它.只有不断的测试自己,挑战自己,才能拥有更多的成功和快乐!
认真对待每一个任务,珍惜每一分一秒,学到最多的知识和方法,锻炼自己的能力,这个是我们在Verilog课程中学到的最重要的东西,也是以后都将受益匪浅的!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整Verilog HDL课程设计 完整 Verilog HDL 课程设计