EDA交通灯实验报告
- 格式:doc
- 大小:312.00 KB
- 文档页数:8
交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(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实验交通灯控制系统一.源程序代码分析Cb.vhd 二分频模块library ieee;use ieee.std_logic_1164.all;entity cb isport(clk:in std_logic;q:buffer std_logic);end;architecture behave of cb isbeginprocess(clk)beginif clk'event and clk='1' then - -每遇到一个上升沿,q翻转一次,实现分频q<=not q;end if;end process;end behave;ctrl.vhd 状态控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ctrl isport(clk,spe:in std_logic;en:out std_logic);end;architecture behave of ctrl istype states is(s3,s2,s1,s0); - - 状态机说明部分,定义了状态机四个状态signal current_state,next_state:states; - - 定义两个现态和次态两个信号,均为四个状态begincom:process(spe,current_state) - -主控组合进程begincase current_state iswhen s0=> en <='0'; - - 状态S0if spe='1' then next_state<=s0;else next_state<=s1;end if;when s1=> en <='1'; - - 状态S1if spe='1' then next_state<=s2;else next_state<=s1;end if;when s2=> en <='1'; - - 状态S2if spe='1' then next_state<=s2;else next_state<=s3;end if;when s3=> en <='0'; - - 状态S3if spe='1' then next_state<=s0;else next_state<=s3;end if;end case;end process;synch: process(clk) - -主控时序进程beginif clk'event and clk='1' thencurrent_state<=next_state;end if;end process;end behave;cout.vhd 倒计时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count isport(ini,en,clk:in std_logic;ar0,ag0,ay0,al0,br0,bg0,by0,bl0:out std_logic;tah: buffer std_logic_vector(6 downto 4);tal: buffer std_logic_vector(3 downto 0);tbh: buffer std_logic_vector(6 downto 4);tbl: buffer std_logic_vector(3 downto 0));end count;architecture behav of count issignal light: std_logic_vector(7 downto 0);signal ta: std_logic_vector(6 downto 0);signal tb: std_logic_vector(6 downto 0);signal s: std_logic_vector(2 downto 0); - - 把a,b方向红绿黄及左转灯保持时间的十位与个位用高三位与低四位存放constant artimeh : std_logic_vector(6 downto 4):="101";constant artimel : std_logic_vector(3 downto 0):="0101";constant agtimeh : std_logic_vector(6 downto 4):="100";constant agtimel : std_logic_vector(3 downto 0):="0000";constant altimeh : std_logic_vector(6 downto 4):="001";constant altimel : std_logic_vector(3 downto 0):="0101";constant abytimeh : std_logic_vector(6 downto 4):="000";constant abytimel : std_logic_vector(3 downto 0):="0101";constant brtimeh : std_logic_vector(6 downto 4):="110";constant brtimel : std_logic_vector(3 downto 0):="0101";constant bgtimeh : std_logic_vector(6 downto 4):="011";constant bgtimel : std_logic_vector(3 downto 0):="0000";constant bltimeh : std_logic_vector(6 downto 4):="001";constant bltimel : std_logic_vector(3 downto 0):="0101";beginprocess(ini,en,clk,tah,tal,tbh,tbl)beginta <=tah & tal; -- 并置,a方向当前灯保持时间tb <=tbh & tbl; --并置,b方向当前灯保持时间if ini='1' then - - 初始化键按下,则给s, tah, tal, tbh , tbl 赋初值s<="000";tah<="000";tal(3)<='0';tal(2)<='0';tal(1)<='0';tal(0)<='1';tbh<="000";tbl(3)<='0';tbl(2)<='0';tbl(1)<='0';tbl(0)<='1';elsif clk'event and clk='1'then - - 初始化键没按下遇到时钟上升沿if en='1' then - - 如果en按下,时间保持,不会变化tah<=tah; tal<=tal;tbh<=tbh; tbl<=tbl;else - -若en没按下if((ta=1)or(tb=1)) then - - 且ta或tb等于1s<=s+1; - - 状态变化case s IS - - 不同状态把不同灯保持时间赋给tah,tal,tbh,tbl when "000"=> tah<=agtimeh; tal<= agtimel; tbh<=brtimeh;tbl<=brtimel;when "001"=> tah<=abytimeh; tal<= abytimel;when "010"=> tah<=altimeh; tal<= altimel;when "011"=> tah<=abytimeh; tal<= abytimel;when "100"=> tah<=artimeh; tal<= artimel; tbh<=bgtimeh;tbl<=bgtimel;when "101"=> tbh<=abytimeh; tbl<= abytimel;when "110"=> tbh<=bltimeh; tbl<= bltimel;when "111"=> tbh<=abytimeh; tbl<= abytimel;when others=>null;end case;else s<=s; - - 若ta与tb 都不等于1,则s不变,状态不变end if;if ta/=1 then --ta不等于0if tal=0 then - - 且tal等于0tal<="1001"; tah<=tah-1; - - 则tal(个位)赋值9,tah(十位)减1else tal<=tal-1;tah<=tah; - - 若tal不等于0,则tal减1,tah不变end if;end if;if tb/=1 thenif tbl=0 thentbl<="1001"; tbh<=tbh-1;else tbl <=tbl-1;tbh<=tbh;end if;end if;end if;end if;end process;light<="01001000"when s="001" else"00101000"when s="010" else"00011000"when s="011" else"00101000"when s="100" else"10000100"when s="101" else"10000010"when s="110" else"10000001"when s="111" else"10000010"when s="000" else"00000000";ar0<=light(7);ag0<=light(6);ay0<=light(5);al0<=light(4); --对light进行位操作,赋值给中间量br0<=light(3);bg0<=light(2);by0<=light(1);bl0<=light(0);end behav;Itout.vhd 控制输出模块library ieee;use ieee.std_logic_1164.all;entity ltout isport(en,clk:in std_logic;ar0,ag0,ay0,al0:in std_logic;br0,bg0,by0,bl0:in std_logic;ta:in std_logic_vector(6 downto 0);tb:in std_logic_vector(6 downto 0);ar,ag,ay,al:out std_logic;br,bg,by,bl:out std_logic;atime :out std_logic_vector(6 downto 0);btime :out std_logic_vector(6 downto 0));end ltout;architecture behav of ltout isbeginar <=en or ar0; - - 利用倒计时模块中的中间量与紧急通行键结合,决定灯的亮灭ag<=not en and ag0;ay<=not en and ay0;al<=not en and al0;br<=en or br0;bg<=not en and bg0;by<=not en and by0;bl<=not en and bl0;atime <= ta when en='0' else(clk&clk&clk&clk&clk&clk&clk)and ta; btime <= tb when en='0' else(clk&clk&clk&clk&clk&clk&clk)and tb; end behav;jtd.vhd 交通灯顶层模块library ieee;use ieee.std_logic_1164.all;entity jtd isport(ini ,clk,spe:in std_logic;ar,ay,ag,al:out std_logic;br,by,bg,bl:out std_logic;atime :out std_logic_vector(6 downto 0); btime :out std_logic_vector(6 downto 0)); end jtd;architecture rtl of jtd iscomponent ctrl - -元件例化port(clk,spe:in std_logic;en:out std_logic);end component;component cbport(clk:in std_logic;q:buffer std_logic);end component;component countport(ini,en,clk:in std_logic;ar0,ag0,ay0,al0,br0,bg0,by0,bl0:out std_logic; tah:buffer std_logic_vector(6 downto 4); tal:buffer std_logic_vector(3 downto 0); tbh:buffer std_logic_vector(6 downto 4); tbl:buffer std_logic_vector(3 downto 0));end component;component ltoutport(en,clk:in std_logic;ar0,ag0,ay0,al0:in std_logic;br0,bg0,by0,bl0:in std_logic;ta:in std_logic_vector(6 downto 0);tb:in std_logic_vector(6 downto 0);ar,ag,ay,al:out std_logic;br,bg,by,bl:out std_logic;atime :out std_logic_vector(6 downto 0);btime :out std_logic_vector(6 downto 0));end component;signal en_s,q_s:std_logic; - -定义信号,充当中间连线signal ar0_s,ag0_s,ay0_s,al0_s,br0_s,bg0_s,by0_s,bl0_s:std_logic;signal agyl0_s,bgyl0_s:std_logic_vector(2 downto 0);signal tah_s,tbh_s:std_logic_vector(6 downto 4);signal tal_s,tbl_s:std_logic_vector(3 downto 0);signal ta_s,tb_s:std_logic_vector(6 downto 0);signal agyl,bgyl:std_logic_vector(2 downto 0);beginta_s<=tah_s & tal_s; - - signal的并置,与倒计时模块中时间十位与个位的并置类似tb_s<=tbh_s & tbl_s;u0:ctrl port map(clk,spe,en_s); - -各元件接口通过signal连接起来u1:cb port map(clk,q_s);u2:count port map(ini,en_s,q_s,ar0_s,ag0_s,ay0_s,al0_s,br0_s,bg0_s,by0_s,bl0_s,tah_s,tal_s,tbh_s,tbl_s);u3:ltout port map(en_s,q_s,ar0_s,ag0_s,ay0_s,al0_s,br0_s,bg0_s,by0_s,bl0_s,ta_s,tb_s,ar,ag,ay,al,br,bg,by,bl,atime,btime);end rtl;二程序修改要求修改程序,加入a方向的右转灯ari,该灯在b方向绿灯和紧急通行键按下时不亮,其它情况都亮修改思想:在Itout.vhd 模块文件里加入一个ari0信号,且定义为ari0<=not en and (not bg0),即实现没按下紧急通行键和非b方向绿灯的时候,ari0为1,再在顶层文件加入ari,把ari与ari0连接,再分配一个引脚来显示右转灯就可以实现该功能了修改程序:略。
《EDA技术与应用》实训报告学号:姓名:指导老师:实训题目:交通灯控制电路的设计1.系统设计1.1 设计要求设计交通灯控制电路。
1.1.1 设计任务①.借助EDA实训仪实现一个十字路口的交通灯控制系统。
数码管显示时间。
发光二极管显示东西南北方向的红、黄、绿灯情况,其中绿灯亮灯时间总是比同一时间红灯要少4秒,绿灯倒数结束后变黄灯,红灯倒数结束后变绿灯。
②.有些路段车流量较少或者突发紧急情况时,可以通过控制拨动开关调整交通灯控制。
以实现整个电路符合实际交通道路控制要求。
1.1.2 技术要求①.用EDA实训仪上的4只八段数码管分别显示道路东西和南北通行和禁止的倒计时时间。
②.能设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。
③. 交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果。
④. 红、绿、黄灯显示的次序应符合实际交通道路控制的要求。
1.2 方案比较①.老师给的原理图只有一个方向的数码管显示,操作比较简单。
②.实现四个方向和白天黑夜模式的数码管显示,有突发情况还可以使得交通灯倒计时停止在某个时间。
比较上种方案复杂。
1.3 方案论证通过方案①和②的比较,最终选择方案②。
因为东西南北方向都会有红、黄、绿灯的显示,其中绿灯亮灯时间总是比同一时间红灯要少4秒,绿灯倒数结束后变黄灯,红灯倒数结束后变绿灯。
有些路段车流量较少或者突发紧急情况时,可以通过控制拨动开关调整交通灯控制。
更符合十字路口交通灯实际的工作原理。
1.3.1 总体思路fpq分频器,将EDA实训仪主板提供的20MHz的主频经20000000分频后,得到电路所需的1Hz(秒)时钟。
减法器,产生道路东西和南北通行和禁止的倒计时时间。
kzq控制器控制电路,控制整个系统的工作。
控制器接收倒计时的结果,当倒计时归0时,改变电路的控制模式,输出倒计时的初始时间和交通灯亮灭控制信号。
以下为交通灯总体框图。
交通灯工作的四种工作状态:工作状态一:东西——红——倒计时:20→4南北——绿——倒计时:16→0 工作状态二:东西——红——倒计时:3→0南北——黄——倒计时:3→0 工作状态三:东西——绿——倒计时:16→0南北——红——倒计时:20→4 工作状态四:东西——黄——倒计时:3→0南北——红——倒计时:3→0 (以上四种工作状态循环进行)1.3.2 设计方案分频器计数器计数器控制器计数器2.各个模块程序的设计<1>.分频器的设计该模块自带的频率为20000000Hz的一个晶振接入,经过分频器后产生1S的时钟信号,然后由cout脚输出。
目录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原理及应用实验报告题目:交通灯控制器专业:电子信息工程班级:姓名:学号:一、设计题目:交通灯控制器二、设计目标: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课程设计实验报告交通信号控制器的VHDL的设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。
要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。
支干道主干道图1 路口交通管理示意图A B C D主干道交通灯绿(40秒)黄(4秒)红(20秒)红(4秒)支干道交通灯红红绿黄表1 交通信号灯的4种状态设计要求:(1)采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。
(2)编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。
二设计原理1、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2’设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:系统输入信号:Clk: 由外接信号发生器提供256的时钟信号;系统输出信号: full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。
模块说明:系统输入信号:full: 接收由clk 电路的提供的1hz 的时钟脉冲信号; tm: 接收计数秒数选择电路状态转换信号; 系统输出信号: comb_out: 负责红绿灯的状态显示。
交通控制器实验报告目录交通控制器实验报告 (1)序言 (3)一、设计任务及设计要求 (4)二、原理分析及方案设计 (4)三、电路设计与调试 (6)1.分频器的设计 (6)2.控制器的设计 (7)3.倒计时计数器的设计 (14)4.数码管显示器的设计 (17)5.顶层原理图 (20)四、实验仿真波形图 (20)五.心得体会 (21)六.参考文献 (21)序言VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。
因此它的应用主要是应用在数字电路的设计中。
VHDL主要用于描述数字系统的结构,行为,功能和接口VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
随着基于VHDL的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。
作为一个学电子信息专业的学生,我们必须不断地了解更多的新产品信息,这就更加要求我们对EDA有个全面的认识。
本程序设计的是交通灯的设计。
采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,初步实现了设计目标在一个交通繁忙的十字路口,没有交通灯来控制来往车辆和行人的通行,假设也没有交警,那会发生什么事情呢?后果是难以想象的,可能会陷入一片混乱,甚至瘫痪。
当然我们每个人都不希望这样。
我们作为社会的一员,每人都有责任为它的更加先进和快捷做出力所能及的事情。
本程序设计的是交通灯的设计。
采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,实现设计目标。
交通灯module jiaotongdeng ( CPA,S,LED,SG,sel,x);input CPA; //时钟input S; //指明乡村路口是否有汽车的通行信号output [5:0] LED; //信号灯的显示output [7:0] SG,x;output [2:0] sel; //数码管的显示reg CPB;reg [5:0] LED;reg [3:0] a;reg [7:0] COUNTER;reg [7:0] SG;reg [2:0] sel;reg [10:0]i;reg flag1;reg flag2;initialbeginflag2='b0;flag1='b0;COUNTER[7:0]='h60;LED[5:0]<=6'b001100; //主干道是绿灯,乡村道是红灯,即MGCRsel[2:0]=3'b000; //数码管显示000endalways @(posedge CPA) //1000分频(这是对应烧写的硬件来设置的)beginif(i==100)begini=0;CPB<=1;endelsebegini=i+1;CPB<=0;endendassign x=COUNTER;always @(posedge CPB)beginif(COUNTER[3:0]==4'h0 && COUNTER[7:4]==4'h0) //在数码管是60时判断是否有信号s的出现beginif(S)beginif(LED[5:0]==6'b001100)beginLED[5:0]<='b010100; //表示主干道是黄灯而乡村是红灯COUNTER[7:4]<=4'h0; //显示的是4秒钟COUNTER[3:0]<=4'h4;endelse if(LED[5:0]=='b010100) //表示4秒钟过后的乡村开始通路了beginLED[5:0]<='b100001; //表示主干道是红灯而乡村是绿灯COUNTER[7:4]<=4'h2; //显示的是20秒钟COUNTER[3:0]<=4'h0;flag1=1'b1;endelse if(LED[5:0]=='b100001) //表示20秒过后主干道通行了beginLED[5:0]<='b100010; //表示主干道是红灯而乡村是黄灯COUNTER[7:4]<=4'h0; //显示的是4秒钟COUNTER[3:0]<=4'h4;flag1='b0;endelse if(LED[5:0]=='b100010) //表示即使s=1,20秒过后都要返源beginLED[5:0]<='b001100; //主干道是绿灯乡村道是红灯COUNTER[7:4]<=4'h6; //显示的是60秒钟COUNTER[3:0]<=4'h0;endendelsebeginif(LED[5:0]=='b010100) //表示4秒钟过后的乡村开始通路了beginLED[5:0]<='b100001; //表示主干道是红灯而乡村是绿灯COUNTER[7:4]<=4'h2; //显示的是20秒钟COUNTER[3:0]<=4'h0;flag1=1'b1; //表示可以开始进行20秒的检查是否乡村有车辆通过endelse if(LED[5:0]=='b100001) //表示20秒过后主干道通行了beginLED[5:0]<='b100010; //表示主干道是红灯而乡村是黄灯COUNTER[7:4]<=4'h0; //显示的是4秒钟COUNTER[3:0]<=4'h4;flag1='b0;endelsebeginif(LED[5:0]=='b001100)flag2='b1;LED[5:0]<='b001100; //主干道是绿灯乡村道是红灯COUNTER[7:4]<=4'h6; //显示的是60秒钟COUNTER[3:0]<=4'h0;endendendelsebeginif(S && (flag2=='b1)) //表示乡村道路有信号并且可以让乡村道路通行了beginLED[5:0]<='b010100; //表示主干道是黄灯而乡村是红灯COUNTER[7:4]<=4'h0; //显示的是4秒钟COUNTER[3:0]<=4'h4;flag2='b0;endelsebeginif(COUNTER[3:0]==4'h0) //正常计数beginCOUNTER[7:4]=COUNTER[7:4]-4'h1;COUNTER[3:0]=4'h9;endelseCOUNTER[3:0]=COUNTER[3:0]-4'h1;endendif(flag1=='b1)beginif(!S)beginflag2='b0;flag1='b0;LED[5:0]<='b100010; //表示主干道是红灯而乡村是黄灯COUNTER[7:4]<=4'h0; //显示的是4秒钟COUNTER[3:0]<=4'h4;endendendalways @(posedge CPA)beginif (sel<1) sel=sel+1; else sel=0;end //sel为数码管选择always @(sel) begincase (sel==0)0: a[3:0]=COUNTER[3:0]; //0数码管为个位1: a[3:0]=COUNTER[7:4]; //1数码管为十位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值default: SG=8'b11111111;endcase endendmoduleS H8CPA PIN_C13LED0 B15 LED1 B16 LED2 A17 LED3 B17 LED4 A18 LED5 B18SG[0] PIN_F13 SG[1] PIN_F14 SG[2] PIN_F15 SG[3] PIN_E15 SG[4] PIN_F16 SG[5] PIN_F17 SG[6] PIN_E18 SG[7] PIN_F18 sel[0] PIN_G18 sel[1] PIN_G17 sel[2] PIN_G16。
EDA综合设计与实践一、设计目的和要求1.熟练掌握QuartusII软件的使用方法和系统总体设计。
2.学会设计较复杂的数字系统,用Verilog HDL描述语言编写设计代码,并综合仿真验证设计,用FPGA试验箱验证设计。
3.学习FPGA试验箱的使用,各种电路图的引脚接法及其功能。
4.本实验要求学生以FPGA器件为目标器件,设计典型的数字系统。
本设计选题为交通灯控制系统设计。
二、设计方案:方案一:(1)明确系统的功能图1-1所示为位于主干道和支干道的十字路口交通灯系统,支干道两边是安装传感器S,要求优先保证主干道的畅通。
平时处于主干道绿灯、支干道红灯的状态。
当支干道有车时,传感器发出信号S=1,主干道绿灯先转换成黄灯再转换成红灯,支干道由红灯转换为绿灯,支干道绿灯亮不超过30s,主干道每次通行不少于60s(在此期间,不管S是否有信号,都不改状态)。
(2)画状态转换图说明:1)Tl:主干道绿灯亮的最短时间间隔,不少于60s;2)Ts:支干道绿灯亮的最长时间间隔不多于30s。
3)T y:主干道或支干道黄灯亮的时间间隔为5s4)HR、HY、HG分别表示主干道红黄绿灯;5)FR、FY、FG分别表示支干道红黄绿灯。
注:H表示Header,F表示Follower,R表示Red,Y表示Yellow,G表示Green交通灯控制单元控制过程分四个阶段:分别用S0,S1,S2,S3表示:S0:主干道绿灯亮,支干道红灯亮,此时若支干道有车等待,且主干道已亮足时间Tl,则控制器发出状态转换信号,输出从S0转换到S1。
S1:主干道黄灯亮,支干道红灯亮,进入此状态,黄灯亮足规定时间间隔Ty时,控制器发出状态转换信号St,输出从此状态S1到S2。
S2:支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮时间不超过Ts时间间隔,否则控制单元发出状态转换信号St,使输出转换到S3状态。
S3:支干道黄灯亮,主干道红灯亮,此时状态与S1状态持续时间间隔相同,均为Ty,时间到时,控制器发出St信号,输出从状态S3回到S0状态。
EDA实验设计报告一、实验题目交通灯设计:设十字路口有主路,支路两条道,分别设置两台交通灯,要求:1:绿灯变为红灯时,黄灯闪烁4s;2:红灯变为绿灯时,黄灯不闪烁;3:主路绿灯亮20s,支路绿灯10s;二、设计思想根据设计要求可以假设以下四种状态:1:主干道绿灯亮20s时,支道红灯亮20s;2:主干道黄灯亮4s时,支道红灯亮4s;3:主干道红灯亮10s时,支道绿灯亮10s;4:主干道红灯亮20s时,支道黄灯亮20s;且四个状态循环出现,故该电路是一个时序电路,可假设一个时钟脉冲代表1s,用变量cqi暂存计数值,当cqi的值满足不同条件时(位于不同时间段内),输出不同的状态值(设主路的红黄绿灯用R1,Y1,G1表示,支路的红黄绿灯用R2,Y2,G2表示,高电平“1”代表该灯亮,低电平“0”代表该灯灭)三、程序代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRFIC ISPORT( CLK: IN STD_LOGIC;G1,R1,Y1,G2,R2,Y2: OUT STD_LOGIC);END TRFIC;ARCHITECTURE behav OF TRFIC ISBEGINPROCESS(CLK)VARIABLE CQI:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENIF CQI<37 THEN CQI:=CQI+1;ELSE CQI:=(OTHERS=>'0'); ;计数值大于37,清零END IF;END IF; ;判断四种状态并输出相应值IF (CQI>0 AND CQI<19) THEN G1<='1';R1<='0';Y1<='0';G2<='0';R2<='1';Y2<='0';ELSIF ((CQI>19 OR CQI=19) AND CQI<23)THENG1<='0';R1<='0';Y1<='1';G2<='0';R2<='1';Y2<='0';ELSIF((CQI>23 OR CQI=23) AND CQI<33)THENG1<='0';R1<='1';Y1<='0';G2<='1';R2<='0';Y2<='0';ELSIF ((CQI>33 OR CQI=33) AND CQI<37)THENG1<='0';R1<='1';Y1<='0';G2<='0';R2<='0';Y2<='1';END IF;END PROCESS;END ARCHITECTURE behav;四、仿真的时序图五、遇到的问题及解决在判断交通灯的四种状态时原本想用CASE语句书写如下,但是编译不通过CASE(CQI)WHEN( CQI>0 AND CQI<19) => G1<='1';R1<='0';Y1<='0';G2<='0';R2<='1';Y2<='0'; WHEN ( CQI>=19 AND CQI<23) =>G1<='0';R1<='0';Y1<='1';G2<='0';R2<='1';Y2<='0'; ………………………………….………………………………….原因:WHEN语句后边必须是一个确定的选择值或标识符,而不能是一个判断语句改正:改用IF 语句。
实验五十字路口交通灯控制器设计一.实验目的1.进一步加强经典状态机的设计2.学会设计模可变倒计时计数器二.实验要求一条主干道,一条乡间公路。
组成十字路口,要求优先保证主干道通行。
有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;交通灯由绿→红有4秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号S=1,其余时间S=0;平时系统停留在MGCR(主干道通行)状态,一旦S信号有效,经MYCR(黄灯状态)转入MRCG(乡间公路通行)状态,但要保证MGCR的状态不得短于一分钟;一旦S信号无效,系统脱离MRCG状态。
随即经MRCY(黄灯状态)进入MGCR 状态,即使S信号一直有效,MRCG状态也不得长于20秒钟。
三.实验设计:1.一条主道,一条乡道,组成十字路口,要求优先保证主道通行。
2.当主道没有车通行,且乡道友车要通行时,并且此时主道通行时间大于1分钟,则主道变黄灯,乡道保持红灯,经过4秒倒计时时间进入主道为红灯乡道为绿灯的状态。
再倒计时20秒钟。
在倒计时过程中,若乡道突然没有车通行,马上进入主道红灯,乡道黄灯状态,倒计时4秒。
3.之后主道变为绿灯,乡道为红灯,这时无论乡道有无车通行都要倒计时60秒,然后若乡道有车通行则主道为黄灯,乡道为红灯,若乡道一直没有车要通行则保持主道通行,若乡道友车通行则按照上面的状态依次进行转换。
按照以上的思路,设计两个底层文件和一个顶层文件:1.模块1是状态改变控制6盏灯的亮与灭。
2.模块2是控制数码管显示倒计时数并且输出作为模块1的输入控制状态改变3.将两个模块连接成顶层文件,即可完成设计。
四.实验步骤1.分别将两个模块的代码输入,两个模块的代码如下:1)控制6盏灯的模块代码LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jtd ISPORT(clk,RESET,S:IN STD_LOGIC;COUNT:IN STD_LOGIC_VECTOR(7 DOWNTO 0);MG,MY,MR,CG,CY,CR:OUT STD_LOGIC);END jtd;ARCHITECTURE behav OF jtd ISTYPE jtdSTATE IS(mgcr,mycr,mrcg,mrcy);SIGNAL STATE:jtdSTATE;BEGINPROCESS(RESET,STATE,clk, S)BEGINIF RESET='1' THEN STATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';ELSIF clk'EVENT AND clk='1' thenCASE STATE ISWHEN mgcr=>IF COUNT="00000000" AND S='1'THENSTATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';ELSESTATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';END IF;WHEN mycr=>IF COUNT="00000000" THENSTATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';ELSESTATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';END IF;WHEN mrcg=>IF COUNT="00000000" OR S='0'THENSTATE<=mrcy;MR<='1';CY<='1';MY<='0';MG<='0';CR<='0';CG<='0';ELSESTATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';END IF;WHEN mrcy=>IF COUNT="00000000" THENSTATE<=mgcr;MG<='1';CR<='1';MR<='0';MY<='0';CY<='0';CG<='0';ELSESTATE<=mrcy;MR<='1';CY<='1';MY<='0';MG<='0';CR<='0';CG<='0';END IF;END CASE;END IF;END PROCESS;END behav;2)控制数码管显示倒计时数并且输出:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JISHU ISPORT(clk,S:IN STD_LOGIC;tim:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END JISHU;ARCHITECTURE behav OF JISHU ISTYPE RGY IS(mgcr,mycr,mrcg,mrcy);SIGNAL STATE:RGY;BEGINPROCESS(clk)VARIABLE b:STD_LOGIC:='0';VARIABLE a:STD_LOGIC:='0';VARIABLE th,tl:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN--IF RESET='1' THEN STATE<=mgcr; th:="0000" ;tl:="0000";a:='0';b:='0';IF clk'EVENT AND clk='1' THENCASE STATE ISWHEN mgcr => IF S='1' AND b='1' THEN STATE<=mycr;a:='0';th:="0000";tl:="0100";b:='0';ELSIF S='0' AND b='1' THEN STATE<=mgcr;a:='1';th:="0000";tl:="0001";ELSEIF a='0' THENth:="0110";tl:="0000";a:='1';elseIF NOT(th="0000" AND tl="0010") thenIF tl="0000" thentl:="1001";th:=th-1;else tl:=tl-1;END IF;ELSEth:="0000";tl:="0001";a:='0';b:='1';END IF;END IF;END IF;WHEN mycr => IF a='0' THENth:="0000";tl:="0100";a:='1';elseIF NOT(th="0000" AND tl="0010") thentl:=tl-1;ELSEth:="0000";tl:="0001";a:='0';STATE<=mrcg;END IF;END IF;WHEN mrcg =>IF S='1' THENIF a='0' THENth:="0010";tl:="0000";a:='1';elseIF NOT(th="0000" AND tl="0010") thenIF tl="0000" thentl:="1001";th:=th-1;else tl:=tl-1;END IF;ELSEth:="0000";tl:="0001";a:='0';STATE<=mrcy;END IF;END IF;ELSE a:='0';STATE<=mrcy;th:="0000";tl:="0100"; END IF;WHEN mrcy =>IF a='0' THENth:="0000";tl:="0100";a:='1';elseIF NOT(th="0000" AND tl="0010") thentl:=tl-1;ELSEth:="0000";tl:="0001";a:='0';STATE<=mgcr;END IF;END IF;END CASE;tim <= th & tl;END IF;end process;END behav;2.对各模块进行仿真:6盏灯颜色变化控制:倒计时60计数:倒计时20计数:3.顶层文件设计:顶层文件原理图如下:主道绿灯乡道红灯模60倒计时:主道红灯乡道黄灯模4倒计时:4.引脚锁定:时钟信号CLK接CLK3,78号引脚,选择2HZ脉冲。
EDA实验报告(四)实验任务:设计一个校园交通灯的有限状态机1.设计思路取4个状态分别表示学术路绿灯亮,文化路红灯亮(简称学绿文红)、学黄文红、学红文绿、学红文黄。
2.VHDL代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY LED ISPORT(CLK,RET,TA,TC:IN STD_LOGIC;R1,Y1,G1,R2,Y2,G2:OUT STD_LOGIC);END LED;ARCHITECTURE ONE OF LED ISTYPE STATES IS(S0,S1,S2,S3);SIGNAL CS,NS:STATES;SIGNAL A:STD_LOGIC;COMPONENT FENPINport(CLK1:in std_logic;CLK2:out std_logic);END COMPONENT;BEGINU1: FENPIN PORT MAP(CLK1=>CLK,CLK2=>A);REG:PROCESS(RET,A)BEGINIF RET='0'THEN CS<=S0;ELSIF A='1'AND A'EVENT THENCS<=NS;END IF;END PROCESS;COM:PROCESS(CS,TA,TC)BEGINCASE CS ISWHEN S0=>R1<='0';Y1<='0';G1<='1';R2<='1';Y2<='0';G2<='0';IF TA='1'THEN NS<=S0;ELSIF TA='0'THEN NS<=S1;ELSE NS<=S0;END IF;WHEN S1=>R1<='0';Y1<='1';G1<='0';R2<='1';Y2<='0';G2<='0';NS<=S2;WHEN S2=>R1<='1';Y1<='0';G1<='0';R2<='0';Y2<='0';G2<='1';IF TC='1'THEN NS<=S2;ELSIF TA='0'THEN NS<=S3;ELSE NS<=S2;END IF;WHEN S3=>R1<='1';Y1<='0';G1<='0';R2<='0';Y2<='1';G2<='0';NS<=S0;END CASE ;END PROCESS;END ONE;分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport(CLK1:in std_logic;CLK2:out std_logic);end;architecture art of FENPIN issignal count:integer range 0 to 125000000;signal clk_data:std_logic;beginprocess(CLK1,count)beginif CLK1'event and CLK1='1' thenif count=125000000 thencount<=0;clk_data<=not clk_data;else count<=count+1;end if;end if;CLK2<=clk_data;end process;end art;3.RTI图4.状态图5.时序仿真波形图6.硬件测试及结果由仿真及其硬件测试可知,综上此VHDL是正确的。
实验四交通灯控制器设计一、实验目的1、学习与日常生活相关且较复杂数字系统设计;2、进一步熟悉EDA实验装置和Quartus U软件的使用方法;3、学习二进制码到BCD码的转换;4、学习有限状态机的设计应用。
二、设计要求完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体要求如下:1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请求信号S=1,其余时间S=0;4、平时系统停留在主干道通行(MGCR状态,一旦S信号有效,经主道黄灯4秒(MYC R状态后转入乡间公路通行(MRC)状态,但要保证主干道通行大于一分钟后才能转换;5、一旦S信号消失,系统脱离MRC状态,即经乡道黄灯4秒(MRC)伏态进入MGCR状态,即使S信号一直有效,MRC状态也不得长于20秒钟;6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。
三、主要仪器设备1 、微机 1 台2、Q uartusII 集成开发软件 1 套3、EDA实验装置1套四、实验思路1、设计一个状态寄存器,控制六盏灯的亮与灭2、设计一个计时器,控制各状态的持续时间,计时器应满足以下要求:1 )当S=1,且计数器已完成60计数时,计数器进入模4计数,随后进入模20 计数,再进入模4计数,再回到模60计数2 )当计数器进行摸20计数时,一旦S变为0,计数器立马进入模4计数,再进入模60 计数3 )完成模20计数后,不论S为0或1,计数器进入模4计数,再进入模60计数4 )若计数器未完成模60计数,不论S如何变话,计数器将继续进行模60 计数3、设计一个译码显示电路,将计时器的八位BCD码转化为数码管可以显示的段位码通过动态扫描电路实现。
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时钟输入,作为后面的时钟信号。
一、实验目的1、研究交通灯控制器的工作原理,进行功能设计;2、加深VHDL语言的理解;3、熟练掌握自上而下的分层设计方法;4、熟练掌握EDA软件QUARTUSII的开发流程。
二、实验仪器PC机一台;QUARTUSII 13.0软件;新型设备实验板Altera Blaster下载器三、题目解析1.东西,南北两个方向有红、黄、绿灯指示是否允许通行2. 设置时钟,以倒计时方式显示允许通行的时间3. 绿灯、黄灯、红灯的持续时间分别设置为20秒、10秒和30秒(时间也开自行设置)4. 当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,交通控制系统可由交警手动控制进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时。
特殊运行状态结束后,管理系统恢复状态继续正常运行四、实验原理五、模块设计以及总电路图1.简要说明由于两个交通灯的倒计时数字的显示是相同的,所以我们这次只使用了两个七段数码管来显示两个交通灯的时间。
我们把60s一个大循环分成了如图所示四个状态s0~s3,且还有一个s4为紧急状态。
当s4启动时,时钟暂停计时,交通灯均亮红灯。
有一个en为紧急状态按钮,rst为复位键,倒计时回到30s,转固态回到s0。
2.分频器模块本次课程使用的实验板默认50MHz晶振。
i_clk为输入信号,用于晶振信号输入;i_rst为复位信号;o_clk为分频信号,输出1Hz;3.LED灯控制模块通过给定的时钟输入判断当前状态下的LED灯点亮情况。
l_clk时钟信号输入l_rst复位l_en为使能端,用于紧急状况4.数码管显示模块通过给定的时钟输入判断当前时间的数字显示c_clk时钟信号输入c_rst复位c_en紧急out_h高位输出用于控制十位out_l地位输出用于控制个位5.数码管将上一部分输出信号进行译码显示6.总电路图根据题意,将各个模块根据原理连接起来,形成如图电路。
六、各个模块代码1.分频器LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;entity FREQUENCY_DIVIDER isgeneric(sys_clk_fre:INTEGER:=50000000;//输入频率div_clk_fre:INTEGER:=1//目标频率);PORT(i_clk : IN STD_LOGIC;i_rst : IN STD_LOGIC;o_clk : OUT STD_LOGIC);END FREQUENCY_DIVIDER;ARCHITECTURE FREQUENCY_DIVIDER_architecture OF FREQUENCY_DIVIDER ISsignal r_div_count:STD_LOGIC_VECTOR(31 downto 0);signal r_div_CLK:STD_LOGIC;BEGINprocess(i_clk,i_rst)beginif(i_rst='1')then //复位r_div_count<=x"00000000";r_div_clk <= '0';elsif(i_clk'event and i_clk='1')thenif(r_div_count=sys_clk_fre/div_clk_fre/2-1)thenr_div_count <= x"00000000";r_div_clk <= NOT r_div_clk;elser_div_count <= r_div_count+1;end if;end if;end process;o_clk <= r_div_clk;END FREQUENCY_DIVIDER_architecture;2.LED控制LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY light_control ISPORT(l_clk : IN STD_LOGIC;l_rst : IN STD_LOGIC;l_en : IN STD_LOGIC;red1 : OUT STD_LOGIC;red2 : OUT STD_LOGIC;ye1 : OUT STD_LOGIC;ye2 : OUT STD_LOGIC;green1 : OUT STD_LOGIC;green2: OUT STD_LOGIC);END light_control;ARCHITECTURE light_control_architecture OF light_control IS type state_type is(s0,s1,s2,s3,s4);signal current_state,next_state:state_type;signal counter:std_logic_vector(5 downto 0);BEGINsynch:process(counter)//60s循环beginif l_rst='1'thencounter<="000000";elsif l_clk'event and l_clk='1'thenif l_en='1' thencounter<=counter;elseif counter<59 thencounter<=counter+1;elsecounter<="000000";end if;end if;end if;end process;process(l_rst,l_clk)//状态转换beginif l_rst='1'thencurrent_state<=s0;elsif l_clk'event and l_clk='1'thencurrent_state<=next_state;end if;end process;state_trans:process(current_state)begincase current_state iswhen s0=>if l_en='1' thennext_state<=s4;elseif counter<26 thennext_state<=s0;elsenext_state<=s1;end if;end if;when s1=>if l_en='1' thennext_state<=s4;elseif counter<29 thennext_state<=s1;elsenext_state<=s2;end if;end if;when s2=>if l_en='1' thennext_state<=s4;elseif counter<56 thennext_state<=s2;elsenext_state<=s3;end if;end if;when s3=>if l_en='1' thennext_state<=s4;elseif counter<59 thennext_state<=s3;elsenext_state<=s0;end if;end if;when s4=>if l_en='1' thennext_state<=s4;elseif counter<19 thennext_state<=s0;elsif counter<29 thennext_state<=s1;elsif counter<49 thennext_state<=s2;elsif counter<59 thennext_state<=s3;elsenext_state<=s0;end if;end if;end case;end process;output:process(current_state)//状态输出begincase current_state iswhen s0=>red1<='0';green1<='1';ye1<='0';red2<='1';green2<='0';ye2<='0';when s1=>red1<='0';green1<='0';ye1<='1';red2<='1';green2<='0';ye2<='0';when s2=>red1<='1';green1<='0';ye1<='0';red2<='0';green2<='1';ye2<='0';when s3=>red1<='1';green1<='0';ye1<='0';red2<='0';green2<='0';ye2<='1';when s4=>red1<='1';green1<='0';ye1<='0';red2<='1';green2<='0';ye2<='0';end case;end process;END light_control_architecture;3.计时器LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY counter IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(c_clk : IN STD_LOGIC;c_rst : IN STD_LOGIC;c_en : IN STD_LOGIC;out_h : OUT STD_LOGIC_VECTOR(3 downto 0);out_l : OUT STD_LOGIC_VECTOR(3 downto 0));-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END counter;-- Architecture BodyARCHITECTURE counter_architecture OF counter ISsignal coul,couh:std_logic_vector(3 downto 0);beginprocess(c_rst,c_clk,c_en)beginif c_rst='1' thencoul<="0000";couh<="0011";//这里是如果启用了复位键,就会从的第一个小循环30s开始倒计时,所以高位是0011也就是3,低位从0开始倒计时,即30→29…elsif c_clk'event and c_clk = '1' thenif c_en='1'thencouh<=couh;coul<=coul;elseif c_rst='0' thenif(coul=1 and couh=0)thencouh<="0011";coul<="0000";elsif coul=0 thencoul<="1001";couh<=couh-1;elsecoul<=coul-1;//这里是每减少10s高位会减1,如20→19高位从2到1,低位置9end if;end if;end if;end if;end process;out_h<=couh;out_l<=coul;END counter_architecture;4译码显示LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY digits_h IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(d_h : IN STD_LOGIC_VECTOR(3 downto 0);a : OUT STD_LOGIC;b : OUT STD_LOGIC;c : OUT STD_LOGIC;d : OUT STD_LOGIC;e : OUT STD_LOGIC;f : OUT STD_LOGIC;g : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END digits_h;ARCHITECTURE digits_h_architecture OF digits_h IS signal tmp:std_lOGIC_VECTOR(6 DOWNTO 0);beginprocess (d_h)begincase d_h iswhen"0000"=>tmp<="0000001";when"0001"=>tmp<="1001111";when"0010"=>tmp<="0010010";when"0011"=>tmp<="0000110";when"0100"=>tmp<="1001100";when"0101"=>tmp<="0100100";when"0110"=>tmp<="0100000";when"0111"=>tmp<="0001111";when"1000"=>tmp<="0000000";when"1001"=>tmp<="0000100";when others=>tmp<="1111111";end case;end process;a<=tmp(6);b<=tmp(5);c<=tmp(4);d<=tmp(3);e<=tmp(2);f<=tmp(1);g<=tmp(0);END digits_h_architecture;七、实验验证验证通过!八、心得体会通过本次数字电路与逻辑实验课程的学习以及大作业的完成,我们学习了EDA相关的编程语言基础语法与软件的基本使用,掌握了一定的基础能力,了解电子设计自动化这片领域的重要性以及其发展,实践了从设计到实现的全部过程,培养了对eda设计的兴趣,对本科阶段实操方面的能力很有帮助。
EDA 实验报告交通灯实验一.实验目的通过此实验让用户进一步了解、熟悉和掌握 CPLD/FPGA 开发软件的的使用方法及Verilog HDL 的编程方法。
学习简单状态机的设计和硬件测试。
二.实验内容本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。
整个设计在SmartSOPC 实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。
此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A方向的红、绿、黄灯三种信号,用第六、第七、第八个LED 灯代表B方向的红、绿、黄等三种信号。
三.实验原理本实验设计的交通灯控制器要求实现对 A、B 两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。
因此每个方向的信号可用一个状态机实现(参考交通灯.ppt),状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。
最后将交通灯的状态信息输出至数码管和对应LED灯。
注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。
四.实验步骤1) 启动Quartus II 建立一个空白工程,然后命名为traffic_test.qpf(器件为:EP3C55F484C8)。
2)加入并完成交通灯控制模块traffic_ctrl.v,加入顶层模块traffic_test 及交通灯显示模块traffic_display.v,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)运行引脚绑定脚本文件setup.tcl;文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
5)确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。
6)按核芯板上的复位按键,观察交通灯是否正常运作。
五. 结构图六.实验代码//*********************************************************//** 交通灯实验//** 控制模块:traffic_ctrl.v//*********************************************************module traffic_ctrl(clock,rst_n,lampa,lampb,acount,bcount);input clock; //系统时钟48MHzinput rst_n; //同步复位信号,低电平有效output [2:0] lampa; //控制A 方向三盏灯的亮灭;其中lampa[2:0]分//别控制A 方向的黄灯、绿灯、红灯(低电平灯亮) output [2:0] lampb; //控制B 方向三盏灯的亮灭;其中lampb[2:0]分//别控制B 方向的黄灯、绿灯、红灯(低电平灯亮) output [7:0] acount; //用于A 方向灯的时间显示,8 位BCD 码输出output [7:0] bcount; //用于B 方向灯的时间显示,8 位BCD 码输出reg [26:0]clk_cnt;wire clken;//设置各种灯的计数器的预置数parameter ared =8'd30, //30秒ared = bgreen + byellowayellow =8'd5, //5秒agreen =8'd15, //15秒bred =8'd20, //20秒bred = agreen + ayellowbyellow =8'd5, //5秒bgreen =8'd25; //25秒//产生1Hz时钟使能信号always @(posedge clock)beginif(clken)clk_cnt <= 26'h0;elseclk_cnt <= clk_cnt + 26'h1;endassign clken = (clk_cnt >= 26'd4*******);//// A方向信号灯控制//reg[2:0] lampa;reg[7:0] acount;reg acount_startred, acount_startgreen, acount_startyellow; // 用于倒数计数器的复位//状态机Areg[1:0] currentstate_A, nextstate_A; parameter s0=0,s1=1,s2=2,s3=3,s4=4;// 以下状态机A的代码自己完成always@(posedge clock or negedge rst_n) beginif(!rst_n) currentstate_A<=s0;else currentstate_A<=nextstate_A;endalways@(currentstate_A or acount)begincase(currentstate_A)s0:begin lampa=3'b111;acount_startred=1'b1;acount_startgreen=1'b0;acount_startyellow=1'b0;nextstate_A<=s1;ends1:begin lampa=3'b110;acount_startred=1'b0;acount_startyellow=1'b0;if(acount==0)beginnextstate_A<=s2;acount_startgreen=1'b1;endelse beginnextstate_A<=s1;acount_startgreen=1'b0;endends2:begin lampa=3'b101;acount_startgreen=1'b0;acount_startred=1'b0;if(acount==0)beginnextstate_A<=s3;acount_startyellow=1'b1;endelse beginnextstate_A<=s2;acount_startyellow=1'b0;endends3:begin acount_startgreen=1'b0;acount_startyellow=1'b0;lampa<=3'b011;if(acount==0)beginnextstate_A<=s1;acount_startred=1'b1;endelse beginnextstate_A<=s3;acount_startred=1'b0;endenddefault:begin bcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(acount==0)beginnextstate_A<=s2;acount_startyellow=1'b1;endelse beginnextstate_A<=s1;acount_startgreen=1'b0;endendendcaseend// 倒数计数器Aalways @(posedge clock)beginif(acount_startred)acount <= ared;else if (acount_startgreen)acount <= agreen;else if (acount_startyellow)acount <= ayellow;else if (clken)acount <= acount - 1'b1;end//// B方向信号灯控制//reg[2:0] lampb;reg[7:0] bcount;reg bcount_startred, bcount_startgreen, bcount_startyellow; // 用于倒数计数器的复位//状态机Breg[1:0] currentstate_B, nextstate_B;// 以下状态机B的代码自己完成always@(posedge clock or negedge rst_n)beginif(!rst_n) currentstate_B<=s0;else currentstate_B<=nextstate_B;endalways@(currentstate_B or bcount)begincase(currentstate_B)s0: beginlampb=3'b111;bcount_startgreen=1'b1;bcount_startred=1'b0;bcount_startyellow=1'b0;nextstate_B<=s1;ends1:begin bcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(bcount==0)beginnextstate_B<=s2;bcount_startyellow=1'b1;endelsebeginnextstate_B<=s1;endends2:begin bcount_startyellow=1'b0;lampb<=3'b011;bcount_startgreen=1'b0;if(bcount==0)beginnextstate_B<=s3;bcount_startred=1'b1;endelsebeginnextstate_B<=s2;bcount_startred=1'b0;endends3:beginbcount_startred=1'b0;bcount_startyellow=1'b0;lampb<=3'b110;if(bcount==0)beginnextstate_B<=s1;bcount_startgreen=1'b1;endelsebeginnextstate_B<=s3;bcount_startgreen=1'b0;endenddefault:beginbcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(bcount==0)beginnextstate_B<=s2;bcount_startyellow=1'b1;endelse beginnextstate_B<=s1;endendendcaseend// 倒数计数器Balways @(posedge clock) beginif(bcount_startred)bcount <= bred;else if (bcount_startgreen)bcount <= bgreen;else if (bcount_startyellow)bcount <= byellow;else if (clken)bcount <= bcount - 1'b1; endendmodule七.实验现象1.A方向红灯,B方向黄灯。
EDA交通灯实验报告交通灯是道路上常见的交通设施之一,其功能是对行人和机动车辆进行交通管理,维护道路交通秩序,保障道路交通安全。
而交通信号灯则是交通灯的一种常见形式,通过信号灯的亮灭来指示不同方向的车辆和行人行进或停车。
为了更好地了解交通灯的工作原理和实际应用场景,本次实验通过自制交通灯,进行了一系列的观察和数据收集,从而对交通灯的工作原理和交通信号的规律有了更深入的理解。
首先,我们采用LED灯作为交通信号灯的光源,LED灯具有亮度高、寿命长、能耗低等优势,非常适合用于交通信号灯的制作。
我们选择了红、黄、绿三种颜色的LED灯,分别用于表示停车、准备行进和行进的状态。
通过连接电路,我们可以对不同颜色的LED灯进行控制。
在实验中,我们选择了两个参数进行观察和数据收集,分别是信号灯的亮灭时间和不同信号灯的显示顺序。
首先,我们观察到每个信号灯的亮灭时间是固定的,红灯亮灭时间为30秒,黄灯亮灭时间为5秒,绿灯亮灭时间为40秒。
在实际应用中,交通信号灯的时间设置是根据道路交通流量和道路安全等因素综合考虑的,我们的实验结果也验证了这一设定的合理性。
其次,我们进行了不同信号灯的显示顺序的实验。
选择了三种不同的显示顺序进行观察,分别是红-黄-绿、绿-黄-红和黄-红-绿。
实验结果显示,红-黄-绿的显示顺序是最常见的,也是最符合交通规则的。
因为红灯表示停车,黄灯表示准备行进,绿灯表示行进,这样的显示顺序可以保障车辆和行人按照规则进行。
最后,我们还观察到了交通灯的故障现象,即交通灯不正常工作或者显示混乱。
这种情况在实际应用中是非常危险的,会导致交通事故的发生。
因此,交通灯的维护和保养非常重要,需要定期检查和维修,确保其正常工作。
通过本次实验,我们对交通灯的工作原理和交通信号的规律有了更深入的了解。
交通灯作为一种重要的交通设施,对于道路交通的安全和秩序维护起着重要的作用。
我们应当遵守交通信号,不仅是为了自己的安全,也是为了他人的安全。
EDA实验报告题目:交通灯设计学院:电子工程学院专业:电子信息工程*者:*** 14020120007 *师:***EDA实验报告:交通灯设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。
要求:(1)交通灯从绿变红时,有5秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)东西主干道上的绿灯时间为25秒,南北支干道的绿灯时间为25秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。
路口示意图如下:图 1 路口交通示意图A B C东西主干道交通灯绿(25秒)黄(5秒)红(30秒)南北支干道交通灯红(30秒)黄(5秒)绿(25秒)设计要求:(1)采用VHDL语言编写程序,并在QuartusII工具平台中进行仿真,下载到EDA实验箱进行验证。
(2)编写设计报告,要求包括方案选择、程序清单、调试过程及测试结果。
二、设计原理1、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2、设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:系统输入信号:Clk: 由外接信号发生器提供50MHz的时钟信号;系统输出信号: full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:full: 接收由clk电路的提供的1HZ的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。
模块说明:系统输入信号:full: 接收由clk电路的提供的1Hz的时钟脉冲信号;tm: 接收计数秒数选择电路状态转换信号;系统输出信号:comb_out: 负责红绿灯的状态显示。
(4)第四模块:时间显示电路本电路负责红绿灯的计数时间的显示。
模块说明:系统输入信号:tl:倒计数值秒数个位变化控制信号;th:倒计数值秒数十位变化控制信号;系统输出信号:led7s1: 负责红绿灯的显示秒数个位。
led7s2:负责红绿灯的显示秒数十位。
三、设计方案图2 交通信号灯控制器的原理框图采用VHDL语言输入的方式实现交通信号灯控制器图3 交通信号灯控制器程序原理框图该程序由7个进程组成,进程P1和P2将CLK信号分频后产生1秒信号,进程P3、P4、P5构成两个带有预置数功能的十进制计数器,其中P4产生允许十位计数器计数的控制信号。
进程P6实现状态转换和产生状态转换的控制信号,进程P7产生次态信号和信号灯输出信号,以及每一个状态的时间值。
四、程序清单:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY traffic ISPORT (clk:in std_logic;led7s1:out std_logic_vector(6 downto 0);led7s2:out std_logic_vector(6 downto 0);comb_out:out std_logic_vector(5 downto 0));END;ARCHITECTURE one OF traffic ISTYPE dm IS (s0,s1,s2,s3);SIgnal current_state,next_state:dm;SIGNAL FULL : STD_LOGIC;SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL th:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINP_REG: PROCESS(CLK)VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8 = "11111111" THENCNT8:="01111111";FULL<='1';ELSE CNT8 := CNT8+1;FULL <= '0';END IF; END IF;END PROCESS P_REG;PROCESS(full)BEGINIF full'EVENT AND full='1' THENIF TIME<"1000011" THENTIME<=TIME+1;ELSe TIME <="0000000";END IF;END IF;END PROCESS;REG:process( full,current_state)BEGINIF full='1' AND full'EVENT THENcurrent_state<=next_state;END IF;END process;COM:process(current_state, time)begincase current_state iswhen s0=>comb_out<="001100";tm<=39-time; if time=39 then next_state<=s1;else next_state<=s0;end if;when s1=>comb_out<="010100";tm<=43-time; if time=43 then next_state<=s2;else next_state<=s1;end if;when s2=>comb_out<="100010";tm<=63-time; if time=63 then next_state<=s3;else next_state<=s2;end if;when s3=>comb_out<="100001";tm<=67-time; if time=67 then next_state<=s0;else next_state<=s3;end if;end case;end process;PROCESS(tm)BEGINIF tm>=30 THEN th<="11";tl<=tm-30;ELSIF tm>=20 THEN th<="10";tl<=tm-20; ELSIF tm>=10 THEN th<="01";tl<=tm-10; ELSE th<="00";tl<=tm;END IF;END PROCESS;process(th,tl)begincase th iswhen"00"=>led7s1<="0111111";when"01"=>led7s1<="0000110";when"10"=>led7s1<="1011011";when"11"=>led7s1<="1001111";when others=>null;end case;case tl iswhen "0000000"=>led7s2<="0111111";when"0000001"=>led7s2<="0000110";when "0000010"=>led7s2<="1011011";when"0000011"=>led7s2<="1001111";when"0000100"=>led7s2<="1100110";when "0000101"=>led7s2<="1101101";when "0000110"=>led7s2<="1111101";when"0000111"=>led7s2<="0000111";when "0001000"=>led7s2<="1111111";when "0001001"=>led7s2<="1101111";when others=>null;end case;end process;end;五、电路及波形图1.波形图图4 仿真波形图2.引脚设置选择的器件为cyclone3系列的EP3C16F484C6芯片,引脚锁定方法如下图所示。
将未使用的管脚设置为三态输入(一定要设置,否则可能会损坏芯片)。
图5 引脚使用图六、硬件测试及说明用实验板上的6个LED作为交通信号灯,设计一个交通信号灯控制器。
1、交通灯从绿变红时,有5秒黄灯亮的间隔时间;2、交通灯红变绿是直接进行的,没有间隔时间;3、红灯时间为30秒。
绿灯时间为25秒。
黄灯时间为5秒。
七、实验心得体会通过这次课程设计,我进一步加深了对数字系统设计的了解。
并进一步熟练了对Quartu sII软件的操作。
在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。