EDA实验交通灯设计报告
EDA课程设计报告交通灯控制系统

一、课程设计目的和要求目的:掌握基于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状态重新开始循环。
EDA交通灯实验报告

EDA实验报告题目:交通灯设计学院:电子工程学院专业:电子信息工程作者:导师:孙万蓉EDA实验报告:交通灯设计、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、作为交通信号灯,设计一个交通信号灯控制器。
要求:(1)交通灯从绿变红时,有5秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)东西主干道上的绿灯时间为25秒,南北支干道的绿灯时间为 25秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。
路口示意图如下:图1路口交通示意图表1交通信号灯的4种状态设计要求:(1)采用VHDL语言编写程序,并在Quartusll工具平台中进行仿真,下载到进行验证黄、绿LED EDA实验箱(2)编写设计报告,要求包括方案选择、程序清单、调试过程及测试结果。
、设计原理1、设计目的:学习DEA开发软件和Quartusll的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2、设计说明( 1)第一模块: clk 时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟( clock )才能让系统正常运作。
模块说明:系统输入信号:Clk: 由外接信号发生器提供50MHZ勺时钟信号;系统输出信号: full :产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:full: 接收由clk电路的提供的1HZ的时钟脉冲信号;系统输出信号: tm :产生显示电路状态转换信号tl :倒计数值秒数个位变化控制信号th :倒计数值秒数十位变化控制信号(3) 第三模块:红绿灯状态转换电路本电路负责红绿灯的转换模块说明: 系统输入信号: full: 接收由clk 电路的提供的1Hz 的时钟脉冲信号;tm: 接收计数秒数选择电路状态转换信号;系统输出信号: comb out:负责红绿灯的状态显示。
EDA实验课程大作业报告:设计制作一个用于十字路口的交通灯控制器

