EDA交通灯控制器设计
- 格式:doc
- 大小:522.50 KB
- 文档页数:4
交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(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;五.仿真波形图仿真时序波形图。
交通灯控制器课程设计该交通信号控制器控制十字路甲、乙两条道路的红、黄和绿三色灯,指挥车辆和行人安全通行。
功能要求如下: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;--- - . -word 资料- 仿真图如下:Ya,ra,ga 表示主干道黄红绿灯;yb,rb,gb 表示乡村小路黄红绿灯。
课程设计报告课程设计:交通灯控制器一:实验目的:实现高速公路与乡间小路的交叉路口红绿灯的控制二:功能要求:1.只有在小路上发现汽车时,高速公路上的交通灯才可能变为红灯。
2.当汽车行驶在小路上时、小路的交通灯保持为绿灯,但不能超过给定的延迟时间.〔注;这段时间定义为20S时间)。
3.高速公路灯转为绿灯后,即使小路上有汽车出现,而高速公路上并无汽车,也将在给定的时间内保持高速公路绿灯(注:这段时间定义为60S)。
三:设计思路:五:VHDL源程序:LIBRARY ieee;USE ieee.std_logic_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TrafficLight ISPORT (Clk : IN STD_LOGIC;S,Reset : IN STD_LOGIC;mg,my,mr,cg,cy,cr : OUT STD_LOGIC );END TrafficLight ;ARCHITECTURE rtl OF TrafficLight ISTYPE TrafficState IS (mgcr, mycr, mrcg, mrcy);SIGNAL current_state,next_state : TrafficState ;SIGNAL Count : STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL Clrn : STD_LOGIC ;BEGINCounter : PROCESS(clk)BEGINIF Reset = '1' OR (Clrn = '1' AND NOT(Count = "000000")) THEN Count <= "000000";ELSIF clk'EVENT AND clk = '1' THENIF NOT(s='0' AND current_state = mgcr) THEN Count <= Count + 1;END IF;END IF;END PROCESS Counter;StateTransition : PROCESS(clk,Count, current_state)BEGINIF Reset = '1' THEN next_state <= mgcr;Clrn <= '0';ELSIF clk'EVENT AND clk = '1' THENCASE current_state ISWHEN mgcr => mr<='0';mg<='1';my<='0';cr<='1';cg<='0';cy<='0';IF Count >= "111011" AND S = '1' THEN next_state <= mycr;Clrn <= '1';ELSE Clrn <= '0';END IF;WHEN mycr => mr<='0';mg<='0';my<='1';cr<='1';cg<='0';cy<='0';IF Count >= "000100" THEN next_state <= mrcg;Clrn <= '1';ELSE Clrn <= '0';END IF;WHEN mrcg => mr<='1';mg<='0';my<='0';cr<='0';cg<='1';cy<='0';IF Count >= "010011" OR S = '0' THEN next_state <= mrcy;Clrn <= '1';ELSE Clrn <= '0';END IF;WHEN mrcy => mr<='1';mg<='0';my<='0';cr<='0';cg<='0';cy<='1';IF Count >= "000100" THEN next_state <= mgcr;Clrn <= '1';ELSE Clrn <= '0';END IF;WHEN OTHERS => NULL;END CASE;END IF;END PROCESS StateTransition;PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENcurrent_state <= next_state;END IF;END PROCESS;END rtl;仿真图如下:六:实验心得:通过本次课程设计,使用进一步熟悉了MAX-PLUSLL这种EDA软件工具。
交通灯控制器的EDA设计一、实训任务和目的1.实训任务、要求(1)在十字路口的两个方向各设一组红灯、绿灯、黄灯,先是顺序为:其中一个方向为绿灯、黄灯、红灯;另一个方向为红灯、黄灯、绿灯。
(2)设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s、25s。
(3)当任意一条路上出现特殊情况,如有消防车、救护车或其他需要优先放行的车辆时,各方向均是红灯亮,倒计时停止。
当特殊运行状态结束后,控制器恢复原状态,继续正常运行。
2.实训目的(1)熟悉Max+plu sⅡ软件的操作使用方法。
(2)了解EDA技术“自顶向下”的设计理念。
(3)了解用VHDL语言描述电路系统的方法。
二、实训预习利用MAX+plusII进行CPLD/FPGA逻辑功能设计的流程:三、实训内容交通灯实训模块采用红、绿、黄三种颜色的LED 来模拟十字路口的交通等状况,其驱动对应关系如下表所示:R (红) G (绿) Y (黄) E (东) OUT1 OUT2 OUT3 S (南) OUT4 OUT5 OUT6 W (西)OUT7OUT8OUT9NoYesNo图形输入/文本输入逻辑设计建立项目文件项目编译逻辑正确?仿真分析选择型号/管脚分配重新编译Yes设计正确?生成下载文件下载或编程验证设计 输入设计 生成设计 实现硬件 下载芯片脚号分配:OUT1—P116,OUT2—P114,OUT3—P113,OUT4—P112,OUT5—P111,OUT6—P110,OUT7—P109,OUT8—P102,OUT9—P101,OUT10—P100,OUT11—P99,OUT12—P98。
VHDL语言参考主程序:Library ieee;Use ieee.std-logic-1164.all;Use ieee.std-logic-arith.all;Entity trafficled isPort(clk1:in std-logic;Reset: in std-logic;Pout:out std-logic-vector(12 downto 1);End trafficled;Architecture trafficled-arch of trafficled isSignal ER,EY,EG: std-logic;Signal SR,SY,SG: std-logic;Signal WR,WY,WG: std-logic;Signal NR,NY,NG: std-logic;Signal COUNT:integer range 0 to 11;Signal state: integer range 0 to4;BeginProsess(clk1,reset,count)beginif reset=’1’thencount<=0;state<=0;else if(clk1’event andclk1=’1’)thencount<=count+1;if(count=11)then state<=state+1;end if;if(state>4)then state<=0;end if;end if;end if;四、实训报告1.完成交通灯其他部分的程序编写。
目录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。
eda交通灯控制器课程设计课程设计:EDA交通灯控制器1. 课程背景和目标:EDA交通灯控制器是使用EDA(电子设计自动化)工具进行交通灯控制系统设计的课程。
学习该课程的目标是使学生能够熟练运用EDA工具进行交通灯控制系统设计,并能够理解交通灯控制系统的原理和设计方法。
2. 课程内容和安排:(1) 交通灯控制系统原理介绍:介绍交通灯控制系统的基本原理,包括信号机、信号控制方法和交通流量检测等。
(2) EDA工具介绍:介绍常用的EDA工具,如Verilog、VHDL等,并讲解其基本使用方法。
(3) 交通灯控制器设计流程:介绍交通灯控制器的设计流程,包括需求分析、功能设计、模块设计和系统集成等。
(4) 交通灯控制器设计实践:学生通过实践项目,使用EDA工具设计交通灯控制器。
项目涵盖设计、仿真、验证和生成等环节,学生需要独立完成设计并提交设计报告。
3. 课程教学方法:(1) 理论讲解:通过课堂讲解,介绍交通灯控制系统的原理和设计方法,以及EDA工具的使用方法。
(2) 实践项目:学生通过实践项目,运用所学知识设计交通灯控制器,并进行仿真、验证和生成等环节。
(3) 讨论和案例分析:通过课堂讨论和案例分析,加深学生对交通灯控制系统的理解和应用能力。
(4) 指导和批评:教师对学生的设计进行指导和批评,帮助学生不断提高设计能力。
4. 评估方式:(1) 实践项目报告:学生独立完成实践项目,并提交设计报告,包括设计过程、仿真结果和验证结果等。
(2) 课堂测试:通过课堂测试检验学生对交通灯控制系统原理和EDA工具的理解程度。
(3) 课堂表现:评估学生的课堂出勤情况、学习态度和参与度等。
5. 参考教材:(1) 《交通信号控制原理与技术》高新泽(2) 《EDA与数字电路设计》陈骏等(3) 《数字电路与系统设计》刘敏衡等(4) 《系统设计自动化技术与EDA工具应用》杨学庆等以上是对EDA交通灯控制器课程设计的简要介绍。
课程内容涵盖了交通灯控制系统的原理和设计方法,以及EDA工具的使用方法。
EDA的交通灯控制设计一、设计背景和设计方案1)设计背景设计一个由一条支干道和一条主干道的汇合点形成的十字交叉路口的交通灯控制器,主要要求如下:1.主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
2.主干道处于常允许状态,两支干道有车来才允许通行。
3.当主、支干道有车时,两者交替通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯转换过程中,要亮5s黄灯作为过渡,并进行减计时显示。
2)设计方案2.1背景分析(一)、交通灯的功能是实现一个交叉口的通车控制,交通灯显示有以下4种状态:1.主干道绿灯,支干道红灯;2.主干道绿灯,支干道黄灯;3.主干道红灯,支干道绿灯;4.主干道黄灯,支干道绿灯。
(二)、支干道没车时,主干道一直亮绿灯;主干道没车时,主干道和支干道交替亮绿灯;主干道和支干道都有车时同样交替亮红绿灯。
在红绿灯交替时亮5s黄灯。
2.2方案及思路(一)分模块设计1、红、绿、黄灯控制模块,模块名JTDKZ;2、倒计时传输、控制模块XSKZ;3、倒计时45s——CNT45s;4、倒计时25s——CNT25s;5、倒计时5s——CNT05s。
6、输入、输出。
(二)模块设计思路1、JTDKZ——根据交通灯显示有4种状态,可以采用CASE语句设置选择4种状态。
设置3个输入:CLK(时钟脉冲)、SB(支干道传感器)、SM(主干道传感器)。
2、XSKZ——根据需要交通灯显示的不同数倒计时据设置4个输入使能信号:EN45(45s 倒计时使能信号)、EN25(25s倒计时使能信号)、EN05(5s倒计时使能信号);再设置5个倒计时计数数据输入信号将此时倒计时数据输出:AIN45M、AIN45B、AIN25M、AIN25B、AIN05;2个输出信号使数码管显示正在倒计时的时间。
3、CNT45S——根据倒计时计数的要求设置3个输入信号:CLK(计数脉冲)、EN45(计数使能)、SB(支干道传感器信号);2个输出DOUT45M、DOUT45B,分别用于主、支干道显示。
《EDA技术及应用》交通灯控制电路的设计1 系统设计1.1 设计要求1.1.1 设计任务1、用4个八段数码管分别显示道路东西和南北通行和禁止的倒计时时间。
2、能设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。
3、交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果。
4、红、绿、黄灯显示的次序应符合实际交通道路控制的要求。
5、其它功能。
1.1.2性能指标要求设计一个交通控制器,用LED 显示灯表示交通状态,并以8 段数码显示器显示当前状态剩余秒数南北方向绿灯亮时,东西方向红灯亮;反之亦然,二者交替允许通行,南北方向每次放行99s,东西方向每次放行99s,南北红绿灯始终比东西红绿灯快3s。
每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为3s。
因为开发板没有绿黄灯,所以用两组三个led灯替代显示红黄绿灯。
南北方向与东西方向各用两个8位数码管显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。
1.2 设计思路及设计框图1.2.1设计思路本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。
设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下两个方向的都为红灯亮启,进入正常工作状态后,当南北方向红绿灯上绿灯亮时,东西方向红绿灯上红灯亮,各方向最后倒计时3s时,南北方向红绿灯和东西方向红绿灯上的代表黄灯的led灯亮启,持续3S后,南北方向红绿灯上红灯亮启,东西方向红绿灯上绿灯亮启持续99s,之后南北方向和东西方向上的黄灯都亮启3s,一个循环完成,循环往复的直行这个过程。
1.2.2总体设计框图根据任务需求,总体设计有:分频器模块、控制器模块、倒计时模块、红绿灯显示模块、码模块和译码显示模块如下图所示:2 各个模块程序的设计led红绿灯显示:module led(clk,led,N,D,cout,zt);input clk;input [6:0] N;input [6:0] D;output reg [5:0] led;output reg [1:0] zt;output reg [6:0] cout;always@(posedge clk)begincout=cout+1;if(cout<N-3)led=6'b100001;//南北绿灯,东西红灯else if(cout>N-3&&cout<N)led=6'b100010;//南北黄灯,东西红灯else if(cout>N&&cout<D+N-3)led=6'b001100;//南北红灯,东西绿灯else if(cout>N+D-3&&cout<N+D)led=6'b010100;//南北红灯,东西黄灯else if(cout==N+D)cout=0;if(cout<N-4)zt=0;else if(cout>N-4&&cout<N-1)zt=1;else if(cout>N-1&&cout<D+N-4)zt=2;else if(cout>D+N-4&&cout<N+D-1)zt=3;endEndmodule分频器:module div(clk,clkout);input clk;output reg clkout;Parameter CNT_MAX =50_000_000;//1s->1hz(50_000_000/1),0.5s->2hz(50_000_000/2=25_000_000) //parameter CNT_MAX = 1; //for simulationreg [25:0] cnt;always @ (posedge clk)if (cnt < CNT_MAX - 1'b1)cnt <= cnt + 1'b1;elsecnt <= 26'd0;always @(posedge clk)if(cnt == CNT_MAX - 1'b1)clkout=1'b1;elseclkout=1'b0; Endmodule调时控制:module ts(s,N,D,mode);input [1:0] s;input mode;output [6:0] N;output [6:0] D;j u1(.s(s[0]),.q(N),.mode(mode));j u2(.s(s[1]),.q(D),.mode(mode));Endmodule倒计时计数:module seg(clk,N,D,cout,zt,fs1,fs2); input clk;input [6:0] N;input [6:0] D;input [6:0] cout;input [1:0] zt;output reg [6:0] fs1;output reg [6:0] fs2;always@(posedge clk)case(zt)2'b00:begin fs1=N-cout-4; fs2=N-cout-1;end2'b01:begin fs1=N+D-cout-1; fs2=N-cout-1;end2'b10:begin fs1=N+D-cout-1; fs2=N+D-4-cout;end2'b11:begin fs1=N+D-cout-1; fs2=2*N+D-cout-1;endendcaseEndmodule计时输出:module j(s,q,mode);input s,mode;output reg [6:0] q;initialq=15;//初始从15开始启动always@(posedge s)if(mode)q=q+1;elseq=q-1;Endmodule数码管调用:// Module Function:数码管的译码模块初始化module segment7 (seg_datin,seg_led,en);input [3:0] seg_datin; //数码管需要显示0~f共16个数字,所以需要4位数据输入端 input en; //数码管使能端output [7:0] seg_led; //在DE10-Standard上控制一个数码管需要7个信号MSB~LSB=DP、G、F、E、D、C、B、Areg [7:0] seg [15:0]; //定义了一个reg型的数组变量,相当于一个16*8的存储器,存储器一共有16个数,每个数有8位宽initial //在过程块中只能给reg型变量赋值,Verilog中有两种过程块always和initial//initial和always不同,其中语句只执行一次beginseg[0] = ~(8'h3f) ; //对存储器中第一个数赋值8'b0011_1111,7段显示数字 0 seg[1] = ~(8'h06); //7段显示数字 1seg[2] = ~(8'h5b); //7段显示数字 2seg[3] = ~(8'h4f); //7段显示数字 3seg[4] = ~(8'h66); //7段显示数字 4seg[5] = ~(8'h6d); //7段显示数字 5seg[6] = ~(8'h7d); //7段显示数字 6seg[7] = ~(8'h07); //7段显示数字 7seg[8] = ~(8'h7f); //7段显示数字 8seg[9] = ~(8'h6f); //7段显示数字 9seg[10] = ~(8'h77); //7段显示数字 aseg[11] = ~(8'h7c); //7段显示数字 bseg[12] = ~(8'h39); //7段显示数字 cseg[13] = ~(8'h5e); //7段显示数字 dseg[14] = ~(8'h79); //7段显示数字 eseg[15] = ~(8'h71); //7段显示数字 fendassign seg_led = en?seg[seg_datin]:8'hff; //连续赋值,输入不同四位数,输出对于译码的8位输出,共阴数码管取反。
eda 交通控制灯课程设计一、课程目标知识目标:1. 学生能够理解并掌握交通控制灯(红绿灯)的基本原理和工作机制。
2. 学生能够描述EDA(电子设计自动化)工具在交通控制灯设计中的应用。
3. 学生能够解释交通控制灯系统中涉及的基础电子元件及其功能。
技能目标:1. 学生能够运用EDA软件完成交通控制灯电路图的绘制。
2. 学生能够通过编程实现对交通控制灯系统的简单控制逻辑。
3. 学生能够运用团队协作和问题解决技能,设计和优化交通控制灯系统。
情感态度价值观目标:1. 培养学生对电子工程领域的兴趣,激发创新意识和探索精神。
2. 增强学生的环保意识和交通安全意识,认识到交通控制灯在现代社会中的重要性。
3. 培养学生的团队协作意识,学会尊重他人意见,共同解决问题。
课程性质:本课程结合了电子技术与实际应用,注重理论与实践相结合,以项目为导向,提升学生的综合技能。
学生特点:假设学生为初中年级,具有一定的电子元件知识基础,对新技术的学习充满好奇,具备基本的计算机操作能力。
教学要求:课程需注重实践性,通过互动式教学和团队协作,使学生在动手实践中理解和掌握知识,提高问题解决能力。
同时,强调安全意识和责任感,培养符合社会主义核心价值观的技能人才。
二、教学内容1. 交通控制灯基础知识:- 红绿灯工作原理介绍- 交通控制灯系统的组成与功能- 交通控制灯在交通安全中的作用2. EDA工具的应用:- EDA软件的认识与基本操作- 交通控制灯电路图的绘制方法- 电路仿真与调试技巧3. 交通控制灯电路设计与制作:- 基本电子元件的选择与应用- 交通控制灯控制逻辑的编写与实现- 电路板设计与焊接技巧4. 项目实践与优化:- 团队协作设计与制作交通控制灯系统- 控制逻辑优化与功能拓展- 作品展示与评价教学内容安排与进度:第一课时:交通控制灯基础知识学习第二课时:EDA软件的认识与基本操作第三课时:交通控制灯电路图绘制与仿真第四课时:电路设计与制作第五课时:项目实践与优化第六课时:作品展示与评价教材章节关联:教学内容与教材中“电子技术应用”章节相关,涉及电子元件、电路设计、EDA工具应用等方面的知识。
综合设计实验:交通灯控制器
授课时间:4课时
目的要求:分析设计问题,抽象出逻辑关系,用V erilog HDL语言实现十字路口交通灯控制器,从而进一步熟悉V erilog HDL语言和MAX-pluss软件平台在解决实际问题中的应用。
授课方式:讲解+演示+上机实践
教学过程:
1.提出问题:用V erilog HDL语言,设计一个十字路口交通灯控制器,十字路
口的两个方向A,B各有红、黄、绿、左拐四盏灯,四种灯按合理的顺序两灭,并能将灯亮的时间以倒计时的形式显示出来。
2.功能要求
两个方向各种灯亮的时间能够进行设置和修改,此外假设A方向是主干道,车流量比较大,因此A方向上的通行时间应该比B方向长。
用1表示灯亮,0表示灯灭。
A方向和B方向的红、黄、绿和左拐灯分别用
-左拐灯-黄灯-红灯。
并且每个方向上红灯亮的时间应该与另一方向上绿灯、黄灯、左拐灯、黄灯亮的时间相等。
黄灯起的作用是用来在绿灯和左拐灯后进行缓冲的,以提醒行人该方向上要禁行了。
3.设计思路
根据交通等控制器要实现的功能,考虑用两个并行执行的always模块来分别控制两个方向上的四盏灯。
两个always模块使用一个时钟信号,以进行同步。
每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置法设计,这样只需要改变预置数据,就能改变计数器的模,因此每个方向上只需要一个计数器进行计时即可。
为了便于显示亮灯时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A,B各个方向上用两个数码管来实现。
4.源程序
/*
信号的定义&说明:
CLK:同步时钟;
EN:使能信号,为1时控制器开始工作;
LAMPA:控制A方向的四盏灯的亮&灭;其中LAMPA3~LAMPA0分别控制A 方向的红灯、黄灯、绿灯、左拐灯;
LAMPB:控制B方向的四盏灯的亮&灭;其中LAMPB3~LAMPB0分别控制B 方向的
红灯、黄灯、绿灯、左拐灯;
ACOUNT:用于A方向灯的时间显示,8位,可驱动两个数码管;
BCOUNT:用于B方向灯的时间显示,8位,可驱动两个数码管。
*/
module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT);
output[7:0] ACOUNT,BCOUNT;
output[3:0] LAMPA,LAMPB;
input CLK,EN;
reg[7:0] numa,numb;
reg tempa,tempb;
reg[2:0]counta,countb;
reg[7:0]ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;
reg[3:0]LAMPA,LAMPB;
always @(EN)
if(!EN)//当使能端低电平时,设置各种灯的计数器的预置;
begin
ared<=8'd55;ayellow<=8'd5;
agreen<=8'd40;aleft<=8'd15;
bred<=8'd65;byellow<=8'd5;
bgreen<=8'd15;bleft<=8'd30;
end
assign ACOUNT=numa;
assign BCOUNT=numb;
always @(posedge CLK)//该进程控制亮灯的顺序
begin
if(EN)
begin
if(!tempa)
begin tempa<=1;
case(counta)
0:begin numa<=agreen;LAMPA<=2;counta<=1;end
1:begin numa<=ayellow;LAMPA<=4;counta<=2;end
2:begin numa<=aleft;LAMPA<=1;counta<=3;end
3:begin numa<=ayellow;LAMPA<=4;counta<=4;end
4:begin numa<=ayellow;LAMPA<=8;counta<=0;end
default: LAMPA<=8;
endcase
end
else begin
if(numa>1)
numa<=numa-1;
if(numa==2) tempa<=0;//非阻塞赋值语句是在always中并发执行的,所以此处必须是2。
end
end
else begin LAMPA<=4'B1000;counta<=0;tempa<=0;end//使能端低电平时,给变量赋初值
end
always @(posedge CLK)
begin
if(EN)
begin
if(!tempb)
begin tempb<=1;
case(countb)
0:begin numb<=bred;LAMPB<=8;countb<=1;end
1:begin numb<=bgreen;LAMPB<=2;countb<=2;end
2:begin numb<=byellow;LAMPB<=4;countb<=3;end
3:begin numb<=bleft;LAMPB<=1;countb<=4;end
4:begin numb<=byellow;LAMPB<=4;countb<=0;end
default: LAMPB<=8;
endcase
end
else begin
if(numb>1)
numb<=numb-1;
if(numb==2) tempb<=0;
end
end
else begin LAMPB<=4'B1000;countb<=0;tempb<=0;end
end
endmodule
5.交通灯控制器的端口连接示意图
6.仿真结果。