用VHDL语言实现的交通灯

合集下载

基于VHDL的智能交通灯控制器

基于VHDL的智能交通灯控制器

基于VHDL的智能交通灯控制器1 设计任务及要求交通灯在指挥道路交叉部分的车辆,行人安全,有序,高效地通行,缓解城市交通拥堵状况起着重要作用,交通灯的出现大大降低了交汇路段的交通事故率,极大地提高了通行效率,是现代交通控制系统不可缺少的一部分。

本次将设计基于VHDL语言的交通灯控制系统,实现如下功能: 1. 本设计用总共8个LED灯分别指示南北和东西方向的红黄绿以及左转信号灯。

并规定在非紧急情况下各个方向车辆在不影响其他直行车道车辆正常行驶是情况下均能右转向,因此本设计未包含右转向信号。

2. 本设计具有状态实时显示功能,即各个状态的剩余时间将在对应的数码管上显示。

3. 复位功能:在紧急情况键未按下时复位键可以使系统从任意状态回到第一种状态。

4. 紧急状态限行功能:在紧急情况时可以按下紧急情况按钮,可使系统在任意情况,转向限制所有方向车辆通行,同时数码管显示“00”,发出警告音 5. 系统的六个状态为:东西方向绿灯,南北方向红灯,持续30s;东西方向黄灯,南北方向红灯,持续5s;东西方向绿灯,南北方向左转,持续10;东西方向红灯,南北方向绿灯,持续30s;东西方向红灯,南北方向黄灯,持续5s;东西方向左转,南北方向绿灯,持续10s;6.要求在无人工干预条件下各个状态能自动转换,系统正常运行。

2设计原理及总体框图本交通灯设计总共用8个数码管分别指示东西和南北方向的红灯,黄灯,绿灯以及左转指示灯。

共有六种状态,如下表所示:状态 1 2 3 4 5 6 南北方向东西方向LED指示LED状态绿灯黄灯绿灯红灯红灯左转计数器初值30 5 10 35 5 10 LED状态红灯红灯左转绿灯黄灯绿灯计数器初值35 5 10 305 10 LED代码00101000 01001000 00100001 10000010 10000100 00010010 设计的总体框图为:时钟输入交通灯控制核心模块东西方向数码管时间显示南北方向数码管时间显示LED显示交通灯控制模块在时钟的控制下,实现各个状态的自动转换,并且负责输出LED的控制信号和,数码管倒计时的BCD码输入信号。

vhdl交通灯说明

vhdl交通灯说明

一:十字路口交通灯实现程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY traffic ISPORT ( clk,urgency:IN STD_LOGIC;led:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);East_West,South_North:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));END traffic;ARCHITECTURE A OF traffic ISBEGINPROCESS(clk)BEGINIF urgency='0' THEN --紧急情况两方向都禁止led<="10000001";--全红灯East_West<="00000000";South_North<="00000000";ELSIF clk'event AND clk='1' THENIF East_West>"01000110"OR South_North>"01000110" THENEast_West<="01000101";--45sSouth_North<="01000000";--40Sled<="10000100";--东西红灯南北绿灯(红黄绿--绿黄红)ELSIF East_West="00000110"AND South_North="00000001" THENEast_West<="00000101";--5SSouth_North<="00000101";--5Sled<="10000010";--东西红灯南北黄灯ELSIF East_West="00000001"AND South_North="00000001"andled="10000010" THEN--East_West<="01000000";--40SSouth_North<="01000101";--45Sled<="00100001";--东西绿灯南北红灯ELSIF East_West="00000001"AND South_North="00000110" THENEast_West<="00000101";South_North<="00000101";led<="01000001";--东西黄灯南北红灯ELSIF East_West<="00000001"AND South_North="00000001"AND LED="01000001" THEN East_West<="01000101";South_North<="01000000";led<="10000100";--东西红灯南北绿灯ELSIF East_West(3 DOWNTO 0)=0 THENEast_West<=East_West-7;--计数超出范围则减7South_North<=South_North-1;ELSIF South_North(3 DOWNTO 0)=0 THENEast_West<=East_West-1;South_North<=South_North-7;ELSEEast_West<=East_West-1;--正常情况下东西南北各计数值减1(上升沿触发)South_North<=South_North-1;END IF;END IF;END PROCESS;END A;二:模式选择与引脚定义如下:1:选择模式52:引脚定义如下:三:硬件说明:数码管2和数码管1作为东西方向灯的时间显示,数码管4和数码管3作为南北方向灯的时间显示。

基于VHDL语言的交通灯设计程序

基于VHDL语言的交通灯设计程序

library ieee; -----分频电路use ieee.std_logic_1164.all;entity fen isport(clk:in std_logic;clk1:out std_logic); ---实体端口声明end fen;architecture fen_arc of fen is ---结构体描述开始beginprocess(clk) --进程开始variable cnt:integer range 0 to 99;beginif clk'event and clk='1' then ---高电平到if cnt=99 thencnt:=0; ---0开始计数clk1<='1'; --输出高电平elsecnt:=cnt+1; ---加计数clk1<='0'; --输出低电平end if;end if;end process; ---进程描述结束end fen_arc; ---结构体描述结束--------------------------------------------------A路控制library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Alu isport(clk:in std_logic;ar,ag,al,ay:out std_logic; ----红、绿、黄、左转timas,timag:out std_logic_vector(3 downto 0)); ----十位、个位计数end Alu;architecture alu_arc of Alu istype rgly is(red,green,left,yellow); ---灯亮顺序为红、绿、左转、黄beginprocess(clk)variable a:std_logic; ----变量声明variable ts,tg:std_logic_vector(3 downto 0);variable state:rgly;beginif clk'event and clk='1' then ---高电平case state iswhen green=>if a='0' then --绿灯状态ts:="0010"; --十位计2tg:="0100"; --个位计4a:='1';ag<='0';ar<='1';elseif not(ts="0000" and tg="0001") then --若计数值不为1if tg="0000" then --若个位为1tg:="1001"; --个位置9ts:=ts-1; --十位自减1 elsetg:=tg-1; --个位自减1 end if;elsets:="0000";tg:="0000";a:='0';state:=left; ---转为左转灯状态end if;end if;when left=>if a='0' then ---------------左转灯ts:="0000"; -----------十位置0tg:="1001"; --------------个位置9a:='1';aL<='0';ag<='1';elseif not (ts="0000" and tg="0001")thenif tg="0000" thentg:="1001";ts:=ts-1;elsetg:=tg-1;end if;elsets:="0000";tg:="0000";a:='0';state:=yellow;----转为黄灯状态end if;end if;when yellow=>if a='0' then -----黄灯状态ts:="0000"; ---十位置0tg:="0100"; ----个位置9a:='1';ay<='0';aL<='1';elseif not(ts="0000" and tg="0001") thenif tg="0000" thentg:="1001";ts:=ts-1;elsetg:=tg-1;end if;elsets:="0000";tg:="0000";a:='0';state:=red;end if;end if;when red=>if a='0' then --------红灯状态ts:="0011"; ----十位置3tg:="1001"; ---个位置9a:='1';ar<='0';ay<='1';elseif not(ts="0000" and tg="0001") thenif tg="0000" thentg:="1001";ts:=ts-1 ;elsetg:=tg-1;end if;elsets:="0000";tg:="0000";a:='0';state:=green;end if;end if;end case;timas<=ts;timag<=tg;end if;end process;end alu_arc;-----------------------------------------------------B路灯控制程序。

