VHDL洗衣机设计

合集下载

设计基于VHDL的简易全自动控制洗衣机 精品

设计基于VHDL的简易全自动控制洗衣机 精品

华东理工大学20XX -20XX 学年第2学期《电子综合设计DEA》课程设计作业20XX.6电子综合设计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 xiyiji ISPORT(COUNT_N,COUNT_M,START,COOK,CLK:IN STD_LOGIC;LOOK:OUT STD_LOGIC;DOUT :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END XIYIJI;ARCHITECTURE BEHA V OF xiyiji ISSIGNAL 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;BEGINPROCESS(COUNT_N,SG)BEGINIF SG='1' THENDT1<="00";ELSIF COUNT_N'EVENT AND COUNT_N='1' THENIF DT1=3 THENDT1<="01";ELSEDT1<=DT1+1;END IF;END IF;END PROCESS;PROCESS(COUNT_M,SG)BEGINIF SG='1' THENDT2<="00";ELSIF COUNT_M'EVENT AND COUNT_M='1' THENIF DT2=3 THENDT2<="01";ELSEDT2<=DT2+1;END IF;END IF;END PROCESS;PROCESS(START)BEGINIF SG='1' THENCMKS<='0';ELSIF START'EVENT AND START='1' THENDICSOUNT<=DT1&DT2;CMKS<=CMKS XOR '1';END IF;END PROCESS;PROCESS(CLK,START,COOK)BEGINIF START='1' AND DCP="0000" THENDCP<=DICSOUNT;ELSIF CLK'EVENT AND CLK='1' THENIF COOK='1' THENDOUT<="00";ELSIF START='1' AND DCP>"0000" THENDOUT<="00";ELSIF SG='1' THENIF CT1<"0001" THENCT1<="0000";SG<='0';END IF;ELSIF CMKS='1' THENCASE DCP ISWHEN "0101"=>IF CT<35 THENCT<=CT+1;IF CT1<8 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=8 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<8 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=8 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "0110"=>IF CT<27 THENCT<=CT+1;IF CT1<6 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=6 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<6 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=6 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "0111"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';END IF;WHEN "1001"=>IF CT<27 THENCT<=CT+1;IF CT1<6 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=6 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<6 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=6 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1010";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1010"=>IF CT<15 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1011";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1011"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';END IF;WHEN "1101"=>IF CT<19 THENCT<=CT+1;IF CT1<4 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=4 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<4 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=4 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1110"=>IF CT<11 THENCT<=CT+1;IF CT1<2 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=2 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<2 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=2 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1111"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="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 BEHA V;二、仿真波形如下强洗全部过程强洗漂洗、甩干强洗(甩干)标准全部过程标准(漂洗、甩干)标准(甩干)弱洗全过程弱洗(漂洗、甩干)九、弱洗(甩干)强开盖子:一、强洗强开盖一、标准强开盖二、弱洗强开盖暂停和启动一、强洗暂停二、强洗重新启动三、标准暂停四、标准重新启动五、弱洗暂停六、弱洗重新启动一、两次强洗两次标准(漂洗、甩干)二、两次弱甩干三、设计思想讨论设计时参考了已有程序,此芯片有五个输入和三个输出,输入COUNT_M和输入COUNT_N是状态控制键,输入START是输入启动和暂停键,以及一个时钟CLK。

基于Verilog HDL的FPGA程序(智能洗衣机)

基于Verilog HDL的FPGA程序(智能洗衣机)

华中科技大学电子线路课程设计题目:智能洗衣机院系:控制科学与工程系班级:自动化100X班姓名:联系方式:fanjunchao1991@指导老师:目录一题目分析。

1二系统流程图.。

2三主要模块介绍.。

5四各按键功能.。

6 五仿真波形.。

7 六实验总结。

8 七附录。

9一:题目分析本次课程设计要求以Verilog HDL硬件描述语言为基础,以DE2开发板为工具,编写智能洗衣机的模拟程序。

首先,我在熟悉题目要求的前提下,将题目要求划分为以下几个小的项目,每个项目尽量用单独的模块实现其功能:①洗衣过程的转换:控制洗衣过程在每个过程对应的状态机之间转换,用control.v模块实现。

②洗衣时间的显示:通过直接调用上学期编写的24小时智能时钟程序的计时模块,并用总时间减去已用时间得到剩余时间,用led_show.v实现。

本程序的特色:①led灯表示水位:通过一定的算法,实现用led灯的亮灭表示水位。

Led依次点亮表示注水过程,相反,表示排水和甩干过程。

②1602 LCD液晶屏:用LCD显示所有操作步骤和过程,包括选择模式,当前洗衣模式和状态,洗衣完毕等。

这些过程都是用LCD液晶屏具体显示。

③按键使用和去抖:因为要使用按键进行模式的选择,所以我用软件去抖的方式实现按键按动时的去抖。

④暂停键模拟断电保护:设计了一个暂停键,模拟真实情况中的断电保护。

当暂停时模拟现实中的断电;暂停结束模拟现实中的重新上电,程序从断点继续运行。

二:系统流程图MODE 1 OR MODE 2 OR MODE 3:MODE 4MODE 5流程图说明:第一个为总的控制系统的流程图,后面三个为总流程图中,每种模式的详细流程图。

三:主要模块介绍module my_start:顶层模块,调用下层模块。

module HZ_1:分频模块,通过10分频和5分频将50Mhz分频成为1hz。

module control:控制模块,控制洗衣模式状态机的转换。

eda课程设计 基于VHDL 的 洗衣机控制器

eda课程设计 基于VHDL  的 洗衣机控制器

子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页1 设计任务及要求(1)设计一个洗衣机控制器,控制洗衣机如下运转:定时启动-正转20秒-暂停10秒-反转10秒-暂停10秒-定时未到回到“正转20秒-暂停10秒-……”,定时到停止;(2)若定时到,则停机发出音响信号;(3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;(4)三只LED灯表示“正转”、“反转”、“暂停”三个状态。

设计出的洗衣机控制器可以实现按预置的时间对衣服进行洗涤,并在结束后发出音响提示。

本次设计分工如下,有预置洗涤时间模块、倒计时减法计数器、状态控制模块、发出音响模块和译码模块。

2设计原理及总体框图(1)设计的总体框图(2)设计总原理洗衣机控制器的设计主要是定时器的设计。

由一片FPGA (Field Programmable Gate Array)和外围电路构成了电器控制部分。

FPGA接收键盘的控制命令,控制洗衣机的进水、排水、水位和洗衣机的工作状态、并控制显示工作状态以及设定直流电机速度、正反转控制、制动控制、起停控制和运动状态控制。

对FPGA芯片的编程采用模块化的VHDL (硬件描述语言)进行设计,设计分为三层实现,顶层实现整个芯片的功能。

顶层和中间层多数是由VHDL的元件例化语句实现。

中间层由无刷直流电机控制、运行模式选择、洗涤模式选择、定时器、显示控制、键盘扫描以及对直流电机控制板进行速度设定、正反转控制、启停控制等模块组成,它们分别调用底层模块。

3 程序设计(1)VHDL语言(VHSIC Hardware Description Language,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。

洗衣机VHDL控制器实验报告

洗衣机VHDL控制器实验报告

数字电路和逻辑设计综合实验实验报告实验名称:洗衣机控制器班级:班内序号:姓名:学号:数电设计综合实验—洗衣机控制器一.设计课题的任务要求设计制作一个全自动洗衣机的控制器:●洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20秒,漂洗30 秒,脱水15 秒;●用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;●用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;●用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;●选做:三个过程的时间有多个选项供使用者选择。

●选做:可以预约洗衣时间。

●选做:自拟其它功能。

二.系统设计(包括设计思路、总体框图、分块设计)◆设计思路首先从题目进行分析,采用VHDL模块化的设计方法来进行洗衣机控制器的设计,即自顶向下,从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块.最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。

本控制器基本功能描述洗衣机控制器可工作于五种模式下:单洗涤、单漂洗、单脱水、漂洗十脱水、洗涤十漂洗+脱水,可以使洗衣机控制器工作在任意一种模式,并显示出洗衣机的工作状态和剩余工作时间,在剩余时间结束后有报警声提示使用者,并且可实现暂停洗衣和继续的功能,此外,加入附加功能,可自选三个过程是使用时间并且可预约洗衣时间。

由此分析可将洗衣机控制器分为控制模块、倒计时模块,初始模式选择模块,报警模块,洗衣时间选择模块,选通译码模块和分频器模块。

【设计过程】:1)审题,初步确定思路。

2)用VHDL语言进行编程。

3)适时对程序进行修改。

