视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
红绿灯交通信号系统
2025-09-22 17:43:04 责编:小OO
文档
摘 要

本文采用Verilog HDL语言,自上向下完成了红绿灯交通信号系统的设计。设计过程中,利用QuartusII软件进行编译综合和时序仿真。

红绿灯交通信号系统采用经典的三段式状态机描述。在实验要求的基础上,增加了对左拐、右拐的单独控制,具备急车强通、单一通道优先通行功能。时序仿真通过后,把程序下载到康芯FPGA开发系统进行验证,Device选择ACEX1k family中的EP1k30TC144-3,达到预想的效果。

关键字:交通灯  Verilog HDL  Quartus II

目 录

摘 要    2

目 录    3

第一篇    红绿灯交通信号系统    5

1.1 交通灯控制系统的功能概述    5

1.2 设计基本要求    5

1.2.1实验要求    5

1.2.2实验提示    6

1.3设计方案    6

1.4 Verilog HDL程序设计    8

1.4.1程序结构    8

1.4.2程序模块实现    8

1.5系统仿真与验证    12

1.5.1系统时序仿真    12

1.5.2 FPGA实验系统验证    15

第一章红绿灯交通信号系统

1.1 交通灯控制系统的功能概述

交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序.这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理。同时,由于系统的自动控制往往难以满足交叉路口某些特殊的交通要求,所以,控制系统需要增加交警干预控制的功能,如急车强通、单一通道优先通行等。

交通灯系统的硬件电路包括:两组红黄绿灯(配合十字路口的双向指挥控制)、两组七段显示数码管(配合红黄绿灯倒计时显示)、一组手动与自动控制开关(针对交通指挥交通控制使用)。实现路口交通灯系统控制的方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了设计难度。采用EDA技术。应用VerilogHDL硬件电路描述语言实现交通灯系统控制器的设计,利用QuartusII集成开发环境进行综合、仿真,并下载到FPGA可编程逻辑器件中,完成系统的控制作用。

1.2 设计基本要求

1.2.1实验要求

交通灯系统如图1.1,路口0和1均需要红、黄、绿三盏灯(用RYG分别表示),并且每个路口都需要一个倒数的计时器,绿灯每次维持的时间是20s,黄灯为5s,黄灯亮时应以一定的频率闪动。

  图1.1 交通灯布局示意图

交通灯系统大多是自动控制来指挥交通的,但有时需要由交警手动控制红绿灯,所以要求设计的该交通信号系统需要具有该功能。

1.2.2实验提示

先分析交通灯控制系统应包含的电路子模块,如分频器、倒数计数器、红绿灯信号控制电路,再对该交通灯控制系统中出现的状态以及状态转换的条件进行分析,利用FSM来进行设计,该实验中状态转换的过程为R0G1——> R0Y1——> R1G0——> R1Y0——> R0G1

1.3设计方案

十字路口的两组交通灯分别控制东西(A)和南北(B)两组通道的车流和人流。一般的交通灯系统包含有红黄绿三种颜色的灯。红灯表示禁行,绿灯表示通行,黄灯是绿灯向红灯的过渡。传统交通灯右拐不做控制,任何时刻都通行,但是,这往往与行人过马路冲突,酿造交通事故。本设计中,增加右拐控制,改进了传统交通灯的不足。同时,考虑到FPGA实验系统的硬件资源,本设计与实际的交通灯比较做出了某些调整,每一通道设置一组灯,分别为直行绿灯(GD)、直行红灯(RD)、左拐绿灯(GL)、右拐绿灯(GR)。

图1.2 交通灯设计布局示意图

具体工作情况如下:

直行绿灯(GD)亮:人车直行;

直行绿灯(GD)闪烁:绿灯向红灯过渡(黄灯功能);

直行红灯(RD)亮:人车直行禁止;

左拐绿灯(GL)亮:车辆左拐通行;

左拐绿灯(GL)闪烁:左拐绿灯由亮向灭过渡;

左拐绿灯(GL)灭:车辆左拐禁行;

右拐绿灯(GR)亮:车辆右拐通行;

右拐绿灯(GR)闪烁:右拐绿灯由亮向灭过渡;

右拐绿灯(GR)灭:车辆右拐禁行;

系统的状态转换流程如表1.1:

其中,1表示相应的灯亮,0表示相应的灯灭,X表示相应的相应的灯闪烁。系统复位后,在这8个状态中不断的循环

表1.1 交通灯控制系统状态转换表

状态编号指挥功能

通道A

通道B

时间

(s)

GDARDAGLAGRAGDBRDBGLBGRB
1A通道人车直行

1000010020

2状态1向状态3过渡

X00001005
3A左拐、AB通道右拐

0111010110

4状态3向状态5过渡

01XX010X5
5B通道人车直行

0100100020

6状态5向状态7过渡

0100X0005
7B左拐、AB通道右拐

0101011110

8状态7向状态8过渡

010X01XX5
图1.3 交通灯控制系统状态转换图

【急车强通功能】

十字路口往往会出现急救车、消防车和警车等一些执行特殊任务,需要优先通过十字路口的车辆。本设计采用一个按钮实现此功能,当按钮按下时,所有通道禁行,倒计时显示全部为0。特殊车辆可以优先通过。按钮恢复后,系统马上复位,重新开始状态转换。

【单一通道优先通行】

十字路口往往会出现某一方向通道车流人流量较多,另一方向相对较小的不平衡状况。所以交警需要有计划的干预交通灯控制系统,优先某一通道通行。本设计此功能采用两个按钮实现。按钮按下时,相应通道车人直行,而另一通道禁行,倒计时全部显示为0。按钮恢复后,系统马上复位,重新开始状态转换。

1.4 Verilog HDL程序设计

1.4.1程序结构

本设计采用两个摩尔状态机,分别控制A通道和B通道的状态转换。状态机采用三段式,具有以下优点:

三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

第一段实现复位和当前状态的转换;第二段实现下一状态的定义;第三段实现输出的控制。为了程序代码书写方便,其中第一段和第三段,两个状态机共用一个always;第二段两个状态机各用一个always。

1.4.2程序模块实现

【系统顶层电路】

图1.4 交通灯控制电路顶层结构

其中,CLK为时钟输入端,接收外部1Hz频率的时钟信号,直接供系统时钟树运用;RESET为系统复位初始化端口,结合FPGA实验板的硬件资源考虑,本设计采用高电平复位;UN为急车强通控制端口;wayA为A通道优先通行控制端口;wayB为B通道优先通行控制端口。LAMPA输出信号,控制A通道的红绿灯;LAMPB输出信号,控制B通道的红绿灯;ACOUNT输出A通道倒计时信号;BCOUNT输出B通道倒计时信号。

【系统初始化和当前状态切换】

parameter A1=1,A2=2,A3=3,A4=4,A5=5,A6=6,A7=7;  //A通道的7个状态值

parameter B1=1,B2=2,B3=3,B4=4,B5=5,B6=6,B7=7;  //B通道的7个状态值

reg[7:0] TA1,TA2,TA3,TA4,TA5,TA6,TA7;  //A通道7个状态的计数初值存储。

reg[7:0] TB1,TB2,TB3,TB4,TB5,TB6,TB7;  //B通道7个状态的计数初值存储。

本设计中,A、B通道状态机各可以划分为的7个状态。程序首先定义7个状态值及其相应的倒计时计数初值。

if(RESET | UN | wayA | wayB)//高电平初始化,异步复位

begin

//各状态计数初值赋值

TA1<=8'b01010000;TA2<=8'b00010000;TA3<=8'b00110000;TA4<=8'b00010000;

TA5<=8'b01100000;TA6<=8'b00110000;TA7<=8'b00010000;

TB1<=8'b01100000;TB2<=8'b00110000;TB3<=8'b00010000;TB4<=8'b01010000;

TB5<=8'b00010000;TB6<=8'b00110000;TB7<=8'b00010000;

//当前状态和当前倒计时赋值

current_TA<=TA1;

current_TB<=TB1;

current_stateA<=A1;

current_stateB<=B1;

end

系统的初始化采用异步复位,可以由复位端口RESET触发,也可以由一些功能控制按键触发,如UN、wayA、和wayB。A、B通道的状态机分别初始化到A1和B1,并对各个状态倒计时计数初值赋值。

current_stateA<=next_stateA;  //当前状态切换

current_stateB<=next_stateB;

current_TA<=next_TA;  //倒计时变化

current_TB<=next_TB;

当复位信号无效时,状态机的当前状态和倒计时随着CLK时钟上升沿跳变切换。