vhdl交通灯程序

vhdl交通灯程序
red2<='1';green2<='0';yellow2<='0';
IF(countnum=80) THEN
next_state:=s3; seconds<="0000";
ELSIF(countnum>=60 AND countnum<80) THEN
(countnum>=139 AND countnum<141) OR
(countnum>=143 AND countnum<145) OR
(countnum>=147 AND countnum<149)) THEN
next_state:=s2;
IF((countnum>=61 AND countnum<63) OR
(countnum>=65 AND countnum<67) OR
next_state:=s4;
IF((countnum>=131 AND countnum<133) OR
(countnum>=135 AND countnum<137) OR
VARIABLE next_state:states; --状态变量
BEGIN
IF(reset='0') THEN --复位
countnum:=0; seconds<="0000"; next_state:=s0;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

VHDL交通灯程序

VHDL交通灯程序

该程序基于VHDL语言使用spartan6芯片实现的建议交通灯的变化红灯---25秒黄灯闪烁---5秒绿灯---20秒在LED灯亮的时候伴有没有灯亮的时候数码管的倒计时library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--use IEEE.NUMERIC_STD.ALL;-- Uncomment the following library declaration if instantiating-- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entitytrafficlight isport( clk:instd_logic;rst:instd_logic;led: out std_logic_vector(9 downto 0);ledout: out std_logic_vector(3 downto 0)); endtrafficlight;architecture Behavioral of trafficlight issignalcount:integer range 1 to 50 ;signalclkcount:integer range 0 to 20000000;signaldivclk:std_logic;signal clkcount1:integer range 0 to 200000;signal clkcount2:integer range 0 to 600000;signalshi:std_logic_vector(3 downto 0);signalge:std_logic_vector(3 downto 0);signalsel:std_logic_vector(1 downto 0);beginprocess(clk,rst) --秒脉冲分频beginifrst='0' thenclkcount<=0;elsifclk'event and clk='1' thenifclkcount=20000000 thenclkcount<=0;divclk<=not divclk;elseclkcount<=clkcount+1;end if;end if;end process;process(clk,clkcount2,sel,rst) --数码管扫描分频beginifrst='0' thenclkcount2<=0;elsifclk'event and clk='1' thenif clkcount2=600000 thenclkcount2<=0;else clkcount2<=clkcount2+1;end if;end if;if (clkcount2<300000) thensel<="01";elsesel<="10";end if;end process;process(divclk,rst)beginifrst='0' thencount<=1;elsifdivclk'event and divclk='1' thenif count=50 thencount<=1;elsecount<=count+1;end if;end if;end process;process(divclk,rst)beginif (rst='0' ) thenge<="0101";shi<="0010";elsif(divclk'event and divclk='1')thenif(count<=25)thenif(ge="0001"and shi="0000")thenge<="0101";shi<="0000";elsif(ge="0000")thenshi<=shi-1;ge<="1001";elsege<=ge-1;end if;elsif(count<=30)thenif(ge="0001"and shi="0000")thenge<="0000";shi<="0010";elsege<=ge-1;end if;elsif(count<=50)thenif(ge="0001"and shi="0000")thenge<="0101";shi<="0010";elsif(ge="0000")thenshi<=shi-1;ge<="1001";elsege<=ge-1;end if;end if;end if;end process;process(count,divclk,rst)beginifrst='0' thenledout<="0000";elsifdivclk'event and divclk='1' thenif(count=50)thenledout<="0001";elsif(count<=24)thenledout<="0001";elsif(count<=29)thencase count iswhen 25=>ledout<="0100";when 26=>ledout<="0000";when 27=>ledout<="0100";when 28=>ledout<="0000";when 29=>ledout<="0100";when others=>ledout<="0100";end case;elseledout<="0010";end if;end if;end process;process(ge,shi,sel)beginif(sel="01")thencasege iswhen"0000"=> led <="010*******";when"0001"=> led <="010*******";when"0010"=> led <="010*******";when"0011"=> led <="010*******";when"0100"=> led <="010*******";when"0101"=> led <="010*******";when"0110"=> led <="010*******";when"0111"=> led <="010*******";when"1000"=> led <="010*******";when"1001"=> led <="010*******";when others=> led <="010*******";end case;elsecaseshi iswhen"0000"=> led <="1000111111";when"0001"=> led <="1000000110";when"0010"=> led <="1001011011";when others => led <="1001111111";end case;end if;end process;end Behavioral;。

用VHDL语言实现的交通灯

用VHDL语言实现的交通灯

目录序言 (3)第1章任务和要求 (4)1.1 设计任务 (4)1.2设计要求 (4)第2章功能分析 (6)2.1交通灯控制系统总体框架图 (6)2.2模块功能分析 (6)第3章设计过程 (7)3.1 分频模块的设计及仿真图 (7)3.2 显示模块的设计及仿真图 (7)3.3 数码管显示模块设计及仿真图 (8)3.4 译码驱动模块的设计及仿真图 (8)3.5顶层文件设计及仿真图 (9)3.6交通灯顶层原理图 (9)第4章外部电路结构图及引脚分配 (11)4.1电路主要结构 (11)4.2下载引脚分配 (12)第五章分析与小结5.1测试及结果分析 (13)5.2实验小结 (13)参考文献 (14)附录 (15)具有五种信号灯和倒计时显示的交通灯控制器序言随着社会经济的发展,城市交通问题越来越引起人们的关注。

人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。

城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。

、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。

然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。

而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。

所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。

交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

随着中国加入WTO,我们不但要在经济、文化、科技等各方面与国际接轨,在交通控制方面也应与国际接轨。

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现
(k1=0)
图为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;

交通灯VHDL语言程序源代码

交通灯VHDL语言程序源代码

交通灯控制器的设计智能交通灯控制器的源程序如下:library ieee;use ieee.std_logic_1164.all;entity traffic_control isport( clk: in std_logic;sense0,sense1: in std_logic; --分别为东西路和南北路车辆指示器counter: out integer range 0 to 44;r0,y0,g0: out std_logic; --r0,y0,g0为南北路的红、黄、绿灯r1,y1,g1:out std_logic); --r1,y1,g1为东西路的红、黄、绿灯end;architecture art of traffic_control2 issignal state:std_logic_vector(1 downto 0);signal cnt:integer range 0 to 44;beginprocess(clk)variable nclr,en:bit; --nclr为倒计时计数器清零端,en为计数器使能端beginif clk'event and clk='1' thenif nclr='0' thencnt<=0; --同步清零elsif en='0'thencnt<=cnt; --计数器停止计数elsecnt<=cnt+1; --计数器值增加end if;case state iswhen "00"=>r0<='1';y0<='0';g0<='0';r1<='0';y1<='0';g1<='1';if(sense0 and sense1)='1' then --东西道和南北道都有车if cnt=44 thenstate<="01";nclr:='0';en:='0';elsestate<="00";nclr:='1';en:='1';end if;elsif(sense0 and (not sense1))='1' then --东西道有车,南北道无车state<="01";nclr:='0';en:='0';elsestate<="00";nclr:='1';en:='1';end if;when "01"=>r0<='1';y0<='0';g0<='0';r1<='0';y1<='1';g1<='0';if cnt=5 thenstate<="10";nclr:='0';en:='0';elsestate<="01";nclr:='1';en:='1';end if;when "10"=>r0<='0';y0<='0';g0<='1';r1<='1';y1<='0';g1<='0';if(sense0 and sense1)='1' then --东西道和南北道都有车if cnt=29 thenstate<="11";nclr:='0';en:='0';elsestate<="10";nclr:='1';en:='1';end if;elsif sense0 ='0' then --东西道有车,南北道无车state<="11";nclr:='0';en:='0';elsestate<="10";nclr:='1';en:='1';end if;when "11"=>r0<='1';y0<='1';g0<='0';r1<='1';y1<='0';g1<='0';if cnt=5 thenstate<="00";nclr:='0';en:='0';elsestate<="11";nclr:='1';en:='1';end if;end case;end if;end process;counter<=cnt;end art;。

基于VHDL的交通灯控制器的设计和实现

基于VHDL的交通灯控制器的设计和实现

基于VHDL语言的交通灯控制器设计与实现1引言在交通发达的当代,交通灯控制器无疑是最实用的的工具。

为了使交通行驶有一个很高的效率,人工指挥交通已经显得效率不高,所以一个高智能的交通灯控制器是十分的必要的。

交通灯的控制方式,是根据时间来改变状态,产生不同的控制信号以控制红、绿、黄三盏灯的开关,达到控制交通的目的。

目前VHDL语言已成为EDA领域首选的硬件设计语言,越来越多的数字系统设计使用VHDL语言来完成。

原因是通过VHDL描述的硬件系统“软核”便于存档,程序模块的移植和ASC设计源程序的交付更为方便。

因此,他在IP核的应用等方面担任着不可或缺的角色。

在某扩频通信系统中,我们使用VHDL语言设计了交通灯控制器,并经过了在FPGA芯片上的验证实验。

2课题背景及相关技术2.1 Max+plusII简介Max+plusII(或写成Maxplus2或MP2) 是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:Quartus,主要用于设计6万-100万门的大规模CPLD/FPGA)。

