交通灯控制器的设计.EDA课程设计报告书
- 格式:doc
- 大小:461.50 KB
- 文档页数:23
一、课程设计目的和要求目的:掌握基于FPGA 的复杂数字系统的设计和验证方法。
提高学生复杂数字系统的设计能力。
要求:使用实验箱为W48-PK2SOPC 试验开发系统,核心器件为Alatera 公司的EP1C6Q240C8芯片,开发软件为Quartus4.0.本实验环节要求学生以FPGA 器件为目标器件,设计典型的数字系统,如:A/D 、D/A 接口;电子密码锁,交通灯控制系统,数字表等复杂硬件电路,完成设计综合、仿真和硬件测试,并写实验报告。
二、设计方案工作原理:本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。
设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续40S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续40S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。
用LED 灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。
实现方法:本次采用文本编辑法,即利用Verilog HDL 语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。
设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。
状状状状状状状状状状状状00状状10状状11状状01状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状001100010010001010100010图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。
进入10状态两路黄灯亮起。
结束一个循环,从00状态重新开始循环。
交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(1)南北和东西方向各有一组红、绿、黄灯来指挥交通,持续时间分别为25S,20S,和5S。
(2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止。
(3)当特殊情况结束后,控制器恢复原来状态,继续正常运行。
(4)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。
二.设计原理1.交通灯控制器的状态转换根据题目要求将将红绿灯的状态转换列成如下表:2.设计方案1)由于交通灯需要使用2位7段LED数码管指示通行剩余时间,故采用LED动态扫描方式显示当前时间。
频率设定CLK1k对应的频率为50MHZ。
2)控制模块是交通灯的核心,主要控制交通灯按工作顺序自动变换,同时控制倒计时模块工作,每当倒计时回零时,控制模块接收到一个计时信号,从而控制交通灯进入下一个工作状态。
3)每个方向有一组2位倒计时器模块,用以显示该方向交通灯剩余的点亮时间。
4)显示模块由两部分组成,一是由七段数码管组成的倒计时显示器,每个方向两个七段数码管;二是由发光二极管代替的交通灯,每个方向3个发光二极管。
三.变量符号说明其中,CLK1K为系统时钟信号输入端,SN为禁止通行信号输入通行信号输入端,light0为东西红灯信号输出端,light1为东西黄灯信号输出端,light2为东西绿灯信号输出端,light3为南北红灯信号输出端,light4为南北黄灯信号输出端,light5为南北绿灯信号输出端,led1、led2、led3、led4为数码管地址选择信号输出端。
四.代码说明library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Hongld ISport (clk1k,SN:in std_logic; --SN紧急情况led1, led2, led3, led4 :out std_logic_vector (6 downto 0);--显示管显示时间用light:out std_logic_vector (5 downto 0)); --红绿黄灯end Hongld;architecture traffic1 of Hongld ISsignal S:std_logic_vector (1 downto 0); --状态signal DXT:std_logic_vector(7 downto 0):=X"01"; --东西方向时间signal NBX:std_logic_vector(7 downto 0):=X"01"; --南北方向时间signal ART,AGT,AYT,BRT,BGT,BYT: std_logic_vector(7 downto 0); --红绿黄灯信号signal temp: integer range 0 to 49999999; --产生1s计数器时计数signal clk: std_logic;beginART<="00100101";AGT<="00100000";AYT<="00000100";BRT<="00100101";BGT<="00100000";BYT<="00000100";process(clk1k) -- 选频率为50MHZ beginif (clk1k'event and clk1k='1') thenif temp=49999999 thentemp<=0;clk<='1';elsetemp<=temp+1;clk<='0';end if;end if;end process;process(clk,DXT,NBX) --状态转换进程beginif clk'event and clk ='1' thenif(DXT ="00000001")OR (NBX = "00000001") then S<=S+1;else S<=S;end if; --状态转换结束end if;end process;process (clk,SN,S) --倒计时模块beginif SN = '1' then DXT<=DXT; NBX<=NBX;elseif clk'event and clk='1' thenif (DXT="0000000") OR (NBX="00000000") thencase S ISwhen "00"=>DXT<=ART; NBX<=BGT; --南北红灯、东西绿灯when "01"=>NBX<=BYT; --南北红灯、东西黄灯when "10"=>DXT<=AGT; NBX<=BRT; --南北绿灯、东西红灯when "11"=>DXT<=AYT; --南北黄灯、东西红灯when others=>NULL;end case;end if;if DXT/="00000000" thenif DXT(3 downto 0)= "0000" thenDXT(3 downto 0)<="1001";DXT(7 downto 4)<=DXT(7 downto 4)-1;else DXT(3 downto 0)<=DXT(3 downto 0)-1;DXT(7 downto 4)<=DXT(7 downto 4);end if;end if;if NBX/="00000000" thenif NBX(3 downto 0)="0000" thenNBX(3 downto 0)<="1001";NBX(7 downto 4)<=NBX(7 downto 4)-1;else NBX(3 downto 0)<=NBX(3 downto 0)-1;NBX(7 downto 4)<=NBX(7 downto 4);end if;end if;end if;end if;end process; --倒计时模块结束process(DXT,NBX,S,SN) --显示模块begincase NBX(3 downto 0) iswhen "0000"=>led1<="1000000";when "0010"=>led1<="0100100"; when "0011"=>led1<="0110000"; when "0100"=>led1<="0011001"; when "0101"=>led1<="0010010"; when "0110"=>led1<="0000010"; when "0111"=>led1<="1111000"; when "1000"=>led1<="0000000"; when "1001"=>led1<="0010000"; when others=>led1<="1111111"; end case;case NBX(7 downto 4) iswhen "0000"=>led2<="1000000"; when "0001"=>led2<="1111001"; when "0010"=>led2<="0100100"; when "0011"=>led2<="0110000"; when "0100"=>led2<="0011001"; when "0101"=>led2<="0010010"; when "0110"=>led2<="0000010"; when "0111"=>led2<="1111000"; when "1000"=>led2<="0000000"; when "1001"=>led2<="0010000"; when others=>led2<="1111111"; end case;case DXT(3 downto 0) iswhen "0000"=>led3<="1000000"; when "0001"=>led3<="1111001"; when "0010"=>led3<="0100100"; when "0011"=>led3<="0110000"; when "0100"=>led3<="0011001"; when "0101"=>led3<="0010010"; when "0110"=>led3<="0000010"; when "0111"=>led3<="1111000"; when "1000"=>led3<="0000000"; when "1001"=>led3<="0010000"; when others=>led3<="1111111"; end case;case DXT(7 downto 4) iswhen "0000"=>led4<="1000000"; when "0001"=>led4<="1111001"; when "0010"=>led4<="0100100";when "0100"=>led4<="0011001";when "0101"=>led4<="0010010";when "0110"=>led4<="0000010";when "0111"=>led4<="1111000";when "1000"=>led4<="0000000";when "1001"=>led4<="0010000";when others=>led4<="1111111";end case;if SN ='1' then light<="001001";elsecase S ISwhen "00"=>light<="010001";when "01"=> light <="100001";when "10"=> light <="001010";when "11"=> light <="001100";when others=>NULL;end case;end if;end process;end traffic1;五.仿真波形图仿真时序波形图。
课程设计年月日大课程设计任务书课程EDA技术课程设计题目交通灯控制器专业姓名学号主要内容、基本要求、主要参考资料等主要内容:设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
基本要求:1、红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号,实验电路用逻辑开关代替。
2、主干道处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
3、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路,选择1HZ时钟脉冲作为系统时钟。
4、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限2010.3.12指导教师专业负责人2010年3月8日一、总体设计思想1.基本原理计数模块、置数模块、主控制器模块和译码器模块。
置数模块将交通灯的点亮时间预置到置数电路中,计数模块以秒为单位倒计时,当计数值减为零时,主控电路改变输出状态,电路进入下一个状态的倒计时。
其中,核心部分是主控2.设计框图图一.交通灯控制系统的原理框图图二.交通灯控制器的流程图脉冲发生器 控制器 译码器甲车信号灯乙车信号灯定时器1.设计思路:在某一十字路口交叉地带,可设计东西走向的道路为甲车道,南北走向的道路为乙车道。
甲乙车道的交通灯需按交通法则来依次交替运行。
则可设计一个状态循环的逻辑电路。
2.分析系统的逻辑功能:交通灯控制系统的原理框图如图一所示。
数字电路课程设计报告交通灯设计目录序言 (3)第一章设计任务和要求 (4)设计任务 (4)1. 2 设计要求 (4)第二章电路工作原理及方案设计 (4)第三章单元电路设计与仿真 (6)3.1 软件原理图 (6)3.2 各模块的原理及其程序 (6)分频模块的设计及仿真图 (6)计数模块的设计及仿真图 (7)控制模块的设计及仿真图 (9)分位模块的设计及仿真图 (10)译码模块的设计及仿真图 (11)第四章系统设计 (12)4.1 顶层电路设计 (12) (13)第五章总结 (13)参考文献 (14)附录 (14)序言CPLD(Complex Programmable Logic Device)是Complex PLD的简称,一种较PLD 为复杂的逻辑元件。
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
20世纪70年代,最早的可编程逻辑器件--PLD诞生了。
其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成,因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。
为弥补PLD只能设计小规模电路这一缺陷,20世纪80年代中期,推出了复杂可编程逻辑器件--CPLD。
目前应用已深入网络、仪器仪表、汽车电子、数控机床、航天测控设备等方面。
它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。
几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。
CPLD 器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。
目录1课程设计要求 (3)2 电路功能描述 (3)3 设计方案 (3)4设计原理图 (4)5 VHDL语言 (4)6仿真截图 (6)7心得体会 (11)8参考文献 (11)1. 课程设计要求1.1.红、黄、绿灯分别控制显示;1.2.每一个状态分别分配一个时间显示(两位十进制,倒计时);1.3.符合实际交通规律。
2.电路功能描述本设计是实现交通灯的控制,模拟实现了红、绿、黄灯指挥交通的功能。
本设计适用东西和南北方向的车流量大致相同的路口,红灯显示时间30S,绿灯显示时间25S,黄灯显示时间5S,同时用数码管指示当前的状态(红、绿、黄灯)的剩余时间。
当有紧急状况发生时,两个方向都禁止通行,并且显示红灯,当紧急状况解除后,重新计时并且指示时间。
3.设计方案根据设计要求,需要控制显示红、黄、绿三个灯的亮灭状态及显示的时间。
这个设计主要由两部分组成,红黄绿灯的显示模块,显示时间模块。
由实际的交通情况可知,东西方向的显示情况是一致的,南北方向的显示情况也是一致,故在设计的时候就只考虑两种状态,将东西方向合成一种,南北方向合成一种。
红黄绿灯的显示模块用两组共6个灯显示,时间显示模块用LED数码管显示。
此外,本交通灯控制器设置的红黄绿显示方式是参照一些城市的显示规律,红灯30S,绿灯25S,黄灯5S,同时用数码管指示当前状(红、绿、黄灯)的剩余时间。
另外还设有一个紧急状态,当特殊情况发生时,两个方向都禁止通行,指示红灯,紧急状态解除后,重新计时并指示时间。
时间采用倒计时的方式显示。
本设计采用VHDL语言编程,描述各个硬件模块实现的功能,使红、黄、绿灯的转换有一个准确的转换顺序和时间间隔,并进行仿真,通过仿真的结果,得出实验的结果。
在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分别是东西红、南北绿,东西红、南北黄,东西绿、南北红,东西黄、南北红。
其运行方式为东西红、南北绿→东西红、南北黄→东西绿、南北红→东西黄、南北绿,东西黄、南北绿结束后再回到东西红、南北绿的状态,整个周期持续60s。
交通灯控制器课程设计该交通信号控制器控制十字路甲、乙两条道路的红、黄和绿三色灯,指挥车辆和行人安全通行。
功能要求如下:1.只有在小路上发现汽车时,高速公路上的交通灯才可能变成红灯。
2.当汽车行驶在小路上时,小路的交通灯保持为绿灯,但不能超过给定的时间。
(20s)3.高速公路灯转为绿色后,即使小路上有汽车出现,而高速公路上并无汽车,也将在给定的时间内保持绿灯。
(60s)。
设计如下:——1hz分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fen_pin1 isport(clk100hz:in std_logic;clk1hz:out std_logic);end fen_pin1;architecture bhv of fen_pin1 issignal qan:std_logic_vector(3 downto 0);signal qbn:std_logic_vector(3 downto 0);signal cin:std_logic;beginprocess(clk100hz)beginif(clk100hz'event and clk100hz='1')thenif qan="1001"then qan<="0000";cin<='1';else qan<=qan+1;cin<='0';end if;end if;end process;process(clk100hz,cin)beginif(clk100hz'event and clk100hz='1')thenif cin='1' thenif qbn="1001" then qbn<="0000";else qbn<=qbn+1;end if ;end if ;end if ;end process;process(qan,qbn)beginif (qan="1001"and qbn="1001")then clk1hz<='1'; else clk1hz<='0';end if;end process;end bhv;——2hz分频器library ieee;use ieee.std_logic_1164.all;entity fen_pin2 isport (clk100hz:in std_logic;clk2hz:out std_logic);end fen_pin2;architecture bhv of fen_pin2 isbeginprocess(clk100hz)variable cnt:integer range 0 to 24;variable tmp:std_logic;beginif(clk100hz'event and clk100hz='1')thenif cnt=24 thencnt:=0;tmp:=not tmp;elsecnt:=cnt+1;end if;end if;clk2hz<=tmp;end process;end bhv;——主干道控制library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity contralz isport(clk:in std_logic;ra,ga,ya:out std_logic;timeah,timeal:out std_logic_vector(3 downto 0)); end contralz;architecture bhv of contralz istype rg is(green,red,yellow2);beginprocess(clk)variable a:std_logic;variable th,tl:std_logic_vector(3 downto 0);variable state:rg;beginif clk'event and clk='1'thencase state iswhen green=>if a='0'thenth:="0101";tl:="1001";a:='1';ga<='1';ra<='0';ya<='0';elseif not(th="0000"and tl="0001")thenif tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;elseth:="0000";tl:="0000";a:='0';state:=red;end if;end if;when red=>if a='0'thenth:="0001";tl:="1001";a:='1';ra<='1';ya<='0';ga<='0';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;end if;elseth:="0000";tl:="0000";a:='0';ra<='0';ga<='0';state:=yellow2;end if;end if;when yellow2=>if a='0'thenth:="0000";tl:="1001";a:='1';ya<='1';ga<='0';ra<='0';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;tl:=tl-1;end if;elseth:="0000";tl:="0000";ga<='0';ra<='0';ya<='0';a:='0';state:=green;end if;end if;end case;end if;timeah<=th;timeal<=tl;end process;end bhv;——支路控制library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity contralx isport(clk:in std_logic;rb,gb,yb,chu:out std_logic;timeah,timeal:out std_logic_vector(3 downto 0)); end contralx;architecture bhv of contralx istype rgy is(red,yellow1,green,yellow2);beginprocess(clk)variable a:std_logic;variable th,tl:std_logic_vector(3 downto 0);variable state:rgy;beginif clk'event and clk='1'thencase state iswhen yellow1=>if a='0'thenth:="0000";tl:="0100";a:='1';yb<='1';gb<='0';chu<='1';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;end if;elseth:="0000";tl:="0000";a:='0';state:=green;end if;end if;when green=>if a='0'thenth:="0001";tl:="1001";a:='1';gb<='1';rb<='0';yb<='0';chu<='1';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;end if;elseth:="0000";tl:="0000";a:='0';state:=yellow2;end if;end if;when red=>if a='0'thenth:="0101";tl:="0100";a:='1';yb<='0';chu<='1';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;end if;elseth:="0000";tl:="0000";a:='0';state:=yellow1;end if;end if;when yellow2=>if a='0'thenth:="0000";tl:="0100";a:='1';yb<='1';gb<='0';rb<='0';chu<='1';elseif not(th="0000"and tl="0001")then if tl="0000"thentl:="1001";th:=th-1;elsetl:=tl-1;end if;elseth:="0000";tl:="0000";a:='0';chu<='0';state:=red;end if;end if;end case;end if;timeah<=th;timeal<=tl;end process;end bhv;——反馈器library ieee;use ieee.std_logic_1164.all;entity smen isport( sm ,re,gr,ye:in std_logic;jinji:out std_logic);end smen;architecture se of smen isbeginprocess isbeginif(sm='1' and re='0' and gr='0' and ye='0') then jinji<='1'; elsejinji<='0';end if;end process;end se;——消抖电路library ieee;use ieee.std_logic_1164.all;entity xiaodou isport(jinji,clk1hz:in std_logic;b:out std_logic);end xiaodou;architecture bhv of xiaodou issignal temp1:std_logic;beginprocess(clk1hz,jinji)variable temp2:std_logic;beginif(clk1hz'event and clk1hz='0')thentemp1<=jinji;temp2:=not temp1;end if;b<=temp1 and temp2 and clk1hz;end process;end bhv;——状态转换library ieee;use ieee.std_logic_1164.all;entity no isport(a:in std_logic;en:out std_logic);end no;architecture no_arc of no isbeginprocess(a)variable tmp:std_logic;beginif(a'event and a='1')thentmp:=not tmp;end if;en<=tmp;end process;end no_arc;——mux4llibrary ieee;use ieee.std_logic_1164.all;entity mux41 isport(sel:in std_logic_vector(2 downto 0);d0,d1,d2,d3:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0);so:out std_logic_vector(1 downto 0));end mux41;architecture bhv of mux41 isbeginprocess(sel)begincase sel iswhen"100"=>q<=d2;so<="00"; when"101"=>q<=d3;so<="01"; when"000"=>q<=d0;so<="10";when others=>q<=d1;so<="11";end case;end process;end bhv;——译码器library ieee;use ieee.std_logic_1164.all;entity dec7s isport(d:in std_logic_vector(3 downto 0);q0,q1,q2,q3,q4,q5,q6:out std_logic);end dec7s;architecture bhv of dec7s isbeginprocess(d)variable q:std_logic_vector(6 downto 0); begincase d iswhen"0000"=>q:="0111111"; when"0001"=>q:="0000110"; when"0010"=>q:="1011011"; when"0011"=>q:="1001111"; when"0100"=>q:="1100110"; when"0101"=>q:="1101101"; when"0110"=>q:="1111101"; when"0111"=>q:="0100111"; when"1000"=>q:="1111111"; when"1001"=>q:="1101111";when others=>q:="1111001";end case;q0<=q(0);q1<=q(1);q2<=q(2);q3<=q(3);q4<=q(4);q5<=q(5);q6<=q(6);end process;end bhv;下载可编辑.专业.整理. 仿真图如下:Ya,ra,ga 表示主干道黄红绿灯;yb,rb,gb 表示乡村小路黄红绿灯。
十字路口交通灯设计摘要:本课程设计侧重于逻辑电路设计同时采用VHDL硬件描述语言辅助完成对十字路口交通灯电路的功能仿真。
在设计过程中,重点探讨了交通灯控制系统的设计思路和功能模块的划分,对设计过程中出现的问题详细进行分析。
系统主要由四个模块组成:脉冲产生模块、控制模块、选择模块、数码显示模块。
关键词:交通灯功能模块 VHDL语言一.系统设计内容及要求十字路口的方向上各设一组红绿黄灯,显示顺序为:其中一个方向是绿灯、黄灯、红灯,另外一个方向是红灯、绿灯、黄灯。
设置4个数码管,以倒计时的方式显示允许通过或禁止的时间,其中绿灯、黄灯、红灯的持续时间分别是30秒、5秒、35秒。
二.系统硬件设计1.设计思路本实验中主要应用了状态机以及减法器的设计原理。
在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。
其中,主要模块包括分频模块、控制模块、选择模块、数码显示模块。
各个模块先用EDA技术中的VHDL语言编程仿真,再生成各个模块的模拟元件,最后根据设计连接电路生成顶层原理图文件十字路口交通灯系统。
2.整体设计方案框架图图2-13.顶层文件原理图图2-24.时序仿真图2-3三.系统电路模块设计1.分频模块FENPIN设计模块FENPIN如下图,该模块的功能是将时间256分频,得到占空比为1:256的方波。
模块FENPIN原理图如下:图2-4FENPIN源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport ( clk : in std_logic;d: out std_logic;sel: buffer std_logic_vector(2 downto 0));end;architecture one of fenpin issignal a : std_logic_vector(7 downto 0);beginprocess(clk)beginif clk' event and clk ='1' then a<=a+1;sel<=sel+1;end if; end process;d<=a(7);end;仿真波形如下:图2-52.控制模块KONGZHI设计通过SEL的不同状态选择输出不同的值,当SEL=“000”输出“shi”,当SEL=“001”时输出“ge”。
摘要 (1)一设计目的与要求 (2)二设计原理 (2)2.1交通灯控制的系统构成 (3)2.2交通灯控制器的电路控制原理框图 (3)2.3器件下载编程与硬件实现 (4)三设计内容 (4)3.1设计步骤 (5)3.2交通灯控制器各模块的程序 (6)3.3软件仿真结果 (9)3.4硬件实现及调试结果 (10)总结与致谢 (11)参考文献 (12)附录 (21)EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
交通控制系统的适用场合主要是用于交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代交通监控指挥系统中最重要的组成部分。
关键字:EDA 交通灯 Verilog HDL QuartusII一设计目的与要求(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2) 主、支道交替允许通行,主干道每次放行45 s,支干道每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作为过渡,并进行减计时显示。
(3) 具有清零、可预置主、支干道通行时间功能。
二设计原理交通灯控制系统的作用主要是实现城市十字交叉路口红绿灯的控制。
在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
EDA原理及应用实验报告题目:交通灯控制器专业:电子信息工程班级:姓名:学号:一、设计题目:交通灯控制器二、设计目标:1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2、红、绿、黄发光二极管作信号灯。
3、主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
4、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。
5、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
三、设计原理:(含系统总的原理图)由两个分频器模块,三个计数器模块及它的选择器,一个扫描数码管模块,和一个红绿灯控制模块连接而成。
RTL状态图四、设计内容:(含状态转换图、软件流程图、说明文字等,每单独模块的图标和VHDL程序;最后为总体程序框图)分频器1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT(CLK:IN STD_LOGIC;--D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);FOUT:OUT STD_LOGIC);END;ARCHITECTURE one OF DVF ISSIGNAL FULL:STD_LOGIC;BEGINP_REG:PROCESS(CLK)V ARIABLE CNT8:INTEGER RANGE 48000000 DOWNTO 0;BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8=24000000 THENCNT8:=0;FULL<='1';ELSE CNT8:=CNT8+1;FULL<='0';END IF;END IF;END PROCESS P_REG;P_DIV:PROCESS(FULL)V ARIABLE CNT2:STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1' THENCNT2:=NOT CNT2;IF CNT2='1' THEN FOUT<='1';ELSE FOUT<='0';END IF;END IF;END PROCESS P_DIV;END;说明:采用的是48M时钟输入,作为后面的时钟信号。
EDA 课程设计报告书课题名称 交通灯控制器的设计姓 名 胡伟明学 号 0812201-46院 系物理与电信工程系 专 业电子信息工程 指导教师周来秀 讲师2011年 6月10日※※※※※※※※※ ※※※※※※ ※※※※※※※※※2008级学生 EDA 课程设计交通灯控制器的设计1设计目的通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的EDA原理知识,提高分析、解决实际问题的独立工作能力。
2设计的主要容和要求交通灯控制器的设计,设计了主干道的交叉路口交通信号灯无人自动管理的控制系统。
将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机。
交通控制器能完成以下功能:1.能显示十字路口东西、南北两个方向的红、黄、绿灯的指示状态,用两组红、黄、绿三色LED灯作为两个方向的红、黄、绿灯;2.南北向为主干道,每次通行时间为45S,东西向为支干道,每次通行时间为25S;3.能实现正常的倒计时功能,用两组数码管作为东西、南北向的倒计时显示。
其中,黄灯:5S。
4.能实现特殊状态的功能。
按下SP键后,能实现以下特殊功能:(1)显示倒计时的两组数码管闪烁;(2)计数器停止计数并保持在原来的状态;(3)东西、南北路口均显示红灯状态;(4)特殊状态解除后能继续计数;5. 能实现全清零功能。
按下reset键后,系统实现全清零,计数器由初状态计数,对应状态的指示灯亮;6. 用VHDL语言设计上述功能的交通灯控制器,并用层次化方法设计该电路;7. 仿真、验证设计的正确性。
3 整体设计方案3.1 方案分析通过分析课程设计的要求可以知道,所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口,其主要功能是:主干道处于常允许通行的状态,支干道有车来时才允许通行;当支干道没有车通行时,主干道亮绿灯,而支干道亮红灯,主、支干道的倒计时数码管不显示数字;当支干道有车通行时,进入了主干道和支干道交替通行的情况。
当进入到交替通行时,主干道每次放行45秒,支干道每次放行25秒。
首先主干道通行45秒,并且主干道显示45秒的倒计时,此45秒主干道亮绿灯,当45秒计时结束,主干道亮黄灯5秒,而且显示5秒倒计时,用于绿灯转为红灯作为过渡,使行驶中的车辆有时间停到禁行线外,在主干道亮绿灯和黄灯的50秒,支干道亮红灯50秒,而且支干道显示50秒的倒计时。
然后,当支干道亮红灯50秒结束时,主干道由黄灯转为红灯,并且主干道的红灯亮30秒,显示30秒的倒计时,在此过程中,支干道先亮绿灯25秒,显示25秒的倒计时,25秒过后绿灯转为黄灯,而且黄灯亮5秒,显示5秒倒计时,用于绿灯转为红灯作为过渡,使行驶中的车辆有时间停到禁行线外。
支干道通行结束后,主干道通行,以此交替。
3.2 方案状态机控制设计将十字路口分成东西走向和南北走向的主干道和支干道。
交通灯的工作明显可以分成5个状态,如下表3.1所示:表3.1 工作状态表3.3 整体设计方案根据交通灯控制器的功能与要求,可以把整体设计分为三个模块:分频模块,把2kHz的频率分成1Hz,1Hz用于倒计时计数的时钟信号,而2kHz则可以用于数码管扫描显示的片选时钟信号;交通灯控制及倒计时(五个状态的控制)模块;数码管译码扫描显示模块。
整体的系统框图如图3.1所示:图3.1 系统框架图分频模块就是把输入的2kHz时钟频率2000分频得到1Hz的频率用于数码管倒计时的时钟信号,其原理就是设计一个0到999循环计数的的计数器,当计数溢出,即计数到999时使输出量取反,则输出为0.5秒的高电平和0.5秒的低电平交替出现,就得到了1Hz的方波,作为秒倒计时的时钟信号。
交通灯控制及倒计时模块就是五个状态的转换模块,是整个系统的核心模块,其五个状态分别st0、st1、st2、st3、st4。
其中st0是当支干道没有车通行的状态,st1是主干道绿灯亮45秒的状态,st2是主干道亮黄灯5秒的状态,st3是支干道亮绿灯25秒的状态,st4是支干道亮黄灯5秒的状态。
当主干道亮绿灯和黄灯时,支干道都是亮红灯,当支干道亮绿灯和黄灯时,主干道都是亮红灯,并且主、支干道都会显示亮灯的倒计时时间,主、支干道的红黄绿灯用六个LED发光二极管代替。
五个状态图如下图3.2所示:S t1S t2S t4 S t3S t0 Car 为1且主干道绿灯倒计时结束Car 为1且支干道绿灯倒计时结束Car 为1且主干道黄灯倒计时结束Car 为1 且支干道黄灯倒计时结束Car 为0Car 为0Car 为0Car 为1Car 为0Car 为0图3.2 状态图数码管倒计时显示,是用四个一体的数码管,分别表示主干道和支干道的秒倒计时,所以是动态扫描显示,扫描的频率直接用2KHz 的输入时钟频率。
4 软硬件电路的设计4.1 各模块的原理及其程序4.1.1 时钟模块设计时钟分频模块就是把输入的2kHz 时钟频率2000分频得到1Hz 的频率用于数码管倒计时的时钟信号,其原理就是设计一个0到999循环计数的的计数器,当计数溢出,即计数到999时使输出量取反,则输出为0.5秒的高电平和0.5秒的低电平交替出现,就得到了1Hz 的方波,作为秒倒计时的时钟信号。
时钟分频模块生成的元件符号如下图4.1所示:图4.1 时钟分频模块clk2khz 是频率为为2khz 的输入时钟信号,clk1hz 是经过2000分频后得到的频率为1hz 方波的输出信号。
4.1.2 交通灯控制及计时模块此模块是整个系统的核心部分,主要功能是完成五个状态的转换,并且在每个状态里完成相应的控制作用,即控制主干道和支干道的红黄绿灯的点亮和各自数码管倒计时显示。
编程时主要是用一个进程语句,其敏感信号是时钟分频模块产生的1Hz时钟信号,进程里主要用case语句完成五个状态的控制,在每个状态里要控制主干道和支干道的红黄绿灯的点亮,而且要控制各自数码管倒计时的显示,并为扫描显示译码模块提供倒计时时间,同时要使每个状态结束时能顺利进入下一个状态。
五个状态及相应的功能是:St0,支干道亮红灯,主干道亮绿灯,数码管不显示;St1,主干道亮绿灯45秒,数码管显示45秒倒计时;支干道亮红灯,数码管显示从49秒倒计时到05秒;St2,主干道亮黄灯5秒,数码管显示5秒倒计时;支干道亮红灯,数码管显示从04秒倒计时到00秒;St3,支干道亮绿灯25秒,数码管显示25秒倒计时;主干道亮红灯,数码管显示从29秒倒计时到05秒;St4,支干道亮黄灯5秒,数码管显示5秒倒计时;主干道亮红灯,数码管显示从04秒倒计时到00秒。
状态转换条件参照图3.2。
此模块生成的元件符号如下图4.2所示:图4.2 交通灯控制及计时模块clk1hz是分频模块输出的1Hz的时钟信号,car是支干道是否有车的判断信号,one1、ten1、one2、ten2分别是主干道倒计时的个位和十位,支干道倒计时的个位和十位。
r_a、g_a、y_a、r_b、g_b、y_b分别是主干道和支干道的红、绿、黄灯控制信号。
4.1.3 扫描显示译码模块此模块中含有七段数码管译码和扫描显示两个部分。
七段译码可以使用case语句,将数码管要显示的数译成对应的七位二进制数,用来控制数码管的a、b、c、d、e、f、g的导通。
主干道和支干道倒计时要用到4个数码管,且是四位一体的,则要使用扫描显示的方法:设计一个00到11循环计数的计数器,而且计数的时钟要比较大,选用输入的2KHz的时钟信号;当计数器计数为00时,选通第一个数码管,给它主干道倒计时个位的七段译码,当计数器计数为01时,选通第二个数码管,给它主干道倒计时十位的七段译码,当计数器计数为10时,选通第三个数码管,给它支干道倒计时个位的七段译码,当计数器计数为11时,选通第四个数码管,给它支干道倒计时十位的七段译码,并以此循环扫描显示,达到人眼看上去四个数码管全显示的效果。
此模块生成的元件符号如下图4.3所示:图4.3 扫描显示译码模块元件符号其中clk2khz是输入的扫描时钟信号。
one1、ten1分别是主干道倒计时的个位和十位,one2、ten2分别是支干道倒计时的个位和十位,这四个信号都是有交通灯控制及倒计时模块输出的。
Scan是四个数码管的片选信号,seg_7是七段译码输出信号。
4.1.4 顶层文件的编写顶层文件就是将上述的三个模块进行例化,把它们连接起来组成一个整体。
元件例化语句由两部分组成,第一部分是将一个现成的设计实体定义为一个元件,它的最简单表达式如下:component 元件名 isport (端口名表);end component 文件名;元件例化语句的第二部分是此元件与当前设计实体中元件间及端口的连接说明,语句的表达式如下:例化名:元件名 port map ([端口名=>]连接端口名,...);由顶层文件生成的元件符号如下图4.4所示:图4.4 顶层文件生成元件符号clk_2k是外部输入的频率为2khz的时钟信号,car是判断支干道是否有车的输入信号。
scan[1..0]是四位一体数码管的片选输出信号,seg_7[6..0]是数码管的七段译码输出信号,ra、ga、ya、rb、gb、yb分别是主干道和支干道红、绿、黄灯的输出控制信号。
4.2 顶层原理图系统原理图如下图4.5所示:图4.5 顶层原理图系统工作原理: 把car置为低电平,系统处于 st0状态,即表示支干道没有车来时,主干道亮绿灯,支干道亮红灯,四个倒计时数码管都是灭的。
当把car置为高电平并不变后,主干道和支干道分别进入状态st1,st2,st3,st4,并分别正常显示四个状态的容,实现主干道每次放行45秒,支干道每次放行25秒,从而正确实现交叉路口交通灯的控制。
5 系统仿真5.1 时钟分频模块仿真仿真波形图如下图5.1所示:设置的end time是3s,输入clk2kHz是频率为2kHz的方波。
T=1s图5.1分频模块仿真波形图波形分析:开始时clk1hz为低电平,当计数器第一次计满时,clk1hz由低电平转为高电平,当计数器第二次计满时,clk1hz转为低电平。
在这一过程中,clk1hz先后经历了500ms的低电平和高电平,恰好为一个周期1s,之后依次高低交替,得到频率为1Hz的方波。
5.2 交通灯控制及计时模块仿真仿真波形如下图5.2所示:设置的end time为100ms,clk1hz为周期是1ms的方波(把周期缩小为的是可以缩小仿真的时间,方便波形的仿真)。
放大之后图5.2 交通灯控制及倒计时模块仿真波形图波形分析:当car为0时,状态为st0,此状态中主干道亮绿灯,支干道亮红灯,当car为1不变时,变为状态st1,之后进入st1-st2-st3-st4-st1的循环状态,在相应的状态里面也能正确地控制红黄绿灯点亮。