交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(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交通灯实验报告

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课程设计要求 (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.当汽车行驶在小路上时,小路的交通灯保持为绿灯,但不能超过给定的时间。
(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 表示乡村小路黄红绿灯。
EDA交通灯控制系统的课程设计报告书
摘要 (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实验报告:基于VHDL语言的交通灯控制系统设计与实现
图为k1=0时的输出状态s1,输出恒为011110。即亮灯为R1,y2。保持时间1S。
(k2=0)
上图为k2=0时的输出状态s2,输出恒为101011。即亮灯为G1,R2。保持时间2S。
(k3=0)
上图为k3=0时的输出状态s3,输出恒为110011。即亮灯为R1,G2。保持时间1S。
四、小结及心得体会
else
if counter<5 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
end if;
end if;
end if;
end case;
end process;
ouput:process(current_state)
begin ——显示程序
begin
u1: jiaotongdeng port map(
clk=>clki,
k0=>k0,
k1=>k1,
k2=>k2,
k3=>k3,
r1=>r1,r2=>r2,g1=>g1,g2=>g2,y1=>y1,y2=>y2
);
u2: div port map(clk=>clk1,clk_out=>clki);
end if;
end if;
end if;
when s3=>
if k0='0' then
next_state<=s0;
else
if k1='0' then
next_state<=s1;
EDA实验交通灯设计报告
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交通灯设计(全)
目录一.方案分析与对比 (2)1.1方案分析 (2)1.2方案对比 (2)二.整体设计论述 (3)三.单元模块设计与仿真 (6)3.1时钟分频模块 (6)3.2交通灯控制及计时模块 (7)3.3扫描显示译码模块 (9)3.4顶层文件的编写 (10)四.硬件实验方案及实验结果 (13)4.1硬件实验方案 (13)4.2实验结果 (15)五.收获和体会 (15)六.参考文献 (13)附录(程序代码) (17)一.方案分析与对比§1.1方案分析通过分析可以知道,所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口。
能够做到主、支干道的红绿灯闪亮的时间不完全相同,在绿灯跳变红灯的过程中能够用黄灯进行过渡,使得行驶过程中的车辆有足够的时间停下来。
还要求在主、支干道各设立一组计时显示器,能够显示相应的红、黄、绿倒计时。
可以利用VHDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。
§1.2方案对比实现路口交通灯系统的控制方法很多,可以用标准逻辑器件、可编程序控制器和单片机等方案来实现。
若用单片机方案来实现的话,模型可以由电源电路、单片机主控电路、无线收发控制电路和显示电路四部分组成。
在电源电路中,需要用到+5V的直流稳压电源,无线收发控制电路和显示电路应由编码芯片和数据发射模块两部分组成,主控电路的主要元件为AT89C51。
硬件设计完成后还要利用计算机软件经行软件部分的设计才能够实现相应的功能。
虽然利用单片机系统设计的交通灯控制器相对来说较稳定,能够完成较多功能的实现,但这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统设计与调试的困难。
相反,使用基于FPGA的设计方法具有周期短,设计灵活,易于修改等明显的的优点。
而且,随着FPGA器件、设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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时钟输入,作为后面的时钟信号。
分频器2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF2 ISPORT(CLK:IN STD_LOGIC;--D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);FOUT:OUT STD_LOGIC);END;ARCHITECTURE one OF DVF2 ISSIGNAL FULL:STD_LOGIC;BEGINP_REG:PROCESS(CLK)V ARIABLE CNT8:INTEGER RANGE 48000000 DOWNTO 0; BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8=20000 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;说明:改变了分频器的大小,这个频率很高,是给扫描数码管模块使用的。
计数器1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cntn ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC_vector(2 downto 0);U:IN STD_LOGIC_VECTOR(2 DOWNTO 0);A,B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE bhv OF cntn ISSIGNAL J,K,L:STD_LOGIC;SIGNAL Q2,Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINa1:PROCESS(CLK)BEGINIF CLR="001" THEN Q1<="0100";ELSIF U="010" THENIF CLK'EVENT AND CLK='1' THENQ1<=Q1-1; IF Q1="0000" THEN Q1<="1001";J<='1';ELSE J<='0';END IF; END IF;A<=Q1;END IF;END PROCESS;a2:PROCESS(J)BEGINIF CLR="001" THEN Q2<="0010";ELSIF U="010" THENIF J'EVENT AND J='1' THENQ2<=Q2-1; IF Q2="0000" THEN Q2<="0010";K<='0';ELSE K<='1';END IF;END IF;B<=Q2;END IF;END PROCESS;END ;说明:作为支干道通行时间,倒计时25s。
计数器2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cntm ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC_vector(2 downto 0);U:IN STD_LOGIC_VECTOR(2 DOWNTO 0);C,D:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE bhv OF cntm ISSIGNAL J,K,L:STD_LOGIC;SIGNAL Q2,Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINa1:PROCESS(CLK)BEGINIF CLR="010" THEN Q1<="0101";ELSIF U="001" THENIF CLK'EVENT AND CLK='1' THENQ1<=Q1-1; IF Q1="0000" THEN Q1<="1001";J<='1';ELSE J<='0';END IF; END IF;C<=Q1;END IF;END PROCESS;a2:PROCESS(J)BEGINIF CLR="010" THEN Q2<="0000";ELSIF U="001" THENIF J'EVENT AND J='1' THENQ2<=Q2-1; IF Q2="0000" THEN Q2<="0010";K<='0';ELSE K<='1';END IF;END IF;D<=Q2;END IF;END PROCESS;END ;计数器3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cntl ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC_vector(2 downto 0);U:IN STD_LOGIC_VECTOR(2 DOWNTO 0);E,F:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF cntl ISSIGNAL J,K,L:STD_LOGIC;SIGNAL Q2,Q1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINa1:PROCESS(CLK)BEGINIF CLR="001" THEN Q1<="0100";ELSIF U="000" THENIF CLK'EVENT AND CLK='1' THENQ1<=Q1-1; IF Q1="0000" THEN Q1<="1001";J<='1';ELSE J<='0';END IF; END IF;E<=Q1;END IF;END PROCESS;a2:PROCESS(J)BEGINIF CLR="001" THEN Q2<="0100";ELSIF U="000" THENIF J'EVENT AND J='1' THENQ2<=Q2-1; IF Q2="0000" THEN Q2<="0010";K<='0';ELSE K<='1';END IF;END IF;F<=Q2;END IF;END PROCESS;END ;说明:作为主干道通行时间,倒计时45s。