《EDA洗衣机实验报告.doc》由会员分享,可在线阅读,更多相关《EDA洗衣机实验报告.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 实训报告课程名称: ED(洗衣机控制的设计) 学生姓名: 肖忠亮 学 号: 专业班级: 计算机软件 南昌大学实训报告学生姓名: 肖忠亮 学 号: 专业班级: 计算机软件 实训类型: 验证 综合 设计 创新 实训日期: 实验成绩: 一、实训项目名称洗衣机控制电路二、实训目的1熟悉verilog语言的程序的设计。2. 熟悉Quatus II软件的使用。3. 熟练掌握代码对硬件的烧写。4使用verilog语言设计具有创新的硬件电路。三、实训要求1. 熟悉EDA的开发环境Quartus II软件的使用;2. 设计原理图或者功能模块;3. 根据原理图或者功能图编写代码;4. 实现洗衣机控制系统的仿真:
2、四、实训基本原理(附原理图、源程序清单)控制功能说明:1. 洗衣机的工作状态为待机5秒,正转60秒,待机5秒,反转60秒,并用3个led灯和7段显示器表示工作的状态和显示相应工作状态下的时间。2. 可以自定义来控制洗衣机的循环次数。3. 具有紧急情况的处理功能,4. 设定循环次数递减到0的时候就立刻报警,以表示设定的循环次数已经结束。设计代码如下:module washing(CPA,S1,S2,GO_ST,ADD,ALARM,LED,LED1,LED2,LED3,LED4,cur_state); /LED12表示前2个数码管,34表后二个数码管 LED 洗衣机工作的的状态的显示input C
3、PA; /时钟信号input GO_ST; /暂停和开启按钮(相当于洗衣机遇到经济情况的时候的处理)input S1; /电源开关input S2; /表示给增加循环次数的确定的按钮input ADD; /增加循环次数的开始output 2:0cur_state; /记录洗衣机的状态output ALARM; /洗完后洗衣机的警报灯output 3:0LED; /4个状态的灯管显示output 7:0LED1; /洗衣机工作的时间十位output 7:0LED2; /时间的个位显示output 7:0LED3; /记录洗衣要循环的次数十位显示output 7:0LED4; /循环次数的个位显示
4、reg 3:0 LED; /不工作状态,启动状态,第一个5秒状态,60秒状态,第二个5秒状态,洗完了状态警报状态,停止状态。reg 7:0 LED1;reg 7:0 LED2;reg 7:0 LED3;reg 7:0 LED4;reg 2:0dec; /用来对COUNTER2的数量进行的变换和计算的标志位reg 2:0 state; /标明状态变换reg CPB; /分频的作用reg ALARM; /铃声的响起reg 35:0 i;reg 7:0 COUNTER1; /数码管的显示reg 7:0 COUNTER2; /洗衣机循环次数的显示reg 2:0 cur_state; /表示现在状态和下
5、一个状态parameter 2:0 END=3h0 ,READY=3h1 ,FIRST=3h2 ,SECOND=h3 ,THIRD=h4 ,FINALLY=h5, STOP=h6;/*initial begin dec=3b000; /初始化dec是0 COUNTER2的数据不会变动 cur_state=END; COUNTER1=h00; COUNTER2=h00; end*/always (posedge CPA) /一千万分频(这要对应你的EDA开发板的时钟)begin if(i=) begin i=0; CPB=1; end else begin i=i+1; CPB=0; enden
6、dalways (cur_state or GO_ST) /洗衣状态的切换 begin case(cur_state) END:LED=b1111; /未开始状态灯全都灭了 READY:LED=b1110; /装备状态亮第一盏灯 FIRST:LED=b1101; /第一个5秒状态亮第二盏灯 SECOND:LED=b1011; /60状态是亮第三盏灯 THIRD:LED=b0111; /第二个5秒是亮第四盏灯 FINALLY:LED=b0000; /洗完了衣服灯全都亮 endcase if(GO_ST) LED=b0000; /暂停的状态下是灯全亮 endalways (S1 or S2 or
7、state or GO_ST) /洗衣机是否开启的按钮S1按钮是一直要开启的状态,否则进入停住状态 begin if(S1 & cur_state=END) begin cur_state=READY; end else if(!S1) begin cur_state=END; end else if(S2 & cur_state=READY) cur_state=FIRST; /进入洗衣服的第一步阶 else begin case (state) /状态的变换 b010:cur_state=FIRST; b011:cur_state=SECOND; b100:cur_state=THIRD;
8、 b101:cur_state=FINALLY; endcase end endalways (posedge CPB) /5,60 ,5 的循环过程的计时 begin if(!GO_ST) begin case (cur_state) READY: begin state=b000; COUNTER1=h05; end FIRST: begin if(COUNTER13:0=4h0 & COUNTER17:4=4h0) /出现了循环次数的过大现象 begin state=3b011; COUNTER1=h60; end else if(COUNTER13:0=h0) begin COUNTE
9、R17:4=COUNTER17:4-h01; COUNTER13:0=h9; end else COUNTER13:0=COUNTER13:0-h01; end SECOND: begin if(COUNTER13:0=4h0 & COUNTER17:4=4h0) /出现了循环次数的过大现象 begin state=3b100; COUNTER1=h05; end else if(COUNTER13:0=h0) begin COUNTER17:4=COUNTER17:4-h01; COUNTER13:0=h9; end else COUNTER13:0=COUNTER13:0-h01; end
10、 THIRD: begin if(COUNTER13:0=h0 & COUNTER17:4=h0) /出现了循环次数的过大 现象 begin if(COUNTER2=h00) /表示洗衣机循环也结束了 begin state=3b101; /表示结束状态 ALARM=b1; COUNTER1=hee; /表示当洗衣机洗完了衣服后数码管就会显示ee的字母来提示用户衣服洗完了 dec=3b011; end else begin state=b010; /进入FIRST状态 if(COUNTER23:0=h0) /下面是当做完了一个洗衣循环的时候就要减去一个循环次数 begin dec=b010;
11、/表示对COUNTER2的高位进行减数据 end else dec=b001; /表示对低位的数据进行减少 COUNTER1=h05; /当一轮循环了就可以对COUNTER1进行从新赋值 end end else if(COUNTER13:0=h0) begin COUNTER17:4=COUNTER17:4-h01; COUNTER13:0=h9; end else COUNTER13:0=COUNTER13:0-h01; end END: begin ALARM=b0; COUNTER1=hff; /表示数码管都没有输出数据,都是黑屏的 COUNTER2=h00; /表示数码管都没有输出数
12、据,都是黑屏的 dec=2b100; state=b000; /当结束的时候就state不会影响的cur_state的值 end endcase end if(ADD & cur_state=READY) begin if(COUNTER23:0=h9 & COUNTER27:4=h9) /出现了循环次数的过大现象 COUNTER2=8h01; else if(COUNTER23:0=h9) begin COUNTER27:4=COUNTER27:4+h01; COUNTER23:0=h0; end else COUNTER23:0=COUNTER23:0+h01; end else if(d
13、ec=b001) /dec的不同则COUNGER2变换是不同的 begin COUNTER23:0=COUNTER23:0-h1; dec=b000; /当对个位数的数据改动后就不要进行改动了 end else if(dec=b010) begin COUNTER27:4=COUNTER27:4-h1; COUNTER23:0=h9; dec=b000; /当对十位数的数据改动后就不要进行改动了 end else if(dec=b011) /表示洗衣机洗完了衣服 begin COUNTER2=hee; /数码管显示EE表示洗衣机洗完了衣服 dec=b000; /同样要对dec进行复位 end
14、else if(dec=b100) /表示洗衣机被关闭 begin COUNTER2=hff; /数码管不显示 dec=b000; /对dec进行复位 end endalways (COUNTER17:4) /对应数据数码管的显示begin case (COUNTER17:4) 0:LED17:0=b; 1:LED17:0=b; 2:LED17:0=b; 3:LED17:0=b; 4:LED17:0=b; 5:LED17:0=b; 6:LED17:0=b; 7:LED17:0=b; 8:LED17:0=b; 9:LED17:0=b; he:LED17:0=b; /显示e hf:LED17:0=
15、b; /黑屏,这个用EDN的状态 endcase end always (COUNTER13:0) begin case (COUNTER13:0) 0:LED27:0=b; 1:LED27:0=b; 2:LED27:0=b; 3:LED27:0=b; 4:LED27:0=b; 5:LED27:0=b; 6:LED27:0=b; 7:LED27:0=b; 8:LED27:0=b; 9:LED27:0=b; he:LED27:0=b; /显示e hf:LED27:0=b; /黑屏,这个用EDN的状态 endcase endalways (COUNTER27:4) begin case (COUN
16、TER27:4) h0:LED37:0=b; h1:LED37:0=b; h2:LED37:0=b; h3:LED37:0=b; h4:LED37:0=b; h5:LED37:0=b; h6:LED37:0=b; h7:LED37:0=b; h8:LED37:0=b; h9:LED37:0=b; he:LED37:0=b; /显示e hf:LED37:0=b; /黑屏,这个用EDN的状态 endcase end always (COUNTER23:0) begin case (COUNTER23:0) 0:LED47:0=b; 1:LED47:0=b; 2:LED47:0=b; 3:LED47
17、:0=b; 4:LED47:0=b; 5:LED47:0=b; 6:LED47:0=b; 7:LED47:0=b; 8:LED47:0=b; 9:LED47:0=b; he:LED47:0=b; /显示e hf:LED47:0=b; /黑屏,这个用EDN的状态 endcase endendmodule 波形图的分析开始S1信号高电位,即S1信号开始有效,洗衣机开始开启,进入状态1,当ADD高电位,循环计数的控制信号开启,图中红色的显示在ADD有效的情况下LED4显示的数据是2表示,累加到 了循环2次的情况最后遇到了S2信号,表示对累加的数据进行确认,到S2到低点位的时候,状态变成了2,即开始洗
18、衣服了。 待机5秒状态图中红色线圈到了的是表示洗衣机待机5秒。同样LED工作灯的显示由14变成13的情况。 洗衣机转动60秒图中红色的圈是表示状态有待机5秒状态变成转动60秒状态,可以看到状态有2变成3,同样LED的工作灯的显示也发生了变换由13变成了11,同样LED1和LED2数据随着计时60秒倒计时显示。这里只是刚刚工作第一个循环周期,有LED4看出是B0,表示2. 进入第二次的待机5秒图中显示了状态4维持了5秒进入状态2,而工作的LED显示也发生相应的变换,到这里就完成了一个循环周期,LED4显示的是B0,这循环要一直到LED4变成00的情况表示洗衣机已经洗完了。 洗衣机进入结束状态当循
19、环次数成立C0(即数码管显示的是0)最后一个循环过后进入洗完后报警状态,即有状态4变成了状态5,同样报警信号ALARM也变高了。 RT图的显示 下面是上面RT图的部分引脚的显示左边的引脚显示:右边引脚的显示:五、主要仪器设备、软件及耗材Quartus II ,EDA开饭板,电脑。六、实训步骤1.分析要设计的项目目的,功能。2.对各功能进行分析,划分模块。3.编写代码实现个功能模块。4.建工程,进行代码调试,成功后进行波形图的分析。5.波形分析没有问题,并且功能都能在波形图上显示。6.烧写到EDA开发板上进行试验。七、调试过程及处理结果上面已经分析很详细,这就不多加分析了。八、思考讨论题或体会或对改进实验的建议1这里的洗衣机控制系统都是通过灯的显示来表示洗衣机工作的如今状态,不够切实际。2.这个洗衣机控制系统不是很实际化,具有制动化。3.可以对EDA开发板添加转机来具有真实性和客观性。九、参考资料CPLD/FPGA与ASIC设计实践教程
限制150内