使用MaX+PLUSII的设计者不需精通器件内部的复杂结构。

设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MaX+PLUSII把这些设计转自动换成最终所需的格式。

其设计速度非常快。

对于一般几千门的电路设计,使用MaX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。

设计处理一般在数分钟内内完成。

特别是在原理图输入等方面,Maxplus2被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。

通常可将Maxplus2设计流程归纳为以下7个步骤:(1)使用文本编辑器输入设计源文件。

在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。

自90年代初,Verilog、VHDL、AHDL等硬件描述语言的输入方法在大规模设计中得到了广泛应用。

EDA基于VHDL语言的交通灯设计报告

EDA基于VHDL语言的交通灯设计报告

基于VHDL的交通灯设计摘要随着社会上特别是城市中机动车辆保有量的不断增加,在现代城市的日常运行控制中,车辆的交通控制越来越重要,在十字交叉路口,越来越多的使用红绿灯进行交通指挥和管理。

本文以VHDL硬件描述语言为设计手段,完成了交通信号灯控制电路的设计,其中交通信号灯控制电路的开发目的是设计一个适用于主、支干道十字交叉路口的红黄绿交通灯的控制系统,通过合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。

所设计的交通信号灯控制电路经过在QuartusⅡ 6.0软件下进行模拟仿真,观察其波形,证明所设计的交通信号灯控制电路完全可以实现预定的功能,并有一定的实用性。

关键词:FPGA; VHDL; QuartusⅡ; 交通灯一、设计思路本设计主要是利用状态机控制,交通灯的工作分成5个状态,如下:St0:支干道亮红灯,主干道亮绿灯,数码管不显示。

St1:主干道亮绿灯45秒,数码管显示45秒倒计时;支干道亮红灯,数码管显示从49秒倒计时到05秒。

St2::主干道亮黄灯5秒,数码管显示5秒倒计时;支干道亮红灯,数码管显示从04秒倒计时到00秒。

St3:支干道亮绿灯25秒,数码管显示25秒倒计时;主干道亮红灯,数码管显示从29秒倒计时到05秒。

St4:支干道亮黄灯5秒,数码管显示5秒倒计时;主干道亮红灯,数码管显示从04秒倒计时到00秒。

把交通灯的工作分成五个状态,则写程序的时候思路就比较清晰,只要在相应的状态里完成相应的工作,控制好黄绿红灯和数码管的倒计时显示,而且把握好五个状态转换的条件即可。

实现起来也方便。

二、设计分析根据设计思路可以把整体设计分为三个模块:1、分频模块:把实验板上的50MHz的频率分成1Hz信号(用于倒计时计数的时钟信号)、1kHz信号(用于数码管扫描显示的片选时钟信号)和2hz(用于黄灯的闪烁);2、交通灯控制以及倒计时(五个状态的控制)模块;3、数码管译码扫描显示模块。

基于VHDL语言的交通信号灯设计

基于VHDL语言的交通信号灯设计

基于VHDL语言的交通信号灯设计交通信号灯的设计是交通管理中非常重要的一环,通过合理的交通信号灯设计,可以提高道路交通的效率,并保证交通的安全性。

在本文中,将基于VHDL语言设计一个简单的交通信号灯系统,对信号灯进行控制。

首先,我们需要了解交通信号灯的基本原理。

一般情况下,交通信号灯通常分为红灯、黄灯和绿灯三个状态。

每个状态的时间长度可以根据实际情况进行调整。

在设计中,我们将考虑两个十字路口,每个十字路口设置一个交通信号灯。

接下来,我们将使用VHDL语言进行交通信号灯的设计。

首先定义一个信号类型,表示交通灯的三种状态:```vhdltype traffic_light_state is (red, yellow, green);```然后,定义信号灯实体,包括输入信号和输出信号:```vhdlentity traffic_light isportclk: in std_logic;reset: in std_logic;north_south_light: out traffic_light_state;east_west_light: out traffic_light_stateend traffic_light;```在实体中,我们使用了时钟clk和复位信号reset,以确保交通灯的状态按照预期进行转换。

north_south_light和east_west_light是输出信号,表示两个十字路口的交通信号灯状态。

接下来,我们定义信号灯行为。

在时钟上升沿或复位信号为高时,交通灯的状态会发生变化。

我们可以使用一个计数器和状态机来实现交通灯的控制。

当计数器达到一定值时,状态机将更新信号灯的状态。

```vhdlarchitecture behav of traffic_light issignal state: traffic_light_state := red;beginprocess(clk, reset)beginif reset = '1' thencounter <= 0;state <= red;elsif rising_edge(clk) thencounter <= counter + 1;case state iswhen red =>state <= green;counter <= 0;end if;when green =>state <= yellow;counter <= 0;end if;when yellow =>state <= red;counter <= 0;end if;end case;end if;end process;north_south_light <= state; east_west_light <= state; end behav;```最后,我们需要在顶层模块中实例化交通信号灯实体,并提供时钟和复位信号。

