基于VerilogHDL语言的复杂交通指标灯设计与实现
基于VerilogHDL语言的复杂交通指标灯设计与实现

2009.2011.141引言针对采用单片机和可编程控制器PLC 实现交通灯控制器的不足,如:存在修改、调试均需要硬件电路支持,且存在采用的电路原件相对较多、接线复杂、故障率高、可靠性低等不足[1,2]。
尽管文献[3,4]的作者在实时性和自适应控制系统设计方面展开了研究,但其依赖硬件电路支持的不足仍然存在。
为此,研究者和工程师们寻求其他设计交通灯控制器的途径,而随着Electronic Design Automation 技术的发展,在线可编程逻辑器件PLD 的出现,使得用户在实验室制作专用集成电路成了现实。
研究者提出了一些基于VHDL 的交通灯控制器的设计方案[5-8],有效地克服了基于PLC 交通灯设计与实现方案的不足,其中,HDL (Hardware Description Language ,硬件描述语言)是一种描述硬件工作的语言。
Verilog HDL 是工业和学术界的硬件设计者常用的两种主要的HDL 之一。
文献[6]的作者依据Altera 公司的EDA 软件平台Max+PlusII ,给出CPLD 芯片上交通灯系统的控制过程的实现,而文献[8]的作者选择XILINX 公司的FPGA 芯片(如同文献[7]的设计工作),采用ISE5.X 和MODELSIMSE6.0开发工具进行了程序的编译和功能仿真。
2交通灯系统控制器的设计与实现2.1设计要求无论采用何种手段进行交通灯控制器的设计,交通灯控制器均遵循类似的工作机制,借用文献[5-8]的设计思路,按照以下规则对系统进行控制:(1)十字路口的A 方向(主干道)、B 方向(支干道)各设红(R),黄(Y),绿(G)和左拐(L),右拐(R )五盏灯,A 方向4种灯按“绿黄左黄红黄”的顺序循环亮灭,B 方向4种灯按“红黄绿黄左黄”的顺序循环亮灭,并能将灯亮的时间以倒计时的形式显示出来。
(2)保证主干道绝对优先,初始状态设为主干道绿灯,支干道红灯。
(3)两个方向各种灯亮的时间应该能够非常方便地进行设置和修改,此外设A 方向是主干路,车流量大,因此A 方向通行的时间在正常模式下比B 方向时间长一些。
通过Verilog实现交通灯设计实验报告

电子科技大学实验报告一、实验室名称:虚拟仪器实验室二、实验项目名称:交通灯设计实验三、实验学时:4学时四、实验原理假设交通灯处于南北和东西两条大街的“十”字路口,如图1所示。
用FPGA 开发板的LED 灯来模拟红、黄、绿3种颜色信号,并按一定顺序、时延来点亮LED ,如图2所示。
图3给出了交通灯的状态转移图。
设计使用频率为1Hz 的时钟来驱动电路(注1:仿真时采用1MHz 的时钟来驱动电路),则停留1个时钟可得到1S 的延时,类似停留3个时钟可得到3S 的延时,停留15个时钟可得到15S 的延时(注2:开发板工作时钟为50MHz )。
北南西东图1. 六个彩色LED 可以表示一组交通信号灯南北 东西 红 黄 绿 红 黄 绿 S0 1 0 0 0 0 1 S1 1 0 0 0 1 0 S2 1 0 0 1 0 0 S3 0 0 1 1 0 0S4 0 1 0 1 0 0S5 1 0 0 1 0 0图3. 交通灯的状态转移图顶层模块时钟分频模块状态机跳转模块图4. 交通灯的原理框图五、实验目的本实验是有限状态机的典型综合实验,掌握如何使用状态转移图来定义Mealy状态机和Moore状态机,熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。
并通过一个交通灯的设计掌握利用EDA软件(Xilinx ISE 13.2)进行HDL代码输入方式的电子线路设计与仿真的详细流程。
六、实验内容在Xilinx ISE 13.2上完成交通灯设计,输入设计文件,生成二进制码流文件下载到FPGA开发板上进行验证。
七、实验器材(设备、元器件)1、计算机(安装Xilinx ISE 13.2软件平台);2、BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)八、实验步骤(1)新建工程,设置器件属性:在Xilinx ISE 13.2平台中,新建一个工程(注意命名规范),输入工程名称以及工程所在的目录,设置芯片的具体型号(Spartan 3E XC3S100E)、封装类型(CP132)以及编码使用的语言(Verilog)。
基于VerilogHDL的交通灯控制器设计

