VHDL编程实现交通灯控制(数电实验)解析

合集下载

基于vhdl状态机设计的智能交通控制灯

基于vhdl状态机设计的智能交通控制灯

基于vhdl状态机设计的智能交通控制灯1设计方案十字路口设计两组交通灯分别操纵东西和南北两个方向的交通。

如图1所示,当东西方向的红灯亮时,南北方向对应绿灯亮,过渡时期黄灯亮,即东西方向红灯亮的时刻等于南北方向绿灯和黄灯亮的时刻之和。

交通灯坚持变亮的时刻取决于键盘输入的操纵键值。

同理,当南北方向的红灯变亮时,东西方向的交通灯也遵循此逻辑。

总体上由状态机实现操纵,本设计中使用两个状态机分别操纵东西和南北两个方向的交通。

每个状态机中都设有4个状态,分别对应红灯亮、绿灯亮、黄灯亮和显现紧急状况时两个方向上的红灯同时变亮,停止倒计时的同时数码管上显现闪耀。

路口的繁忙程度是不一样的,白天时的交通比较繁忙,因此,红绿灯要变化快一些以便提升通过效率,减少拥堵时刻;相反,夜晚交通稀疏,就需要红绿灯变化慢一些。

因此,加入键盘操纵程序来操纵交通坚持变亮状态的连续时刻。

2 总体设计结构框图总体设计结构框图如图2所示,共有11个功能模块,包括操纵东西方向交通灯的状态机和操纵南北方向交通灯的状态机、计数器模块、键盘扫描模块、数字合成模块、三个分位模块、数码管显示模块、动态显示扫描模块。

用VHDL语言对各个模块进行编程,最后形成顶层文件,在M AX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。

如果显现错误,需要进行修改,直到完全通过为止。

需要讲明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。

这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,相当于把每个模块的功能汇聚到一起,实现整个系统的操纵功能,因此底层程序的正确与否关系到顶层程序的运行结果。

VHDL语言编程生成的结构框图如图3所示。

3 VHDL程序设计3.1 状态机1(东西方向)程序关键代码用两个状态机分别操纵东西方向和南北方向上的交通。

从键盘获得红、绿、黄灯的总时刻,红灯时刻占1/2,绿灯时刻占3/8,黄灯时刻占1/8。

基于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的交通灯控制器设计

生物医学工程王春雨基于VHDL的交通灯控制器设计应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。

下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。

1 系统功能与要求实现交通繁忙的主路和偶有车行的小路交会路口的交通管理。

要求:1、交通灯控制器控制主干道和小路交叉路口的交通。

2、小路口来车,主线路口绿灯切换到黄灯5秒钟后变为红灯。

3、红灯燃亮20秒后,自动切换为绿灯。

4、指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s。

5、主路的交通管制重新切换到绿灯后5分钟内不理睬小路上的车况,即使又有车辆驶入小路路口。

上述主路上的灯光显示,小路口的灯信号与之逻辑配合。

2 程序设计根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。

外部脉冲振荡器的频率选为32768 kHz,经分频器分频得1 Hz的信号,1 Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在M AX+plus Ⅱ平台上,编译VHDL程序,然后用原理图输入法形成总体框图。

实验程序:Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All;Entity Frequency10Hz IsPort(Clk20M: In Std_Logic;Clk10Hz:Out Std_Logic);End;Architecture Count Of Frequency10Hz Is Signal Tout:Integer Range 0 to ;Signal Clk:Std_Logic;BeginProcess(Clk20M)BeginIf rising_edge(Clk20M) thenIf Tout= thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk10Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All; Entity Frequency IsPort(Clk10Hz: In Std_Logic;Clk1Hz:Out Std_Logic);End;Architecture Count Of Frequency Is Signal Tout:Integer Range 0 to 4;Signal Clk:Std_Logic;BeginProcess(Clk10Hz)BeginIf rising_edge(Clk10Hz) thenIf Tout=4 thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk1Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Controller IsPort(Clock:In Std_Logic;Hold:In Std_Logic;CountNum:IN Integer RANgE 0 TO 49;Flash:Out Std_Logic;NumA,NumB:Out Integer Range 0 To 25;RedA,GreenA,YellowA:Out Std_Logic;RedB,GreenB,YellowB:Out Std_Logic);End;ARCHITECTURE Behavior OF Controller IS BEGINPROCESS(CLOCK)BeginIf falling_edge(Clock) thenIf Hold='1' thenRedA<='1';RedB<='1';GreenA<='0';GreenB<='0';YellowA<='0';YellowB<='0';Flash<='1';ElseFlash<='0';If CountNum<=19 thenNumA<=20-CountNum;RedA<='0';GreenA<='1';YellowA<='0';Elsif (CountNum<=24) thenNumA<=25-CountNum;RedA<='0';GreenA<='0';YellowA<='1';ElseNumA<=50-CountNum;RedA<='1';GreenA<='0';YellowA<='0';End If;If CountNum<=24 thenNumB<=25-CountNum;RedB<='1';GreenB<='0';YellowB<='0';Elsif CountNum<=44 thenNumB<=45-CountNum;RedB<='0';GreenB<='1';YellowB<='0';ElseNumB<=50-CountNum;RedB<='0';GreenB<='0';YellowB<='1';End If;End If;End If;End Process;End;LIBRARY IEEE;USE IEEE.Std_logic_1164.all;Use IEEE.Std_Logic_Unsigned.All; ENTITY Counter ISPORT(Clock:IN Std_logic;Reset:IN Std_logic;Hold:IN Std_logic;CountNum:BUFFER Integer RANGE 0 TO 49 );END;ARCHITECTURE Behavior OF Counter IS BEGINPROCESS(Reset,Clock)BEGINIF Reset='1'THENCountNum<=0;ELSIF rising_edge(Clock) THENIF Hold='1'THENCountNum<=CountNum;ELSEIF CountNum=49 THENCountNum<=0;ELSECountNum<=CountNum+1;END IF;END IF;END IF;END PROCESS;END Behavior;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Display IsPort( Clock:In Std_Logic;Flash:In Std_Logic;Qin:In Std_Logic_Vector(3 Downto 0); Display:Out Std_Logic_Vector(0 to 6)); End;Architecture Light Of Display IsSignal Timeout:Integer Range 0 To 11;BeginProcess(Clock)BeginIf rising_edge(Clock) thenIf (Flash='0') thenTimeout<=0;ElseIf (Timeout=11) thenTimeout<=0;ElseTimeout<=Timeout+1;End If;End If;If (Timeout<=6) thenCase Qin IsWhen "0000"=>Display<="";When "0001"=>Display<="";When "0010"=>Display<="";When "0011"=>Display<="";When "0100"=>Display<="";When "0101"=>Display<="";When "0110"=>Display<="";When "0111"=>Display<="";When "1000"=>Display<="";When "1001"=>Display<="";When Others=>Display<="";End Case;ElseDisplay<="";End If;End If;End Process;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All; Entity Fenwei IsPort(Numin:In Integer Range 0 To 25;NumA,NumB:Out Integer Range 0 To 9 );End;Architecture Fen Of Fenwei IsBeginProcess(Numin)BeginIf Numin>=20 thenNumA<=2;NumB<=Numin-20;Elsif Numin>=10 thenNumA<=1;NumB<=Numin-10;ElseNumA<=0;NumB<=Numin;End If;End Process;End;顶层框图:3.仿真结果。

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语言的交通灯控制器设计