十字路口交通灯设计,VHDL

十字路口交通灯设计,VHDL
实验要求
教师简单讲解,学生调试程序,教师辅导
实验原理
设计一个十字路口交通管理器.该管理器控制甲,乙两道的红,黄,绿三色的灯,指挥车辆和行人安全通行。交通灯管理器如图所示.图中R1, G1, Y1是甲道红,黄,绿等;R2, G2, Y2是乙道红,黄,绿灯.
图5-1交通灯示意图
该交通管理器有控制器和三个受其控制的定时器和六个交通等组成,图中三个定时器分别确定甲道通行,乙道通行时t3,t1以及公共的停车(黄灯亮)时间t2.这三个定时器采用以秒信号为时钟信号的计数器来实现.C1, C2, C3分别是这些定时器计数器的工作使能端,即当C1, C2,或C3为1时候,相应的定时器计数.W1,W2,W3为定时器的只是信号,计数器在计数过程中,相应的指示信号为1,计数结束时为0.
enable:in std_logic;
c:out std_logic);
end count05;
architecture a of count05 is
begin
process(clk)
variable cnt:integer range 5 downto 0;
begin
if(clk'event and clk='1')then
begin
if(clk'event and clk='1')then
if enable='1'and cnt<26 then
cnt:=cnt+1;
else
cnt:=0;
end if;
end if;
if cnt=26 then
c<='1';
else
c<='0';

交通灯VHDL仿真全代码

交通灯VHDL仿真全代码

1、完整的四个模块:实例化、分频、扫描、状态控制;2、最后附有引脚排列----实例化模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity traffic_light_control isport(clk,emergencykey:in std_logic;red,green,yellow:out std_logic_vector(3 downto 0);led_seg:out std_logic_vector(7 downto 0);led_sel:out std_logic_vector(2 downto 0));end traffic_light_control;architecture behav of traffic_light_control issignal scan_clk,count_clk, temp_key, temp_show: std_logic;signal temp_sel: std_logic;signal temp_h,temp_l: std_logic_vector(3 downto 0);component clk_demultiplier isgeneric(div_fre_1kHz:integer:=24999;div_fre_1Hz:integer:=499);port(clk:in std_logic;clk_1kHz,clk_1Hz:out std_logic);end component;component scandisplay isport(clk:in std_logic;led_sel:out std_logic_vector(2 downto 0);time_h,time_l:in std_logic_vector(3 downto 0);led_segcode:out std_logic_vector(7 downto 0));end component;component StageControl isport(clk:in std_logic;emergencykey:in std_logic;time_h,time_l:out std_logic_vector(3 downto 0);redlight,greenlight,yellowlight:out std_logic_vector(3 downto 0));end component;beginu0:clk_demultiplier port map(clk=>clk, clk_1kHz=>scan_clk,clk_1Hz=>count_clk);u1:scandisplay port map(clk=>scan_clk,time_h=>temp_h,time_l=>temp_l, led_segcode=>led_seg,led_sel=>led_sel);u2:StageControl port map(clk=>count_clk, emergencykey=>emergencykey, redlight=>red,greenlight=>green,yellowlight=>yellow,time_h=>temp_h, time_l=>temp_l);end behav;-- 分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity clk_demultiplier isgeneric(div_fre_1kHz:integer:=24999;--=2;div_fre_1Hz:integer:=999 --=4);port(clk:in std_logic;clk_1kHz,clk_1Hz:buffer std_logic);end entity;architecture behav of clk_demultiplier issignal fre_1kHz:integer range 0 to div_fre_1kHz;signal fre_1Hz:integer range 0 to div_fre_1Hz;beginprocess(clk) --将clk_1kHz =clk/50000 beginif rising_edge(clk) thenif(fre_1kHz>=div_fre_1kHz) then fre_1kHz<=0;clk_1kHz<=not clk_1kHz;elsefre_1kHz<=fre_1kHz+1;end if;end if;end process;process(clk_1kHz)--将clk_1Hz =clk_1kHz/1000 beginif rising_edge(clk_1kHz) thenif(fre_1Hz>=div_fre_1Hz) then fre_1Hz<=0;clk_1Hz<=not clk_1Hz;elsefre_1Hz<=fre_1Hz+1;end if;end if;end process;end behav;--扫描显示模块scandisplaylibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity scandisplay isport(clk:in std_logic;led_sel:out std_logic_vector(2 downto 0); time_h,time_l:in std_logic_vector(3 downto 0); led_segcode:out std_logic_vector(7 downto 0));end scandisplay;architecture behav of scandisplay issignal num_in: std_logic_vector(3 downto 0);signal counter:integer range 0 to 1;-- signal led_chioce:std_logic;-- signal led_sel2:std_logic_vector(2 downto 0);--signal led_sel:std_logic;Beginprocess(clk) --数码管扫描beginif(clk'event and clk='1')thencounter<=counter+1;end if;if counter=1 thennum_in<=time_h;led_sel<="001";elsenum_in<=time_l;led_sel<="000";end if;end process;process(num_in) --显示译码(共阴?共阳)begincase num_in iswhen "0000"=>led_segcode<="00111111";when "0001"=>led_segcode<="00000110";when "0010"=>led_segcode<="01011011";when "0011"=>led_segcode<="01001111";when "0100"=>led_segcode<="01100110";when "0101"=>led_segcode<="01101101";when "0110"=>led_segcode<="01111101";when "0111"=>led_segcode<="00000111";when "1000"=>led_segcode<="01111111";when "1001"=>led_segcode<="01101111";when others=>led_segcode<="00000000";end case;end process;end behav;--StageControl控制模块library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity StageControl isport(clk:in std_logic; --时钟emergencykey:in std_logic; --紧急开关time_h,time_l:out std_logic_vector(3 downto 0); --定时redlight,greenlight,yellowlight:out std_logic_vector(3 downto 0) --红黄绿灯);end StageControl;architecture behav of StageControl istype color is(greenred,yellowred,redgreen,redyellow); --四种状态signal stagechange:std_logic:='0';signal tempr,tempg,tempy:std_logic_vector(3 downto 0);signal temp_h,temp_l:std_logic_vector(3 downto 0);signal temp_color:color:=greenred;beginprocess(clk,emergencykey)variable temp_r,temp_g,temp_y:std_logic_vector(3 downto 0); --三组灯的中间变量variable temph,templ:std_logic_vector(3 downto 0); --定时的中间变量variable tempcolor:color:=greenred; --initial stage --当前状态的中间变量beginif(clk'event and clk='1')thencase emergencykey iswhen '1'=> --the normal stagecase temp_color iswhen greenred=> --initial stagetempr<="1100";tempg<="0011";tempy<="1111";case stagechange iswhen '0' =>temp_h<="0010";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=yellowred;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when yellowred=> --- Second stagetempr<="1100";tempg<="1111"; --quanmietempy<="0011";case stagechange iswhen '0' =>temp_h<="0000";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=redgreen;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when redgreen=> --Third stagetempr<="0011";tempg<="1100";tempy<="1111";case stagechange iswhen '0' =>temp_h<="0011";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=redyellow;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when redyellow=> --Forth stagetempr<="0011";tempg<="1111";tempy<="1100";case stagechange iswhen '0' =>temp_h<="0000";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=greenred;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;end case;when others=> --emergency statetempr<="0000";tempg<="1111";tempy<="1111";--- time_h<=temp_h;-- time_l<=temp_l;--temp_color<=tempcolor;end case;redlight<=tempr;greenlight<=tempg;yellowlight<=tempy;time_h<=temp_h;time_l<=temp_l;end if;end process;end behav;引脚排列图:。

交通信号灯的VHDL设计

交通信号灯的VHDL设计

EDA课程设计报告(交通信号控制器)院系班级姓名学号指导老师一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED 作为交通信号灯,设计一个交通信号灯控制器。

要求:(1) 交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2) 交通灯红变绿是直接进行的,没有间隔时间;(3) 主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4) 在任意时间,显示每个状态到该状态结束所需的时间。