4)编译成功后,进行仿真,观察波形图。

5)将程序下载到实验板上,调试各功能。

6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。

7)进行总体的调试。

VHDL洗衣机控制系统设计实验报告(精品文档)_共15页

VHDL洗衣机控制系统设计实验报告(精品文档)_共15页

VHDL实验报告洗衣机控制器设计一.实验题目名称:洗衣机控制器设计二:实验目的、任务和要求:设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运转:图2.1 电机运转时序图用两位数码管预置洗涤时间(分钟数),洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED表示电动机的正、反转,如果定时时间到,则停机并发出音响信号。

其系统框图如下图所示:图 2.2 系统框图设计思路:此设计问题可分为洗涤预置时间编码寄存电路模块、十进制减法计数器模块、时序电路模块、译码驱动模块四大部分。

设置预置信号LD,LD有效后,可以对洗涤时间计数器进行预置数,用数据开关K1-K10分别代表数字1,2,…,9,0,用编码器对数据开关K1-K10的电平信号进行编码,编码器真值表如下表所示,编码后的数据寄存。

图2.3 编码器真值表设置洗涤开始信号start,start有效,则洗涤时间计数器进行倒计数,并用数码管显示,同时启动时序电路工作。

时序电路中含有20s定时信号,10s定时信号,设为A、B,A、B为“0”表示定时时间未到,为“1”表示定时时间到。