基于VHDL语言的交通灯控制器设计2009年06 月18 日星期四20:38设计要求1、显示一个方向的绿、黄、红的指示状态。

2、特殊情况按键能实现特殊的功能,计数器停止计数并保持在原来的状态,显示红灯状态。

特殊后能继续计数.3、复位按键实现总体计数清零功能。

4、实现正常的倒计时功能. 用数码管作为倒计时显示, 显示时间为绿灯17s, 黄灯3s 红灯20s。

| ---------- >|--->| ------------ >|| 绿灯| 黄灯| 红灯|设计思想首先由晶振产生出发信号,由控制器处理成1HZ的时钟,利用此时钟进行计数,通过判断控制交通灯的亮灭。

通过每种灯亮的时间总数与计数值比较得到数码管应该显示的数值,利用分位分成十位和个位。

通过译码电路来实现数码管的显示。

本实验所使用的芯片为EPM7128SLS84-,6 实体逻辑单元为64 点,结构体逻辑单元为128 小型芯片。

软件本实验使用MAX+plus II 10 来进行程序的编写,编译,仿真以及下载。

在实验中发现其用,但仍有地方需要改进,不支持MOD取余运算。

(源程序)* 在MAX+plus II 中,汉字很容易出现乱码,建议大家用英文,这里为了考虑到读者的习惯写论文时都译成中文Library IEEE;Use IEEE.std_logic_1164.all;Entity redgreen isPort(clock_in:in std_logichold_state:instd_logic;reset_state:instd_logic,led_green ,led_yellow:out std_logic;led_redselect_en:buffer std_logic; select_display:out std_logic_vector(0 to 6)); end;Architecture half of redgreen isconstant loop_hz:integer:=800000; -- 一根据晶振实际频率算出来signal count_time:integer range 0 to loop_hz;signal clock_buffer:std_logic;signal clock_out:std_logic;signal count_num:integer range 0 to 40;signal display_num:integer range 0 to 20;signal display_shi:integer range 0 to 9;signal display_ge:integer range 0 to 9;constant loop_time:integer:=40; 个循环周期的时间constant red_time:integer:=20; -- 红灯的时间constant green_time:integer:=17; -- 绿灯的时间constant yellow_time:integer:=3; -- 黄灯的时间beginprocess(clock_in) -- 分频进程beginif rising_edge(clock_in) thenif count_time=loop_hz then count_time<=0; clock_buffer<=notclock_buffer;else count_time<=count_time+1;end if;end if; clock_out<=clock_buffer;-- 输入1HZ 的频率end process;process(reset_state ,clock_out) -- 计数进程beginif reset_state=1 then -- 重启后计数归零count_num<=0;elsif rising_edge(clock_out) thenif hold_state=1 then -- 紧急时计数占停count_num<=count_num;elseif count_num=loop_time-1 then count_num<=0;else count_num<=count_num+1;end if;end if;end if;end process;process(clock_out) -- 交通灯显示count countbeginnumnumif falling_edge(clock_in) thenif hold_state=1 then --led_red<=1;led_green<=0;led_yellow<=0;elseifelsifelseendif;占停时红灯亮display_num<=green_time-count_num;led_red<=0;led_green<=1;led_yellow<=0;display_num<=green_time+yellow_time-led_red<=0;led_green<=0;led_yellow<=1;display_num<=loop_time-count_num;led_red<=1;led_green<=0;led_yellow<=0;endif; end if;end process;process(display_num) -- 分位进程beginif display_num>=20 then display_shi<=2;display_ge<=display_num-20;elsif display_num>=10 thendisplay_shi<=1;display_ge<=display_num-10;elsedisplay_shi<=0;display_ge<=display_num;end if;end process;process(clock_in) -- 数码管显示beginif falling_edge(clock_in) thenselect_en<=1; -- 因为我们的实验箱采用数码管并联方式,所以显示case display_shi iswhen 0=>select_display<=1111110; when1=>select_display<=0110000; when 2=>select_display<=1101101; whenothers=>select_display<=0000000; end case;if select_en=1 then select_en<=0; case display_ge is when0=>select_display<=1111110; when 1=>select_display<=0110000; when2=>select_display<=1101101; when 3=>select_display<=1111001; when4=>select_display<=0110011; when 5=>select_display<=1011011; when6=>select_display<=1011111; when 7=>select_display<=1110000; when8=>select_display<=1111111; when 9=>select_display<=1110011; whenothers=>select_display<=0000000; end case;end if;end if;end process;end;-- 由于时间和硬件限制,这个程序仅仅实现了一路交通灯,用类似的方法可以写出两路交通灯的程library ieee;use ieee.std_logic_1164.all;entity redgreen isPort( clock_in:in std_logic; hold_state:in std_logic;reset_state:in std_logic;led_red,led_green,led_yellow:out std_logic; select_en:buffer std_logic; select_display:out std_logic_vector(0 to 6));end;architecture half of redgreen isbeginsignal count_time:integer range 0 to 800000;signal clock_buffer:std_logic;signal clock_out:std_logic;signal count_num:integer range 0 to 40;signal display_num:integer range 0 to 20; signal display_shi:integer range 0 to 9; signal display_ge:integer range 0 to 9; constantloop_time:integer:=50;constant red_time:integer:=25;constant green_time:integer:=20; constant yellow_time:integer:=5;begin process(clock_in)beginif rising_edge(clock_in)count_time<=0;clock_buffer<=not clock_buffer;count_time<=count_time+1;end if;end if;clock_out<=clock_buffer;end process;process(reset_state,clock_out)beginif reset_state=1then count_num<=0;elsif rising_edge(clock_out)then if hold_state=1then count_num<=count_num;else if count_num=loop_time-1then count_num<=0;else count_num<=count_num+1;end if;end if;thenif count_time=loop_hz then elseend if;end process;process(clock_out)beginif falling_edge(clock_in)then if hold_state=1thenled_red<=1;led_green<=0; led_yellow<=0;elseif count_numdisplay_num<=green_time-count_num;led_red<=0;led_green<=1;led_yellow<=0;elsif count_numdisplay_num<=green_time+yellow_time-count_num; led_red<=0;led_green<=0;led_yellow<=1;elsedisplay_num<=loop_time-count_num;led_red<=1;led_green<=0;led_yellow<=0;end if;end if;end if;end process;process(display_num)beginif display_num>=20then display_shi<=2;display_ge<=display_num-20;elsif display_num>=10then display_shi<=1;display_ge<=display_num-10;else display_shi<=0;display_ge<=display_num;end if;end process;process(clock_in)beginif falling_edge(clock_in)then select_en<=1;case display_shi iswhen 0=>select_display<=1111110;when 1=>select_display<=0110000;when 2=>select_display<=1101101;when others=>select_display<=0000000; end case;if select_en=1then select_en<=0;case display_ge iswhen 0=>select_display<=1111110;when 1=>select_display<=0110000;when 2=>select_display<=1101101;when 3=>select_display<=1111001;when 4=>select_display<=0110011;when 5=>select_display<=1011011;when 6=>select_display<=1011111;when 7=>select_display<=1110000;when 8=>select_display<=1111111;when 9=>select_display<=1110011;when others=>select_display<=0000000;end case; end if; end if;end process; end;end half;。

