eda课程设计 基于VHDL的 洗衣机控制器Word格式.docx
《eda课程设计 基于VHDL的 洗衣机控制器Word格式.docx》由会员分享,可在线阅读,更多相关《eda课程设计 基于VHDL的 洗衣机控制器Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
2012年2月20日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
1设计任务及要求
(1)设计一个洗衣机控制器,控制洗衣机如下运转:
定时启动-正转20秒-暂停10秒-反转10秒-暂停10秒-定时未到回到“正转20秒-暂停10秒-……”,定时到停止;
(2)若定时到,则停机发出音响信号;
(3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;
洗涤过程由“开始”信号开始;
(4)三只LED灯表示“正转”、“反转”、“暂停”三个状态。
设计出的洗衣机控制器可以实现按预置的时间对衣服进行洗涤,并在结束后发出音响提示。
本次设计分工如下,有预置洗涤时间模块、倒计时减法计数器、状态控制模块、发出音响模块和译码模块。
2设计原理及总体框图
(1)设计的总体框图
(2)设计总原理
洗衣机控制器的设计主要是定时器的设计。
由一片FPGA(FieldProgrammableGateArray)和外围电路构成了电器控制部分。
FPGA接收键盘的控制命令,控制洗衣机的进水、排水、水位和洗衣机的工作状态、并控制显示工作状态以及设定直流电机速度、正反转控制、制动控制、起停控制和运动状态控制。
对FPGA芯片的编程采用模块化的VHDL(硬件描述语言)进行设计,设计分为三层实现,顶层实现整个芯片的功能。
顶层和中间层多数是由VHDL的元件例化语句实现。
中间层由无刷直流电机控制、运行模式选择、洗涤模式选择、定时器、显示控制、键盘扫描以及对直流电机控制板进行速度设定、正反转控制、启停控制等模块组成,它们分别调用底层模块。
3程序设计
(1)VHDL语言(VHSICHardwareDescriptionLanguage,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:
支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。
VHDL语言已成为IEEE的一种工业标准,是实现信息系统硬件开发所必备的知识和技能。
(2)设计的各个模块程序
a、倒计时减法计数器模块
由于洗衣机有工作时间,必须要一模块来控制它的工作时间范围,所以我设计了一个减法计数器模块,当洗衣机开始工作后,减法计数器即会实现减数功能,直到时间减到零,洗衣机便停止工作。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,TLA,START,ENTER:
INSTD_LOGIC;
INI:
INSTD_LOGIC_VECTOR(7DOWNTO0);
SHOW:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
FINISH:
OUTSTD_LOGIC);
ENDCOUNT;
ARCHITECTUREoneOFCOUNTIS
SIGNALFINI:
STD_LOGIC;
SIGNALSHOW1:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(TLA,CLK,START)
VARIABLENUM:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFENTER='
1'
THENNUM:
=INI;
--预置洗涤时间
ELSIF(TLA'
EVENTANDTLA='
)THEN
IFSTART='
ANDNUM/=0THEN--倒计时
NUM:
=NUM-1;
ENDIF;
ENDIF;
0'
ANDNUM=0THEN
FINI<
='
;
="
00000000"
--停止信号发出
ELSE
SHOW1<
=NUM;
ENDPROCESS;
PROCESS(CLK)
IFCLK'
EVENTANDCLK='
THEN
FINISH<
=FINI;
SHOW<
=SHOW1;
END;
b、预置洗涤时间模块
此模块由一个累加器和一个命令控制器组成,用来实现预置洗涤时间的功能,洗涤时间以分钟数为单位,用户可根据自己的需求来设定洗涤时间的长短。
ENTITYADDERIS
PORT(IN1:
Q:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDADDER;
ARCHITECTUREoneOFADDERIS
SIGNALadd:
STD_LOGIC_VECTOR(2DOWNTO0);
Q<
=ADD;
PROCESS(IN1)
IFIN1'
EVENTANDIN1='
ADD<
=ADD+1;
ENDPROCESS;
ENTITYORDERIS
PORT(CLK:
ORDER:
INSTD_LOGIC_VECTOR(2DOWNTO0);
TIME:
OUTINTEGERRANGE128DOWNTO0);
ENDORDER;
ARCHITECTUREoneOFORDERIS
PROCESS(CLK)
CASEORDERIS
WHEN"
000"
=>
TIME<
=1;
001"
=2;
010"
=3;
011"
=4;
100"
=5;
101"
=6;
110"
=7;
111"
=8;
WHENOTHERS=>
=0;
ENDCASE;
c、信号输入模块
根据课程设计要求,必须将洗衣机的工作状态及工作时间在数码管和指示灯上显示出来,此模块是用来控制洗衣机的工作状态及工作的频率,并把工作状态及工作时间显示出来。
libraryieee;
useieee.std_logic_1164.all;
entityoneis
port(clk:
instd_logic;
fout:
outstd_logic;
start:
inbit);
endentityone;
architectureoneofoneis
signalcount:
integerrange0to32;
signalmid:
std_logic;
begin
process(clk,start)
ifclk'
eventandclk='
then
ifstart='
ifcount=31then--64分频
count<
mid<
=notmid;
elsecount<
=count+1;
endif;
fout<
=mid;
endprocess;
endarchitectureone;
entityfreq_div1minis
port(fout0:
fout1:
outstd_logic);
endentityfreq_div1min;
architectureoneoffreq_div1minis
integerrange0to60;
process(fout0)
iffout0'
eventandfout0='
ifcount=29then--60分频产生1分钟的周期时钟信号
fout1<
d、状态控制模块
此模块是为了实现洗衣机的正转、暂停、反转的功能,它由一个状态控制模块构成,是典型的状态机。
ENTITYstateIS
PORT(CLK,t10a,t20a,finishb,START,ENTER:
LED:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
t10_ena,t20_ena:
outstd_logic;
P:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDstate;
ARCHITECTUREoneOFstateIS
TYPESTATESIS(ST0,ST1,ST2,ST3,ST4);
SIGNALC_ST:
STATES;
PROCESS(CLK,ENTER,T10A,T20A)
BEGIN
IFENTER='
ORFINISHB='
ORSTART='
THEN
C_ST<
=ST0;
P<
LED<
T10_ENA<
T20_ENA<
ELSIFCLK'
CASEC_STIS
WHENST0=>
=ST1;
WHENST1=>
LED<
p<
00010100"
--正转
IFT20A='
=ST2;
T20_ENA<
WHENST2=>
00001010"
--暂停
IFT10A='
=ST3;
WHENST3=>
--反转
=ST4;
WHENST4=>
--暂停
e 译码电路
此模块是为了在数码管上显示出预置时间并按倒计时方式显示
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYYIMAIS
PORT(SHOW:
INSTD_LOGIC_VECTOR(7DOWNTO0);
SHOWB1,SHOWS1,SHOWG1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDYIMA;
ARCHITECTURETWOOFYIMAIS
INTEGERRANGE128DOWNTO0;
SIGNALSHOWB,SHOWS,SHOWG:
INTEGERRANGE0TO9;
=CONV_INTEGER(SHOW);
PROCESS(SHOW1)
SHOWB<
=SHOW1/100;
SHOWS<
=SHOW1/10-SHOWB*10;
SHOWG<
=SHOW1-SHOWB*100-SHOWS*10;
SHOWB1<
=CONV_STD_LOGIC_VECTOR(SHOWB,4);
SHOWS1<
=CONV_STD_LOGIC_VECTOR(SHOWS,4);
SHOWG1<
=CONV_STD_LOGIC_VECTOR(SHOWG,4);
f、音响模块
当洗涤时间结束时,洗衣机就会自动发出警报声,以此提醒用户洗涤工作完成,此模块就是实现次功能。
useieee.std_logic_unsigned.all;
entitywarmingis
instd_logic;
finishc:
warn:
outstd_logic
);
endwarming;
architecturesixofwarmingis
process(clk)
iffinishc='
thenwarn<
=clk;
--停止工作时
elsewarn<
end;
4编译及仿真
Max+plusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对Max+plusII的更新支持。
QuartusII是Altera公司继Max+plusII之后开发的一种针对其公司生产的系列CPLD/PGFA器件的综合性开发软件,它的版本不断升级,从4.0版到10.0版,这里介绍的是QuartusII7.0版,该软件有如下几个显著的特点:
1、QuartusII的优点
该软件界面友好,使用便捷,功能强大,是一个完全集成化的可编程逻辑设计环境,是先进的EDA工具软件。
该软件具有开放性、与结构无关、多平台、完全集成化、丰富的设计库、模块化工具等特点,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
2、QuartusII对器件的支持
QuartusII支持Altera公司的MAX3000A系列、MAX7000系列、MAX9000系列、ACEX1K系列、APEX20K系列、APEXII系列、FLEX6000系列、FLEX10K系列,支持MAX7000/MAX3000等乘积项器件。
支持MAXIICPLD系列、Cyclone系列、CycloneII、StratixII系列、StratixGX系列等。
支持IP核,包含了LPM/MegaFunction宏功能模块库,用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
3、QuartusII对第三方EDA工具的支持
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。
Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
由上仿真波形可以看出,输入一个脉冲信号clk,当洗衣机工作状态结束时,warming输出端会有一个输出脉冲,此时洗衣机会发出鸣叫声。
洗衣机接通电源,按IN1设置洗涤时间按start、enter置为高电平洗衣机开始工作,当时钟第一个上升沿到达时q1(正转功能)为高电平维持20s以后变为低电平而q2(暂停功能)随着时钟上升沿的到来变为高电平维持10s变为低电平,然后q3(反转功能)开始随着时钟上升沿的到来变为高电平工作维持20s后变为低电平,再停止q3置高,接下来电路一直重复上述工作,直到定时器计数结束。
5硬件调试与结果分析
通过分析,该实验可选择NO.7号电路进行硬件验证,选定电路图之后,再选择ACEX1K/EP1K30TC144-3器件,对应于该器件对各个输入输出信号进行引脚锁定。
下载完成后便可进行硬件验证。
6参考文献
(1)黄智伟.FPGA系统设计与实践电子工业出版社2005.1
心得体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
通过这次的VHDL设计,我可以说是受益良多。
看到洗衣机控制器的题目,我首先想到的是状态机的设计,因为课本上说状态机其实就是控制器,后来经过看书觉得应该是摩尔型状态机。
通过这次设计,让我初步掌握了VHDL的设计方法与一些技巧,让我对FPGA的编程、定时器和计数器的设计更加熟悉,让我更加明白时序组合门电路设计思路和方法。
在设计中也参了和查阅了很多资料,从中学到不少课本上没有的东西,这些对我将来的学习和工作都有很大的帮助。
这次课程设计是一个理论与实际结合的过程,让我明白理论知识往往是不够的,只有把所学的理论与实际行动相结合,才能提高自己的综合实际能力和独立思考的能力。
在设计过程中我们都会遇到很多的问题,但往往是一个小问题都会导致设计的失败,这就要我们花大量的时间区思索和改正,这是一个很艰辛的过程,但同时也是我收获最大的过程。
课程设计的时间是比较短暂,但从中却学到了不少有用的知识。
设计往往是一个苦中有乐的过程,我希望在以后的学习中自己能独立思考,同时也要认真去完成,这样既能学到知识,也能让自己的实践操作得到锻炼。