您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于VHDL的交通灯控制器设计
生物医学工程王春雨2006512059基于VHDL的交通灯控制器设计应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。1系统功能与要求实现交通繁忙的主路和偶有车行的小路交会路口的交通管理。要求:1、交通灯控制器控制主干道和小路交叉路口的交通。2、小路口来车,主线路口绿灯切换到黄灯5秒钟后变为红灯。3、红灯燃亮20秒后,自动切换为绿灯。4、指示左转弯的绿灯亮12s,绿灯变至红灯时,黄灯亮3s。5、主路的交通管制重新切换到绿灯后5分钟内不理睬小路上的车况,即使又有车辆驶入小路路口。上述主路上的灯光显示,小路口的灯信号与之逻辑配合。2程序设计根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。外部脉冲振荡器的频率选为32768kHz,经分频器分频得1Hz的信号,1Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在MAX+plusⅡ平台上,编译VHDL程序,然后用原理图输入法形成总体框图。实验程序:LibraryIEEE;UseIEEE.Std_Logic_1164.All;UseIEEE.STd_Logic_Unsigned.All;EntityFrequency10HzIsPort(Clk20M:InStd_Logic;Clk10Hz:OutStd_Logic);End;ArchitectureCountOfFrequency10HzIsSignalTout:IntegerRange0to999999;SignalClk:Std_Logic;BeginProcess(Clk20M)BeginIfrising_edge(Clk20M)thenIfTout=999999thenTout=0;Clk=NotClk;ElseTout=Tout+1;EndIf;EndIf;EndProcess;Clk10Hz=Clk;End;LibraryIEEE;UseIEEE.Std_Logic_1164.All;UseIEEE.STd_Logic_Unsigned.All;EntityFrequencyIsPort(Clk10Hz:InStd_Logic;Clk1Hz:OutStd_Logic);End;ArchitectureCountOfFrequencyIsSignalTout:IntegerRange0to4;SignalClk:Std_Logic;BeginProcess(Clk10Hz)BeginIfrising_edge(Clk10Hz)thenIfTout=4thenTout=0;Clk=NotClk;ElseTout=Tout+1;EndIf;EndIf;EndProcess;Clk1Hz=Clk;End;LibraryIEEE;UseIEEE.Std_Logic_1164.All;UseIEEE.Std_Logic_Unsigned.All;EntityControllerIsPort(Clock:InStd_Logic;Hold:InStd_Logic;CountNum:INIntegerRANgE0TO49;Flash:OutStd_Logic;NumA,NumB:OutIntegerRange0To25;RedA,GreenA,YellowA:OutStd_Logic;RedB,GreenB,YellowB:OutStd_Logic);End;ARCHITECTUREBehaviorOFControllerISBEGINPROCESS(CLOCK)BeginIffalling_edge(Clock)thenIfHold='1'thenRedA='1';RedB='1';GreenA='0';GreenB='0';YellowA='0';YellowB='0';Flash='1';ElseFlash='0';IfCountNum=19thenNumA=20-CountNum;RedA='0';GreenA='1';YellowA='0';Elsif(CountNum=24)thenNumA=25-CountNum;RedA='0';GreenA='0';YellowA='1';ElseNumA=50-CountNum;RedA='1';GreenA='0';YellowA='0';EndIf;IfCountNum=24thenNumB=25-CountNum;RedB='1';GreenB='0';YellowB='0';ElsifCountNum=44thenNumB=45-CountNum;RedB='0';GreenB='1';YellowB='0';ElseNumB=50-CountNum;RedB='0';GreenB='0';YellowB='1';EndIf;EndIf;EndIf;EndProcess;End;LIBRARYIEEE;USEIEEE.Std_logic_1164.all;UseIEEE.Std_Logic_Unsigned.All;ENTITYCounterISPORT(Clock:INStd_logic;Reset:INStd_logic;Hold:INStd_logic;CountNum:BUFFERIntegerRANGE0TO49);END;ARCHITECTUREBehaviorOFCounterISBEGINPROCESS(Reset,Clock)BEGINIFReset='1'THENCountNum=0;ELSIFrising_edge(Clock)THENIFHold='1'THENCountNum=CountNum;ELSEIFCountNum=49THENCountNum=0;ELSECountNum=CountNum+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDBehavior;LibraryIEEE;UseIEEE.Std_Logic_1164.All;UseIEEE.Std_Logic_Unsigned.All;EntityDisplayIsPort(Clock:InStd_Logic;Flash:InStd_Logic;Qin:InStd_Logic_Vector(3Downto0);Display:OutStd_Logic_Vector(0to6));End;ArchitectureLightOfDisplayIsSignalTimeout:IntegerRange0To11;BeginProcess(Clock)BeginIfrising_edge(Clock)thenIf(Flash='0')thenTimeout=0;ElseIf(Timeout=11)thenTimeout=0;ElseTimeout=Timeout+1;EndIf;EndIf;If(Timeout=6)thenCaseQinIsWhen0000=Display=1111110;When0001=Display=0110000;When0010=Display=1101101;When0011=Display=1111001;When0100=Display=0110011;When0101=Display=1011011;When0110=Display=0011111;When0111=Display=1110000;When1000=Display=1111111;When1001=Display=1110011;WhenOthers=Display=0000000;EndCase;ElseDisplay=0000000;EndIf;EndIf;EndProcess;End;LibraryIEEE;UseIEEE.Std_Logic_1164.All;UseIEEE.Std_Logic_Unsigned.All;EntityFenweiIsPort(Numin:InIntegerRange0To25;NumA,NumB:OutIntegerRange0To9);End;ArchitectureFenOfFenweiIsBeginProcess(Numin)BeginIfNumin=20thenNumA=2;NumB=Numin-20;ElsifNumin=10thenNumA=1;NumB=Numin-10;ElseNumA=0;NumB=Numin;EndIf;EndProcess;End;顶层框图:3.仿真结果
本文标题:基于VHDL的交通灯控制器设计
链接地址:https://www.777doc.com/doc-2572719 .html