VHDL交通灯控制器_实验评测研究报告

VHDL交通灯控制器_实验评测研究报告

一、设计要求-------------------------------------------------------------------------------- 二、设计目地-------------------------------------------------------------------------------- 三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作地总结与展-------------------------------------------一、设计要求:① 在十字路口地两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯.② 设置一组数码管,以倒计时地方式显示允许通行或禁止通行地时间,其中绿灯、黄灯、红灯地持续时间分别是20s 、5s 和25s.③ 当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行地车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁.当特殊运行状态结束后,控制器恢复原来状态,继续正常运行.二、设计方案:计数器地计数值与交通灯亮灭地关系如图1所示.49东西方向南北方向2419图1 计数值与交通灯亮灭地关系显然,本课题地核心是一个计数范围为0~49(共50 s )地计数器和一个根据计数值做出规定反应地控制器.另外,所用实验箱配备地晶振为20MH z,因此还需要一个分频电路.最后,要驱动七段数码管,显然还需要一个译码电路.根据上面地分析,可以画出如图2所示地系统框图.图2 交通灯控制器系统框图2、计数器地设计这里需要地计数器地计数范围为0~49.计到49后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=’1’)发生时,计数器暂停计数,而系统复位信号Reset 则使计数器异步清0.3、控制器地设计控制器地作用是根据计数器地计数值控制发光二极管地亮、灭,以及输出倒计时数值给七段数译管地分位译码电路.此外,当检测倒特殊情况(Hold=’1’)发生时,无条件点亮红色地发光二级管.由于控制器要对计数值进行判断,很容易想到用IF语句来实现.本控制器可以有两种设计方法,一种是利用时钟沿地下降沿读取前级计数器地计数值,然后做出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动.这两种方法各有所长,必须根据所用器件地特性进行选择:比如有些FPGA有丰富地寄存器资源,而且可用于组合逻辑地资源则相对较少,那么使用第1种方法会比较节省资源;而有些CPLD地组合逻辑资源则相对较多,用第2种方法可能会更好.大家可尝试两种方法,比较一下哪种方法所用资源较少,然后在最后地方案中采用这个方法.4、分位译码电路地设计因为控制器输出地倒计时数值可能是1位或者2位十进制数,所以在七段数码管地译码电路前要加上分位电路(即将其分为2个1位十进制数,如25分为2和5,7分为0和7).与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路.控制器中,引入了寄存器.三、程序语言:-----------交通灯带有点阵显示---------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY jtd ISPORT(duan : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-- 数码管显示bcd码from 100 to 91hang,lie:out std_logic_vector(7 downto 0); -----点阵行输出和列输出led,light_cs : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-- 数码管和灯扫描led 6 5 2 1 || light 66 67 68 69led_no: OUT STD_LOGIC_VECTOR(1 DOWNTO 0);-- 4 3 light : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--灯72 70 71B1eep : OUT STD_LOGIC; -- 7clk,jinji : IN STD_LOGIC-- 频率输入和紧急处理端-----);END jtd;ARCHITECTURE one OF jtd ISSIGNAL clk_1k,clk_1 : STD_LOGIC;SIGNAL cnt4 : INTEGER RANGE 0 TO 3; ------------用于计数--------------SIGNAL num,num1,num2,num3,num4 : INTEGER RANGE 0 TO 9;SIGNAL L1,L2: STD_LOGIC_VECTOR(2 DOWNTO 0);---------灯显示---------------SIGNAL time1,time2: INTEGER RANGE 0 TO 25;--------------时间显示--------------signal t:std_logic_vector(2 downto 0); -----点阵信号传输signal q:std_logic_vector(1 downto 0);---------点阵输出显示信号--------BEGINled_no<="11";------------把数码管第三第四位屏蔽---------------------1KHz频率输出--------------------------process(clk)variable cnt1: integer range 0 to 250;variable cnt2: integer range 0 to 100;Beginif clk'event and clk='1' thenif cnt1=250 thencnt1:=0;if cnt2=100 thencnt2:=0;clk_1k<=not clk_1k;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;-----------------点阵扫描-----------process(clk_1k)variable count:integer range 0 to 8;beginif clk_1k'event and clk_1k='1' thenif count<=8 then ------count数用于循环扫描行用if count=8 thencount:=0;end if;case count iswhen 0 => hang<="00000001";t<="000";------扫描第一行,并把t赋予000 由于信号t地变化触发下一个进程when 1 => hang<="00000010";t<="001";------扫描第二行when 2 => hang<="00000100";t<="010";------扫描第三行when 3 => hang<="00001000";t<="011";when 4 => hang<="00010000";t<="100";when 5 => hang<="00100000";t<="101";when 6 => hang<="01000000";t<="110";when 7 => hang<="10000000";t<="111";when others =>hang<="00000000";t<="000";end case;count:=count+1;end if;end if;end process;----------------------------process(t)variable shu:integer range 0 to 7;begincase t is -----根据t地值去查表when "000" => shu:=0;when "001" => shu:=1;----变量地赋值是立即发生地when "010" => shu:=2;when "011" => shu:=3;when "100" => shu:=4;when "101" => shu:=5;when "110" => shu:=6;when "111" => shu:=7;when others =>null;end case;case q is-----再根据相应地值送到列上去when "01"=>case shu iswhen 0 => lie<="11111111";when 1 => lie<="11111111";when 2 => lie<="11111111";when 3 => lie<="10111101";when 4 => lie<="00000000";when 5 => lie<="10111101";when 6 => lie<="11111111";when 7 => lie<="11111111";END CASE;when "10"=>case shu is when 0 => lie<="11101111"; when 1 => lie<="11000111"; when 2 => lie<="10000011"; when 3 => lie<="11101111"; when 4 => lie<="11101111"; when 5 => lie<="10000011"; when 6 => lie<="11000111"; when 7 => lie<="11101111"; when others =>lie<="11111111"; END CASE;when "11"=>case shu is when 0 => lie<="00111100"; when 1 => lie<="00111100"; when 2 => lie<="11011011"; when 3 => lie<="11100111"; when 4 => lie<="11100111"; when 5 => lie<="11011011"; when 6 => lie<="00111100"; when 7 => lie<="00111100";END CASE;when others=>null;end case;end process;-------------1s分频加计数-------------------PROCESS(clk_1k)V ARIABLE count_1k : INTEGER RANGE 0 TO 499; BEGINIF clk_1k'EVENT AND clk_1k='1' THENIF cnt4=3 THENcnt4<=0;ELSEcnt4<=cnt4+1;END IF;IF count_1k=499 THENcount_1k:=0;clk_1<= NOT clk_1;ELSEcount_1k:=count_1k+1;END IF;END IF;END PROCESS;-----------------倒计时和灯显示-----------------------PROCESS(cnt4,L1,L2,time1,time2)BEGINCASE time1 IS -------------输出时间1------------WHEN 0 TO 9 => num1<=0;WHEN 10 TO 19 => num1<=1;WHEN 20 TO 25 => num1<=2;WHEN OTHERS => num1<=0;END CASE;num2<=time1 REM 10; ------------取余-----CASE time2 ISWHEN 0 TO 9 => num3<=0;WHEN 10 TO 19 => num3<=1;WHEN 20 TO 25 => num3<=2;WHEN OTHERS => num3<=0;END CASE;num4<=time2 REM 10;CASE cnt4 ISWHEN 0 =>led<="1110"; -------------动态扫描数码管(从右到左)--------num<=num1;light_cs<="1110";light<=L1;WHEN 1 =>led<="1101";num<=num2;light_cs<="1101";light<=L2;WHEN 2 =>led<="1011";num<=num3;light_cs<="1011";light<=L1;WHEN 3 =>led<="0111";num<=num4;light_cs<="0111";light<=L2;WHEN OTHERS =>led<="1111";light_cs<="1111";END CASE;END PROCESS;--------------------译码------------------------PROCESS(num)BEGINCASE num ISWHEN0=>duan<="00111111"; ------0到9-------------WHEN 1=>duan<="00000110";WHEN 2=>duan<="01011011";WHEN 3=>duan<="01001111";WHEN 4=>duan<="01100110";WHEN 5=>duan<="01101101";WHEN 6=>duan<="01111101";WHEN 7=>duan<="00000111";WHEN 8=>duan<="01111111";WHEN 9=>duan<="01101111";WHEN OTHERS=>duan<="00000000";END CASE;END PROCESS;--------------------------------------PROCESS(clk_1)V ARIABLE i,j : INTEGER RANGE 0 TO 2 :=0;V ARIABLE w: INTEGER RANGE 0 TO 1 :=0;BEGINIF clk_1'EVENT AND clk_1='1' THENIF jinji='0' then ----------------判断是否要紧急制动------------IF time1=0 THENIF i=2 THENi:=0;ELSEi:=i+1;END IF;CASE i ISWHEN 1 =>time1<=20;L1<="001";B1eep<='0';WHEN 2 =>time1<=5;L1<="010";B1eep<='1';WHEN 0 =>time1<=25;L1<="100";B1eep<='0';q<="01"; --------------点阵显示前进方向-----------WHEN OTHERS =>time1<=24;END CASE;ELSEtime1<=time1-1;END IF;IF time2=0 THENIF j=2 THENj:=0;ELSEj:=j+1;END IF;CASE j ISWHEN 1 =>time2<=25;L2<="100";B1eep<='0';q<="10"; --------------点阵显示前进方向-----------WHEN 2 =>time2<=20;L2<="001";B1eep<='0';WHEN 0 =>time2<=5;L2<="010";B1eep<='1';WHEN OTHERS =>time2<=24;END CASE;ELSEtime2<=time2-1;END IF;else ------------------出现紧急制动情况地表现-----------B1eep<='1';time1<=0;time2<=0;q<="11";IF w=1 THENw:=0;ELSEw:=w+1;END IF;CASE w IS ---------------红灯地闪烁-------------- WHEN 1 =>L1<="100";L2<="100";WHEN 0 =>L1<="000";L2<="000";end case;end if;END IF;END PROCESS;END one;四、管脚分配五、硬件下载实现现象描述硬件上地实现是(1)、东西方向地绿灯,跟黄灯亮25s时,南北方向亮着红灯,当南北方向红灯亮到25s时,将变成绿灯,而在东西方向黄灯亮5s时蜂鸣器同时响5s,(2)、而与此同时,一组数码管,以倒计时地方式显示允许通行或禁止通行地时间,其中绿灯、黄灯、红灯地持续时间分别是20s、5s和25s.(3)、点阵也会显示出东西,南北方向通行是地指示标. (4)、当拨码开关拨表示出现特殊情况时,如当消防车、救护车或其他需要优先放行地车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁,点阵出现X禁止通行地标号.当特殊运行状态结束后(即拨回拨码开关),控制器恢复原来状态,继续正常运行.六:体会、对设计工作地总结及展望这次地交通灯控制器是将点阵,彩灯,数码管地程序结合起来编写地,刚开始是真地觉得很难,但是通过慢慢地分析开来,最后终于成功了.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.gIiSp。