【倒计时实现】

      if(current_TA[3:0]==0)  //A通道倒计时

        begin  //个位为零向十位借位

          next_TA[3:0]=4'b1001;  //个位值为9

          next_TA[7:4]=current_TA[7:4]-1; //十位值减1

        end

      else

        next_TA=current_TA-1;  //个位不为零,正常减1

由于FPGA试验板自带译码电路,控制电路的倒计时采用BCD码输出格式。BCD码减法运算需要处理好的是借位调整。

【NEXT状态切换】

 case(current_stateA)  //case查表语句,current_stateA作敏感信号

A1: begin

        next_TA=TA2;  next_stateA=A2;

    end

A2: begin

        next_TA=TA3;  next_stateA=A3;

    end

A3: begin

        next_TA=TA4;   next_stateA=A4;

    end

A4: begin

        next_TA=TA5;   next_stateA=A5;

    end

A5: begin

        next_TA=TA6;   next_stateA=A6;

    end

A6: begin

        next_TA=TA7;   next_stateA=A7;

    end

A7: begin

        next_TA=TA1;   next_stateA=A1;

    end

default: next_stateA=A1;

endcase

NEXT状态切换发生在倒计时到零的时刻。通过case查表语句,根据当前状态决定NEXT状态以及新的计数初值。

【控制信号输出】

ACOUNT=current_TA;  //给A通道倒计时输出寄存器赋值

case(current_stateA)  //查表根据当前状态决定红绿灯的亮灭

A1:LAMPA=4'b1000;

A2:LAMPA[3]=~LAMPA[3];

A3:LAMPA=4'b0111;

A4:begin 

LAMPA[1]<=~LAMPA[1]; LAMPA[0]<=~LAMPA[0];

   end

A5:LAMPA=4'b0100;

A6:LAMPA=4'b0101;

A7:LAMPA[0]=~LAMPA[0];

default:LAMPA=4'b1000;

endcase

控制信号输出由状态机的第三段实现。倒计时以BCD码格式输出。红绿灯亮灭输出根据当前状态决定,每一状态对应相应的亮灭情况。程序中通过一个case语句查表实现,current_stateA作为敏感信号。

【人工控制功能】

if(UN)

begin

ACOUNT=8'b00000000;  BCOUNT=8'b00000000;

LAMPA=4'b0100;  LAMPB=4'b0100;

end

else if(wayA)

begin

ACOUNT=8'b00000000;  BCOUNT=8'b00000000;

LAMPA=4'b1000;  LAMPB=4'b0100;

end

else if(wayB)

begin

ACOUNT=8'b00000000;  BCOUNT=8'b00000000;

LAMPA=4'b0100;  LAMPB=4'b1000;

end

急车强通、单一通道优先通行功能的实现只需要在状态机的第三段,优先于正常的输出,添加额外的输出控制。控制完成后,系统复位到初始值。

1.5系统仿真与验证

1.5.1系统时序仿真

【状态流程仿真】

本设计采用QuartusII软件进行编译并进行时序仿真。其中,时钟周期此用1us。整个工作流程仿真结果如下:

图1.5 交通灯控制系统时序仿真图

【急车强通功能仿真】

当十字路口出现急救车,消防车以及警车等需要优先通行时,功能按钮UN按下输入高电平。所有通道禁行,倒计时数码管显示全零。

图1.6 急车强通时序仿真图

【单一通道优先通行功能仿真】

当某一通道车人流量相对较大,需要优先考虑放行时,功能按钮wayA,或wayB按下,输入高电平。相应通道通行,另一通道禁行,直至按钮恢复。

图1.7 单一通道优先通行时序仿真图

【综合出来的RTL电路】

图1.8 综合出来的RTL电路

【综合出来的状态转换图】

图1.9 状态机A状态转换图

图1.10 状态机B状态转换图

1.5.2 FPGA实验系统验证

    程序通过时序仿真后,下载到康芯FPGA实验系统。Device选择ACEX1k family中的EP1k30TC144-3。直接采用实验系统上的1Hz频率时钟。电路连接结构选择模式7,具体电路如下:

图1.11 电路连接结构图

    

管脚分配图如图1.12

    图1.12 器件管脚分配    

实际仿真照片如图1.13,下载本文

显示全文
专题