主干道图1路口交通管理示意图二、设计方案的选择图2 交通信号灯控制器的原理框图图3 交通信号灯控制器程序原理框图三、程序清单和仿真波形图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport( clk: in std_logic;A1,B1,C1,D1,A2,B2,C2,D2: out std_logic;R1,Y1,G1,R2,Y2,G2:out std_logic) ;end ;architecture arch of traffic istype states is(s3,s2,s1,s0);signal state: states:=s0;signal next_state: states:=s0;signal count:std_logic_vector(2 downto 0);signal count0:std_logic_vector(3 downto 0);signal count1:std_logic_vector(3 downto 0);signal data0:std_logic_vector(3 downto 0);signal data1:std_logic_vector(3 downto 0);signal light:std_logic_vector(5 downto 0);signal en,load,carry:std_logic;beginp1:process(clk)beginif rising_edge(clk) thencount<=count+'1';end if;end process p1;p2:process(clk)beginif rising_edge(clk) thenif count="111" thencarry<='1';elsecarry<='0';end if;end if;end process p2;p3: process (carry,load)beginif rising_edge(carry) thenif load='1' thencount0<=data0;elsif count0="0000" thencount0<="1001";elsecount0<=count0-'1';end if;end if;end process p3;p4:process(carry)beginif carry='0' thenif count0="0000" thenen<='1';elseen<='0';end if;end if;end process p4;p5:process(carry,load,en)beginif(rising_edge (carry) and en='1') then if load ='1' thencount1<=data1;elsif count1="0000" thencount1<="1001";elsecount1<=count1-'1';end if;end if;end process p5;p6:process(carry)beginif(falling_edge(carry)) thenif(count0="0000" and count1="0000" ) thenload<='1';state<=next_state;elseload<='0';end if;end if;end process p6;p7: process(state)begincase state iswhen s0=> light<="001100";next_state<=s1;data0<="1001";data1<="0011";when s1=> light <="010100";next_state<=s2;data0<="0011";data1<="0000";when s2=> light <="100001";next_state<=s3;data0<="1001";data1<="0001";when s3=> light <="100010";next_state<=s0;data0<="0011";data1<="0000";end case;end process p7;A1<=count0(0);B1<=count0(1);C1<=count0(2);D1<=count0(3); A2<=count1(0);B2<=count1(1);C2<=count1(2);D2<=count1(3); R1<=light(5);Y1<=light(4);G1<=light(3);R2<=light(2);Y2<=light(1);G2<=light(0);end arch;四、调试过程1、采用VHDL语言编写交通灯的源程序,并在QUARTUSII上进行源程序的仿真,直至没有错误。

基于VHDL语言的交通灯设计(DEA)

基于VHDL语言的交通灯设计(DEA)

交通信号控制器的VHDL的设计1.设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED 作为交通信号灯,设计一个交通信号灯控制器,示意图如图1-1所示。

要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。

支干道主干道图1-1 路口交通管理示意图表1-1 交通信号灯的4种状态A B C D主干道交通灯绿(40秒)黄(4秒)红(20秒)红(4秒)支干道交通灯红红绿黄2.设计要求采用VHDL语言编写程序,并在QuartusII工具平台中进行开发,下载到EDA 实验箱进行验证。

编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。

3.设计方案CLK时间显示数据输出信号灯输出图3-1 交通信号灯控制器程序原理框图进程将CLK 信号分频后产生1秒信号,然后构成两个带有预置数功能的十进制计数器,并产生允许十位计数器计数的控制信号。

状态寄存器实现状态转换和产生状态转换的控制信号,下个模块产生次态信号和信号灯输出信号,以及每一个状态的时间值。

经过五个模块的处理,使时间计数、红绿灯显示能够正常运行。

程序原理图如图3-1所示。

4.各模块具体设计4.1顶层文件的设计顶层文件的原理图可以依据系统的框图进行,由控制模块JTD_CTRL 、计时模块JTD_TIME 、译码驱动模块JTD_LIGHT 、显示模块JTD_DIS 和分频模块JTD_FQU 五部分组成,其顶层原理图文件如图3-1所示。