交通灯VHDL实验报告

交通灯VHDL实验报告

大连理工大学本科实验报告题目:十字路口交通灯控制系统课程名称:数字电路课程设计学院(系):电子信息与电气工程学部专业:班级:学生姓名:学号:完成日期:成绩:年月日题目:1 设计要求设计并调试好一个十字路口的交通灯控制系统,具体功能如下:(1).主干道、支干道方向分别有红、黄、绿指示灯以及两个显示数码管。

(2).当主干道方向允许通行亮绿灯时,支干道方向亮红灯,而支干道方向允许通行亮绿灯时,主干道方向亮红灯。

(3).工作顺序为支干道方向红灯亮40秒,前35秒支干道方向绿灯亮,后5秒黄灯亮。

然后主干道方向红灯亮20秒,前15秒支干道方向绿灯亮,后5秒黄灯亮。

(4).主干道和支干道的数码管分别以倒计时的方式显示该道路当前状态所剩余的时间。

2 设计分析及系统方案设计根据设计要求整个系统需要包括交通灯状态控制以及倒计时显示控制两部分,包括了计时器、交通灯状态转换控制器以及译码显示电路的设计。

交通等状态转换控制器用来控制交通灯的颜色转换;计时器用来产生交通灯状态转换的条件以及数码管倒计时所需显示的数据;译码显示电路用来控制数码管完成倒计时的功能。