时序电路状态表如下表所示:图 2.4 时序电路状态表状态编码为:S0=00 S1=01 S2=11 S3=10若选JK触发器,其输出为Q2Q1。

逻辑赋值后的状态如下表所示:图2.5 逻辑状态表设置电动机正转信号run、反转信号rev、暂停信号Pause,由时序电路的输出Q2Q1经译码驱动模块,可使显示信号正确反映电路的工作状态,译码驱动模块真值表如下表所示:图2.6 译码驱动真值表直到洗涤计时时间到,时序电路异步复位,并启动音响电路。

其硬件系统示意图如下图所示:图2.7 硬件系统设计三.实验系统结构设计分析系统运行过程如下:在系统进行运行之前,使用K按钮预置洗衣机运转时间,此时用户设定的时间通过数码管时时显示出来,计时设备选取的精度是分钟级,也就是说用户可以设定洗衣时间是多少分钟,范围为00-99。

VHDL洗衣机设计说明

VHDL洗衣机设计说明

EDA课程实训报告一、实训课题:洗衣机控制器的设计二、设计的内容及要求:1.设计一个洗衣机控制器,要求为:1) 洗衣机控制器可以驱动洗衣机进行洗涤、漂洗或烘干;2) 洗衣机控制器可以设置洗衣机的工作时间,工作时间最短1分钟,最长30分钟,在工作过程中,工作时间以倒计时显示,若时间为0洗衣机停止工作;3) 洗衣机在待机状态时,洗衣机控制器可以设置洗衣机的工作方式和工作时间;4) 可以暂停或停止洗衣机工作;5) 利用四个数码管显示洗衣机待机时的设置时间和工作时的运行时间,利用一位数码管显示洗衣机待机时所设置的工作方式运行时的工作方式;6)利用三个LED分别表示驱动洗衣机进行洗涤、漂洗或烘干。

2.洗衣机控制器可以划分为状态机模块、计时器模块、设置模块和显示选择模块。

在QuartusII 中输入各个模块的代码,编译综合,仿真,完成各个模块的软件设计;4.把各个模块组合起来,综合编译,仿真,完成整个交通灯控制器系统的软件设计;5. 选择电路方案锁定管脚,把程序下载到实验箱中,利用实验箱进行硬件实现;6. 完成实训报告。