秒脉冲信号发生器 计数器 状态寄存器 次态发生器信号灯输出信号图4-1交通灯顶层文件原理图顶层模块的程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRAFFIC ISPORT(CLK1K,CLR:IN STD_LOGIC;M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END TRAFFIC;ARCHITECTURE BEHAVE OF TRAFFIC ISCOMPONENT JTD_FQU IS --分频器元件的例化PORT(CLK1K:IN STD_LOGIC;CLK:OUT STD_LOGIC);END COMPONENT;COMPONENT JTD_DIS IS --数码显示的元件例化PORT(CLK1K,CLK,CLR:IN STD_LOGIC;M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT JTD_LIGHT IS --译码驱动的元件例化PORT(CLR:IN STD_LOGIC;M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0);ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT JTD_TIME IS --计时元件的例化PORT(CLK,CLR:IN STD_LOGIC;M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0);AT,BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT JTD_CTRL IS --控制模块的元件例化PORT(CLK,CLR:IN STD_LOGIC;AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0);M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);S:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;SIGNAL CLK:STD_LOGIC;SIGNAL AT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL BT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINU1:JTD_FQU PORT MAP( --名字关联方式赋值 CLK1K=>CLK1K,CLK=>CLK);U2:JTD_TIME PORT MAP(CLR=>CLR,AT=>AT,BT=>BT,CLK=>CLK,M=>M,S=>S);U3:JTD_CTRL PORT MAP(M=>M,S=>S,CLK=>CLK,CLR=>CLR,AT=>AT,BT=>BT);U4:JTD_DIS PORT MAP(CLK1K=>CLK1K,CLK=>CLK,CLR=>CLR,AT=>AT,BT=>BT,LED=>LED,SEL=>SEL,M=>M);U5:JTD_LIGHT PORT MAP(CLR=>CLR,S=>S,ABL=>ABL,M=>M);END BEHAVE;4.2 控制模块JTD_CTRL的设计控制的模块根据外部输入信号M2~M0和计时模块JTD_TIME的输入信号,产生系统的状态机,控制其他部分协调工作。

智能交通灯--VHDL

智能交通灯--VHDL

设计报告课程名称在系统编程技术任课教师设计题目交通信号灯班级姓名学号日期一、项目分析及设计要求(一)项目分析本项目设计一个智能交通灯控制系统,使其能模仿城市“十字”路口交通灯的功能,并能满足特殊的控制要求(如按键m的使用),该系统的具体功能如下:(1)该控制系统能控制东、西、南、北四个路口的红、黄、绿信号灯正常工作。

(2)当东西方向准行,南北方向禁行时,东西方向亮绿灯,南北方向亮红灯。

(3)当南北方向准行,东西方向禁行时,南北方向亮绿灯,东西方向亮红灯。

(4)绿灯亮完后,加亮一盏黄灯,以警告车辆及行人,准行方向即将改变(即准行变为禁行)。

(5)四个道口各用一组由十位和个位组成的数码管显示准行(或禁行)的剩余时间。

(6)在交通情况比较特殊的情况下,可以通过按键对交通灯进行紧急控制。

(二)设计要求本系统有两种工作状态:正常工作状态、紧急工作状态,可利用按键进行改变工作状态。

1.正常工作时:(1)十字路口的4个路口信号灯(红、黄、绿)显示各路口的各条通道的状态;(2)每个路口都有两位数码管显示当前信号灯的倒计时。

表1 信号灯状态转换表2.紧急情况:(1)四个路口的红灯全亮,禁止车辆通行;(2)四个路口的数码管显示全0,停止倒计时;(3)扬声器报警,警告车辆及行人。

图1 系统总体方框图二、系统设计及方案论证基于项目分析及设计要求,本系统采用“自顶向下”的设计思想,将整个交通灯控制系统分为四个子模块,即分频模块、倒计时控制模块、信号灯控制模块、报警模块。

本项目使用Quartus II软件进行设计,四个子模块(底层模块)分别采用VHDL语言设计,并进行元件打包,以供顶层文件使用。

设计好四个子模块后即可进行顶层文件的搭建,即交通灯控制系统,顶层文件采用图形设计方法,利用打包好的底层元件进行原理图绘制以实现项目功能。

图2 系统设计方框图根据GW48 EDA/SOPC系统使用说明,输入时钟信号采用CLOCK5的1024Hz,紧急情况按键输入使用高低电平发生器。

基于VHDL语言的交通灯

基于VHDL语言的交通灯

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY traffic ISPORT (CLK,R,SP,fault: IN STD_LOGIC;eLIGHT : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);--东:绿,黄,红sLIGHT : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);--南:绿,黄,红wLIGHT : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);--西:绿,黄,红nLIGHT : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);--北:绿,黄,红SEL : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);Q1,Q2 : OUT INTEGER RANGE 0 TO 24;---------倒计时SMG :OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END traffic ;ARCHITECTURE RT1 OF traffic ISTYPE STATES IS (S0,S1,S2,S3);SIGNAL STATE : STATES ;SIGNAL CLK1HZ:STD_LOGIC;SIGNAL T:INTEGER RANGE 0 TO 10;SIGNAL T1,T2: INTEGER RANGE 0 TO 24;SIGNAL L1,L2,L3,L4 : INTEGER RANGE 0 TO 10;BEGINP1:PROCESS(CLK) ------产生1Hz时钟的分频计数器V ARIABLE cnt : INTEGER RANGE 0 TO 512;BEGINIF CLK='1' AND CLK'EVENT THENIF cnt=511 THEN cnt:=0;ELSEIF cnt<256 THEN CLK1HZ<='1';ELSE CLK1HZ<='0';END IF;cnt:=cnt+1;END IF;END IF;END PROCESS;----------------------------------------------------P2: PROCESS (CLK1HZ,fault,T1,T2,SP,R,eLIGHT(1),sLIGHT(1),wLIGHT(1),nLIGHT(1)) BEGINIF R='1' THEN STA TE<=S0;T1<=16;T2<=19;--初始状态ELSIF SP='1' THEN -------------------紧急状态eLIGHT<="001";sLIGHT<="001";wLIGHT<="001";nLIGHT<="001";STATE<=S0;T1<=16;T2<=19;ELSIF fault='1' THEN-----------------系统出现故障eLIGHT<="010";sLIGHT<="010";wLIGHT<="010";nLIGHT<="010";eLIGHT(1)<=CLK1HZ;sLIGHT(1)<=CLK1HZ;wLIGHT(1)<=CLK1HZ;nLIGHT(1)<=CLK1HZ;STATE<=S0;T1<=16;T2<=19;ELSIF (CLK1HZ'EVENT AND CLK1HZ='1') THEN------正常运行CASE STATE IS--------------------------------------------------------------WHEN S0=> eLIGHT<="001";wLIGHT<="001";--禁东西干道sLIGHT<="100";nLIGHT<="100";--通南北干道T1<=T1-1;T2<=T2-1;Q1<=T1;Q2<=T2;IF T1=0 THENSTATE<=S1;T1<=2;T2<=2;END IF;WHEN S1=> eLIGHT<="001";wLIGHT<="001";sLIGHT<="010";nLIGHT<="010";--南北黄灯T1<=T1-1;T2<=T2-1;Q1<=T1;Q2<=T2;IF T1=0 THENSTATE<=S2;T1<=24;T2<=19;END IF;---------------------------------------------------------------WHEN S2=> eLIGHT<="100";wLIGHT<="100";--通东西干道sLIGHT<="001";nLIGHT<="001";--禁南北干道T1<=T1-1;T2<=T2-1;Q1<=T1;Q2<=T2;IF T2=0 THENSTATE<=S3;T1<=4;T2<=4;END IF;WHEN S3=> eLIGHT<="010";wLIGHT<="010";--东西黄灯sLIGHT<="001";nLIGHT<="001";T1<=T1-1;T2<=T2-1;Q1<=T1;Q2<=T2;IF T1=0 THENSTATE<=S0;T1<=17;T2<=19;END IF;WHEN OTHERS=>STA TE<=S0;T1<=16;T2<=19;END CASE;END IF;L1<=T1/10;L2<=T1 REM 10;--求A干道,十位,个位L3<=T2/10;L4<=T2 REM 10;--求B干道,十位,个位END PROCESS;---------------------------------------------------------------------- P3:PROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENSEL<=SEL+1;END IF;END PROCESS;--------------------------------------------------------P4:PROCESS(SEL,T,STATE,L1,L2,L3,L4)BEGINif (STATE=S0 OR STA TE=S1) THENCASE SEL ISWHEN "000" => T<=L2;WHEN "001" => T<=L1;WHEN OTHERS =>T<=10;END CASE;END IF;IF (STATE=S2 OR STA TE=S3) THENCASE SEL ISWHEN "010" => T<=L4;WHEN "011" => T<=L3;WHEN OTHERS =>T<=10;END CASE;END IF;END PROCESS;--------------------------------------------------------P5:PROCESS(T)BEGINCASE T ISWHEN 0=>SMG<="01111110";WHEN 1=>SMG<="00110000";WHEN 2=>SMG<="01101101";WHEN 3=>SMG<="01111001";WHEN 4=>SMG<="00110011";WHEN 5=>SMG<="01011011";WHEN 6=>SMG<="00011111";WHEN 7=>SMG<="01110000";WHEN 8=>SMG<="01111111";WHEN 9=>SMG<="01110011";WHEN OTHERS=> SMG<="00000000";END CASE;END PROCESS;END RT1;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录序言 (3)第1章任务和要求 (4)1.1 设计任务 (4)1.2设计要求 (4)第2章功能分析 (6)2.1交通灯控制系统总体框架图 (6)2.2模块功能分析 (6)第3章设计过程 (7)3.1 分频模块的设计及仿真图 (7)3.2 显示模块的设计及仿真图 (7)3.3 数码管显示模块设计及仿真图 (8)3.4 译码驱动模块的设计及仿真图 (8)3.5顶层文件设计及仿真图 (9)3.6交通灯顶层原理图 (9)第4章外部电路结构图及引脚分配 (11)4.1电路主要结构 (11)4.2下载引脚分配 (12)第五章分析与小结5.1测试及结果分析 (13)5.2实验小结 (13)参考文献 (14)附录 (15)具有五种信号灯和倒计时显示的交通灯控制器序言随着社会经济的发展,城市交通问题越来越引起人们的关注。