交通灯控制流程图mg my mr sg sy sr1 0 0 0 0 10 1 0 0 0 10 0 1 1 0 00 0 1 0 1 03系统以及模块硬件电路设计下载时选择开发系统模式54 系统的VHDL设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk: in std_logic;mg,my,mr,sg,sy,sr: out std_logic;showmh: out std_logic_vector(3 downto 0);showml: out std_logic_vector(3 downto 0);showsh: out std_logic_vector(3 downto 0);showsl: out std_logic_vector(3 downto 0));end;architecture sys of traffic istype state is (a0,a1,a2,a3); --交通灯亮灭状态type mstate is (m0,m1,m2); --主干道显示状态type sstate is (s0,s1,s2); --支干道显示状态signal presents,nexts : state;signal mpresent,mnext : mstate;signal spresent,snext : sstate;signal ch35,mh35 : std_logic_vector(3 downto 0) :="0011";signal cl35,ml35 : std_logic_vector(3 downto 0) :="0100";--ch35(高位),cl35(低位)为交通灯状态计时信号(35s)--mh35(高位),ml35(低位)为主干道显示计时信号(35s) signal ch15,sh15 : std_logic_vector(3 downto 0) :="0001";signal cl15,sl15 : std_logic_vector(3 downto 0) :="0100";--ch15(高位),cl15(低位)为交通灯状态计时信号(15s)--sh15(高位),sl15(低位)为支干道显示计时信号(15s) signal cl5,sl5,ml5 : std_logic_vector(3 downto 0) :="0100";signal ch5,sh5,mh5 : std_logic_vector(3 downto 0) :="0000";--ch5(高位),cl5(低位)为交通灯状态计时信号(5s)--sh5(高位),sl5(低位)为支干道显示计时信号(5s)--mh5(高位),ml5(低位)为主干道显示计时信号(5s)signal sh40 : std_logic_vector(3 downto 0) :="0011";signal sl40 : std_logic_vector(3 downto 0) :="1001";--sh40(高位),sl40(低位)为支干道显示计时信号(40s) signal mh20 : std_logic_vector(3 downto 0) :="0001";signal ml20 : std_logic_vector(3 downto 0) :="1001";--mh20(高位),ml20(低位)为主干道显示计时信号(20s) signal sreach40,mreach20,mreach5,sreach5,mreach35 : std_logic:='0';sreach15,reach5,reach35,reach15 : std_logic:='0';--表示各计时信号计时一次结束的信号signal srst40,mrst20,mrst5,srst5,mrst35,srst15,rst5,rst35,rst15 : std_logic :='0';--将各计时信号重新置数的信号beginshift: process(clk) --状态转换beginif clk'event and clk='1' thenpresents<=nexts; --交通灯状态转换mpresent<=mnext; --主干道显示状态转换spresent<=snext; --支干道显示状态转换end if;end process;lightctrl: process(presents,reach35,reach15,reach5) --交通灯控制begincase presents iswhen a0 => mg<='1';my<='0';mr<='0';sg<='0';sy<='0';sr<='1';if reach35='1' then nexts<=a1;else nexts<=a0;rst35<='0';rst15<='1';rst5<='1';end if;--若reach35为1则转到a1状态,否则维持a0状态when a1 => mg<='0';my<='1';mr<='0';sg<='0';sy<='0';sr<='1';if reach5='1' then nexts<=a2;else nexts<=a1;rst35<='1';rst15<='1';rst5<='0';end if;--若reach5为1则转到a2状态,否则维持a1状态when a2 => mg<='0';my<='0';mr<='1';sg<='1';sy<='0';sr<='0';if reach15='1' then nexts<=a3;else nexts<=a2;rst35<='1';rst15<='0';rst5<='1';end if;--若reach15为1则转到a3状态,否则维持a2状态when a3 => mg<='0';my<='0';mr<='1';sg<='0';sy<='1';sr<='0';if reach5='1' then nexts<=a0;else nexts<=a3;rst35<='1';rst15<='1';rst5<='0';end if;--若reach5为1则转到a0状态,否则维持a3状态end case;end process;c35: process(clk,rst35) --35s交通灯状态计时beginif rst35='1' then ch35<="0011";cl35<="0100";elsif (clk'event and clk='1') thenif (cl35="0001" and ch35="0000") then reach35<='1';else reach35<='0';--计数到1时reach35置1,否则置0if cl35="0000" thenif ch35="0000" thench35<="0011";cl35<="0100";else cl35<="1001";ch35<=ch35-1;end if;else cl35<=cl35-1;end if;end if;end process;c15: process(clk,rst15) --15s交通灯状态计时beginif rst15='1' then ch15<="0001";cl15<="0100";elsif clk'event and clk='1' thenif (cl15="0001" and ch15="0000") then reach15<='1';else reach15<='0';end if;--计数到1时reach15置1,否则置0if cl15="0000" thenif ch15="0000" thenelse cl15<="1001";ch15<=ch15-1;end if;else cl15<=cl15-1;end if;end if;end process;c5: process(clk,rst5) --5s交通灯状态计时beginif rst5='1' then cl5<="0100";elsif clk'event and clk='1' thenif cl5="0001" then reach5<='1';else reach5<='0';--计数到1时reach5置1,否则置0cl5<=cl5-1;end if;end process;mcount: process(mpresent,mreach20,mreach35,mreach5) --主干道显示控制begincase mpresent iswhen m0 => mrst35<='0';mrst20<='1';mrst5<='1';showmh<=mh35;showml<=ml35;if mreach35='1' then mnext<=m1;else mnext<=m0;end if;--若mreach35为1则转到m1状态,否则维持m0状态when m1 => mrst35<='1';mrst20<='1';mrst5<='0';showmh<=mh5;showml<=ml5;if mreach5='1' then mnext<=m2;else mnext<=m1;end if;--若mreach5为1则转到m2状态,否则维持m1状态when m2 => mrst35<='1';mrst20<='0';mrst5<='1';showmh<=mh20;showml<=ml20;if mreach20='1' then mnext<=m0;else mnext<=m2;end if;--若mreach20为1则转到m0状态,否则维持m2状态end case;end process;m5: process(clk,mrst5) --5s主干道显示计时beginif mrst5='1' then ml5<="0100";mh5<="0000";elsif clk'event and clk='1' thenif ml5="0001" then mreach5<='1';else mreach5<='0';end if;--计数到1时mreach5置1,否则置0if ml5="0000" then ml5<="0100";else ml5<=ml5-1;end if;end if;end process;m20: process(clk,mrst20) --20s主干道显示计时beginif mrst20='1' then mh20<="0001";ml20<="1001";elsif clk'event and clk='1' thenif (ml20="0001" and mh20="0000") then mreach20<='1';else mreach20<='0';end if;--计数到1时mreach20置1,否则置0if ml20="0000" thenif mh20="0000" thenmh20<="0001";ml20<="1001";else ml20<="1001";mh20<=mh20-1;end if;else ml20<=ml20-1;end if;end if;end process;m35: process(clk,mrst35) --20s主干道显示计时beginif mrst35='1' then mh35<="0011";ml35<="0100";elsif (clk'event and clk='1') thenif (ml35="0001" and mh35="0000") then mreach35<='1';else mreach35<='0';end if;--计数到1时mreach35置1,否则置0if ml35="0000" thenif mh35="0000" thenmh35<="0011";ml35<="0100";else ml35<="1001";mh35<=mh35-1;end if;else ml35<=ml35-1;end if;end if;end process;scount: process(spresent,sreach40,sreach15,sreach5) --支干道显示控制begincase spresent iswhen s0 => srst40<='0';srst15<='1';srst5<='1';showsh<=sh40;showsl<=sl40;if sreach40='1' then snext<=s1;else snext<=s0;end if;--若sreach40为1则转到s1状态,否则维持s0状态when s1 => srst40<='1';srst15<='0';srst5<='1';showsh<=sh15;showsl<=sl15;if sreach15='1' then snext<=s2;else snext<=s1;end if;--若sreach15为1则转到s2状态,否则维持s1状态when s2 => srst40<='1';srst15<='1';srst5<='0';showsh<=sh5;showsl<=sl5;if sreach5='1' then snext<=s0;else snext<=s2;end if;--若sreach5为1则转到s0状态,否则维持s2状态end case;end process;s40: process(clk,srst40) --40s支干道显示计时beginif srst40='1' then sh40<="0011";sl40<="1001";elsif (clk'event and clk='1') thenif (sl40="0001" and sh40="0000") then sreach40<='1';else sreach40<='0';end if;--计数到1时sreach40置1,否则置0if sl40="0000" thenif sh40="0000" thensh40<="0011";sl40<="1001";else sl40<="1001";sh40<=sh40-1;end if;else sl40<=sl40-1;end if;end if;end process;s5: process(clk,srst5) --5s支干道显示计时beginif srst5='1' then sl5<="0100";sh5<="0000";elsif clk'event and clk='1' thenif sl5="0001" then sreach5<='1';else sreach5<='0';--计数到1时sreach5置1,否则置0end if;if sl5="0000" then sl5<="0100";else sl5<=sl5-1;end if;end if;end process;s15: process(clk,srst15) --15s支干道显示计时beginif srst15='1' then sh15<="0001";sl15<="0100";elsif clk'event and clk='1' thenif (sl15="0001" and sh15="0000") then sreach15<='1';else sreach15<='0';end if;--计数到1时sreach15置1,否则置0if sl15="0000" thenif sh15="0000" thensh15<="0001";sl15<="0100";else sl15<="1001";sh15<=sh15-1;end if;else sl15<=sl15-1;end if;end if;end process;end sys;5 结论以及结果说明采用GW48-CK开发系统,选用工作模式5,使用MAX+plus II软件调试环境,仿真过程中时钟周期设为200ns,仿真时间100us。

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

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

