资源描述
信工073 余海军 10079006
华东理工大学2009 -2010 学年第2学期
《电子综合设计DEA》课程设计作业 2010.6
班级:XXXX 学号: XXX 姓名:XXXX
开课学院:信息学院 任课老师: XXXX 成绩:
题目:1、简易全自动洗衣机控制器设计
2、通信系统信道编码器设计
作业要求:
《电子系统设计EDA》课程是电子信息工程、自动控制、计算机科学与工程等专业的技术课之一,具有很强的工程实践性。课程学习要求学生:掌握现代硬件数字电路的软件化设计的基本方法、掌握应用VHDL及EDA工具开发设计数字系统的基本方法以及对现代电子系统设计技术有一定的了解
设计报告要求:1、按照设计题目要求构建设计框图 2、用EDA设计软件按照设计题目要求进行原型设计并给出仿真结果 3、对仿真结果进行一定的讨论 4、原程序和仿真波形等附录。
教师评语:
教师签名:
年 月 日
电子综合设计EDA综合设计题
设计一简易全自动洗衣机控制器。该控制器由两大状态A和B组成,每个状态分三个子状态,每个状态分别由选择A和选择B控制。其中A为步进选择按纽,每步跳转一个子状态、B也为步进选择按纽,但每步选择B中的所有组合中的一种。当启动时,时间序列控制器按已选的B类子状态顺序执行。
过程启动由启动/暂停键控制(暂停键在过程启动后任意时间可暂停/恢复过程)
过程启动后机盖开启应均能暂停过程,复盖间停30秒后重新继续原过程。
A:强洗 标准 弱洗
B:洗涤 漂洗 甩干
(洗涤,漂洗时电机分别正转、反转)
强洗:(共36分钟)
洗涤 18分
漂洗 14分
甩干 4分
(洗涤时电机分别正转4分、反转4分,正反转间停30秒;漂洗时电机分别正转3分、反转3分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)
标准:(共26分钟)
洗涤 14分
漂洗 8 分
甩干 4分
(洗涤时电机分别正转3分、反转3分,正反转间停30秒;漂洗时电机分别正转1.5分、反转1.5分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)
弱洗(共20分钟)
洗涤 10分
漂洗 6分
甩干 4分
(洗涤时电机分别正转2分、反转2分,正反转间停30秒;漂洗时电机分别正转1分、反转1分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)
设定秒脉冲已给定,指示为LED,整过程完成后,蜂鸣器响30秒。整个设计为正逻辑。
一、程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY student IS
PORT(COUNT_N,COUNT_M,START,COOK,CLK:IN STD_LOGIC;
LOOK:OUT STD_LOGIC;
DOUT :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END STUDENT;
ARCHITECTURE BEHAV OF student IS
SIGNAL DT1,DT2:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL DICSOUNT,TEM:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DCP:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CT:STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL CT1,CT2:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL SG,CMKS:STD_LOGIC;
BEGIN
PROCESS(COUNT_N,SG)
BEGIN
IF SG='1' THEN
DT1<="00";
ELSIF COUNT_N'EVENT AND COUNT_N='1' THEN
IF DT1=3 THEN
DT1<="01";
ELSE
DT1<=DT1+1;
END IF;
END IF;
END PROCESS;
PROCESS(COUNT_M,SG)
BEGIN
IF SG='1' THEN
DT2<="00";
ELSIF COUNT_M'EVENT AND COUNT_M='1' THEN
IF DT2=3 THEN
DT2<="01";
ELSE
DT2<=DT2+1;
END IF;
END IF;
END PROCESS;
PROCESS(START)
BEGIN
IF SG='1' THEN
CMKS<='0';
ELSIF START'EVENT AND START='1' THEN
DICSOUNT<=DT1&DT2;CMKS<=CMKS XOR '1';
END IF;
END PROCESS;
PROCESS(CLK,START,COOK)
BEGIN
IF START='1' AND DCP="0000" THEN
DCP<=DICSOUNT;
ELSIF CLK'EVENT AND CLK='1' THEN
IF COOK='1' THEN
DOUT<="00";
ELSIF START='1' AND DCP>"0000" THEN
DOUT<="00";
ELSIF SG='1' THEN
IF CT1<"0001" THEN
CT1<="0000";SG<='0';
END IF;
ELSIF CMKS='1' THEN
CASE DCP IS
WHEN "0101"=>
IF CT<35 THEN
CT<=CT+1;
IF CT1<8 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=8 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<8 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=8 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="0110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "0110"=>
IF CT<27 THEN
CT<=CT+1;
IF CT1<6 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=6 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<6 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=6 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="0111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "0111"=>
IF CT<8 THEN
CT<=CT+1;
IF CT1<3 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=3 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<3 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=3 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';
END IF;
WHEN "1001"=>
IF CT<27 THEN
CT<=CT+1;
IF CT1<6 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=6 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<6 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=6 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="1010";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "1010"=>
IF CT<15 THEN
CT<=CT+1;
IF CT1<3 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=3 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<3 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=3 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="1011";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "1011"=>
IF CT<8 THEN
CT<=CT+1;
IF CT1<3 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=3 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<3 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=3 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';
END IF;
WHEN "1101"=>
IF CT<19 THEN
CT<=CT+1;
IF CT1<4 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=4 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<4 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=4 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="1110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "1110"=>
IF CT<11 THEN
CT<=CT+1;
IF CT1<2 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=2 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<2 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=2 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="1111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
END IF;
WHEN "1111"=>
IF CT<8 THEN
CT<=CT+1;
IF CT1<3 THEN
DOUT<="01";CT1<=CT1+1;
ELSIF CT1=3 THEN
DOUT<="00";CT1<=CT1+1;
ELSIF CT2<3 THEN
DOUT<="10";CT2<=CT2+1;
ELSIF CT2=3 THEN
DOUT<="00";CT1<="0000";CT2<="0000";
END IF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';
END IF;
WHEN OTHERS=>
DOUT<="00";
END CASE;
END IF;
END IF;
END PROCESS;
LOOK<=SG;
END BEHAV;
二、仿真波形如下
强洗全部过程
强洗 漂洗、甩干
强洗(甩干)
标准全部过程
标准(漂洗、甩干)
标准(甩干)
弱洗全过程
弱洗(漂洗、甩干)
九、弱洗(甩干)
强开盖子:
一、 强洗强开盖
一、 标准强开盖
二、 弱洗强开盖
暂停和启动
一、 强洗暂停
二、 强洗重新启动
三、 标准暂停
四、 标准重新启动
五、 弱洗暂停
六、 弱洗重新启动
两次洗衣
一、 两次强洗
两次标准(漂洗、甩干)
二、 两次弱甩干
三、设计思想讨论
设计时参考了已有程序,此芯片有五个输入和三个输出,输入COUNT_M和输入COUNT_N是状态控制键,输入START是输入启动和暂停键,以及一个时钟CLK。输出是洗衣结束铃声端口和电机驱动端口。在设计中,为便于调试和观察将时钟周期假设为30S。本次设计大致可以分成两个模块来看待,控制端和工作端。控制部分使用了三个进程来处理,进程一控制状态COUNT_M,进程二控制状态COUNT_N,进程三控制开始和暂停。工作部分使用了一个进程来处理,在该进程中主要处理强制开盖,洗衣的各个状态,以及洗衣结束后的铃声。控制端COUNT_M中,SG是工作结束标志信号,信号TS控制洗衣机的暂停和重新启动,DT是状态的中间变量。COOKK为强开洗衣机盖子信号端,DCP输入状态中间信号。洗衣机正常工作过程:洗衣机总共有九种工作状态,这九种状态可以分成三大部分,强洗,标准,弱洗,此三种状态的洗衣过程类似,因此以强洗来解释说明。洗涤完成后,将信号TP变换到漂洗状态,然后变换到甩干,甩干结束后将TP置零,以及输出状态置一。然后等待下次洗涤。
CLK
主分频器
洗涤定时器
水流控制器
正反向控制
主分频器
四、心得体会
这次EDA对我来说是一项很大的挑战,看到题目后几乎没有思路,翻阅教材,看了下自动洗衣机那张的讲解,有了眉目,但是设计的内容过于庞杂,很难下手。这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个作业。做仿真波形的时候,就是验证结论的时候,过程还算顺利。通过这次作业,我觉得许多困难的事,需要借鉴已有的经验,请查阅资料,和同学交流讨论,就基本可以完成。
展开阅读全文