人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。

城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。

、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。

然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。

而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。

所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。

交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

随着中国加入WTO,我们不但要在经济、文化、科技等各方面与国际接轨,在交通控制方面也应与国际接轨。

俗话说“要想富,先修路”,但路修好了如果在交通控制方面做不好道路还是无法保障畅通安全。

作为交通控制的重要组成部份的交通信号灯也应适合社会实际情况。

因此,本人选择制作十字路口交通灯。

运用VHDL语言编写一个交通灯控制器模块,该模块由四部分组成,分别是分频模块clk_10,灯模块js,数码显示模块sm和译码驱动模块dec47。

交通灯控制器用于自动控制十字路口交通灯和计时器,指挥各种车辆和行人安全通行。

摘要:本设计中选用目前应用较广泛的VHDL硬件电路描述语言,实现对路口交通灯系统的控制器的硬件电路描述,在Altera公司的EDA软件平台MAX+PLUSⅡ环境下通过了编译、仿真,并下载到CPLD器件上进行编程制作,实现了交通灯系统的控制过程。

关键词:EDA;VHDL;控制器;CPLDAbstract: And select and use Description Language applying broader VHDL hardware circuit at present in capital being designed, the hardware circuit coming true to systematic controller of crossing traffic light describes that, have passed compiling , have simulated under EDA of Altera company software platform MAX + PLUS II environment, download the control procedure having made , realizing traffic light systematically to the programming being in progress on CPLD component. Keywords: EDA; VHDL; Controller; CPLD第1章任务和要求1.1 设计任务设计一个十字路口交通控制器,方向和方向分别设置左拐(L),绿(G),黄(Y),和红(R),人行道(p)五盏灯,以及倒计时显示器,用以指挥车辆和行人有序的通行。

左拐灯(L)亮表示左转车辆可以通行;绿灯(G)亮表示直行车辆可以通行;黄灯(Y)亮表示左转或直行车辆即将禁行;红(R)灯亮表示左转和直行车辆禁行,人行道的绿灯亮表示人可以通行,红灯表示人行道不可以通行;倒计时显示器用来显示允许通行或禁止通行的时间。

1.2设计要求1.在十字路口A和B两个方向各设一组左拐,绿灯,黄灯,红灯,人行道红绿灯。

显示顺序:绿灯——黄灯——红灯(左拐灯以及人行道绿灯)。

2.在A和B两个方向各设一组倒计时显示器。

A、B方向绿灯,黄灯,红灯和左拐灯显示时间分别是39s,6s,45s,和15s。

3.交通灯的显示状况:39s 6s 左拐15s 人绿30sA 绿灯黄灯红灯45s左拐15s人绿30s 39s 6sB 红灯绿灯黄灯45s除人行道绿灯亮之外,人行道红灯亮。

4.设有一个特殊情况按钮con,当为高电平的时候可以让人行道的交通灯的红灯都亮,为低电平的时候可以恢复正常。

5.设有停止按钮rst,当为高电平的时候可以让所有的灯以及数码管都停止,当为低电平的时候恢复正常。

第2章 功能分析2.1控制系统总体框架图con A 、B 道灯输出(12个灯)clk 数码管Rst图2—1交通灯控制系统总体框架图2.2各模块功能分析根据设计要求和系统所具有的功能,交通灯控制分为四个部分:分频电路:用555电路也可以产生1HZ 的脉冲,但是由于频率太低不稳定,所有用555产生10HZ 的脉冲,而我们需要的是1HZ 的脉冲,所有我们在软件内部加了一个10分频的电路。

灯显示电路:按照交通灯的亮灯时间和亮灯顺序,在进行计数的同时控制灯的亮和分频电路灯控制电路数码显示电路译码驱动电路译码驱动电路译码驱动电路 译码驱动电路灭。

数码显示电路:这是数码管显示控制电路,利用计数控制数码管的显示,数码管是以BCD的来显示的,而且显示是以减计数的形式来显示的。

译码显示电路:这是个译码电路,与外部的数码管相连接。

第3章设计过程3.1分频模块clk_10的设计控制模块的输入是由555产生的10HZ脉冲,输出是经过分频之后的1HZ 脉冲,分频模块的仿真如下:图3-1 交通灯分频模块波形仿真图3.2 灯显示模块js的设计控制12个灯的亮和灭。

灯显示模块的仿真如下:图3-2交通灯计时模块波形仿真图3.3数码显示模块sm的设计控制数码管的显示。

该模块的仿真如下:图3-3交通灯译码驱动模块波形仿真图3.4 译码驱动模块dec47的设计显示模块用来显示倒计时时间和系统的工作状态。

其输出用来驱动六位数码管,其中四位用于显示倒计时时间,两位显示工作状态,采用动态扫描显示。

该模块的仿真如下:图3-4交通灯显示模块波形仿真图3.5 顶层文件设计由分频模块clk_10,灯显示模块js,数码显示模块sm和译码驱动模块dec47四部分组成,其仿真如下:图3-6交通灯顶层文件波形仿真图3.6交通灯顶原理图图3-7交通灯顶层原理图第4章 电路结构图及引脚分配4.1电路主要结构 VCC12个灯图4-1交通灯控制器外部电路主要结构说明:电路中的电阻都为1K ,555的外部电路有两个电阻,分别是75K 和33K,电容是1uF 和10nF 。

灯和数码管都用底座插,开关也用底座,开关至1为闭合(接地),开关至0为打开(接高电平)。

三五产生一个10KHz 的脉冲信号。

数码管 数码管 数码管 数码管4.2下载引脚分配表4-2下载引脚分配第五章分析与小结5.1测试及结果分析1.灯显示测试当电路连接完毕后,将写好的测试程序下载到芯片内,连接好各灯通电检测。

检测各个工作方式下的灯亮情况。

2.数码管的测试将串口的和电路板上的接口连接,将写好的测试程下载到芯片内,用万用表监测下,再测试。

3.整体电路测试系统上电,下载好程序即可开始测试,观测一个周期灯的显示状态是否正常,同时观察倒计的计数是否正常。

5.2 实验小结首先感谢宋伟老师和翟丽芳老师为期两个星期对我们的辅导、帮助与支持。

