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程序(智能洗衣机)
华中科技大学电子线路课程设计题目:智能洗衣机院系:控制科学与工程系班级:自动化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 的 洗衣机控制器
子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页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控制器实验报告
数字电路和逻辑设计综合实验实验报告实验名称:洗衣机控制器班级:班内序号:姓名:学号:数电设计综合实验—洗衣机控制器一.设计课题的任务要求设计制作一个全自动洗衣机的控制器:●洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20秒,漂洗30 秒,脱水15 秒;●用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;●用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;●用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;●选做:三个过程的时间有多个选项供使用者选择。
●选做:可以预约洗衣时间。
●选做:自拟其它功能。
二.系统设计(包括设计思路、总体框图、分块设计)◆设计思路首先从题目进行分析,采用VHDL模块化的设计方法来进行洗衣机控制器的设计,即自顶向下,从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块.最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。
本控制器基本功能描述洗衣机控制器可工作于五种模式下:单洗涤、单漂洗、单脱水、漂洗十脱水、洗涤十漂洗+脱水,可以使洗衣机控制器工作在任意一种模式,并显示出洗衣机的工作状态和剩余工作时间,在剩余时间结束后有报警声提示使用者,并且可实现暂停洗衣和继续的功能,此外,加入附加功能,可自选三个过程是使用时间并且可预约洗衣时间。
由此分析可将洗衣机控制器分为控制模块、倒计时模块,初始模式选择模块,报警模块,洗衣时间选择模块,选通译码模块和分频器模块。
【设计过程】:1)审题,初步确定思路。
2)用VHDL语言进行编程。
3)适时对程序进行修改。
4)编译成功后,进行仿真,观察波形图。
5)将程序下载到实验板上,调试各功能。
6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。
7)进行总体的调试。
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洗衣机设计说明
EDA课程实训报告一、实训课题:洗衣机控制器的设计二、设计的内容及要求:1.设计一个洗衣机控制器,要求为:1) 洗衣机控制器可以驱动洗衣机进行洗涤、漂洗或烘干;2) 洗衣机控制器可以设置洗衣机的工作时间,工作时间最短1分钟,最长30分钟,在工作过程中,工作时间以倒计时显示,若时间为0洗衣机停止工作;3) 洗衣机在待机状态时,洗衣机控制器可以设置洗衣机的工作方式和工作时间;4) 可以暂停或停止洗衣机工作;5) 利用四个数码管显示洗衣机待机时的设置时间和工作时的运行时间,利用一位数码管显示洗衣机待机时所设置的工作方式运行时的工作方式;6)利用三个LED分别表示驱动洗衣机进行洗涤、漂洗或烘干。
2.洗衣机控制器可以划分为状态机模块、计时器模块、设置模块和显示选择模块。
在QuartusII 中输入各个模块的代码,编译综合,仿真,完成各个模块的软件设计;4.把各个模块组合起来,综合编译,仿真,完成整个交通灯控制器系统的软件设计;5. 选择电路方案锁定管脚,把程序下载到实验箱中,利用实验箱进行硬件实现;6. 完成实训报告。
实训报告包括:1)设计的任务和要求;2)模块的划分和系统总框图;3)各个模块的实现,包括模块的作用,模块的输入与输出情况,模块状态图,模块的代码以及注释,模块的波形图;4)系统的实现,包括系统总原理图,系统的波形图;5)管脚的锁定关系;三.设计思路:◆状态切换>>>有限状态机◆按定时时间及时>>> 定时计数器◆显示时间>>> 数码管译码驱动器◆接收设置时间>>>时间设置键盘扫描器◆接收设置模式>>> 模式设置键盘扫描器◆切换显示运行时间和设置时间>>>二路选择器◆切换显示运行模式和设置模式>>>二路选择器整体设计示意图:四.系统组成以及系统各部分的设计:1.状态机的设计:状态机要完成的功能:●能设置工作模式;●控制洗涤、漂洗、干衣的驱动输出;●能启动、暂停、停止洗衣机控制器;●能重启、暂停和停止定时器;●能接收定时器的到时标志;●能使能键盘扫描计数器;●能控制二路选择器。
利用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语言的洗衣机控制器设计
目录一、目的 (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 秒的急促的“嘀嘀”音,提示用户洗衣结束。
VHDL硬件描述语言与数字逻辑电路设计 (11)[70页]
第11章 洗衣机洗涤控制电路设计实例
(2) 输出信号: 5min_out:5分钟定时控制; 10min_out:10分钟定时控制; 15min_out:15分钟定时控制; start_out:启/停控制; j_out:强水流控制; b_out:标准水流控制; z_out:轻柔水流控制。 主控制器的功能是根据各输入按键的状态,输出对应的 控制状态信号,控制洗涤定时器和水流控制器的工作。
第11章 洗衣机洗涤控制电路设计实例
1.主控制器的算法状态机图描述 根据主控制器的工作要求,洗衣机洗涤时的工作状态共 有以下9种: 标准——15分钟; 标准——10分钟; 标准——5分钟; 轻柔——15分钟; 轻柔——10分钟; 轻柔——5分钟; 强洗——15分钟;
第11章 洗衣机洗涤控制电路设计实例
第11章 洗衣机洗涤控制电路设计实例
timer_down; reset; timer_on。 (2) 输出信号: off_out:电机断开控制信号输出; on_out:电机接通控制信号输出。
第11章 洗衣机洗涤控制电路设计实例
11.3 洗衣机洗涤控制电路的算法状态机图描述
如图11-1所示,洗衣机洗涤控制电路主要是控制电路和 计数电路,因此直接用算法状态机图描述比较方便。
根据上述对洗衣机洗涤控制电路的性能要求,可以画出 如图11-1所示的结构框图。该控制器由四大部分组成:主分 频器、主控制器、洗涤定时器和水流控制器。
第11章 Leabharlann 衣机洗涤控制电路设计实例图11-1 洗衣机洗涤控制电路的结构框图
第11章 洗衣机洗涤控制电路设计实例
1.主分频器 主分频器用来产生0.1秒的时钟供主控制器使用。本方 案使用民用的石英晶体,其振荡频率为76.8 kHz。这样,主 分频器的分频系数为7680。现采用3个分频器构成主分频器 的分频电路,分别是256分频器、10分频器和3分频器。主分 频器的结构如图11-2所示。
简易洗衣机VHDL程序
⑴数码管显示①实现数码管显示library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity showtime isport(remain_time:in std_logic_vector(7 downto 0);cp:in std_logic;q1,q2:out std_logic;--q1为低位a,b,c,d,e,f,g:out std_logic --数码管段码);end showtime;architecture rtl of showtime issignal temp:std_logic_vector(6 downto 0);signal bcd:std_logic_vector(3 downto 0);signal choose:std_logic;beginprocess(cp)beginif(cp'event and cp='1')then choose<=not choose;if(choose='1')then q1<='0';q2<='1';bcd<=remain_time(7 downto 4);--倒计时数码管十位(分钟) else q1<='1';q2<='0';bcd<=remain_time(3 downto 0);--倒计时数码管个位(分钟) end if;end if;end process;process(bcd)begincase bcd is -–(段码表)when "0000"=> temp<= "1111110" ;when "0001"=> temp<= "0110000" ;when "0010"=> temp<= "1101101" ;when "0011"=> temp<= "1111001" ;when "0100"=> temp<= "0110011" ;when "0101"=> temp<= "1011011" ;when "0110"=> temp<= "1011111" ;when "0111"=> temp<="1110000" ;when "1000"=> temp<="1111111" ;when "1001"=> temp<= "1111011" ;when others=>temp<="1111011";end case;a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp(2);f<=temp(1);g<=temp(0);end process;end rtl;○2数码管显示编码--bcd编码为数码管显示编码library ieee;use ieee.std_logic_1164.all;entity encode isport(bcd : in std_logic_vector(3 downto 0);a,b,c,d,e,f,g: out std_logic);end encode;architecture rtl of encode issignal temp:std_logic_vector(6 downto 0);begintablebcd => temp;"0000"=> "1111110" ;"0001"=> "0110000" ;"0010"=> "1101101" ;"0011"=> "1111001" ;"0100"=> "0110011" ;"0101"=> "1011011" ;"0110"=> "1011111" ;"0111"=> "1110000" ;"1000"=> "1111111" ;"1001"=> "1111011" ;end table;a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp(2);f<=temp(1);g<=temp(0); end rtl;⑵时序电路控制洗衣机按的顺序运行,待机5秒,正转10秒,待机5秒,反转10秒,直到时间结束信号的到来library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shixu isport(cp,en,rd:in std_logic;q1,q2:out std_logic--00为停机,10为正转,01为反转);end shixu;architecture rtl of shixu isbeginprocess(cp)variable wash_time:integer range 0 to 9;variable wait_time:integer range 0 to 4;variable state:std_logic; --0代表正转,1代表反转variable wash_time:integer := 11;--变量赋值variable wait_time:integer := 4;beginif(en='0')wash_time:='9';wait_time:='4';state:='0';end if;if(en='0')then wash_time:=21;Q1<='0';Q2<='0';--停机状态else if(cp'event and cp='1')then if(rd='1')then if(wash_time>0)then wash_time:=wash_time-1;wait_time:=4;--等待时间恢复elseif(wait_time>0)--运行时间结束,等待时间未到 then wait_time:=wait_time-1; --等待时间减1 else wash_time:=10; --等待时间结束,继续运行 state:=not state; end if;end if;-- end if; 将译码也加入同步时序,可以减少毛刺if(wash_time=0)then Q1<='0';Q2<='0';--暂停else if(state='0')--正转then Q1<='1';Q2<='0';else Q1<='0';Q2<='1';--反转end if;end if;else Q1<='0';Q2<='0';--暂停end if;end if;end if;end process;end rtl;⑶预置时间和编码电路--预置时间与编码寄存电路,将输入的1-10分钟编为2个4位的BCD码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity settime isport(load:in std_logic;k:in std_logic_vector(9 downto 0);o:out std_logic_vector(7 downto 0));end settime;architecture rtl of settime issignal p1:std_logic_vector(7 downto 0);beginprocess(load)beginif(load'event and load='1')then --开始译码case k is --将时间分钟when "1000000000"=>p1<="00000001";when "010*******"=>p1<="00000010";when "0010000000"=>p1<="00000011";when "0001000000"=>p1<="00000100";when "0000100000"=>p1<="00000101";when "0000010000"=>p1<="00000110";when "0000001000"=>p1<="00000111";when "0000000100"=>p1<="00001000";when "0000000010"=>p1<="00001001";when "0000000001"=>p1<="00010000";when others=>p1<="00000000";end case;end if;end process;o<=p1;end rtl;⑷译码器--将时序电路的信号翻译为暂停,正转,反转library ieee;use ieee.std_logic_1164.all;entity decoder isport(Q1,Q2: in std_logic;REV,RUN,PAUSE: out std_logic--rev反转,run正转,pause暂停 );end decoder;architecture rtl of decoder is--signal choose:std_logic_vector(1 downto 0);beginchoose(1)<=q1;choose(0)<=q2;process(choose)begincase choose iswhen "00"=>REV<='0';RUN<='0';PAUSE<='1';when "10"=>REV<='0';RUN<='1';PAUSE<='0';when "01"=>REV<='1';RUN<='0';PAUSE<='0';when others=>REV<='0';RUN<='0';PAUSE<='0';end case;end process;REV<=Q2;RUN<=Q1;PAUSE<=not(Q1 OR Q2);end rtl;⑸定时器电路①计时器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity b2d isport(time_in,clk:in std_logic_vector(9 downto 0); time_out:BUFFER STD_LOGIC_VECTOR(15 DOWNTO 0); );end b2d;architecture rtl of b2d isbeginprocess(clk)variable time_temp:intbeginif(clk'event and clk='1')then if(start='0')then time_remain<=k;--k为分钟数else if(time_remain>0)--防止时间无限计数then time_remain<=time_remain-start;--只有开始时候才开始计时 end if;end if;end if;if(time_remain=0)--时间是否结束的判定then time_is_up<='0';else time_is_up<='1';end if;end process;end rtl;②减法计数器--十进制BCD码减法计数器,实现输入的为分钟数,每隔60秒计数器减1 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(clk,start:in std_logic;k:in STD_LOGIC_VECTOR(7 downto 0);time_remain:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);time_is_up:out std_logic);end counter;architecture rtl of counter isbeginprocess(clk)variable time_second:integer:=60;--integer为整数variable time_second:integer:=0;beginif(clk'event and clk='1') --检测上升沿触发thenend if;--秒表计数的实现if(time_second>0 and start='1')then time_second:=time_second-1;else time_second:=59;end if;--装载时间并将秒赋值if(start='0')thentime_remain<=k;time_second:=60;time_second:=0;elseif(time_second=0)then if(time_remain(3 downto 0)>0)--防止时间无限计数then --time_remain(3 downto 0)<=time_remain(3 downto 0)-start;--只有开始时候才开始计时--上条语句执行实际结果为减3,原因未明time_remain(3 downto 0)<=time_remain(3 downto 0)-1;time_second:=59;else if(time_remain(7 downto 4)>0)then --time_remain(7 downto 4)<=time_remain(7 downto 4)-start;time_remain(7 downto 4)<=time_remain(7 downto 4)-1;time_remain(3 downto 0)<="1001";time_second:=59;end if;end if;else --if(time_second=0 and time_second=1) --以下语句除脉冲上升沿语句之外将产生毛刺if(time_remain=0)--时间是否结束的判定then time_is_up<='0';else time_is_up<='1';time_second:=time_second-1;--秒表计数的实现end if;end ifend if;end if;end process;end rtl;。
基于VHDL语言的简易洗衣机控制器
电子课程设计——简易洗衣机控制器设计学院:班级:姓名:学号:指导老师:2013年12月目录第一部分:设计任务与要求 (1)第二部分:总体框图 (1)第三部分:选择器件 (2)第四部分:功能模块 (3)4.1时间预置编码寄存模块(settime) (3)4.2减法计数器模块(counter) (4)4.3数码管显示模块(showtime) (7)4.4时序电路模块(analyse) (9)4.5译码器模块(move)………………………………………1 1 第五部分:总体设计电路图 (13)5.1总体(顶层)设计电路图 (13)5.2顶层文件仿真 (13)5.3管脚分配图 (14)5.4硬件实验效果图 (14)第六部分:课程设计心得体会 (15)简易洗衣机控制器设计一、设计任务与要求设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运转:用两位数码管预置洗涤时间(分钟数),洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED 表示电动机的正、反转,如果定时时间到,则停机并发出音响信号。
二、总体框图RUN REV PAUSEK5K6K1 K2 K3 K4各个部分的具体功能描述如下:(一)预设时间和编码电路(settime ):接受用户通过按钮预置的时间信息,编码成八位之后转给减法计数器。
(二)减法计数器电路(counter):接收编码之后的预置时间信息,向电机运转控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。
(三)数码管显示电路(showtime):接收减法计数器电路传来的时间信息,进行实时译码显示。
(四)电机运转时序控制电路(analyse):接收运行起止信号,安排电机运行状态并编码输出。
(五)译码器(move):接收电机运行状态信号,译码后实时控制电机的正传、反转和暂停。
三、选择器件1、pc机一台。
2、CPLD/FPGA适配器板:标准配置EPF10K10LC84-4接口板,下载接口是数字芯片的下载接口(DIGITAL JTAG),主要用于CPLD/FPGA芯片的数据下载。
基于Verilog HDL的洗衣机控制电路设计
信息与电HChina Computer&Communication 秋件开茨爲惑用2021年第2期基于Verilog HDL的洗衣机控制电路设计杨凯饪王颖*(大连理工大学城市学院电子与自动化学院,辽宁大连116024)摘要:随着人们的生活水平提高,人们对洗衣机的需求越来越大,因此洗衣机的市场逐步扩大,洗衣机行业竞争也愈演愈烈。
在此背景下,本文以Verilog HDL为基础实现了以洗衣机控制电路为核心,结合所需的外围电路,共同对洗衣机的工作状态进行自由控制。
关键词:Verilog HDL;硬件描述语言;中心控制模块;洗衣机控制电路中图分类号:TN702文献标识码:A文章编号:1003-9767(2021)02-151-02Design of Washing Machine Control Circuit Based on Verilog HDLYANG Kaiyu,WANG Ying*(School of Electronics and Automation,City Institute,Dalian University of Technology,Dalian Liaoning116024,China)Abstract:With the improvement of people's living standards,people's demand for washing machines is increasing.Therefore, the market for washing machines is gradually expanding,and the competition in the washing machine industry is intensifying.In this context,this article uses Verilog HDL as the basis to realize the washing machine control circuit as the core,combined with the required peripheral circtdts,to jointly control the working state of the washing machine freely.Keywords:Verilog HDL;hardware description language;central control module;washing machine control circuit1总体设计系统包括中心控制模块、分频模块、按键去抖模块、BCD码转换电路和数码显示电路21。
洗衣机vhdl课程设计
洗衣机vhdl课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本概念,掌握其语法结构;2. 学生能运用VHDL语言设计简单的数字电路,如洗衣机控制模块;3. 学生了解洗衣机工作原理,能将其实际功能需求转化为VHDL代码;4. 学生掌握VHDL代码的仿真与调试方法。
技能目标:1. 学生能运用所学知识,独立完成洗衣机控制模块的VHDL代码编写;2. 学生能运用仿真软件对所编写代码进行功能验证;3. 学生能对洗衣机控制模块进行简单的优化与改进;4. 学生具备一定的团队协作能力,能与他人共同完成课程设计任务。
情感态度价值观目标:1. 学生通过课程学习,培养对电子设计与应用的兴趣和热情;2. 学生在课程实践中,学会分析问题、解决问题的方法,培养自主学习能力;3. 学生在团队合作中,学会沟通、协作、尊重他人,培养良好的团队精神;4. 学生通过洗衣机控制模块的设计,认识到科技对生活的改善,增强社会责任感和使命感。
本课程针对高年级学生,结合学科特点和教学要求,以实用性为导向,旨在培养学生的实际工程设计能力。
课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,并为后续的教学设计和评估提供依据。
二、教学内容1. VHDL基本概念与语法- 引导学生理解VHDL的背景和优势;- 介绍VHDL的基本结构,如实体声明、端口声明、行为描述等;- 讲解VHDL的基本数据类型和运算符。
2. 洗衣机工作原理与功能需求分析- 详细介绍洗衣机的工作流程及各阶段功能需求;- 分析洗衣机控制模块的关键功能,如水位检测、洗涤时间控制等;- 引导学生将功能需求转化为VHDL代码。
3. VHDL代码编写与仿真- 指导学生编写洗衣机控制模块的VHDL代码;- 讲解仿真软件的使用方法,如ModelSim;- 组织学生进行代码仿真与调试,确保功能正确。
4. 洗衣机控制模块优化与改进- 分析现有控制模块的优缺点;- 引导学生针对特定问题进行优化与改进;- 组织学生进行优化后的仿真验证。
智能洗衣机控制器 VHDL语言
智能洗衣机控制器的设计YIEEKUU一、设计内容与要求①设计一个智能洗衣机(全自动洗衣机)控制器,能够实现洗衣,漂洗和脱水的功能。
②要求能够使用按键模拟对洗衣机的控制,能够设置工作模式,为了便于观察,将洗衣机的工作模式和所剩的工作时间用数码管显示出来,能够将洗衣机当前所处的状态用发光管或者数码管显示出来。
【模式1】:洗特别脏的衣服(洗衣30秒钟)【模式2】:洗脏的衣服(洗衣20秒钟)【模式3】:洗一般的衣服(洗衣10秒钟)【模式4】:漂洗(每次漂洗5秒钟)【模式5】:脱水(每次脱水3秒钟【洗衣过程】:洗衣+脱水+漂洗+脱水+漂洗+脱水,注水完成使用外部传感器S=1表示。
【漂洗模式】:漂洗+脱水+漂洗+脱水,注水完成使用外部传感器S=1表示。
【脱水模式】:脱水。
【注】:操作完毕使用蜂鸣器鸣叫两秒提示二、系统设计(包括设计思路、总体框图、分块设计)设计思路:首先从题目进行分析,采用VHDL模块化的设计方法来进行洗衣机控制器的设计,即自顶向下,从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。
本控制器基本功能描述洗衣机控制器可工作于五种模式下,可以使洗衣机控制器工作在任意一种模式,并显示出洗衣机的工作状态和剩余工作时间,在剩余时间结束后有报警声提示使用者,并且可实现暂停蜥蜴和继续的功能。
由此分析可将洗衣机控制器分为控制模块、倒计时模块、初始模块选择模块、报警模块、洗衣时间选择模块、选通译码模块和分频器模块。
设计过程:1)审题,初步确定思路。
2)用VHDL语言进行编程。
3)适时对程序进行修改。
4)编译成功后,进行仿真,观察波形图。
5)将程序下载到实验板上,调试各功能。
6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。
7)进行总体的调试。
分块设计核心控制选择模块:此模块是本程序的核心部分,要识别模式选择器送来的基本工作方式依次执行。
基于VHDL的洗衣机控制器设计
.数字系统设计与硬件描述语言期末考试作业题目:洗衣机控制器的设计学院:电子信息工程学院专业:物联网工程学号:3014204328姓名:刘涵凯2016-12-10一、选题设计描述1.功能介绍洗衣机控制器,能够实现开始与暂停、注水,洗涤、排水、脱水和警报提醒的功能,并且可以随时更改洗衣模式。
洗衣机提供两种模式:模式1:注水-洗涤-排水-注水-洗涤-排水-脱水;模式2:脱水。
洗衣模式决定洗衣时间。
默认模式为模式2。
洗衣机界面如下图所示:运转方式如下图所示:2.算法简介总程序描述:总程序通过调用5种模块,在洗衣机控制器输入变化时,立刻转换模式并产生对应输出。
当开关关闭时,所有输出为0;暂停时,除显示开关状态的输出外,所有输出为0。
开关开启后,设置洗衣模式,之后按下“开始”即可开始工作。
在洗衣机控制器输入变化时,立刻转换模式并产生对应输出。
电子元器件模型如下图所示:switch为开关信号,modelselect为开关选择信号,clkin为系统时序脉冲信号,sorp 为开始/暂停信号。
waterstate为注水程序的工作状态,washrstate为洗涤程序的工作状态,drainstate为排水程序的工作状态,drystate为脱水程序的工作状态。
alarmout为警报提醒的状态。
switchstate为数码管显示的开关的状态(0/1),spstate为数码管显示的开始/暂停的状态(0/1),state为数码管显示的洗衣机工作状态(0~4),currentmodel为数码管显示的当前模式(0~2),timedecade为数码管显示的剩余时间的十位,timeunit为数码管显示的剩余时间的个位。
下面介绍各模块功能与算法:1)开关与模式选择模块a接收开关信息,b接收模式选择信息。
c输出总电路的开关信息(开启洗衣机并且设置完毕电路后,即可准备工作,等待“开始”信号)。
e为开关信息,将输入到数码管中显示。
time1与time2分别代表洗衣时间的十位和个位,将输入到计数器与警报模块中。
VHDL洗衣机设计
EDA课程实训报告一、实训课题:洗衣机控制器的设计二、设计的容及要求:1.设计一个洗衣机控制器,要求为:1) 洗衣机控制器可以驱动洗衣机进行洗涤、漂洗或烘干;2) 洗衣机控制器可以设置洗衣机的工作时间,工作时间最短1分钟,最长30分钟,在工作过程中,工作时间以倒计时显示,若时间为0洗衣机停止工作;3) 洗衣机在待机状态时,洗衣机控制器可以设置洗衣机的工作方式和工作时间;4) 可以暂停或停止洗衣机工作;5) 利用四个数码管显示洗衣机待机时的设置时间和工作时的运行时间,利用一位数码管显示洗衣机待机时所设置的工作方式运行时的工作方式;6)利用三个LED分别表示驱动洗衣机进行洗涤、漂洗或烘干。
2.洗衣机控制器可以划分为状态机模块、计时器模块、设置模块和显示选择模块。
在QuartusII 中输入各个模块的代码,编译综合,仿真,完成各个模块的软件设计;4.把各个模块组合起来,综合编译,仿真,完成整个交通灯控制器系统的软件设计;5. 选择电路方案锁定管脚,把程序下载到实验箱中,利用实验箱进行硬件实现;6. 完成实训报告。
实训报告包括:1)设计的任务和要求;2)模块的划分和系统总框图;3)各个模块的实现,包括模块的作用,模块的输入与输出情况,模块状态图,模块的代码以及注释,模块的波形图;4)系统的实现,包括系统总原理图,系统的波形图;5)管脚的锁定关系;三.设计思路:◆状态切换>>>有限状态机◆按定时时间及时>>> 定时计数器◆显示时间>>> 数码管译码驱动器◆接收设置时间>>>时间设置键盘扫描器◆接收设置模式>>> 模式设置键盘扫描器◆切换显示运行时间和设置时间>>>二路选择器◆切换显示运行模式和设置模式>>>二路选择器整体设计示意图:四.系统组成以及系统各部分的设计:1.状态机的设计:状态机要完成的功能:●能设置工作模式;●控制洗涤、漂洗、干衣的驱动输出;●能启动、暂停、停止洗衣机控制器;●能重启、暂停和停止定时器;●能接收定时器的到时标志;●能使能键盘扫描计数器;●能控制二路选择器。
基于Verilog_HDL的洗衣机程序
EDA 嵌入式系统课程设计北京印刷学院课程设计报告——嵌入式系统EDA 课程设计名称:EDA 技术课程设计课程设计题目:洗衣机控制电路专业:电子信息工程专业班级:XX XXX学生姓名:XXXXXXXXXXXXXXXXXXXXXXXX指导老师:XXXXXXX时间:XXXXXX至XXXXX 年XXXX 月XXXX 日目录一、设计任务要求 (3)1、基本要求 (3)二、总体设计方案 (3)1、系统功能 (3)2、系统设计 (3)1)系统结构框图 (3)2)模块分析 (3)1、分频模块 (3)2、七段数码管显示模块 (3)3、洗衣机主程序模块 (3)三、应用设备及软件介绍 (3)1、主要仪器设备(实验用的软硬件环境) (3)2、实验的软件环境 (4)3、操作方法与实验步骤 (4)四、调试过程分析、遇到的问题及解决方法 (4)1、分频模块 (3)2、七段数码管显示模块 (3)3、洗衣机主程序模块 (3)五、设计结论 (3)六、DE2管脚分配说明 (3)七、参考文献 (3)八、附录 (3)附录一分频模块 (9)附录二七段数码管显示模块 (9)附录三洗衣机主程序模块 (9)一、设计任务要求1、基本要求:1)洗衣机的状态为待机5s→正转60s→待机5s→反转60s→,并用3个LED灯和7段显示器分别表示其工作状态和显示相应工作状态下的时间。
2)可自行设定洗衣机的循环次数,这里设置最大的循环次数为15次。
3)具有紧急情况的处理功能。
当发生紧急情况时,立即转入待机状态,紧急情况解除后,继续执行后续步骤。
4)洗衣机设定循环次数递减到零时立即报警,以表示洗衣机设定的循环次数已经结束。
二、设计方案1、系统功能基本功能:能够实现洗衣机在设置洗衣次数后待机5s→正转60s→待机5s→反转60s的四种基本状态,并且可显示循环次数,当遇到紧急状态时可打开紧急开关,暂停洗衣机的工作。
当洗衣机循环次数递减到0时洗衣机自动报警。
2、系统设计1)系统结构框图,如图1-1所示:通过分频模块得到1Hz clk作为标准时钟输入到洗衣机主程序模块中,rst,en,start,add,四个输入信号作为洗衣机主程序模块的总输入,所得到的led信号分别用三个红灯显示,alarm信号用一个红灯显示,numa 信号、numb信号、tim信号用七段数码管显示,最终实现了洗衣机的各项功能。
全自动洗衣机的设计-Verilog程序文件
实验报告2016 年 5 月 24 学 院:大数据与信息工程学院 专 业:电子与通信工程 学 号:2015021718 学生:鹏 举 指导教师: 良 荣目录一、实验题目 (3)二、实验目的 (3)三、实验要求 (3)四、洗衣机工作原理与功能说明 (3)状态图如下 (4)程序RTL视图如下 (4)五、详细代码如下 (5)模块一实现洗衣机状态转换和各状态输出控制 (5)模块二实现复位信号的异步复位同步释放 (11)模块三实现当前状态的数码管显示 (12)模块四实现按键检测 (13)模块五实现顶层的调用 (15)一、实验题目自动洗衣机设计二、实验目的1、熟练掌握Quartus II 工程文件的建立过程。
2、掌握Verilog的基本语法、语句、模块的使用。
3、了解模块的建立与使用。
4、了解FPGA的开发基本流程。
三、实验要求1、初始状态,准备启动。
2、开始进水;为防止进水过程出现故障,故不用定时器控制,而是手动给一个信号模拟水位检测传感器,表示进水完成。
3、开始洗涤:正反洗涤4次开始排水。
4、排水后立即脱水。
5、洗涤之后漂洗2次,每次漂洗过后都排水甩干。
6、整个过程全部用数码管来显示状态机状态,并用两个led灯表示电机的正转与反转状态。
四、洗衣机工作原理与功能说明自动洗衣机的工作原理:洗衣机有7个工作状态分别为空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、漂洗(rinse)、结束音乐提示(music)。
一次完整的洗涤,进水3次、洗涤1次、漂洗两次、排水3次、甩干3次。
一次完整的状态转换为:空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、结束音乐提示(music)。
程序功能说明:程序有4个输入start启动信号、water_test 水满检测信号,水满了就置一、drain_test排水检测,水排完了就置一、emergency紧急停止信号,任何情况下输入都进入idle状态,即停止工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;。