实训报告包括:1)设计的任务和要求;2)模块的划分和系统总框图;3)各个模块的实现,包括模块的作用,模块的输入与输出情况,模块状态图,模块的代码以及注释,模块的波形图;4)系统的实现,包括系统总原理图,系统的波形图;5)管脚的锁定关系;三.设计思路:◆状态切换>>>有限状态机◆按定时时间及时>>> 定时计数器◆显示时间>>> 数码管译码驱动器◆接收设置时间>>>时间设置键盘扫描器◆接收设置模式>>> 模式设置键盘扫描器◆切换显示运行时间和设置时间>>>二路选择器◆切换显示运行模式和设置模式>>>二路选择器整体设计示意图:四.系统组成以及系统各部分的设计:1.状态机的设计:状态机要完成的功能:●能设置工作模式;●控制洗涤、漂洗、干衣的驱动输出;●能启动、暂停、停止洗衣机控制器;●能重启、暂停和停止定时器;●能接收定时器的到时标志;●能使能键盘扫描计数器;●能控制二路选择器。

利用WHDL设计洗衣机控制器

利用WHDL设计洗衣机控制器

利用VHDL设计洗衣机控制器1 引言2 选题研究的意义2.1 课题来源2.2 课题研究的背景2.3 研究的目的和意义.4 应解决的主要问题及应达到的技术要求2.4.1 需解决的主要问题洗衣机控制系统的核心部件是控制器。

洗衣机控制电路包括控制器、控制对象、状态显示电路、计时器及报警电路。

它是一闭环系统,内部结构有洗衣机状态转换时间信号产生器、状态计数器、数据选择器和状态译码器,它能自动发出顺序循环控制信号(S、R、L),并同时完成在该状态下的计时功能。

另外,它还向控制对象提供一个工作过程的周期信号(T),作循环次数累计。

控制对象是由4位二进制计数器和4位数值比较器构成,它对T作计数,与此同时与人工输入的预置循环数比较,随时将反应受控器自身状态的信号反馈给控制器,从而实现系统的控制功能。

2.4.2 需实现洗衣机控制器的控制功能⑴洗衣机的状态为待机5s→正转60s→待机5s→反转60s,并用3个LED灯和7段显示器分别表示其工作状态和显示相应工作状态下的时间。

⑵自行设定洗衣机的循环次数,这里设最大的循环次数为15次。

⑶具有紧急情况的处理功能。

当发生紧急情况时,立即转入到待机状态,紧急情况解除后继续执行后续步骤。

⑷洗衣机设定循环次数递减到零时立即报警,以表示洗衣机设定的循环次数已经结束。

⑸输入变量:时钟CLK,直接清零RD,暂停/连续EN,设定洗衣机的循环次数SET。

⑹输出变量:三个工作状态S、R、L,一个过程周期T(T4),8421BCD码Q7…Q0输出及报警信号。

2.5 国内外研究现状,发展趋势及存在的主要问题2.6设计工具介绍3 洗衣机控制器设计的方案论证3.1 洗衣机控制器设计的方案选择设计洗衣机控制器,通常可以用三种方法来实现。

方法一,可以用纯机械式来设计控制器。

本方法利用机械原理来设计定时器。

例如可以利用弹簧储存能量和释放能量的过程得到定时时间。

其原理如同机械式(上发条)的钟表。

由于长时间工作,金属容易疲劳,一旦出现这样的情况,其定时的误差变大,导致定时不准确。

VHDL语言的洗衣机控制器设计

VHDL语言的洗衣机控制器设计

目录一、目的 (2)二、内容及要求 (2)1、设计的主要内容 (2)2、设计的主要要求 (3)三、原理 (3)1.基于状态机的控制电路设计 (3)2.洗衣机控制器的工作原理 (3)(1)洗衣机的工作状态 (3)(2)全自动洗衣过程 (4)(3)单独执行某个洗衣程序 (4)(4)设计思路 (5)四、步骤及仿真图 (7)五、程序设计 (10)(1)时钟分频模块 (10)(2)数码管显示 (11)(3)定时器电路 ......................................................................................................... 12。

(4)预置时间和编码电路 (13)(5)时序电路 (13)(6)译码器 (14)六、心得体会 (14)七、参考文献 (15)一、目的1.学习掌握全自动洗衣机的控制原理。

2.掌握基于有限状态机的控制电路设计方法.二、内容及要求1、设计的主要内容:设计一个全自动洗衣机控制器电路,实现对洗衣机的全自动控制。

根据全自动洗衣机的控制原理设计一个控制电路,使之能够控制全自动洗衣机完成整个工作过程。