本次课程设计软件都是我们自己编的,经过这个过程之后我觉得我学了不少的东西,硬件易出问题,尤其是开关的连接。

连线复杂,问题难以检查。

软件应根据具体硬件设计,如数码管动态扫描电路:共阴极和共阳极其程序有所区别。

此外,设计和调试的过程中,也发现了一些问题,譬如灯和数码管不同步,还有就是没有做过市场调查,设置不是很合理,下次做的时候应先做市场调查。

这需要在实践中进一步完善。

分频程序在实际应用时也须根据具体情况设计。

参考文献[1]邹彦,庄严,邹宁,王宇鸿.EDA技术与数字系统设计[M].北京:电子工业出版社,2007.[2]谭会生.VHdl硬件描述语言与数字逻辑电路设计[M].长沙:湖南大学出版社,2004.[3]雷伏生.电路设计.北京:清华大学出版社[M],2006.[4]杨晓慧.EDA技术与数字电路设计.北京:国防工业出版社[M],2004.[5]许丽娅.VHDL语言设计.泉州:北京理工大学出版社[M].2005.附录源程序清单1.分频模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_10 isport( clk : in std_logic;rst:in std_logic;clk_div10 : out std_logic);end clk_10;architecture one of clk_10 issignal clk_temp : std_logic;beginprocess(clk,rst)variable counter : std_logic_vector(2 downto 0); constant md : std_logic_vector(2 downto 0) := "101"; beginif(rst='0') thenif(clk'event and clk='1') thenif(counter = md)thencounter := (others =>'0');clk_temp <= not clk_temp;end if;counter := counter + 1 ;end if;else clk_temp<='0';end if;end process;clk_div10 <= clk_temp;end one;2.灯显示模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity js isport (clk:in std_logic;con:in std_logic;al,ag,ay,ar,ap:out std_logic;bl,bg,by,br,bp:out std_logic;apr,bpr:out std_logic); end entity js;architecture one of js issignal b:std_logic_vector(6 downto 0); signal apg,bpg:std_logic;beginprocess(clk,con)variable co,bo:std_logic:='0';beginif(con='0') thenif(clk'event and clk='1') then b<=b+1;if(b<=14) then al<='0';ag<='1';ay<='0';ar<='0';apg<='0';bl<='1';bg<='0';by<='0';br<='1';bpg<='0';elsif(b<=38 and b>14) then al<='0';ag<='1';ay<='0';ar<='0';apg<='0';bl<='0';bg<='0';by<='0';br<='1';bpg<='1';elsif(b<=44 and b>38) then co:=not co; al<='0';ag<='0';ay<=co;ar<='0';apg<='0';bl<='0';bg<='0';by<='0';br<='1';bpg<='1';elsif(b<=59 and b>44) then al<='1';ag<='0';ay<='0';ar<='1';apg<='0';bl<='0';bg<='1';by<='0';br<='0';bpg<='0';elsif(b<=83 and b>59) then al<='0';ag<='0';ay<='0';ar<='1';apg<='1';bl<='0';bg<='1';by<='0';br<='0';bpg<='0';elsif(b<=89 and b>83) then bo:=not bo;al<='0';ag<='0';ay<='0';ar<='1';apg<='1';bl<='0';bg<='0';by<=bo;br<='0';bpg<='0';elsif(b>88) then b<="0000001";al<='0';ag<='1';ay<='0';ar<='0';apg<='0';bl<='1';bg<='0';by<='0';br<='1';bpg<= '0';end if;end if;else al<='0';ag<='0';ay<='0';ar<='1';apg<='0';bl<='0';bg<='0';by<='0';br<='1';bpg<='0';end if;apr<=not apg;bpr<=not bpg;end process ;ap<=apg;bp<=bpg;end architecture;3、数码显示模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sm isport (clk:in std_logic;a1:out std_logic_vector(3 downto 0);a2:out std_logic_vector(3 downto 0);b1:out std_logic_vector(3 downto 0);b2:out std_logic_vector(3 downto 0));end entity sm;architecture one of sm issignal t1,t2,p1,p2:std_logic_vector(3 downto 0);signal j:std_logic_vector(6 downto 0):="0000000";beginprocess(clk)beginif(clk'event and clk='1') thenif (j=0) then t1<="0011";t2<="1000";p1<="0100";p2<="0100";end if;if(j>0 and j<39) thenif(t2>"0000") then t1<=t1;t2<=t2-1;elsif(t2="0000") then t1<=t1-1;t2<="1001";end if;end if;if(j>0 and j<45) thenif(p2>"0000") then p1<=p1;p2<=p2-1;elsif(p2="0000") then p1<=p1-1;p2<="1001";end if;end if;if (j=39) then t1<="1011";t2<="1011";end if;if (j=45) then t1<="0100";t2<="0100";p1<="0011";p2<="1000";end if;if(j>45 and j<85) thenif(p2>"0000") then p1<=p1;p2<=p2-1;elsif(p2="0000") then p1<=p1-1;p2<="1001";end if;end if;if(j>45 and j<91) thenif(t2>"0000") then t1<=t1;t2<=t2-1;elsif(t2="0000") then t1<=t1-1;t2<="1001";end if;end if;if (j=84) then p1<="1011";p2<="1011";end if;j<=j+1;if (j=89) then j<="0000000";end if;end if;end process;a1<=t1;a2<=t2;b1<=p1;b2<=p2;end architecture;4.译码驱动模块源程序library ieee;use ieee.std_logic_1164.all;entity dec47 isport (a:in std_logic_vector(3 downto 0);y1,y2,y3,y4,y5,y6,y7:out std_logic);end dec47;architecture one of dec47 isbeginprocess(a)begincase a iswhen "0000" => y1<='0';y2<='0';y3<='0';y4<='0';y5<='0';y6<='0';y7<='1'; when "0001" => y1<='1';y2<='1';y3<='1';y4<='1';y5<='0';y6<='0';y7<='1'; when "0010" => y1<='0';y2<='0';y3<='1';y4<='0';y5<='0';y6<='1';y7<='0'; when "0011" => y1<='0';y2<='0';y3<='0';y4<='0';y5<='1';y6<='1';y7<='0'; when "0100" => y1<='1';y2<='0';y3<='0';y4<='1';y5<='1';y6<='0';y7<='0'; when "0101" => y1<='0';y2<='1';y3<='0';y4<='0';y5<='1';y6<='0';y7<='0'; when "0110" => y1<='0';y2<='1';y3<='0';y4<='0';y5<='0';y6<='0';y7<='0'; when "0111" => y1<='0';y2<='0';y3<='0';y4<='1';y5<='1';y6<='1';y7<='1'; when "1000" => y1<='0';y2<='0';y3<='0';y4<='0';y5<='0';y6<='0';y7<='0'; when "1001" => y1<='0';y2<='0';y3<='0';y4<='1';y5<='1';y6<='0';y7<='0'; when "1011" => y1<='1';y2<='1';y3<='1';y4<='1';y5<='1';y6<='1';y7<='1'; when others => y1<='Z';y2<='Z';y3<='Z';y4<='Z';y5<='Z';y6<='Z';y7<='Z'; end case;end process;end one;。

相关文档
最新文档