您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 用VHDL语言设计交通灯——甘骏
第0页共15页数字电路自主设计报告交通灯控制电路设计院系:英才实验学院班级:29001040学号:2900104007姓名:甘骏指导教师:胡剑浩2011年7月1日第1页共15页目录引言······················································2一设计任务和设计要求·········································2二电路工作原理及方案设计································3三软件设计与调试········································41.分频模块的设计及仿真图·································42.控制器设计及仿真图····································63.计数器的设计及仿真图···································74.分位模块的设计·······································95.数码管驱动设计·······································106.顶层文件设置·········································14四心得体会·············································15第2页共15页引言:如今,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。以下就是运用数字电子设计出的交通灯。本程序设计的是交通灯的设计。所开发的程序通过调试运行、波形仿真验证,实现设计目标。一.设计任务与设计要求1.设计任务设计一个基于FPGA的十字路口交通控制器,假设南北方向和东西方向,两个方向分别设置红灯、绿灯、黄灯三盏灯,设置一组倒计时显示器,用以指挥车辆和行人有序的通行。红灯亮表示直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示直行车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间。尽量采用层次化设计。2.设计要求在十字路口南北和东西两个方向各设一组红灯、黄灯、绿灯。设一组倒计时显示器。自动控制:设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,南北方向为主干道,红灯、黄灯和绿灯显示时间分别是55s、5s、50s。东西方向为次干道,红灯、黄灯绿灯显示时间分别为35s、5s、30s。特殊功能:(1)紧急状态时,手动拨动紧急开关,主干道以及次干道都显示红灯,禁止通行,并由蜂鸣其报警。(2)黄灯显示信号为脉冲信号,使得黄灯为“一闪一闪”的显示状态。第3页共15页二.电路工作原理及方案设计图1总体设计框图在VHDL设计描述中,采用自顶向下的设计思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:外部时钟信号clk。LED在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。分频电路:输入较高频率脉冲用分频电路的到较第频率的时钟信号,本电路通过二次分平分别得到1Hz的时钟信号。控制器电路:根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。当检测到手动控制信号(hold=’1’)时,执行特殊控制;计数器电路:下一个时钟沿回复到0,开始下一轮计数。当检测到特殊情况(HOLD=‘1’)发生是,计数器暂停计数。分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通第4页共15页过输入二进制数值,输出信号点亮二极管,我们用的是共阴极数码管,因此译码电路输出逻辑数值‘1’点亮二极管,译码电路输出逻辑数值‘0’熄灭二极管。三.软件设计与调试图2模块化设计原理图1.分频模块的设计及仿真图利用计数器,对50Mhz的时钟进行计数到50M,得到1Hz的时钟。模块程序为:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityFreDeciderisPort(clk:inSTD_LOGIC;rst:inSTD_LOGIC;clkout:outSTD_LOGIC);第5页共15页endFreDecider;architectureBehavioralofFreDeciderissignalsec1:std_logic_vector(9downto0);--------------------signalsec2:std_logic_vector(9downto0);------jishiyimiao---signalsec3:std_logic_vector(4downto0);--------------------signaldout:std_logic:='1';beginclkout=dout;------------------计时1秒------------------------------process(clk,rst)beginifrst='0'thensec1=(others='0');sec2=(others='0');sec3=(others='0');elsifclk'eventandclk='1'thenifsec1=1111101000thensec1=(others='0');sec2=sec2+'1';ifsec2=1111101000thensec2=(others='0');sec3=sec3+'1';ifsec3=11001thensec3=(others='0');dout=notdout;elsesec3=sec3+'1';endif;endif;elsesec1=sec1+'1';endif;endif;endprocess;endBehavioral;2.控制器设计及仿真图控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。功能:控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;第6页共15页useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycountrollerisPORT(Clock:INSTD_LOGIC;Hold:instd_logic;CountNum:inINTEGERRANGE0TO89;NumA:outINTEGERRANGE0TO90;RedA,GreenA,YellowA:outstd_logic;RedB,GreenB,YellowB:outstd_logic);ENDcountroller;ARCHITECTUREBehavioralOFcountrollerISBEGINprocess(Clock)BEGINIFfalling_edge(Clock)THENIFHold='1'THENRedA='1';RedB='1';GreenA='0';GreenA='0';YellowA='0';YellowB='0';ELSIFCountNum=54THENNumA=55-CountNum;RedA='0';GreenA='1';YellowA='0';ELSIFCountNum=59THENNumA=60;RedA='0';GreenA='0';YellowA='1';ELSENumA=90-CountNum;RedA='1';GreenA='0';YellowA='0';ENDIF;IFCountNum=54THENRedB='1';GreenB='0';YellowB='0';ELSIFCountNum=84THENRedB='0';第7页共15页GreenB='1';YellowB='0';ELSeRedB='0';GreenB='0';YellowB='1';ENDIF;endif;ENDPROCESS;endBehavioral;3.计数器的设计及仿真图这里计数器的计数范围为0—90S,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数。程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycounterisPORT(Clock:INSTD_LOGIC;Hold:instd_logic;countNum:BuFFeRINTEGERRANGE0TO90);ENDcounter;ARCHITECTUREBehavioralOFcounterISBEGINProcess(Clock)BEGINIFrising_edge(Clock)THENIFHold='1'thencountNum=countNum;ELSEIFcountNum=90THENcountNum=0;ELSEcountNum=countNum+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;第8页共15页endBehavioral;4.分位模块的设计libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityFenweiisPORT(Numin:INintegerRANGE0TO90;NumA,NumB:OUTIntegerRANGE0to9第9页共15页);endFenwei;architectureBehavioralofFenweiisBEGINprocess(Numin)BEGINIFNumin=60THENNumA=0;NumB=0;elsIFNumin=50THENNumA=5;NumB=Numin-50;elsIFNumin=40THENNumA=4;NumB=Numin-40;ELSIFNumin=30THENNumA=3;NumB=Numin-30;ELSIFNumin=20THENNumA=2;NumB=Numin-20;ELSIFNumin=10THENNumA=1;NumB=Numin-10;ELSENumA=0;NumB=Numin;ENDIF;ENDPROCESS;endBehavioral;5.数码管驱动设计libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitybcd_dataisPORT(bcd_data:inIntegerRANGE0to9;segout:outSTD_LOGIC_VECTOR(7downto0));第10页共15页endbcd_data;arch
本文标题:用VHDL语言设计交通灯——甘骏
链接地址:https://www.777doc.com/doc-5824361 .html