洗衣机工作过程分为两种情况:(1)全部自动完成当按下复位按钮时,洗衣机上电,控制电路复位到初始状态(默认水位为“中”;使用)者可根据衣服的多少,按下水位控制按钮,改变水位设置,以控制上水时加水的多少;当按下启动/暂停按钮时,洗衣机开始洗衣的第一个操作:进水阀门打开,开始上水,并根据水位设置(高、中、低、少)历时不同的时间timeadd(8s、7s、6s、5s);然后进水阀门关闭,电机开始运转,开始洗衣过程,并历时 9s;然后电机停止运转,排水阀门打开,开始排水,并根据水位设置(高、中、低、少)历时不同的时间timedrain(7s、6s、5s、4s);然后排水阀门关闭,进水阀门打开,开始第二次上水,并历时timeadd……当甩干结束后,整个洗衣过程完成,扬声器发出持续 15 秒的急促的“嘀嘀”音,提示用户洗衣结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA课程实训报告一、实训课题:洗衣机控制器的设计二、设计的内容及要求:1.设计一个洗衣机控制器,要求为:1) 洗衣机控制器可以驱动洗衣机进行洗涤、漂洗或烘干;2) 洗衣机控制器可以设置洗衣机的工作时间,工作时间最短1分钟,最长30分钟,在工作过程中,工作时间以倒计时显示,若时间为0洗衣机停止工作;3) 洗衣机在待机状态时,洗衣机控制器可以设置洗衣机的工作方式和工作时间;4) 可以暂停或停止洗衣机工作;5) 利用四个数码管显示洗衣机待机时的设置时间和工作时的运行时间,利用一位数码管显示洗衣机待机时所设置的工作方式运行时的工作方式;6)利用三个LED分别表示驱动洗衣机进行洗涤、漂洗或烘干。

2.洗衣机控制器可以划分为状态机模块、计时器模块、设置模块和显示选择模块。

在QuartusII 中输入各个模块的代码,编译综合,仿真,完成各个模块的软件设计;4.把各个模块组合起来,综合编译,仿真,完成整个交通灯控制器系统的软件设计;5. 选择电路方案锁定管脚,把程序下载到实验箱中,利用实验箱进行硬件实现;6. 完成实训报告。

实训报告包括:1)设计的任务和要求;2)模块的划分和系统总框图;3)各个模块的实现,包括模块的作用,模块的输入与输出情况,模块状态图,模块的代码以及注释,模块的波形图;4)系统的实现,包括系统总原理图,系统的波形图;5)管脚的锁定关系;三.设计思路:◆状态切换>>>有限状态机◆按定时时间及时>>> 定时计数器◆显示时间>>> 数码管译码驱动器◆接收设置时间>>>时间设置键盘扫描器◆接收设置模式>>> 模式设置键盘扫描器◆切换显示运行时间和设置时间>>>二路选择器◆切换显示运行模式和设置模式>>>二路选择器整体设计示意图:四.系统组成以及系统各部分的设计:1.状态机的设计:状态机要完成的功能:●能设置工作模式;●控制洗涤、漂洗、干衣的驱动输出;●能启动、暂停、停止洗衣机控制器;●能重启、暂停和停止定时器;●能接收定时器的到时标志;●能使能键盘扫描计数器;●能控制二路选择器。

状态图分析设计如下:模块设计图如下:状态机仿真图如下:2. 定时器设计:定时器的功能:●能通过使能端暂停和允许定时器工作;●能停止并复位定时器;●能进行定时;●能输出定时标志模块设计图如下:定时器波形图如下:3.时间设置:时间设置键盘扫描器的功能:●能响应按键;●能在使能端的控制下工作模式设计图如下:波形图如下:4.模式设置:模式设置键盘扫描器的功能:预设工作模式,”000”为待机,”001”为洗涤,”010”为漂洗,”022”为干衣,”100”为暂停模式设计图如下:波形图如下:5.二路选择器二路选择器的功能:设置显示运行时间还是设置时间,显示运行模式还是设置模式。

