• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板

05/23 09:24
622
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1-2311051945434a.doc

共1个文件

名称:多功能交通灯控制系统VHDL十字路口红绿灯倒计时DE2-115开发板(代码在文末下载)

软件:Quartus II

语言:VHDL

代码功能:

要求设计一个多功能交通灯控制系统。并进行软件仿真与硬件实现。要求做到:

(1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行60s,支干道每次放行45s.每次由绿灯变为红灯的过程中,黄灯亮3S作为过渡;

(2)能实现正常的倒计时显示功能;

(3)能实现总体清零功能:计数器由初始状态开始计数,对应状态的指示灯亮

(4)能实现特殊状态的功能显示:进入特殊状态时,东西、南北路口均显示红灯状态

(5)在任何一个时刻,有一盏灯亮而且只有一盏灯亮。否则发出故障信号,提醒相关人员去维修。

本代码的通行时间可以设置,如下代码修改即可:

--主、支干道均有车时,两者交替允许通行,
--主干道每次放行60秒,支干道每次放行45秒,
--设立60秒、45秒计时、显示电路
--设置时间,可自行修改时间,
--主路红灯时间等于支路绿灯加黄灯
--支路红灯时间等于主路绿灯加黄灯
???G1_time?<=?"00111100";--主路绿灯60s
???Y1_time?<=?"00000011";--主路黄灯3s
???G2_time?<=?"00101101";--支路绿灯45s
???Y2_time?<=?"00000011";--支路黄灯3s

要求学生有一定的模拟及数字电子技术知识,对VHDL语言比较熟悉,有一定的动手能力

要求.jpg

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在DE2-115开发板验证,开发板如下,其他开发板可以修改管脚适配:

DE2-115.png

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 管脚分配

4. 程序编译

5. RTL图

6. 仿真图

整体仿真图

分频模块仿真图

交通灯控制模块

显示模块

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
USE?ieee.std_logic_unsigned.all;
--交通灯
ENTITY?Traffic_Light_Control?IS
???PORT?(
??????clk?????:?IN?STD_LOGIC;--50Mhz
reset_n?:?IN?STD_LOGIC;--复位
control?:?IN?STD_LOGIC;--特殊功能
??????R1??????:?OUT?STD_LOGIC;--高电平亮,主路红灯
??????G1??????:?OUT?STD_LOGIC;--高电平亮,主路绿灯
??????Y1??????:?OUT?STD_LOGIC;--高电平亮,主路黄灯
??????R2??????:?OUT?STD_LOGIC;--高电平亮,支路红灯
??????G2??????:?OUT?STD_LOGIC;--高电平亮,支路绿灯
??????Y2??????:?OUT?STD_LOGIC;--高电平亮,支路黄灯
alarm???:?OUT?STD_LOGIC;--故障提示
??????HEX0????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--数码管0
??????HEX1????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--数码管1
??????HEX2????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--数码管2
??????HEX3????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)--数码管3
???);
END?Traffic_Light_Control;
ARCHITECTURE?behave?OF?Traffic_Light_Control?IS
--分频模块
COMPONENT?CLOCK?IS--?Divide?50MHz?to?1Hz
GENERIC(D?:?INTEGER?:=?50000000);--仿真时改小为500加快仿真速度,实际上板验证时改为50000000
???PORT(CLK:?IN?STD_LOGIC;
?????????DAV:?OUT?STD_LOGIC);
???END?COMPONENT;
--显示模块
???COMPONENT?HEX?IS
??????PORT?(
?????????clk?????:?IN?STD_LOGIC;
?????????SMG_1???:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????SMG_2???:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????HEX0????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
?????????HEX1????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
?????????HEX2????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
?????????HEX3????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)
??????);
???END?COMPONENT;
???
--交通灯控制模块
???COMPONENT?RGY?IS
??????PORT?(
?????????clk_1???:?IN?STD_LOGIC;
clk???:?IN?STD_LOGIC;
reset_n?:?IN?STD_LOGIC;--复位
control?:?IN?STD_LOGIC;----特殊功能
?????????G1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????Y1_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????G2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????Y2_time?:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????R1??????:?OUT?STD_LOGIC;
?????????G1??????:?OUT?STD_LOGIC;
?????????Y1??????:?OUT?STD_LOGIC;
?????????R2??????:?OUT?STD_LOGIC;
?????????G2??????:?OUT?STD_LOGIC;
?????????Y2??????:?OUT?STD_LOGIC;
??????SMG1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--输出数码管显示数
??????SMG2?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--输出数码管显示数
??????);
???END?COMPONENT;
???
???
???SIGNAL?clk_1??????:?STD_LOGIC;
???SIGNAL?SMG1???????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???SIGNAL?SMG2???????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???
???SIGNAL?R1_led?????:?STD_LOGIC;
???SIGNAL?G1_led?????:?STD_LOGIC;
???SIGNAL?Y1_led?????:?STD_LOGIC;
???
???SIGNAL?R2_led?????:?STD_LOGIC;
???SIGNAL?G2_led?????:?STD_LOGIC;
???SIGNAL?Y2_led?????:?STD_LOGIC;
???
???SIGNAL?G1_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???SIGNAL?Y1_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???SIGNAL?G2_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???SIGNAL?Y2_time????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
SIGNAL?led1_cnt????:?STD_LOGIC_VECTOR(1?DOWNTO?0);
SIGNAL?led2_cnt????:?STD_LOGIC_VECTOR(1?DOWNTO?0);
???
???SIGNAL?HEX0_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0);
???SIGNAL?HEX1_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0);
???SIGNAL?HEX2_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0);
???SIGNAL?HEX3_SIG?:?STD_LOGIC_VECTOR(6?DOWNTO?0);
BEGIN
--每条路led计数
???led1_cnt<=('0'&?R1_led)?+?('0'&?G1_led)?+?('0'&?Y1_led);
led2_cnt<=('0'&?R2_led)?+?('0'&?G2_led)?+?('0'&?Y2_led);
--判断是否有2个以上灯亮,若有输出1
alarm<='1'?when(led1_cnt?>?"01"?)?or?(led2_cnt?>?"01")?else?'0'?;
???HEX0?<=?HEX0_SIG;
???HEX1?<=?HEX1_SIG;
???HEX2?<=?HEX2_SIG;
???HEX3?<=?HEX3_SIG;
???R1?<=?R1_led;--主路红灯
???G1?<=?G1_led;--主路绿灯
???Y1?<=?Y1_led;--主路黄灯
???R2?<=?R2_led;--支路红灯
???G2?<=?G2_led;--支路绿灯
???Y2?<=?Y2_led;--支路黄灯
???
--分频到1hz???
???U_CLOCK?:?CLOCK
??????PORT?MAP?(
?????????clk??=>?clk,
?????????dav??=>?clk_1
??????);
--主、支干道均有车时,两者交替允许通行,
--主干道每次放行60秒,支干道每次放行45秒,
--设立60秒、45秒计时、显示电路
--设置时间,可自行修改时间,
--主路红灯时间等于支路绿灯加黄灯
--支路红灯时间等于主路绿灯加黄灯
???G1_time?<=?"00111100";--主路绿灯60s
???Y1_time?<=?"00000011";--主路黄灯3s
???G2_time?<=?"00101101";--支路绿灯45s
???Y2_time?<=?"00000011";--支路黄灯3s
???
???
?--交通灯控制模块??
???U1?:?RGY
??????PORT?MAP?(
?????????clk_1????=>?clk_1,
clk????=>?clk,
reset_n=>reset_n,
?????????control??=>?control,
?????????R1???????=>?R1_led,
?????????G1???????=>?G1_led,
?????????Y1???????=>?Y1_led,
?????????
?????????R2???????=>?R2_led,
?????????G2???????=>?G2_led,
?????????Y2???????=>?Y2_led,
?????????
?????????G1_time??=>?G1_time,
?????????Y1_time??=>?Y1_time,
?????????G2_time??=>?G2_time,
?????????Y2_time??=>?Y2_time,
?????????
?????????SMG1?????=>?SMG1,--数码管显示
?????????SMG2?????=>?SMG2--数码管显示
??????);
???
???--数码管显示模块
???U3?:?HEX
??????PORT?MAP?(
?????????clk????=>?clk,
?????????SMG_1??=>?SMG1,--数码管数据显示
?????????SMG_2??=>?SMG2,--数码管数据显示
?????????
?????????HEX0???=>?HEX0_SIG,--低电平亮
?????????HEX1???=>?HEX1_SIG,--低电平亮
?????????HEX2???=>?HEX2_SIG,--低电平亮
?????????HEX3???=>?HEX3_SIG--低电平亮
??????);
???
END?behave;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=263

  • 1-2311051945434a.doc
    下载

相关推荐