《EDA洗衣机控制器资料》由会员分享,可在线阅读,更多相关《EDA洗衣机控制器资料(16页珍藏版)》请在金锄头文库上搜索。
1、东 北 石 油 大 学课 程 设 计课 程 EDA技术课程设计 题 目 洗衣机控制器 院 系 专业班级 学生姓名 谭 伟 学生学号 指导教师 2017年 3 月3日东北石油大学课程设计任务书课程 EDA技术课程设计题目 洗衣机控制器专业 姓名 谭 伟 学号主要内容、基本要求、主要参考资料等主要内容:设计一个洗衣机控制器,要求洗衣机有正转、反转、暂停三种状态。设定洗衣机的工作时间,要洗衣机在工作时间内完成:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒”,定时到则停止,同时发出提示音。基本要求:1、设计一个电子定时器,控制洗衣机作如下运转:定时启动正转20秒暂
2、停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒”,定时到则停止;2、若定时到,则停机发出音响信号;3、用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;4、三只LED灯表示“正转”、“反转”、“暂停”三个状态。主要参考资料:1夏宇闻.Verilog数字系统设计(第2版)M. 北京:北京航空航天大学出版社,2008.2潘松.EDA技术实用教程-Verilog HDL版(第五版)M. 北京:科学出版社,2010.3阎石.数字电子技术基础(第五版) M. 北京:高教出版社,2006.完成期限 2017.3.3 指导
3、教师 专业负责人 2017年2月27日14一、设计思想1.基本原理(1)本课程设计编程采用模块化的硬件描述语言Verilog HDL进行设计。(2)洗衣机控制器的设计主要是时序控制和定时器的设计。(3)使用分频模块输出1Hz方波,给定时器设定秒数每1s自加1的信号。当开始信号发出后,秒数开始自加,至59时置0,并给分钟进位,由于倒计时显示分钟数,将分钟数减一再显示,过程由定时时间模块完成。将分钟数显示由数码管显示模块实现。同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、暂停工作方式及工作状态灯。2.设计框图本课程设计框图由四个部分组成:开始信号、预置时间、数码管显示、洗衣机工作
4、及时间脉冲。框图如图1下:数码管显示 洗衣机工作预置时间开始信号 时间脉冲 图1洗衣机的设计框图二、设计步骤和调试过程1.模块设计及相应模块代码(1)分频模块本课程设计选用器件系列Family :Cyclone IV E 芯片选择Avaliable devices:EP4CE115F29C7(信号频率固定为50MHz)分频模块的作用是将50MHz分频为1Hz,即周期为1s,用于计数。模块代码如下:module fp(clk_in,clk_out);/clk_in为芯片输出频率,clk_out为1Hzinput clk_in;output reg clk_out;reg 31:0 q;initi
5、al q=0;always(posedge clk_in)if(q=25000000) begin clk_out=1;q=q+1; endelse if(q=50000000) begin clk_out=0;q=0; endelse q=q+1;endmodule(2)定时时间自减部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代码。assign clks0=clks&start; /检测分频信号clks和开始信号startalways(posedge clks0 ) if(s=59) begin s=0;clkm=1;end else if(m=0)&(s=0) s=0;/停机 e
6、lse begin s=s+1;. clkm=0; endassign clkm0=clkm|!sm; /进位信号clkm和输入分钟数smalways(posedge clkm0 ) begin m=m-1; end/定时分钟数自减用分频模块中的clks信号和开始信号,对计数部分进行控制。当检测到开始信号为1和时钟信号高电平时,秒数开始累加。当秒数等于59时,将秒数置0,并且将进位信号置1,用于控制分钟部分。同时分钟数检测到进位信号为1且预置分钟数不为0,将现有分钟数自减1。预置分钟数由用户给定,以上则完成定时时间自减模块。(3)时序控制部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代
7、码。always(posedge clks0)/检测时钟上升沿 if(start)/检测开始信号 begin if( (8h00)(s+2) &(s+2) =8h14) ) begin D1=1;D2=0;D3=0;end/0-20s正转 else if( (s+2)=8h1e) begin D3=1;D2=0;D1=0;end/20-30s暂停 else if( (s+2)=8h32) begin D2=1;D1=0;D3=0;end/30-50s反转 else beginD3=1;D2=0;D1=0;end/50-59s暂停 end else beginD3=0;D2=0;D1=0;end
8、/停机状态当检测到时钟信号为高电平时,即时间又过1s,判断秒数所属区间确定洗衣机工作方式和工作状态灯。如果秒数小于20,即洗衣机正转,同时正转状态灯亮;如果秒数大于20并且小于30,即洗衣机暂停,同时暂停状态灯亮; 如果秒数大于30小于50,即洗衣机反转,同时反转状态灯亮;如果秒数大于50,即洗衣机暂停,同时暂停状态灯亮。(4)数码管显示模块module m10led(m,s,m1,m0,s0,s1); /将分秒的个位十位分离成两组十六进制数input7:0 m,s;wire 6:0 a0,a1,b0,b1;output7:0 s0,s1,m1,m0;wire7:0 seg0,seg1;ass
9、ign a0=s%10,a1=s/10;assign seg07:4,seg03:0=a13:0,a03:0;led m00(.SW(seg0),.HEX1(s1),.HEX0(s0);/秒数显示assign b0=m%10,b1=m/10;assign seg17:4,seg13:0=b13:0,b03:0;led m01(.SW(seg1),.HEX1(m1),.HEX0(m0);/显示实时分钟数endmodulemodule led(SW,HEX1,HEX0); /将两组十六进制数转码为数码管显示的数值input 7:0SW;output reg6:0HEX1,HEX0;paramete
10、r seg0= 7b1000000,seg1 = 7b1111001,seg2 = 7b0100100,seg3 = 7b0110000,seg4 = 7b0011001,seg5 = 7b0010010,seg6 = 7b0000010,seg7 = 7b1111000,seg8 = 7b0000000,seg9 = 7b0010000,sega = 7b0001000,segb = 7b0000011,segc = 7b1000110,segd = 7b0100001,sege = 7b0000110,segf = 7b0001110;always (*)case(SW3:0) 4h0:
11、HEX06:0 = seg0;4h1: HEX06:0 = seg1;4h2: HEX06:0 = seg2;4h3: HEX06:0 = seg3;4h4: HEX06:0 = seg4;4h5: HEX06:0 = seg5;4h6: HEX06:0 = seg6;4h7: HEX06:0 = seg7;4h8: HEX06:0 = seg8;4h9: HEX06:0 = seg9;4ha: HEX06:0 = sega;4hb: HEX06:0 = segb;4hc: HEX06:0 = segc;4hd: HEX06:0 = segd;4he: HEX06:0 = sege;defau
12、lt:HEX06:0 = seg0;endcasealways (*)case(SW7:4)4h0: HEX16:0 = seg0;4h1: HEX16:0 = seg1;4h2: HEX16:0 = seg2;4h3: HEX16:0 = seg3;4h4: HEX16:0 = seg4;4h5: HEX16:0 = seg5;4h6: HEX16:0 = seg6;4h7: HEX16:0 = seg7;4h8: HEX16:0 = seg8;4h9: HEX16:0 = seg9;4ha: HEX16:0 = sega;4hb: HEX16:0 = segb;4hc: HEX16:0 =
13、 segc;4hd: HEX16:0 = segd;default:HEX16:0 = seg0;endcaseendmodule数码管显示模块包括将八进制的秒数和分钟数的个位十位分离成两组十六进制数,并将两组十六进制数转码为数码管显示的数值。模块m10led的作用是分和秒的个位十位分离成两组十六进制数。模块led将两组十六进制数转码为数码管显示的数值。可被调用,简化编码。(5)定时停机音响信号部分写在顶层文件中,部分代码如下,详见(6)顶层文件源代码。always(s,m) if(m=0&s=0) begin bo=1;end else bo=0;当检测秒数和分钟数都为0时,即倒计时结束,发出停机音响信号。(6)顶层文件module