模式设计图如下:整体结构图:整体波形图:五.下载时选择的开发系统模式以及管脚1.管教配置:2.实验电路结构图:D16D15D14D13D12D11D9D8PIO47D7PIO46D6PIO45D5PIO44D4PIO43D3PIO42D2PIO41PIO40D1NO.7实验电路结构图S P E A K E R扬声器FPGA/CPLD 目标芯片12345678PIO0PIO2PIO3PIO4PIO5PIO6PIO7单脉冲单脉冲单脉冲键1键2键3键4键5键6键7键8PIO47-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16译码器译码器译码器译码器译码器译码器附录 代码: 1.状态机LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY SHELL_WASHMACHINE ISPORT (CLK,modein0,modein1,modein2,pause,start,stop,tcin: IN std_logic; ken,modeout0,modeout1,modeout2,sel,ten,tstop,wout0,wout1,wout2 : OUTstd_logic);END;ARCHITECTURE BEHAVIOR OF SHELL_WASHMACHINE IS TYPE type_sreg IS (dry,ready,rinse,waitup,wash); SIGNAL sreg, next_sreg : type_sreg;SIGNAL next_ken,next_modeout0,next_modeout1,next_modeout2,next_sel,next_ten,next_tstop,next_wout0,next_wout1,next_wout2 : std_logic; SIGNAL modeout : std_logic_vector (2 DOWNTO 0);SIGNAL wout : std_logic_vector (2 DOWNTO 0);BEGINPROCESS (CLK, stop, next_sreg, next_ken, next_sel, next_ten, next_tstop, next_modeout2, next_modeout1, next_modeout0, next_wout2, next_wout1,next_wout0)BEGINIF ( stop='1' ) THENsreg <= ready;sel <= '0';ken <= '1';ten <= '1';tstop <= '1';modeout2 <= '0';modeout1 <= '0';modeout0 <= '0';wout2 <= '0';wout1 <= '0';wout0 <= '0';ELSIF CLK='1' AND CLK'event THENsreg <= next_sreg;ken <= next_ken;sel <= next_sel;ten <= next_ten;tstop <= next_tstop;modeout2 <= next_modeout2;modeout1 <= next_modeout1;modeout0 <= next_modeout0;wout2 <= next_wout2;wout1 <= next_wout1;wout0 <= next_wout0;END IF;END PROCESS;PROCESS (sreg,modein0,modein1,modein2,pause,start,tcin,modeout,wout)BEGINnext_ken <= '0'; next_modeout0 <= '0'; next_modeout1 <= '0'; next_modeout2 <= '0'; next_sel <= '0'; next_ten <= '0'; next_tstop <= '0'; next_wout0 <='0'; next_wout1 <= '0'; next_wout2 <= '0';modeout<=std_logic_vector'("000"); wout<=std_logic_vector'("000");next_sreg<=dry;CASE sreg ISWHEN dry =>IF ( pause='0' AND tcin='0' ) THENnext_sreg<=dry;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("011"));wout <= (std_logic_vector'("100"));END IF;IF ( tcin='0' AND pause='1' ) THENnext_sreg<=waitup;next_ten<='0';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("100"));wout <= (std_logic_vector'("000"));END IF;IF ( tcin='1' ) THENnext_sreg<=ready;next_ten<='1';next_tstop<='1';next_ken<='1';next_sel<='0';modeout <= (std_logic_vector'("000"));wout <= (std_logic_vector'("000"));END IF;WHEN ready =>IF ( modein1='0' AND modein0='0' ) OR ( modein2='1' ) OR ( start='0' ) THENnext_sreg<=ready;next_ten<='1';next_tstop<='1';next_ken<='1';next_sel<='0';modeout <= (std_logic_vector'("000"));wout <= (std_logic_vector'("000"));END IF;IF ( modein0='1' AND modein1='1' AND modein2='0' AND start='1' ) THEN next_sreg<=dry;next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("011"));wout <= (std_logic_vector'("100"));END IF;IF ( modein0='0' AND modein1='1' AND modein2='0' AND start='1' ) THEN next_sreg<=rinse;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("010"));wout <= (std_logic_vector'("010"));END IF;IF ( modein0='1' AND modein1='0' AND modein2='0' AND start='1' ) THEN next_sreg<=wash;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("001"));wout <= (std_logic_vector'("001"));END IF;WHEN rinse =>IF ( pause='0' AND tcin='0' ) THENnext_sreg<=rinse;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("010"));wout <= (std_logic_vector'("010"));END IF;IF ( tcin='0' AND pause='1' ) THENnext_sreg<=waitup;next_ten<='0';next_tstop<='0';next_ken<='0';modeout <= (std_logic_vector'("100"));wout <= (std_logic_vector'("000"));END IF;IF ( tcin='1' ) THENnext_sreg<=ready;next_ten<='1';next_tstop<='1';next_ken<='1';next_sel<='0';modeout <= (std_logic_vector'("000"));wout <= (std_logic_vector'("000"));END IF;WHEN waitup =>IF ( modein1='0' AND modein0='0' ) OR ( modein2='1' ) OR ( pause='1' ) THENnext_sreg<=waitup;next_ten<='0';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("100"));wout <= (std_logic_vector'("000"));END IF;IF ( modein0='1' AND modein1='1' AND modein2='0' AND pause='0' ) THEN next_sreg<=dry;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("011"));wout <= (std_logic_vector'("100"));END IF;IF ( modein0='0' AND modein1='1' AND modein2='0' AND pause='0' ) THEN next_sreg<=rinse;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("010"));wout <= (std_logic_vector'("010"));END IF;IF ( modein0='1' AND modein1='0' AND modein2='0' AND pause='0' ) THEN next_sreg<=wash;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("001"));wout <= (std_logic_vector'("001"));END IF;WHEN wash =>IF ( pause='0' AND tcin='0' ) THENnext_sreg<=wash;next_ten<='1';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("001"));wout <= (std_logic_vector'("001"));END IF;IF ( tcin='0' AND pause='1' ) THENnext_sreg<=waitup;next_ten<='0';next_tstop<='0';next_ken<='0';next_sel<='1';modeout <= (std_logic_vector'("100"));wout <= (std_logic_vector'("000"));END IF;IF ( tcin='1' ) THENnext_sreg<=ready;next_ten<='1';next_tstop<='1';next_ken<='1';next_sel<='0';modeout <= (std_logic_vector'("000"));wout <= (std_logic_vector'("000"));END IF;WHEN OTHERS =>END CASE;next_modeout2 <= modeout(2);next_modeout1 <= modeout(1);next_modeout0 <= modeout(0);next_wout2 <= wout(2);next_wout1 <= wout(1);next_wout0 <= wout(0);END PROCESS;END BEHAVIOR;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY WASHMACHINE ISPORT (modein : IN std_logic_vector (2 DOWNTO 0);modeout : OUT std_logic_vector (2 DOWNTO 0);wout : OUT std_logic_vector (2 DOWNTO 0);CLK,pause,start,stop,tcin: IN std_logic;ken,sel,ten,tstop : OUT std_logic);END;ARCHITECTURE BEHAVIOR OF WASHMACHINE ISCOMPONENT SHELL_WASHMACHINEPORT (CLK,modein0,modein1,modein2,pause,start,stop,tcin: IN std_logic;ken,modeout0,modeout1,modeout2,sel,ten,tstop,wout0,wout1,wout2 : OUTstd_logic);END COMPONENT;BEGINSHELL1_WASHMACHINE : SHELL_WASHMACHINE PORT MAP (CLK=>CLK,modein0=>modein(0) ,modein1=>modein(1),modein2=>modein(2),pause=>pause,start=>start,stop=>stop,tcin=>tcin,ken=>ken,modeout0=>modeout(0),modeout1=>modeout(1),modeout2=>modeout(2),sel=>sel,ten=>ten,tstop=>tstop,wout0=>wout(0),wout1=>wout(1),wout2=>wout(2));END BEHAVIOR;2.定时器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dingshi isport(clk,ten,tstop:in std_logic;ims:in std_logic_vector(3 downto 0);iss:in std_logic_vector(3 downto 0);img:in std_logic_vector(3 downto 0);isg:in std_logic_vector(3 downto 0);cin:out std_logic;omg, osg:buffer std_logic_vector(3 downto 0);oms:buffer std_logic_vector(3 downto 0);oss:buffer std_logic_vector(3 downto 0) );end;architecture cml of dingshi isbeginPROCESS(clk, ten, tstop)BEGINIF ten='1' THENIF tstop='1' THENosg<=isg;ELSIF clk'EVENT AND clk='1' THENIF osg="0000" THENIF oss>"0000" OR omg>"0000" OR oms>"0000" THENosg<="1001";ELSEosg<="0000";END IF;ELSEosg<=osg-1;END IF;END IF;END IF;END PROCESS;PROCESS(clk, ten, tstop, osg)BEGINIF ten='1' THENIF tstop='1' THENoss<=iss;ELSIF clk'EVENT AND clk='1' THENIF osg="0000" THENIF oss=0 THENIF omg>"0000" OR oms>"0000" THENoss<="0101";ELSEoss<="0000";END IF;ELSEoss<=oss-1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(clk, ten, tstop, osg, oss)BEGINIF ten='1' THENIF tstop='1' THENomg<=img;ELSIF clk'EVENT AND clk='1' THENIF oss=0 and osg=0 THENIF omg=0 THENIF oms>0 THENomg<="1001";ELSEomg<="0000";END IF;ELSEomg<=omg-1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(clk, ten, tstop, osg, oss, omg) BEGINIF ten='1' THENIF tstop='1' THENoms<=ims;ELSIF clk'EVENT AND clk='1' THENIF omg=0 and osg=0 and oss=0 THENIF oms=0 THENoms<="0000";ELSEoms<=oms-1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(clk, ten, tstop, osg, oss, omg, oms)BEGINIF ten='1' THENIF tstop='0' THENIF clk'EVENT AND clk='1' THENIF oms=0 AND omg=0 AND oss=0 AND osg=1 THENcin<='1';ELSEcin<='0';END IF;END IF;END IF;END IF;END PROCESS;END cml;3.时间设置:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key ISport( kin: in std_logic;ken: in std_logic;ims,iss,img,isg: buffer std_logic_vector(3 downto 0));end key;ARCHITECTURE cml OF key ISBEGINPROCESS(kin, ken)BEGINIF ken='1' THENIF kin'EVENT AND kin='1' THENIF isg="1001" THENisg<="0000";ELSEisg<=isg+1;END IF;END IF;END IF;END PROCESS;PROCESS(kin, ken, isg)BEGINIF ken='1' THENIF kin'EVENT AND kin='1' THENIF isg=9 THENIF iss="0101" THENiss<="0000";ELSEiss<=iss+1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(kin, ken, isg, iss)BEGINIF ken='1' THENIF kin'EVENT AND kin='1' THENIF iss="0101" AND isg="1001" THENIF img="1001" THENimg<="0000";ELSEimg<=img+1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(kin, ken, isg, iss, img)BEGINIF ken='1' THENIF kin'EVENT AND kin='1' THENIF img="1001" AND iss="0101" AND isg="1001" THENIF ims="0010" THENims<="0000";ELSEims<=ims+1;END IF;END IF;END IF;END IF;END PROCESS;END cml;4.模式设置:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mode isport(kin :in std_logic;ken :in std_logic;modeset:buffer std_logic_vector(2 downto 0);LED:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); end mode;architecture cml of mode issignal a: std_logic_vector(2 downto 0);signal k: std_logic;beginprocess(kin,ken)beginif ken='1' thenif rising_edge(kin) thenif a="100" thena<="000";elsea<=a+1;end if;end if;end if;end process;modeset<=a;PROCESS(modeset)BEGINCASE modeset ISWHEN "001"=>LED<="001";WHEN "010"=>LED<="010";WHEN "011"=>LED<="100";WHEN OTHERS=>LED<="000";end case ;end process;end cml;5.二路选择器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mulsel isport(ims:in std_logic_vector(3 downto 0);iss:in std_logic_vector(3 downto 0);img:in std_logic_vector(3 downto 0);isg:in std_logic_vector(3 downto 0);oms:in std_logic_vector(3 downto 0);oss:in std_logic_vector(3 downto 0);omg:in std_logic_vector(3 downto 0);osg:in std_logic_vector(3 downto 0);msdis:out std_logic_vector(3 downto 0);mgdis:out std_logic_vector(3 downto 0);isdis:out std_logic_vector(3 downto 0);igdis:out std_logic_vector(3 downto 0);modedis:out std_logic_vector(2 downto 0);modeset:in std_logic_vector(2 downto 0);modeout:in std_logic_vector(2 downto 0);sel:in std_logic);end mulsel;architecture cml of mulsel isbeginprocess(sel,ims,iss,isg,oms,isg,oss,omg,osg)beginif sel='1' thenmsdis<=oms;mgdis<=omg;isdis<=oss;igdis<=osg;modedis<=modeout;elsemsdis<=ims;mgdis<=img;isdis<=iss;igdis<=isg;modedis<=modeset;end if;end process;end cml;。

相关文档
最新文档