基于VHDL语言的交通灯控制器设计与实现摘要 VHDL是Very High Speed Integrated Circuit Hardware Description Language 的缩写,意思是超高速集成电路硬件描述语言。

对于复杂的数字系统的设计,它有独特的作用。

它的硬件描述能力强,能轻易的描述出硬件的结构和功能。

这种语言的应用至少意味着两种重大的改变:电路的设计可以通过文字描述的方式完成;电子电路可以当作文件一样来存储。

随着现代技术的发展,这种语言的效益与作用日益明显,每年均能够以超过30%的速度快速成长。

交通灯控制系统通常要实现自动控制红绿灯的变化,基于FPGA设计的交通灯控制系统电路简单、可靠性好。

本系统可控制2个路口的红、黄、绿三盏交通灯。

对于Max+PlusⅡ开发工具,它是美国Altera公司自行设计的一种CAE软件工具。

他具有全面的逻辑设计能力,设计者可以自由组合文本、图形和波形输入法,建立起层次化的单器件或多器件设计。

利用该工具配备的编辑、编译、仿真、综合、芯片编程等功能,将设计的电路图或电路描述程序变成基本的逻辑单元写入到可编程芯片中(如CPLD、FPGA),做成ASIC芯片。

仿真实验结果表明了该编解码器的正确性和合理性。

关键词:交通灯;控制器;VHDL;MAX+PlusⅡAbstract VHDL is the Very Hight Speed Integrated Circuit Hardware Description Language acronym,meaning that high-speed integrated circuit hardware description language.For complex digital system design,it has a unique role.Its hardware descirption ability,can easily describe the structure and funtion of the hardware.The application of this language implies that at least two kinds of major changes:the design of the circuit can actually be completed by the manner described in the text;electronic circuits can be used as to store the same files.With modern technology,the benefits and role of this language has become more obvious every year to more than 30% of the rate of rapid growth.Traffic light control system is usually to achieve the automatic trafffic light changes,FPGA-based design of a traffic light control system circuit is simplem,and good reliability.The system can control two junctions of red,yellow,green,three traffic lights.For theMax-Plus II development tool,it is United States Altera’s own design of a CAE software tools.It has a comprehensive logic design capabilities,designers can freely mix text,graphics,and waveform input method,set up hierarchical design of a single device or multiple devices.The use of the tool is equipped with the editing,compiling,simulation,synthesis,chip programming features such as the design of the circuit or circuit described procedure into the basic logic unit is written into the programmable chip(eg,CPLD,FPGA),made of ASIC chips.The simulation results show that the correct codec and rationality.Keywords:traffic light;controller,VHDL,MAX+PlusII目录1 引言 (1)2 课题背景及相关技术 (2)2.1 Max+plusII简介 (2)2.2 VHDL语言简介 (3)2.3 VHDL设计的优点与设计方法 (5)3交通灯控制器分析 (7)3.1 分频器 (7)3.2 状态机 (8)4交通灯控制器的VHDL设计 (9)4.1程序流程图 (9)4.2交通灯顶层文件和管脚分配 (10)4.3分频器和状态机的图示符号 (11)4.4仿真波形图 (12)附录 (13)结束语 (17)参考文献 (18)1引言在交通发达的当代,交通灯控制器无疑是最实用的的工具。

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)(最全的)

