您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 数字电路自由创作(二)
数电实验报告题目基于FPGA的洗衣机控制系统的实现时间2011年6月27日摘要本试验基于FPGA设计了简单的洗衣机控制系统,该系统能实现包括定时,洗衣等功能。本试验主要利用VHDL语言写出相关的程序,然后通过仿真软件modelsim进行模拟仿真。关键词洗衣机控制系统FPGA1目录第一章实验任务与原理………………………………………2第二章FPGA模块程序设计与仿真…………………………2附录…………………………………………………………22第一章实验任务与原理1、功能需求(1)设计一个洗衣机控制器,使洗衣机作如下运转:定时启动—〉正转20秒—〉暂停10秒—〉反转20秒—〉暂停10秒—〉定时不到,重复上面过程;(2)若定时到,则停止;2(3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由开始信号开始;(4)三只LED灯表示正转、反转、暂停三个状态。2、原理阐述洗衣机控制器的设计主要是定时器的设计,由一片FPGA和外围电路构成了电器控制部分。FPGA接收键盘的控制命令,控制洗衣机的进水、排水、水位和洗衣机的工作状态、并控制显示工作状态以及设定直流电机速度、正反转控制、制动控制、起停控制和运动状态控制。对FPGA芯片的编程采用模块化的VHDL(硬件描述语言)进行设计。图一洗涤过程第二章FPGA模块程序设计与仿真洗衣机控制器电路主要有五大部分组成,包括:减法计数器、时序控制电路、预置时间和编码电路、数码管显示、译码器组成。定时启动正转反转暂停暂停停止定时未到定时到3图二洗衣机控制器电路说明图1、预置时间和编码电路(1)、模块源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;--Uncommentthefollowinglibrarydeclarationifinstantiating--anyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entitytest_2isport(clk:instd_logic;reset:instd_logic;4set:instd_logic;load:instd_logic_vector(9downto0);en_out:outstd_logic_vector(3downto2);dout_p:outstd_logic_vector(7downto0));endtest_2;architectureBehavioraloftest_2issignalp1:std_logic_vector(7downto0);beginprocess(clk,load,reset,set)beginif(reset='1')thenp1=00000000;elsif(clk'eventandclk='1')thenif(set='1')thencaseloadiswhen1000000000=p1=00000001;--1when0100000000=p1=00000010;--2when0010000000=p1=00000011;--3when0001000000=p1=00000100;--4when0000100000=p1=00000101;--5when0000010000=p1=00000110;--65when0000001000=p1=00000111;--7when0000000100=p1=00001000;--8when0000000010=p1=00001001;--9when0000000001=p1=00001010;--10whenothers=p1=00000000;endcase;if(p1=00001010)thenen_out(3)='1';en_out(2)='0';dout_p=11111001;elseen_out(3)='0';en_out(2)='1';casep1iswhen00000001=dout_p=11111001;when00000010=dout_p=10100100;when00000011=dout_p=10110000;when00000100=dout_p=10011001;when00000101=dout_p=10010010;when00000110=dout_p=10000010;when00000111=dout_p=11111000;when00001000=dout_p=10000000;6when00001001=dout_p=10010000;whenothers=dout_p=11000000;endcase;endif;endif;endif;endprocess;endBehavioral;(2)、仿真程序LIBRARYieee;USEieee.std_logic_1164.ALL;useieee.numeric_std.all;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--USEieee.numeric_std.ALL;ENTITYtest_2_aISENDtest_2_a;ARCHITECTUREbehaviorOFtest_2_aIS--ComponentDeclarationfortheUnitUnderTest(UUT)7COMPONENTtest_2PORT(clk:INstd_logic;reset:INstd_logic;set:INstd_logic;load:INstd_logic_vector(9downto0);en_out:OUTstd_logic_vector(3downto2);dout_p:OUTstd_logic_vector(7downto0));ENDCOMPONENT;--Inputssignalclk:std_logic:='0';signalreset:std_logic:='0';signalset:std_logic:='0';signalload:std_logic_vector(9downto0):=(others='0');--Outputssignalen_out:std_logic_vector(3downto2);signaldout_p:std_logic_vector(7downto0);--Clockperioddefinitionsconstantclk_period:time:=10ns;BEGIN8--InstantiatetheUnitUnderTest(UUT)uut:test_2PORTMAP(clk=clk,reset=reset,set=set,load=load,en_out=en_out,dout_p=dout_p);--Clockprocessdefinitionsclk_process:processbeginclk='0';waitforclk_period/2;clk='1';waitforclk_period/2;endprocess;--Stimulusprocessstim_proc:processbegin--holdresetstatefor100ns.reset='1';9set='0';waitfor50ns;reset='0';set='1';load=0000000010;wait;endprocess;END;(3)、模拟结果图2、定时器模块(1)、模块源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;10entitytest_1isport(clk:instd_logic;reset:instd_logic;start:instd_logic;p1:instd_logic_vector(7downto0);time_is_up_out:outstd_logic;count_out:outstd_logic_vector(19downto0);en_out:outstd_logic_vector(1downto0);dout_p:outstd_logic_vector(7downto0));endtest_1;architectureBehavioraloftest_1issignaltime_remain:std_logic_vector(7downto0);signaltime_is_up:std_logic;signalcount:std_logic_vector(19downto0);beginprocess(clk,reset,start,p1)--variabletime_temp:int;beginif(reset='1')thentime_remain=p1;11time_is_up='0';count=00000000000000000000;elsif(clk'eventandclk='1')thenif(start='1'andtime_is_up='0')thenif(time_remain=00000000)thentime_is_up='1';elseif(count=10010010011111000000)thencount=00000000000000000000;time_remain=time_remain-'1';elsecount=count+'1';endif;endif;count_out=count;time_is_up_out=time_is_up;if(time_remain=00001010)thenen_out(1)='1';en_out(0)='0';dout_p=11111001;elseen_out(1)='0';12en_out(0)='1';casetime_remainiswhen00000001=dout_p=11111001;when00000010=dout_p=10100100;when00000011=dout_p=10110000;when00000100=dout_p=10011001;when00000101=dout_p=10010010;when00000110=dout_p=10000010;when00000111=dout_p=11111000;when00001000=dout_p=10000000;when00001001=dout_p=10010000;whenothers=dout_p=11000000;endcase;endif;endif;endif;time_is_up_out=time_is_up;endprocess;endBehavioral;(2)、仿真程序LIBRARYieee;USEieee.std_logic_1164.ALL;13useieee.numeric_std.all;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--USEieee.numeric_std.ALL;ENTITYtest_AISENDtest_A;ARCHITECTUREbehavi
本文标题:数字电路自由创作(二)
链接地址:https://www.777doc.com/doc-3232085 .html