【含源代码】北邮数电实验洗衣机控制器点阵动态显示VHDL报告
- 格式:docx
- 大小:17.65 KB
- 文档页数:6
【含源代码】北邮数电实验洗衣机控制器点
阵动态显示VHDL报告
20XX~20XX 学年第一学期
《数字电路与逻辑设计实验》实验报告
题目:基于 CPLD 的简易洗衣机控制器的设计与实现
班级:学号:班内序号:学生姓名:
一、设计课题的任务要求
任务要求:
基本要求:
1、基于 CPLD 的简易洗衣机控制器的工作步骤为洗涤、漂洗和脱水三个过程,工作
时间分别为:洗涤 30 秒,漂洗 25 秒,脱水 15 秒;
2、用一个按键实现洗衣程序的手动选择:A、单洗涤;
B、单漂洗;
C、单脱水;
D、漂洗和脱水;
E、洗涤、漂洗和脱水全过程; 3、用发光二极管显示洗衣机的工作状态,并倒计时显示每个状态
的工作时间,全部过程结束后,应有声音提示使用者,并保持在停止状态,直至再次开始; 4、用点阵动画显示洗衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情
况,四种工作情况的动画显示要有区别且尽可能的形
象。
5、用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留
的状态;
提高要求:
1、三个过程的时间有多个选项供使用者选择。
2、可以预约洗衣时间。
3、自拟其它功能。
二、系统设计
A.设计思路:
本程序采用自顶向下的设计方法。
先从所需要实现的功能入手,把整个洗衣机的程序分为分频等分别实现,最后再合成一个整的程序。
B.设计过程::
1. 计算机编程:按照上述设计,用VHDL语言进行编程实现,并通过编译,观察资源使用情
况。
2. 系统仿真:通过仿真软件仿真,观察波形图,如果不对,对程序进行反复推敲修改.
3. 下载调试:将程序下载到实验板上,调试各功能看是否满足设计要求。
4. 修改程序:通过计算机仿真和下载调试,发现问题,返回原程序进行修改,再次进行下
载调试,直到成功为止。
C.总体框图:
防抖模块时钟信号模式设置模块暂停模块分频模块控制模块点阵模块显示报警模块点阵译码模块 D.状态转移图:
111[E] 100[A] 000[end/wait] 011[D] 010[B] 001[C]
E.分块设计:
分频模块:主要是从1MHZ的时钟,分出多个时钟,分别给控制器、模式选择模块、数码管译码模块等其他模块用来控制显示或其他。
模式设置模块:主要功能是选择洗衣机的工作模式 A ~ E。
其中模式选择用按键来实现。
按键加入了防抖功能。
按键一次表示A单洗涤,按键俩次表示B单漂洗,按键三次表示C单脱水,按键四次表示D 漂洗+脱水,按键五次表示E洗涤+漂洗+脱水,再按键则跳回单洗涤过程,以此类推。
并用3个LED灯来显示当前选择的模式。
控制模块:主要功能键开始键和暂停键,分别用来控制洗衣机相应的功能。
暂停键按下。
洗衣过程暂停。
洗衣完成会产生一个报警信号,蜂鸣器响起,提醒工作已经结束。
点阵模块和点阵译码模块:主要功能键为当洗衣机处于不同工作状态时,控制点阵显
示不同动画,不同动画分别对应进水、洗衣、漂洗、排水、甩干,使其工作状态一目了然。
显示模块:主要功能是译码显示洗衣机倒计时,以及将报警信号输出。
防抖模块:主要功能防止按键时模式选择混乱。
三、仿真波形及波形分析
分频模块仿真:在这里我选择了cp模块进行仿真,于cp1中分频系数过高难以看
出准确仿真结果,我改用了较小的数字进行仿真,对代码段进行了如下修改——IF(count=\ --49 countclkin,cp1=>c1,scp=>sc); u2:cp2 PORT MAP(clk=>clkin,cp2=>c2); u3:fxiaodou PORT MAP(clk=>clkin,mode=>modin,rp=>psin,modeO=>m,rpO=>p 0); u4:fset PORT MAP(clk=>c1,run=>runin,mode=>m,status=>st1);
u5:pause PORT MAP(run=>runin,pause=>p0,ps=>p1); u6:foption PORT MAP(cp1=>c2,cp2=>c1,scp=>sc,status=>st1,run=>runin,
ps=>p1,sel=>selout,seg=>segout,sound=>s,o_status=>s
t2,dianzhen=>d); u7:display PORT MAP(cl=>clkin,run=>runin,sound=>s,s_status=>st1,o_s tatus=>st2,soundout=>o_sound,statusout=>status_out);
u8:dianzhen PORT MAP(clk=>c3,set=>d,a0=>a0,a1=>a1,a2=>a2,a3=>a3,a4=>
a4,a5=>a5,a6=>a6,a7=>a7); u9:cp3 PORT MAP(clk=>clkin,cp3=>c3); u10:cp4 PORT MAP(clk=>clkin,cp4=>c4); u11:dotdecode PORT MAP(CLK=>c4,A0=>a0,A1=>a1,A2=>a2,A3=>a3,A4=>a4,A5=>
a5,A6=>a6,A7=>a7,ROW=>ROW,COL=>COL); END;
LIBRARY ieee;
USE _logic_; USE _logic_;
ENTITY cp is PORT(
clk:IN std_logic;cp1:OUT std_logic; scp:OUT std_logic ); END;
ARCHITECTURE freq of cp IS
SIGNAL count:std_logic_vector(16 downto 1); SIGNAL c1:std_logic; SIGNAL c2:std_logic;
BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')then
IF(count=\ countstatestatestatestatestatestateC 15S
ELSE time2segsig a7 a7a7a7a7a7 c c a7 a7 ROW ROW ROW ROW ROW ROW ROW ROW <= \ END CASE;
COL(0) <= col_temp(7); COL(1) <= col_temp(6); COL(2) <= col_temp(5);
COL(3) <= col_temp(4); COL(4) <= col_temp(3); COL(5) <= col_temp(2);COL(6) <= col_temp(1); COL(7) <= col_temp(0); END IF; END PROCESS; END;。