课题三:交通灯控制器学院:信息与通信工程学院专业:通信工程姓名:***学号:********课题三:交通灯控制器一.设计课题的任务要求(一)、实验目的1. 熟练掌握 VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法;(二)、相关知识本实验要利用 CPLD 设计实现一个十字路口的交通灯控制系统,与其他控制系统一样,本系统划分为控制器和受控电路两部分。

控制器使整个系统按设定的工作方式交替指挥车辆及行人的通行,并接收受控部分的反馈信号,决定其状态转换方向及输出信号,控制整个系统的工作过程。

路口交通灯控制系统的有东西路和南北路交通灯 R(红)、Y(黄)、G(绿)三色,所有灯均为高电平点亮。

设置20s 的通行时间和5s 转换时间的变模定时电路,用数码管显示剩余时间。

提供系统正常工作/复位和紧急情况两种工作模式。

(三)、实验任务1.基本任务:设计制作一个用于十字路口的交通灯控制器。

1). 南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20 秒、5 秒和25 秒;2). 当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;3). 用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间;2.提高要求:1). 增加左、右转弯显示控制功能;2). 紧急状况时增加声光警告功能;3). 自拟其它功能。

二.系统设计(包括设计思路、总体框图、分块设计)(一)设计思路利用有限状态机描绘出交通灯的状态转移图,并设置记录东西和南北路口可通行时间的全局变量count,共设置四个正常状态,状态间的转移以count的值作为判断条件。

对于两种特殊情况:当复位信号reset为高电平时,则回到最初状态;当紧急输入信号emergency 为高电平时,则转移到一特殊状态。

VHDL交通灯控制器-实验报告

VHDL交通灯控制器-实验报告

可编程逻辑器件应用项目报告书项目名称:交通灯控制器指导老师:姓名:学号:班级:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。

②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。

③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。

当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。

基于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程序设计

交通灯控制器一、实验目的:1、学会使用VHDL语言编程解决实际问题;2、实现高速公路与乡间小路的交叉路口红绿灯的控制;3、熟悉MAX-plusⅡ的使用。

二、实验设备:PC 机一台三、实验原理与内容:实现高速公路与乡间小路的交叉路口红绿灯的控制。

功能如下要求:1.只有在小路上发现汽车时,高速公路上的交通灯才可能变为红灯。

2.当汽车行驶在小路上时、小路的交通灯保持为绿灯,但不能超过给定的延迟时间。

〔注;这段时间定义为20S时间)。

3.高速公路灯转为绿灯后,即使小路上有汽车出现,而高速公路上并无汽车,也将在给定的时间内保持高速公路绿灯。

(注:这段时间定义为60S)。

程序流程图:高速公路通车小路有车T>60S5S黄灯小路通车T>20S 5S黄灯小路有车YYYN NN N Y四、实验步骤:1、在C 盘以后的盘上建一个文件夹,后缀名不能有中文。

2、打开MAX-plus Ⅱ,单击file ,在new 中选择text editorfile ,单击ok 打开文本编辑框。

3、保存到新建的文件夹中,名称与实体一致,类型为 .vhd 。

4、在编辑框中输入程序,保存,置顶(file->project->setproject current file );5、编译MAX-plusⅡ->compiler->star,如果有错误,可根据错误提示修改源程序,直到编译没有错误。

6、波形编辑MAX-plusⅡ->Wavefrom editor->Enter Nodes from Snf->list-> => ->ok;7、设置仿真信号(时钟信号,输入信号),保存。

8、仿真simulator,保存,改变输入信号仿真。

