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






