EDA洗衣机控制器资料

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

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

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

资源描述

东北石油大学课程设计2017年3月3日课程EDA技术课程设计题目洗衣机控制器院系专业班级学生姓名谭伟学生学号指导教师东北石油大学课程设计任务书课程EDA技术课程设计题目洗衣机控制器专业姓名谭伟学号主要内容、基本要求、主要参考资料等主要内容:设计一个洗衣机控制器,要求洗衣机有正转、反转、暂停三种状态。设定洗衣机的工作时间,要洗衣机在工作时间内完成:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒……”,定时到则停止,同时发出提示音。基本要求:1、设计一个电子定时器,控制洗衣机作如下运转:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒……”,定时到则停止;2、若定时到,则停机发出音响信号;3、用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;4、三只LED灯表示“正转”、“反转”、“暂停”三个状态。主要参考资料:[1]夏宇闻.Verilog数字系统设计(第2版)[M].北京:北京航空航天大学出版社,2008.[2]潘松.EDA技术实用教程-VerilogHDL版(第五版)[M].北京:科学出版社,2010.[3]阎石.数字电子技术基础(第五版)[M].北京:高教出版社,2006.完成期限2017.3.3指导教师专业负责人2017年2月27日1一、设计思想1.基本原理(1)本课程设计编程采用模块化的硬件描述语言VerilogHDL进行设计。(2)洗衣机控制器的设计主要是时序控制和定时器的设计。(3)使用分频模块输出1Hz方波,给定时器设定秒数每1s自加1的信号。当开始信号发出后,秒数开始自加,至59时置0,并给分钟进位,由于倒计时显示分钟数,将分钟数减一再显示,过程由定时时间模块完成。将分钟数显示由数码管显示模块实现。同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、暂停工作方式及工作状态灯。2.设计框图本课程设计框图由四个部分组成:开始信号、预置时间、数码管显示、洗衣机工作及时间脉冲。框图如图1下:图1洗衣机的设计框图二、设计步骤和调试过程1.模块设计及相应模块代码(1)分频模块本课程设计选用器件系列Family:CycloneIVE芯片选择Avaliabledevices:EP4CE115F29C7(信号频率固定为50MHz)分频模块的作用是将50MHz分频为1Hz,即周期为1s,用于计数。模块代码如下:modulefp(clk_in,clk_out);//clk_in为芯片输出频率,clk_out为1Hzinputclk_in;outputregclk_out;reg[31:0]q;initialq=0;always@(posedgeclk_in)if(q==25000000)beginclk_out=1;q=q+1;endelseif(q==50000000)beginclk_out=0;q=0;end数码管显示预置时间开始信号洗衣机工作时间脉冲2elseq=q+1;endmodule(2)定时时间自减部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代码。assignclks0=clks&&start;//检测分频信号clks和开始信号startalways@(posedgeclks0)if(s==59)begins=0;clkm=1;endelseif((m==0)&&(s==0))s=0;//停机elsebegins=s+1;.clkm=0;endassignclkm0=clkm||!sm;//进位信号clkm和输入分钟数smalways@(posedgeclkm0)beginm=m-1;end//定时分钟数自减用分频模块中的clks信号和开始信号,对计数部分进行控制。当检测到开始信号为1和时钟信号高电平时,秒数开始累加。当秒数等于59时,将秒数置0,并且将进位信号置1,用于控制分钟部分。同时分钟数检测到进位信号为1且预置分钟数不为0,将现有分钟数自减1。预置分钟数由用户给定,以上则完成定时时间自减模块。(3)时序控制部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代码。always@(posedgeclks0)//检测时钟上升沿if(start)//检测开始信号beginif(((8'h00)(s+2))&&((s+2)=8'h14))beginD1=1;D2=0;D3=0;end//0-20s正转elseif((s+2)=8'h1e)beginD3=1;D2=0;D1=0;end//20-30s暂停elseif((s+2)=8'h32)beginD2=1;D1=0;D3=0;end//30-50s反转elsebeginD3=1;D2=0;D1=0;end//50-59s暂停endelsebeginD3=0;D2=0;D1=0;end//停机状态当检测到时钟信号为高电平时,即时间又过1s,判断秒数所属区间确定洗衣机工作方式和工作状态灯。如果秒数小于20,即洗衣机正转,同时正转状态灯亮;如果秒数大于20并且小于30,即洗衣机暂停,同时暂停状态灯亮;如果秒数大于30小于50,即洗衣机反转,同时反转状态灯亮;如果秒数大于50,即洗衣机暂停,同时暂停状态灯亮。3(4)数码管显示模块modulem10led(m,s,m1,m0,s0,s1);//将分秒的个位十位分离成两组十六进制数input[7:0]m,s;wire[6:0]a0,a1,b0,b1;output[7:0]s0,s1,m1,m0;wire[7:0]seg0,seg1;assigna0=s%10,a1=s/10;assign{seg0[7:4],seg0[3:0]}={a1[3:0],a0[3:0]};ledm00(.SW(seg0),.HEX1(s1),.HEX0(s0));//秒数显示assignb0=m%10,b1=m/10;assign{seg1[7:4],seg1[3:0]}={b1[3:0],b0[3:0]};ledm01(.SW(seg1),.HEX1(m1),.HEX0(m0));//显示实时分钟数endmodulemoduleled(SW,HEX1,HEX0);//将两组十六进制数转码为数码管显示的数值input[7:0]SW;outputreg[6:0]HEX1,HEX0;parameterseg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010,seg6=7'b0000010,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b0000011,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always@(*)case(SW[3:0])4'h0:HEX0[6:0]=seg0;4'h1:HEX0[6:0]=seg1;4'h2:HEX0[6:0]=seg2;4'h3:HEX0[6:0]=seg3;4'h4:HEX0[6:0]=seg4;4'h5:HEX0[6:0]=seg5;4'h6:HEX0[6:0]=seg6;4'h7:HEX0[6:0]=seg7;44'h8:HEX0[6:0]=seg8;4'h9:HEX0[6:0]=seg9;4'ha:HEX0[6:0]=sega;4'hb:HEX0[6:0]=segb;4'hc:HEX0[6:0]=segc;4'hd:HEX0[6:0]=segd;4'he:HEX0[6:0]=sege;default:HEX0[6:0]=seg0;endcasealways@(*)case(SW[7:4])4'h0:HEX1[6:0]=seg0;4'h1:HEX1[6:0]=seg1;4'h2:HEX1[6:0]=seg2;4'h3:HEX1[6:0]=seg3;4'h4:HEX1[6:0]=seg4;4'h5:HEX1[6:0]=seg5;4'h6:HEX1[6:0]=seg6;4'h7:HEX1[6:0]=seg7;4'h8:HEX1[6:0]=seg8;4'h9:HEX1[6:0]=seg9;4'ha:HEX1[6:0]=sega;4'hb:HEX1[6:0]=segb;4'hc:HEX1[6:0]=segc;4'hd:HEX1[6:0]=segd;default:HEX1[6:0]=seg0;endcaseendmodule数码管显示模块包括将八进制的秒数和分钟数的个位十位分离成两组十六进制数,并将两组十六进制数转码为数码管显示的数值。模块m10led的作用是分和秒的个位十位分离成两组十六进制数。模块led将两组十六进制数转码为数码管显示的数值。可被调用,简化编码。(5)定时停机音响信号部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代码。always@(s,m)if(m==0&&s==0)beginbo=1;endelsebo=0;当检测秒数和分钟数都为0时,即倒计时结束,发出停机音响信号。5(6)顶层文件moduleWasher(bo,s0,s1,m1,m0,clk,start,sm,D1,D2,D3,m,s);inputclk,sm,start;output[6:0]s0,s1,m1,m0;outputregbo;outputregD1,D2,D3;outputm,s;wireclks0,clkm0;regclkm;reg[7:0]m,s;initialbeginm=5;s=0;D1=0;D2=0;D3=0;endassignclks0=clk&&start;always@(posedgeclks0)if(s==59)begins=0;clkm=1;endelseif((m==0)&&(s==0))s=0;elsebegins=s+1;clkm=0;endassignclkm0=clkm||!sm;always@(posedgeclkm0)beginm=m-1;endalways@(posedgeclks0)beginif(start)beginif(((8'h00)(s+2))&&((s+2)=8'h14))beginD1=1;D2=0;D3=0;endelseif((s+2)=8'h1e)beginD3=1;D2=0;D1=0;endelseif((s+2)=8'h32)beginD2=1;D1=0;D3=0;endelsebeginD3=1;D2=0;D1=0;endendelsebeginD3=0;D2=0;D1=0;endendalways@(s,m)if(m==0&&s==0)beginbo=1;endelsebo=0;m10ledm20(.m(m),.s(s),.m1(m1),.m0(m0),.s0(s0),.s1(s1));endmodule顶层文件实现洗衣机控制器的所有功能。62.仿真及仿真结果分析(1)分频模块测试文件代码:modulefp_vlg_tst();regclk_in;wireclk_out;fpi1(.clk_in(clk_in),.clk_out(clk_out));initialbeginclk_in=0;endalwaysbegin#10000clk_in=~clk_in;endendmodule仿真结果截图如下:图2分频模块仿真图结果分析:将50MHz分频成1Hz,上图可见,实验结果良好。(2)定时时间自减模块测试文件代码:`timescale1us/1nsmodulesettime_vlg_tst();regclk;reg[7:0]sm;regstart;wire[7:0]m;wire[7:0]s;7

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

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

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

×
保存成功