五、程序:LIBRARY IEEE; --库和程序包USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTDKZ IS --实体JTDKZ的说明PORT(CLK:IN STD_LOGIC; --时钟信号SB:IN STD_LOGIC; --小路有无车信号(SB=1:小路有车)MR,MY,MG,BR,BY,BG:OUT STD_LOGIC);--交通灯信号END ENTITY JTDKZ;ARCHITECTURE ART OF JTDKZ IS--JTDKZ的结构体说明TYPE STATE_TYPE IS(A,B,C,D);--定义信号SIGNAL STATE:STATE_TYPE;BEGINCNT:PROCESS(CLK) ISV ARIABLE CLR:BIT;--在进程中定义变量CLR(CLR=0:计时清零)V ARIABLE S:STD_LOGIC_VECTOR(0 TO 5);--在进程中定义变量S(S为时钟计时器)BEGINIF(CLK'EVENT AND CLK='1')THEN--判断时钟信号上升沿IF CLR='0'THEN--当CLR=0时计时变量清零S:="000000";ELSES:=S+1;END IF;CASE STATE IS--状态A为大路通车(绿灯),小路禁止通车(红灯)WHEN A=>MR<='0';MY<='0';MG<='1';BR<='1';BY<='0';BG<='0';IF(SB='1') THEN--判断小路是否有车IF(S="111011") THEN--判断大路通行是否满60秒STATE<=B;CLR:='0';--大路满60秒,计时清零,转到状态BELSESTATE<=A;CLR:='1';--大路不满60秒,继续状态AEND IF;ELSESTATE<=A;CLR:='1';--小路没车,大路一直通车END IF;--状态B为大路禁止通车(黄灯),小路禁止通车(红灯)WHEN B=>MR<='0';MY<='1';MG<='0';BR<='1';BY<='0';BG<='0';IF S="000100" THEN--判断大路黄灯是否满5秒STATE<=C;CLR:='0';--满5秒,计时清零,跳转到C状态ELSESTATE<=B;CLR:='1';--不满5秒继续状态B。

VHDL交通灯实验报告

VHDL交通灯实验报告

when"0011"=> seg<="1111001";
when"1000"=> seg<="1111111";
when"0100"=> seg<="0110011";
when others=> seg<="1110011";
end case;
end process;
end bb2;
下面是仿真出 74148 译码器的波形图。
begin reg:process(reset,co,clk)
begin if reset='1' then state<=setr; elsif rising_edge(clk)then case state is when setr=> g<="0111"; s<="0010"; ld<='1'; rgy<="100"; state<=red; when red => ld<='0'; rgy<="100"; if co = '1' then state<=setg; else state<=red; end if; when setg => g<="0100"; s<="0010"; ld<='1'; rgy<="001"; state<=green;
inst2
m148 result[3..0]

数电综合实验报告2--交通灯

数电综合实验报告2--交通灯

数电综合实验报告2--交通灯数字逻辑与数字系统设计综合实验二——十字路口交通灯自动控制器的设计学院电子工程学院班级卓越001012班学号00101201姓名冉艳伟实验时间2012.6.8十字路口交通灯自动控制器的设计一、实验目的学习QuartusII的使用方法,熟悉可编程逻辑器件的使用。

通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。

二、设计任务设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。

当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。

当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。

东西干道图1 路口交通管理示意图三、实验要求(1)按照设计任务设计,采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。

交通灯用发光二级管模拟,观察交通灯的运行是否正常,如果不正常,排除故障直至正确为止。

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

要求:必须用可编程器件实现电路功能。

可以是原理图,也可以是VHDL代码,也可以混合输入。

五、设计说明(1)第一模块:CLK时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。

因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作,故对1MHz的时钟信号进行1000000分频。

模块说明:系统输入信号:CLKi: 由外接信号发生器提供1MHz的时钟信号;系统输出信号: CLK:产生每秒一个脉冲的信号;(2)第二模块:模90倒计数器按照实验要求,交通灯循环一次为90秒,且显示倒数的计数值,故设计一模90倒计数器通过主程序运算即可显示各路计数值。

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

输入
FSM 构成
FSM用来解决一般时序逻辑电路问题,包 括同步/异步时序逻辑 • 状态寄存器
– 当前状态(现态)寄存器
• 组合逻辑电路
– 下一状态(次态)组合逻辑 – 输出组合逻辑
Moore和Mealy状态机描述的区别就在于输出逻辑进程
vhdl语言描述FSM的建立过程
• 定义状态机的状态
• 定义状态变量
次态转移逻辑进程
process(current_state,其他输入信号) 状态的表现 begin next_state<=current_state; 状态 case current_state is when state1 => 转换 ....... next_state<=某个状态; .......... 的条 件 when state2 => ....... next_state<=某个状态; .......... end case; end process;
描述状态机的进程
状态机的描述方式: 三进程、二进程、单进程(本实验采用) 一般采用三个进程来描述状态机 描述状态机寄存器的时序进程 描述次态产生逻辑的组合逻辑进程 描述输出组合逻辑进程
状态机寄存器的时序进程
process(reset,clk) begin if reset='1' then current_state<=初始状态; else rising_edge(clk) then current_state<=next_state; 一定要有复位信号,否则状 end if; 态机处于随机状态,无法开 end process; 始正常工作
1.状态转换的实现 在进程中利用自定义数据类型定义交通灯的4个状态, 根据东西、南北方向的时间计数器的计数结果利用CASE 语句实现4个状态的转换,在每一个状态中利用内部信号 传递实现对红黄绿灯的显示控制。
FSM设计方法
• 分析控制器设计指标,建立系统算法模 型,即状态转换图; • 分析被控对象的时序,确定控制器的有 限状态机的各个状态及输入、输出条件; • 应用VHDL语言完成状态机的描述。
次态转移逻辑进程
在case语句之前,给nenxt_state赋一 个缺省值: next_state<=current_state; 其意义在于: 当case语句中决定下状态的逻辑比较 复杂时,就不用给所有的情况赋值,不 关心的情况就保持原状态。
StageControl.VHD状态控制模块
• • • • • • • • • • • • • • • • • • • • • • • library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity StageControl is port( clk:in std_logic; --时钟 emergencykey:in std_logic; --紧急开关 time_h,time_l:out std_logic_vector(3 downto 0); ; --定时 red,green,yellow:out std_logic_vector(3 downto 0) ; --红黄绿灯 ); end StageControl; architecture behav of StageControl is type color is(greenred,yellowred,redgreen,redyellow); --四种状态 begin process(clk,emergencykey) variable tempr,tempg,tempy:std_logic_vector(3 downto 0); --三组灯的中间变量 variable temp_h,temp_l:std_logic_vector(3 downto 0); --定时的中间变量 variable temp_color:color:=greenred; --initial stage --当前状态的中间变量 begin if(clk'event and clk='1')then case emergencykey is when '1'=> --the normal stage case temp_color is
长江大学电工电子示范中心
交通灯设计
一、实验目的
1.了解可编程逻辑器件设计的流程;
2.掌握数码管动态扫描显示的实现方法;
3.掌握状态机的设计方法;
4.掌握进程的设计方法。
长江大学电工电子示范中心
二、设计任务与要求
1.实现正常时序控制功能; 2.实现特殊状态控制功能; 3.实现信号灯点亮时间预置功能; 4.将东西方向、南北方向的灯亮时间分别用数码管显示; 5.在MAX PLUS或Quartus II开发平台上,采用VHDL或 Verilog编程设计; 6.对编写的程序进行编译仿真、修改,使仿真结果达到设 计要求; 7.下载并测试电路的逻辑功能。
2.1、问题描述 设计并实现一十字路口的红、绿、黄三色交通 灯控制与显示电路,即每个路口设置一组红、黄、 绿交通灯,按图1所示情况变化,以保证车辆、行 人通行安全。
图1
2,2、功能分析
1.基本功能(见前面图) 2.扩展功能 (1)特殊状态控制功能 特殊状态如紧急车辆随时通行功能受一开关控制,无急车 时,信号灯按正常时序控制。有急车来时,将特殊状态开 关按下,不管原来信号灯的状态如何,一律强制让两个方 向的红灯同时点亮,禁止其它车辆通行,同时计时停止; 特殊状态结束后,恢复原来状态继续运行。
定义状态变量
• 定义两个状态机变量:当前状态和次态, 其中当前状态描述的是一组寄存器,而 下状态描述的是组合逻辑。 • 例: signal current_state:state; signal next_state:state; 交通灯:
signal current_state:color:=redgreen; signal next_state:color;
FSM分类
• Moore型:输出信号仅与现态相关 • Mealy型:输出信号与现态和输入相关
输出 Output Comb. Logic 现态 DFFs Feedback Comb. Logic 次态 Moore 输入 Mealy DFFs 输出 Output Comb. Logic 现态 Feedback Comb. Logic 次态
(2)信号灯点亮时间预置功能 控制电路在任何时候可根据实际情况修改信号灯点亮时间。
2.3、设计思路: 1.参考图1,定义交通灯的状态,确定状态表;
状态 东西方向 S0 绿灯亮 南北方向 红灯亮 时间 (s) TeS1 S2 S3黄灯亮 红灯亮 红灯亮
红灯亮 绿灯亮 黄灯亮
Ty Ts Ty
三、程序设计思路
• 描述状态机的进程
定义状态机的状态
• 在使用状态机之前应该定义状态变量的枚举类 型,可以定义在状态机描述的源文件中,或者 是专门的程序包中。 • 例子: TYPE state IS (state1,state2);
交通灯
type color is(greenred,yellowred,redgreen,redyellow);
相关文档
最新文档