目录第一章设计原理 (1)1.1设计要求 (1)1.2设计思路和原理 (1)1.3实现方法 (1)第二章Verilog 程序设计 (2)2.1整体设计 (2)2.2 具体设计 (3)第三章仿真 (7)3.1 波形仿真 (7)第四章设计总结 (9)4.1 总结 (9)4.2参考资料 (9)程序清单 (10)交通灯控制器设计第一章 设计原理1.1设计要求设计一个交通控制器,用LED 显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数 主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s ,支干道每次放行25s 。
每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s 。
能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。
用LED 灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。
1.2设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。
设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。
循环往复的直行这个过程。
其过程如下图所示:0s30s25s主干道方向支干道方向图1.交通灯点亮时间控制说明1.3实现方法本次采用文本编辑法,即利用Verilog 语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。
设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。
第二章 Verilog 程序设计2.1整体设计根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:状状状状状状状状状状状状00状状10状状11状状01状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状001100010010001010100010图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。
交通信号灯控制器的verilog实现

H a r b i n I n s t i t u t e o f T e c h n o l o g yV e r i l o g实验报告(2)实验内容:交通信号灯控制器班级:姓名:学号:哈尔滨工业大学2015年6月一、功能描述本设计利用Verilog HDL 语言,对一个十字路口的交通信号灯进行控制,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。
并通过ModelSim软件对系统进行了仿真。
仿真结果表明系统可自动实现十字路口红绿灯及左转弯信号灯的控制。
实现设计目标如下:(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿、左转四盏交通信号灯。
通过控制器对四个路口的四组交通灯的状态实现自动循环控制;(2)实现两主干道车辆交替运行,每次通行直行时间为30 秒;左转时间为10秒,右转不受信号灯控制。
(3)黄灯作为绿灯转为左转灯,左转灯转为红灯的过渡信号灯,过渡时间为5s。
(4)系统设有总复位开关,可在任意时间对系统进行复位。
二、设计方案1.设计思路我们对图1所示的十字路口进行设计,路口A和路口C的车辆同时行驶,路口B和路口D的车辆同时行驶,所以虽然要控制4组信号灯,但其实它们可以俩俩合并,这样大大简化了设计。
由于我们采用自动控制方式,两个方向的灯按照顺序依次交替循环显示,每种灯亮的时间结合实际生活合理设定。
系统设有复位开关,可在任意时间内对系统进行复位。
图1 十字路口示意图由以上分析可知,该系统可视为一个状态机,而且共有8种状态,如表1所示。
表1 交通灯状态示意表由上表我们还可以得到状态转换图,如图2所示:图2 状态转移示意图该状态机共有两个输入信号rstn和clk,rstn为复位信号,当该信号为低电平时,状态机处于S0,且状态不发生改变。
当rstn为高电平时,这8个状态依次按时间顺序发生变化,每个状态保持多长时间由clk信号控制。
三、关键代码1.我们通过宏定义来设置每个状态保持的时间,这样既增强了代码的可读性,又方便以后的更改。
Verilog实验报告 交通灯

Verilog实验报告---第四次交通灯班级:集电0802班姓名:张鹏学号: 04086057序号: 16一、规范(1)具有开关功能:当reset=0时红绿灯关闭,使主支干道六个灯全灭;(2)具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;且func=2’b01时,支干道一直绿灯,主干道一直红灯;且func=2’b10时,主干道一直绿灯,支干道一直红灯;且func=2’b11时,主干道和支干道一直黄灯闪;(3)计数器频率:运行频率2Hz计数器;(4)信号灯种类:红、黄、绿;(5)信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常亮;此设计中:主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s(6)信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;(7)信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;(8)信号灯各状态跳转关系:绿-黄-红-绿;二、输入输出定义状态转移图:四、测试代码module frequency_divider_small(reset,clk,out); //重写一个小分频模块测试交通灯主模块功能input reset,clk;output out;reg [1:0] temp;reg out;always @ (posedge clk or negedge reset)if (!reset)temp<=2'b00;elsetemp<=(temp==2'b11)?2'b00:temp+2'b01;always @ (temp)out=(temp==2'b11);endmodulemodule test_traffic_light;reg reset,clk;reg [1:0] func;wire [1:0] green;wire [1:0] red;wire [1:0] yellow;traffic_lightsimulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow( yellow));always #10 clk=~clk;initialbeginreset=0;clk=1;func=2'b00;#20 reset=1;#21000 func=2'b01;#10000 func=2'b10;#10000 func=2'b11;endendmodule波形:五、源代码module frequency_divider(reset,clk,out);//分频模块,把50MHz时钟分成半秒计时器 input reset,clk;output out;reg [5:0] mol1,mol2;reg [6:0] mol3,mol4;reg out1,out2,out3,out;always @ (posedge clk or negedge reset)//把25000000分成40*40*125*125if(!reset)mol1<=6'd0;elsemol1<=(mol1==6'd39)?6'd0:mol1+6'd1;always @ (posedge clk or negedge reset)if(!reset)mol2<=6'd0;else if(out1)mol2<=(mol2==6'd39)?6'd0:mol2+6'd1;always @ (posedge clk or negedge reset)if(!reset)mol3<=7'd0;else if(out2)mol3<=(mol3==7'd124)?7'd0:mol3+7'd1;always @ (posedge clk or negedge reset)if(!reset)mol4<=7'd0;else if(out3)mol4<=(mol4==7'd124)?7'd0:mol4+7'd1;always @ (mol1 or mol2 or mol3 or mol4)beginout1=(mol1==6'd39);out2=((mol2==6'd39)&&out1);out3=((mol3==7'd124)&&out2);out=((mol4==7'd124)&&out3);endendmodulemodule traffic_light(reset,clk,func,green,red,yellow);//交通灯主模块input reset,clk;input [1:0] func;output [1:0] green,red,yellow;reg [1:0] green,red,yellow;reg [2:0] state;reg [6:0] cnt;wire in;parameter greentime1=6'd57;//主干道绿灯时间parameter greentime0=6'd27;//支干道绿灯时间parameter yellowtime=3'd3;//黄灯时间,绿灯闪时间frequency_divider fenpin(.reset(reset),.clk(clk),.out(in));//调用分频模块 always @ (posedge clk or negedge reset)if(!reset)begincnt<=7'd0;state<=3'd1;green<=2'b00;red<=2'b00;yellow<=2'b00;endelseif(in)//分频器结果当主模块始能if(func==2'b00)//选择不同功能控制开关 if(cnt==7'd0)case(state)//选择不同状态3'd1:begincnt<=greentime1<<1; state<=3'd2;green<=2'b10;red<=2'b01;yellow<=2'b00;end3'd2:begincnt<=yellowtime<<1; state<=3'd3;end3'd3:begincnt<=yellowtime<<1; state<=3'd4;green<=2'b00;red<=2'b01;yellow<=2'b10;end3'd4:begincnt<=greentime1<<1; state<=3'd5;green<=2'b01;red<=2'b10;yellow<=2'b00;end3'd5:begincnt<=yellowtime<<1; state<=3'd6;end3'd6:begincnt<=yellowtime<<1; state<=3'd1;green<=2'b00;red<=2'b10;yellow<=2'b01;endendcaseelsebegincnt<=cnt-7'd1;//倒计数,计数结束进入下一状态 case(state)3'd3:green[1]<=cnt[0];//主干道绿灯闪3'd6:green[0]<=cnt[0];//支干道绿灯闪endcaseendelse if(func==2'b10)//主干道常绿,支干道常红begincnt<=0;state<=3'd1;green<=2'b10;red<=2'b01;yellow<=2'b00;endelse if(func==2'b01)//主干道常红,支干道常绿begincnt<=0;state<=3'd1;green<=2'b01;red<=2'b10;yellow<=2'b00;endelse if(func==2'b11)//主干道,支干道黄灯一直闪begincnt<=0;state<=3'd1;green<=2'b00;red<=2'b00;yellow[1]<=~yellow[1];yellow[0]<=~yellow[1];endendmodule。
基于Verilog HDL语言的带左转复杂交通灯设计

基于Verilog HDL语言的带左转复杂交通灯设计1 引言EDA技术是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编辑、化简、分割、综合、优化和仿真,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC(Application Specific Integrated Circuit)芯片中,实现既定的电子电路设计功能。
EDA技术使得电子电路设计者的工作仅限于利用硬件描述语言和EDA软件平台来完成对系统硬件功能的实现,极大地提高了设计效率,缩短了设计周期,节省了设计成本。
实现路口交通灯系统的控制方法很多,可以用标准逻辑器件,可编程控制器PLC,单片机等方案来实现。
但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难。
因此,在设计中采用EDA技术,应用目前广泛应用的Verilog HDL硬件电路描述语言,实现交通灯系统控制器的设计,利用MAX+PLUS 集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。
2 Verilog HDL硬件描述语言的介绍Verilog HDL是目前应用最广泛的一种硬件描述语言。
Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby首创的。
1986年,他对Verilog HDL 的发展又作出了另一个巨大贡献:提出了用于快速门级仿真的XL算法。
Verilog-XL算法的成功,使Verilog HDL语言得到迅速发展。
基于Verilog HDL的优越性,IEEE于1995年制定了Verilog HDL 的IEEE标准,即Verilog HDL1364-1995。
Verilog HDL语言具有以下特点:基本逻辑门,例如and,or和nand等都内置在语言中。
基于FPGA的交通灯控制器设计_毕业设计论文
基于FPGA的交通灯控制器设计_毕业设计论文摘要:随着城市交通拥堵问题的日益严重,交通灯控制器作为城市交通管理的重要组成部分,起着至关重要的作用。
在传统的交通灯控制系统中,使用的是基于微控制器或PLC的硬件实现方式,无法满足日益复杂的交通需求。
本论文提出了一种基于FPGA的交通灯控制器设计方案,通过利用FPGA的高度可编程性和并行处理能力,实现了对交通灯状态的实时监控和控制。
设计方案通过数码管和按钮进行交互,利用图形化编程软件进行开发和调试。
实验结果表明,所设计的FPGA交通灯控制器具有优异的性能和稳定性,能够满足各种交通场景下的需求。
关键词:交通灯控制器;FPGA;并行处理;图形化编程一、引言随着城市交通流量的不断增加,传统的交通灯控制系统已经不能满足日益复杂的交通需求。
传统的交通灯控制器使用的是基于微控制器或PLC的硬件实现方式,无法提供足够的计算性能和并行处理能力。
因此,本论文提出了一种基于FPGA的交通灯控制器设计方案,通过利用FPGA的高度可编程性和并行处理能力,实现对交通灯状态的实时监控和控制。
二、设计方案本设计方案采用了FPGA作为控制器的核心,通过图形化编程软件进行开发和调试。
设计方案将交通灯控制分为四个主要模块:状态监控模块、状态控制模块、显示模块和按钮模块。
状态监控模块通过检测车辆和行人的状态,实时监控交通灯的状态。
状态控制模块根据交通流量和优先级进行状态切换和调度。
显示模块将交通灯状态显示在数码管上,方便行人和司机观察。
按钮模块通过按钮输入交通灯的初始状态,实现手动控制。
三、系统实现本系统采用Xilinx FPGA开发板进行实现,使用Verilog HDL进行程序编写。
在设计过程中,通过数码管和按钮进行交互,实现手动控制和状态显示。
图形化编程软件使得开发和调试更加便捷,节省了开发周期和人力资源。
四、实验结果通过对实验数据的分析和对比,我们发现所设计的FPGA交通灯控制器在交通流量大、复杂交叉路口和斑马线等特殊情况下,都能够稳定运行并保证交通流畅度。
基于FPGA的交通灯控制器的设计
基于FPGA的交通灯控制器的设计交通灯控制器是现代城市交通系统中至关重要的组成部分。
传统的交通灯控制器通常是基于微控制器或单片机设计的,但随着技术的发展,基于现场可编程门阵列(Field-Programmable Gate Array,FPGA)的交通灯控制器越来越受到关注。
本文将介绍基于FPGA的交通灯控制器的设计。
FPGA是一种可编程逻辑器件,具有高度灵活性和可重配置性。
与传统的微控制器相比,FPGA能够并行处理多个任务,提供更高的性能和更低的延迟。
在交通灯控制器的设计中,这种并行处理的能力可以显著提高交通信号的响应速度和效率。
首先,我们需要确定交通流量检测的方式。
常用的交通流量检测方法有传感器检测、视频图像处理和无线通信等。
在基于FPGA的交通灯控制器设计中,我们可以选择使用传感器检测的方法。
传感器可以通过检测来往车辆的存在与否来确定交通流量,然后将这些数据传输到FPGA中进行处理。
其次,我们需要设计合适的交通灯控制算法。
传统的交通灯控制算法主要基于定时控制,但这种方法无法根据实际交通流量进行动态调整。
在基于FPGA的交通灯控制器设计中,我们可以采用基于车辆检测数据的自适应控制算法。
该算法可以根据交通流量的变化情况灵活地调整交通信号的周期和相位,以实现最优的交通流控制。
接下来,我们需要将交通灯控制算法实现在FPGA上。
使用HDL (Hardware Description Language)编程语言,如Verilog和VHDL,可以将交通灯控制算法描述为硬件逻辑电路。
然后,通过使用FPGA的开发工具,将HDL代码编译成可在FPGA上运行的位流文件。
通过将交通灯控制算法实现在FPGA上,可以实现高速的并行处理和低延迟的响应。
最后,我们需要连接FPGA与交通灯控制设备。
FPGA可以通过GPIO (General Purpose Input/Output)接口与其他设备进行通信。
通过将FPGA的输出信号与交通灯控制设备的输入信号连接,可以实现对交通灯的控制。
VerilogHDL编写的交通灯
1. module trafficlight(clk,lx,lx_l,lx_r,ly,ly_l,ly_r,c,done,m);input clk,c;//始终和初始化控制output done;output [5:0]m;//倒计时寄存器output lx,lx_l,lx_r,ly,ly_l,ly_r;//指示灯(分别是X、Y方向的直行、左转和右转)reg lx,lx_l,lx_r,ly,ly_l,ly_r;reg [5:0]m;reg [1:0]state;//状态机reg done;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//-------------------------------------------//状态模块always@(posedge clk)if(c)begin done<=1;state<=2'b00;endelsebegincase(state)s0:if(done)begin m<=6'd44;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s1;done<=1;m<=0;ends1:if(done)begin m<=6'd24;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s2;done<=1;m<=0;ends2:if(done)begin m<=6'd29;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s3;done<=1;m<=0;ends3:if(done)begin m<=6'd14;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s0;done<=1;m<=0;endendcaseend//-----------------------------------------//输出模块always@(posedge clk)begincase(state)s0:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b101001;s1:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b011001; s2:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001101; s3:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001011; endcaseend//-------------------------------------------- endmodule2.生成的状态机3.整体的图,四个状态都包括X方向由直行变左转,符合倒计时的要求。
4 基于Verilog_HDL设计的交通灯——代码
input clr,clk;
output red_led,yellow_led,green_led,a,b,c,d,e,f,g,p,sel;
endcase
else begin
if(timer>8'h46)timer<=8'h00;
else if(timer==8'h?0)timer<=timer-4'h7;
else timer<=timer-1'b1;
end
endmodule
anydiv_clk anydiv_clk1(.cki(clk),.f(2'd2),.cko(second)),
anydiv_clk2(.cki(clk),.f(12'd1000),.cko(scanclk));
deled deled(.in(din),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g),.dp(p));
assign red_led=(state==red)?1:0;
assign green_led=(state==green)?1:0;
assign yellow_led=(state==yellow)?1:0;
always@(posedge clk or negedge clr) //posedge state_clk or
if(q>8'h46)q=8'h01;
else if(q==8'h?0)q=q-4'h7;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2009.2011.141引言针对采用单片机和可编程控制器PLC 实现交通灯控制器的不足,如:存在修改、调试均需要硬件电路支持,且存在采用的电路原件相对较多、接线复杂、故障率高、可靠性低等不足[1,2]。
尽管文献[3,4]的作者在实时性和自适应控制系统设计方面展开了研究,但其依赖硬件电路支持的不足仍然存在。
为此,研究者和工程师们寻求其他设计交通灯控制器的途径,而随着Electronic Design Automation 技术的发展,在线可编程逻辑器件PLD 的出现,使得用户在实验室制作专用集成电路成了现实。
研究者提出了一些基于VHDL 的交通灯控制器的设计方案[5-8],有效地克服了基于PLC 交通灯设计与实现方案的不足,其中,HDL (Hardware Description Language ,硬件描述语言)是一种描述硬件工作的语言。
Verilog HDL 是工业和学术界的硬件设计者常用的两种主要的HDL 之一。
文献[6]的作者依据Altera 公司的EDA 软件平台Max+PlusII ,给出CPLD 芯片上交通灯系统的控制过程的实现,而文献[8]的作者选择XILINX 公司的FPGA 芯片(如同文献[7]的设计工作),采用ISE5.X 和MODELSIMSE6.0开发工具进行了程序的编译和功能仿真。
2交通灯系统控制器的设计与实现2.1设计要求无论采用何种手段进行交通灯控制器的设计,交通灯控制器均遵循类似的工作机制,借用文献[5-8]的设计思路,按照以下规则对系统进行控制:(1)十字路口的A 方向(主干道)、B 方向(支干道)各设红(R),黄(Y),绿(G)和左拐(L),右拐(R )五盏灯,A 方向4种灯按“绿黄左黄红黄”的顺序循环亮灭,B 方向4种灯按“红黄绿黄左黄”的顺序循环亮灭,并能将灯亮的时间以倒计时的形式显示出来。
(2)保证主干道绝对优先,初始状态设为主干道绿灯,支干道红灯。
(3)两个方向各种灯亮的时间应该能够非常方便地进行设置和修改,此外设A 方向是主干路,车流量大,因此A 方向通行的时间在正常模式下比B 方向时间长一些。
(4)每个方向红灯亮的时间等于另一方向绿、黄、左拐、黄灯亮的时间。
而右拐灯常亮。
(5)黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人该方向马上要禁行了。
(6)加入智能控制功能:1)增加输入控制端Model2,用来控制当B 方向车流量过大时增加B 方向通行时间,起到分流的作用。
2)增加输入控制端warn ,形成两个模式:①单向通行模式:对于特殊时期,通过该端输入可控制两方向全为红灯。
②夜间警惕模式:在夜间A 、B 方向全为黄灯并伴随闪烁。
基于Verilog HDL 语言的复杂交通指标灯设计与实现杨杨(南京师范大学强化培养学院,南京210046)摘要:为克服采用单片机或PLC 来实现交通灯控制器的不足,在已有基于Verilog HDL 硬件描述语言的交通灯设计的基础上,给出了一种基于Verilog HDL 硬件描述语言的复杂交通指标灯设计;同时,选择XINLINX 公司的FPGA 芯片,采用ISE9.1i 开发工具进行了程序的编译与功能仿真,实现了交通灯控制器的硬件电路描述。
仿真结果验证了提出的设计方案的正确性,下载到在线可编程逻辑器件CPLD 芯片,实现了相应的功能。
关键词:Verilog HDL ;FPGA ;CPLD ;交通灯控制器Designing and Implementing a Complicated Traffic Light by UsingVerilog HDLYANG Yang(Honor School,Nanjing Normal University ,Nanjing 210046)Abstract :To overcome the disadvantages of the traffic light controller implemented by using Single Chip or PLC,based onthe existing Verilog HDL-based design strategy for traffic light,in this paper,we introduce a design strategy by using Verilog HDL,and meanwhile compile the developed grogram and simulate the function of the traffic light by employing ISE9.1i development tool for FPGA Chip made by XINLINX Company.Further,the hardware description of the traffic light controller is implemented.The simulated results show the correctness of the newly design scheme,downloading corresponding codes into the on-line CPLD chip can implement a complicated traffic light.Key words :Verilog HDL ;FPGA ;CPLD ;Traffic light controller基金项目:本课题得到南京师范大学2010年学生科学基金(首批立项)项目资助。
作者简介:杨杨,男,09级工科强化班学生。
272011.142.2系统控制器依据2.1节中介绍的交通灯控制器的功设计要求,类似于文献[6]中控制变量的设置,采用两个并行执行的always 模块来分别控制A 和B 两个方向的4盏灯,这两个always 模块使用同一个时钟信号,以进行同步,即两个always 模块的敏感信号是同一个。
同时,交通灯控制器的状态转换表如表1所示。
表1中“1”表示灯亮,“0”表示灯灭。
依据表1所示,控制程序的描述如下:module traffic (CLK,clk1,EN,LAMPA,LAMPB,seg,an1,an2,an3,an4,warn,model2);output [6:0]seg;output [4:0]LAMPA,LAMPB;output an1,an2,an3,an4;input CLK,EN,clk1,model2;input [1:0]warn;wire [7:0]ACOUNT,BCOUNT;reg an1,an2,an3,an4;//位选信号reg [6:0]seg,temp;reg [7:0]numa,numb;//存储亮灯时间的中间变量reg tempa,tempb,tempc,tempd;//A 、B 方向状态变量,控//制倒计时和各交通灯之间的转换reg [3:0]counta,countb;//亮灯顺序控制变量reg [7:0]ared,ayellow,agreen,aleft,aright,bred,byellow,bgreen,bleft,bright;reg [4:0]LAMPA,LAMPB;reg [1:0]flag=0;initial beginnuma=0;numb=0;tempa=0;tempb=0;counta=0;countb=0;ared =0;ayellow =0;agreen =0;aleft =0;bred =0;byellow =0;bgreen=0;bleft=0;LAMPA=0;LAMPB=0;endalways @(EN)if (!EN)begin //设置各种灯的计数器的预置数if (!model2)beginared <=8'b01000000;//40秒ayellow <=8'b00000101;//5秒agreen <=8'b01000101;//45秒aleft <=8'b00010101;//15秒//aright<=8'd105;bred <=8'b01100101;//65秒byellow <=8'b00000101;//5秒bleft <=8'b00010101;//15秒bgreen <=8'b00100000;//20秒//bright<=8'd105;end else beginared <=8'b01010000;//50秒ayellow <=8'b00000101;//5秒agreen <=8'b00110101;//35秒aleft <=8'b00010101;//15秒//aright<=8'd105;bred <=8'b01010101;//55秒byellow <=8'b00000101;//5秒bleft <=8'b00010101;//15秒bgreen <=8'b00110000;//30秒//bright<=8'd105;end endassign ACOUNT=numa;assign BCOUNT=numb;always @(posedge CLK)//该进程控制A 方向的四种灯if (EN)beginif (!warn)beginif (!tempa)begintempa<=1;case (counta)//控制亮灯的顺序0:begin numa<=agreen;LAMPA<=20;counta<=1;end 1:begin numa<=ayellow;LAMPA<=18;counta<=2;end 2:begin numa<=aleft;LAMPA<=24;counta<=3;end 3:begin numa<=ayellow;LAMPA<=18;counta<=4;end 4:begin numa<=ared;LAMPA<=17;counta<=5;end 5:begin numa<=ayellow;LAMPA<=18;counta<=0;end //default:LAMPA<=4;endcase end elsebegin //倒计时if (numa>1)beginif (numa [3:0]==0)beginnuma [3:0]<=4'b1001;numa [7:4]<=numa [7:4]-1;end else beginnuma [3:0]<=numa [3:0]-1;if (numa==2)tempa<=0;end end else beginA 方向B 方向10100101001001010010110001100010010100101000110001100011000110001100011111右aright 左aleft 绿agreen 黄ayellow 红ared 右aright 左aleft 绿agreen 黄ayellow 红ared 表1交通灯控制器状态转换表28LAMPA<=4'b1000;counta<=0;tempa<=0;endendendelseif(warn==1)begin LAMPA<=1;numa<=0;endelseif(warn==2)beginif(!tempc)begin LAMPA<=2;numa<=0;tempc<=1;end else LAMPA[1:1]<=~LAMPA[1:1];//黄灯闪烁endendelsebegin LAMPA<=0;counta<=0;tempa<=0;tempc<=0;end always@(posedge CLK)//该进程控制B方向的四种灯if(EN)beginif(!warn)beginif(!tempb)begintempb<=1;case(countb)//控制亮灯的顺序0:begin numb<=bred;LAMPB<=17;countb<=1;end1:begin numb<=byellow;LAMPB<=18;countb<=2;end 2:begin numb<=bgreen;LAMPB<=20;countb<=3;end3:begin numb<=byellow;LAMPB<=18;countb<=4;end 4:begin numb<=bleft;LAMPB<=24;countb<=5;end5:begin numb<=byellow;LAMPB<=18;countb<=0;end//default:LAMPB<=1;endcaseendelsebegin//倒计时if(numb>1)beginif(!numb[3:0])beginnumb[3:0]<=9;numb[7:4]<=numb[7:4]-1;endelsebeginnumb[3:0]<=numb[3:0]-1;if(numb==2)tempb<=0;endendelsebeginLAMPB<=4'b1000;tempb<=0;countb<=0;endendendelseif(warn==1)begin LAMPB<=1;numb<=0;endelseif(warn==2)beginif(!tempd)begin LAMPB<=2;numb<=0;tempd<=1;end else LAMPB[1:1]<=~LAMPB[1:1];//黄灯闪烁end endelsebegin LAMPB<=0;countb<=0;tempb<=0;tempd<=0;endalways@(posedge clk1)begin{an1,an2,an3,an4}=4'b1111;flag=flag+1;//flag不断加1case(flag)0:begin temp=numa[7:4];an1=0;end1:begin temp=numa[3:0];an2=0;end2:begin temp=numb[7:4];an3=0;end3:begin temp=numb[3:0];an4=0;endendcasecase(temp)4'd0:seg=7'b1111110;4'd1:seg=7'b0110000;4'd2:seg=7'b1101101;4'd3:seg=7'b1111001;4'd4:seg=7'b0110011;4'd5:seg=7'b1011011;4'd6:seg=7'b0011111;4'd7:seg=7'b1110000;4'd8:seg=7'b1111111;4'd9:seg=7'b1111011;//default:seg=7'b1111001;endcaseendendmodule为了更直观地加以描述,将上面的文本模块编译生成一个符号,并加上输入输出引脚,构成完整的交通灯控制器顶层电路,设计的交通灯控制器总体框图如图1所示。