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

基于VHDL语言的交通信号灯Quartus仿真

07/04 15:53
550
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24011Q1043M57.doc

共1个文件

名称:基于VHDL语言的交通信号灯Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

基于VHDL语言的交通信号灯

具体要求:

设计一个十字路口的交通灯控制器,控制A,B两条交叉道路上的车辆通行,东西方向为主干道A,南北方向为副干道B。

具体要求如下:

1、每条道路设一组信号灯,每组信号灯有红、黄、绿3个灯组成,绿灯表示允许通过,红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。

2、主干道通行40秒,南北通行时间为20秒。

3、每次变换通行车道之前,要求黄灯先亮5s,才能变换通行车道。黄灯亮时,要求每秒闪烁一次。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

分频模块

50分频为1Hz

红绿灯控制模块

数码管显示模块

数码管显示倒计时

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--控制模块
ENTITY?RGY?IS
???PORT?(
??????clk_1????:?IN?STD_LOGIC;
clk????:?IN?STD_LOGIC;
reset??:?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;--红绿灯信号
??????SMG1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--输出数码管显示数
??????SMG2?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--输出数码管显示数
???);
END?RGY;
ARCHITECTURE?behave?OF?RGY?IS
????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?state????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000";
???SIGNAL?G1_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?Y1_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?G2_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";
???SIGNAL?Y2_cnt???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000001";??
???--?Declare?intermediate?signals?for?referenced?outputs
???SIGNAL?R1_temp?:?STD_LOGIC:='0';
???SIGNAL?G1_temp?:?STD_LOGIC:='0';
???SIGNAL?Y1_temp?:?STD_LOGIC:='0';
???SIGNAL?R2_temp?:?STD_LOGIC:='0';
???SIGNAL?G2_temp?:?STD_LOGIC:='0';
???SIGNAL?Y2_temp?:?STD_LOGIC:='0';
????SIGNAL??G1_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
????SIGNAL??Y1_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
????SIGNAL??R1_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
????SIGNAL??G2_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
????SIGNAL??Y2_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
????SIGNAL??R2_BCD???:??STD_LOGIC_VECTOR(7?DOWNTO?0);--正计时
BEGIN
--设置时间,可自行修改时间,
--主路红灯时间等于支路绿灯加黄灯
--支路红灯时间等于主路绿灯加黄灯
???G1_time?<=?"00101000";--主路绿灯40s
???Y1_time?<=?"00000101";--主路黄灯5s
???G2_time?<=?"00010100";--支路绿灯20s
???Y2_time?<=?"00000101";--支路黄灯5s
???--?Drive?referenced?outputs
???R1?<=?R1_temp;--红
???G1?<=?G1_temp;--绿
???Y1?<=?Y1_temp?and?clk_1;--黄闪烁
???R2?<=?R2_temp;--红
???G2?<=?G2_temp;--绿
???Y2?<=?Y2_temp?and?clk_1;--黄闪烁
???
???PROCESS?(clk_1,reset)
???BEGIN
if(reset='1')THEN
state?<=?"001";--异步复位
elsIF?(clk_1'EVENT?AND?clk_1?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?"001"?=>--主路绿灯
???????????????IF?(G1_cnt?<?G1_time)?THEN
??????????????????state?<=?"001";
??????????????????G1_cnt?<=?G1_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"010";--//计时到后切换下一状态
??????????????????G1_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"010"?=>--主路黄灯
???????????????IF?(Y1_cnt?<?Y1_time)?THEN
??????????????????state?<=?"010";
??????????????????Y1_cnt?<=?Y1_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"011";--计时到后切换下一状态
??????????????????Y1_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"011"?=>--支路绿灯
???????????????IF?(G2_cnt?<?G2_time)?THEN
??????????????????state?<=?"011";
??????????????????G2_cnt?<=?G2_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"100";--计时到后切换下一状态
??????????????????G2_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?"100"?=>--支路黄灯
???????????????IF?(Y2_cnt?<?Y2_time)?THEN
??????????????????state?<=?"100";
??????????????????Y2_cnt?<=?Y2_cnt?+?"00000001";
???????????????ELSE
??????????????????state?<=?"001";--计时到后切换下一状态
??????????????????Y2_cnt?<=?"00000001";
???????????????END?IF;
????????????WHEN?OTHERS?=>
???????????????state?<=?"001";
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--控制东西方向交通灯
???PROCESS?(clk_1)
???BEGIN
??????IF?(clk_1'EVENT?AND?clk_1?=?'1')?THEN
?????????IF?(state?=?"001")?THEN
????????????G1_temp?<=?'1';
?????????ELSE
????????????G1_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"010")?THEN
????????????Y1_temp?<=?'1';
?????????ELSE
????????????Y1_temp?<=?'0';
?????????END?IF;
?????????IF?(state?=?"011"?OR?state?=?"100")?THEN
????????????R1_temp?<=?'1';
?????????ELSE
????????????R1_temp?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;

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

  • 2-24011Q1043M57.doc
    下载

相关推荐