交通灯设计 verilog
verilog课程设计交通灯

verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。
具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。
二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。
具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。
三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。
首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。
四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。
此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。
五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。
verilog交通灯课程设计

verilog交通灯课程设计一、课程目标知识目标:1. 让学生掌握Verilog硬件描述语言的基本语法和结构;2. 使学生理解交通灯系统的基本工作原理和逻辑设计;3. 帮助学生掌握利用Verilog设计交通灯控制器的方法。
技能目标:1. 培养学生运用Verilog语言进行数字系统设计的能力;2. 提高学生分析和解决实际问题的能力;3. 培养学生运用仿真工具对设计进行验证和调试的能力。
情感态度价值观目标:1. 培养学生积极探索、勇于实践的精神;2. 培养团队合作意识,提高沟通与协作能力;3. 增强学生对我国交通事业的关注和责任感。
课程性质:本课程为电子信息类专业的实践性课程,旨在通过实际项目设计,提高学生对Verilog语言和数字系统设计的理解和应用能力。
学生特点:学生已具备一定的数字电路基础知识,熟悉Verilog基本语法,但缺乏实际项目经验。
教学要求:结合实际交通灯系统,引导学生运用所学知识进行设计,注重理论与实践相结合,培养学生的实际操作能力和创新能力。
在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. 交通灯系统原理介绍:分析交通灯系统的基本工作原理,包括信号灯的时序关系和控制逻辑。
- 相关教材章节:第二章 数字电路基础,第三节 时序逻辑电路。
2. Verilog基础知识回顾:复习Verilog的基本语法、数据类型、运算符和模块结构。
- 相关教材章节:第一章 Verilog语言概述,第二节 Verilog语言基础。
3. 交通灯控制器设计:指导学生使用Verilog设计一个简单的交通灯控制器。
- 相关教材章节:第三章 数字系统设计,第四节 状态机的设计与应用。
4. 仿真与验证:介绍仿真工具的使用,对设计的交通灯控制器进行功能验证和时序分析。
- 相关教材章节:第四章 仿真与验证,第一节 ModelSim仿真工具的使用。
5. 实践操作:组织学生进行实际操作,编写代码、配置仿真环境、运行仿真并调试程序。
基于verilog的交通灯设计(状态机)

实验课题:基于verilog的交通灯设计(状态机)一、Verilog程序(主程序+激励)1)主程序/*顶层模块*/module traffic_light(clk,rst,out);input clk,rst;output [5:0]out;wire [4:0] x;delay D(.clk(clk),.rst(rst),.cnt(x));state S(.in(x),.rst(rst),.clk(clk),.out(out));endmodule/*延时模块*/module delay(clk,rst,cnt);input clk,rst;output[4:0]cnt;reg[4:0]cnt;always@(posedge clk)beginif(!rst)cnt<=0;else if(cnt<29)cnt<=cnt+1;else cnt<=0;endendmodule/*状态机模块*/module state(clk,in,rst,out);input clk,rst;input[4:0]in;output [5:0]out;reg [5:0]out;reg[3:0]state;parameter r1_g2or1_2_y=6'b100010,r1_y2og1_r2=6'b001100,g1_r2oy1_r2=6'b010100, y1_r2or1_g2=6'b100001,A='b0001,B='b0010,C='b0100,D='b1000;always@(posedge clk)beginif(!rst)beginstate<=A;out<= y1_r2or1_g2;endelsebegincase(state)A: beginif(in<25)state<=A;elsebeginstate<=B;out<=r1_g2or1_2_y;endendB: beginif(in>24)state<=B;elsebeginstate<=C;out<=r1_y2og1_r2;endendC: beginif(in<25)state<=C;elsebeginstate<=D;out<=g1_r2oy1_r2;endendD: beginif(in>24)state<=D;elsebeginstate<=A;out<=y1_r2or1_g2;endendendcaseendendendmodule2)激励module test;reg clk,rst;wire [5:0]out;traffic_light test(clk,rst,out);initialbeginclk='b1;forever #5 clk=~clk;endinitialbeginrst='b0;#10 rst='b1;#500 rst='b0;#10 rst='b1;endendmodule二、实验波形图截图三、波形分析输出out[5:0]分别对应:out[5]:主干道红灯out[4]:主干道黄灯out[3]:主干道绿灯out[2]:支干道红灯out[1]:支干道黄灯out[0]:支干道绿灯初始状态为:主干道红灯亮,支干道绿灯亮。
用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。
最后用modelsim软件进行仿真。
②要求设计是一个可综合设计。
二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G100100IDLE100001S1100010S2001100S3010100S4根据实验要求画出控制器的状态转移图如下:三、代码1、源代码(1)控制器模块module traffic_lights(clk,rst,count,ew,sn);input clk,rst;input[5:0] count;output[2:0] ew,sn;reg[2:0] ew,sn;reg[3:0] state;parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk)if(!rst)beginstate<=Idle;endelsecasex(state)Idle: if(rst)beginstate<=s1;ends1: if(count=='d25)beginstate<=s2;ends2: if(count=='d30)beginstate<=s3;ends3: if(count=='d55)beginstate<=s4;ends4: if(count=='d60)beginstate<=s1;endendcasealways @(posedge clk)beginif(!rst)beginew<=3'b100;sn<=3'b100;endelsecasex(state)Idle: if(rst)beginew<=3'b100;sn<=3'b001;ends1: if(count=='d25)beginew<=3'b100;sn<=3'b010;ends2: if(count=='d30)beginew<=3'b001;sn<=3'b100;ends3: if(count=='d55)beginew<=3'b010;sn<=3'b100;ends4: if(count=='d60)beginew<=3'b100;sn<=3'b001;enddefault: state<=Idle;endcaseendendmodule(2)计数器模块module counter(en,clk,rst,out);output[5:0]out;input en,clk,rst;reg[5:0] out;always@(posedge clk or negedge rst)beginif(!rst)out<='d0;else if(!en&&out<'d60)out<=out+1;elseout<='d1;endendmodule(3)将控制器与计数器进行连接module traffic_lights_top(out,clk,rst,en,ew,sn); input clk,rst,en;output[2:0] ew,sn;output[5:0]out;wire[5:0] out;traffic_lights u1(.clk(clk),.rst(rst),.count(out),.ew(ew),.sn(sn));counter u2(.en(en),.clk(clk),.rst(rst),.out(out));endmodule2、激励`timescale 1ns/100ps module traffic_lights_tb;reg clk,rst,en;wire[2:0] ew,sn;wire[5:0]out;traffic_lights_top m(.clk(clk),.rst(rst),.en(en),.ew(ew),.sn(sn),.out(out));always#5 clk=~clk;initialen<=1;initialbeginclk<=1;en<=0;rst<=0;#5 rst<=1;endendmodule四、仿真波形(图一)(图二)五、波形说明波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。
verilog交通灯课程设计

verilog交通灯课程设计一、课程目标知识目标:1. 让学生掌握Verilog硬件描述语言的基本语法和使用方法。
2. 使学生了解交通灯系统的基本工作原理和组成。
3. 帮助学生理解数字电路设计的基本流程和仿真测试方法。
技能目标:1. 培养学生运用Verilog语言设计简单数字电路的能力。
2. 培养学生运用仿真工具对交通灯系统进行功能验证和性能分析的能力。
3. 培养学生通过小组合作,解决实际问题的能力。
情感态度价值观目标:1. 培养学生对数字电路设计的兴趣和热情,提高其学习积极性。
2. 培养学生严谨的科学态度和良好的团队协作精神。
3. 培养学生关注社会问题,将所学知识应用于实际生活中的意识。
课程性质:本课程为电子信息类专业的实践课程,通过Verilog语言设计交通灯系统,锻炼学生的实际操作能力。
学生特点:学生已具备一定的电子技术和Verilog语言基础,具有较强的学习能力和动手能力。
教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,培养学生解决实际问题的能力。
通过课程学习,使学生能够独立完成交通灯系统的设计和仿真,达到预期的学习成果。
1. Verilog基础知识回顾:包括数据类型、运算符、控制语句、模块和端口定义等,对应教材第1-3章内容。
2. 交通灯系统原理介绍:讲解交通灯系统的基本工作原理、状态转换和时序控制,对应教材第4章内容。
3. 交通灯系统设计:a. 设计要求:明确交通灯系统的功能要求和性能指标,对应教材第5章内容。
b. Verilog代码编写:指导学生运用Verilog语言编写交通灯控制模块,对应教材第6章内容。
c. 仿真测试:使用仿真工具对设计进行功能验证和性能分析,对应教材第7章内容。
4. 实践操作:a. 硬件描述语言实践:指导学生进行Verilog代码编写和调试,对应教材第8章内容。
b. 交通灯系统综合实践:组织学生进行交通灯系统设计和仿真,对应教材第9章内容。
5. 课程总结与评价:对学生的学习成果进行评价,总结课程收获和不足,对应教材第10章内容。
Verilog交通灯(模块化)

本交通灯由四个模块组成:1、顶层例化模块(traffic)2、同步时钟模块(mast_clk)3、东西方向(traffic_x)4、南北方向(traffic_y)module traffic(RESET,CLK,num_x,red_x,green_x,yellow_x,num_y,red_y,green_y,yellow_y);input RESET;input CLK;output red_x;output green_x;output yellow_x;output red_y;output green_y;output yellow_y;output [4:0] num_x,num_y;wire [6:0] num;mast_clk clk(.CLK(CLK),.RESET(RESET),.num(num));traffic_x Xx(.CLK(CLK),.RESET(RESET),.NUM(num),.red_x(red_x),.green_x(green_x),.yellow_x(yellow_x),.num_x(num_x));traffic_y Yy(.CLK(CLK),.RESET(RESET),.NUM(num),.red_y(red_y),.green_y(green_y),.yellow_y(yellow_y),.num_y(num_y));endmodulemodule mast_clk(CLK,RESET,num);input CLK;input RESET;output reg [6:0] num;always @(posedge CLK,negedge RESET)beginif(!RESET)num<=0;else if(num==59)num<=0;else num<=num+1'b1;endendmodulemodule traffic_x(CLK,RESET,NUM,red_x,green_x,yellow_x,num_x);input CLK;input RESET;input [6:0] NUM;output reg red_x;output reg green_x;output reg yellow_x;output [6:0] num_x;reg [6:0] num_x;parameter [2:0] red =3'b001,green =3'b010,yellow=3'b100;reg [2:0] state,next_state;always @(posedge CLK,negedge RESET)beginif(!RESET) state<=red;else state<=next_state;endalways @(NUM)begincase(state)red:beginif(NUM>'d29) begin next_state<=green;red_x<=0;green_x<=1;yellow_x<=0;num_x<=7'd54-NUM;endelse beginnext_state<=red;red_x<=1;green_x<=0;yellow_x<=0;num_x<=7'd29-NUM;endendgreen:beginif(NUM>'d54) begin next_state<=yellow;red_x<=0;green_x<=0;yellow_x<=1;num_x<=7'd59-NUM; endelse beginnext_state<=green;red_x<=0;green_x<=1;yellow_x<=0;num_x<=7'd54-NUM;endendyellow:beginif(NUM>'d58) begin next_state<=red; num_x=7'b0;endelse beginnext_state<=yellow;red_x<=0;green_x<=0;yellow_x<=1;num_x<=7'd59-NUM;endenddefault:next_state<=red;endcaseendendmodulemodule traffic_y(CLK,RESET,NUM,red_y,green_y,yellow_y,num_y);input CLK;input RESET;input [6:0] NUM;output reg red_y;output reg green_y;output reg yellow_y;output [6:0] num_y;reg [6:0] num_y;parameter [2:0] red =3'b001,green =3'b010,yellow=3'b100;reg [2:0] state,next_state;always @(posedge CLK,negedge RESET)beginif(!RESET) state<=green;else state<=next_state;endalways @(NUM)begincase(state)green:beginif(NUM>7'd29) begin next_state<=yellow;red_y<=1'b0;green_y<=1'b0;yellow_y<=1'b1;num_y<=7'd34-NUM;endelse beginnext_state<=green;red_y<=1'b0;green_y<=1'b1;yellow_y<=1'b0;num_y<=7'd29-NUM;endendyellow:beginif(NUM>7'd34) begin next_state<=red;red_y<=1'b1;green_y<=1'b0;yellow_y<=1'b0;num_y<=7'd59-NUM;endelse beginnext_state<=yellow;red_y<=1'b0;green_y<=1'b0;yellow_y<=1'b1;num_y<=7'd34-NUM;endendred:beginif(NUM>7'd58) beginnext_state<=green;num_y<=7'd0;endelse beginnext_state<=red;red_y<=1'b1;green_y<=1'b0;yellow_y<=1'b0;num_y<=7'd59-NUM;endenddefault:next_state<=green;endcaseendendmodule。
verilog课程设计-交通灯

课程论文论文题目基于DE2的交通灯设计完成时间课程名称 Verilog语言设计任课老师专业年级1.交通信号控制器设计要求与思路1.1设计背景FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。
本文介绍了用VerilogHDL语言设计交通灯控制器的方法,并在QuartusII系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。
本文通过EDA设计,利用VerilogHDL语言模拟仿真交通灯控制电路。
1.2设计要求根据交通灯控制器要实现的功能,考虑用两个并行执行的always语句来分别控制A方向和B方向的3盏灯。
这两个always语句使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。
每个always语句控制一个方向的3种灯按如下顺序点亮,并往复循环:绿灯----黄灯----红灯,每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置数法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行预置数就可以。
为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A方向和B方向各用两个数码管。
设定A方向红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s,B方向的红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s。
假如要改变这些时间,只需要改变计数器的预置数即可。
1.3设计思路两个方向各种灯亮的时间能够进行设置和修改,此外,假设B方向是主干道,车流量大,因此B方向通行的时间应该比A方向长。
交通灯控制器的状态转换表见下表。
表中,1表示灯亮,0表示灯不亮。
A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。
交通灯控制器状态转换表从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。
基于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时主干道红灯及支干道绿灯亮起。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数电课程设计学生姓名:专 业: 电子信息工程指导教师:完成日期:2016-6-30摘要Verilog HDL作为一种规范的硬件描述语言,被广泛应用于电路的设计中。
它的设计描述可被不同的工具所支持,可用不同器件来实现。
利用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Quartus5.0完成综合、仿真。
此程序通过下载到FPGA芯片后,可应用于实际的交通灯控制系统中。
关键词:Verilog HDL;硬件描述语言;状态;FPGAAbstractAs a common language for the description of hardware, Verilog HDL is widely applied in circuit designing. The design description can be supportted by differenttools and implemented by different devices.In this paper, the process of design ing traffic light controller system by the Verilog HDL topdown design method is presented, which has made the road traffic work well, the design of t his system has shown the readability, portability and easily understanding of Verilog HDL as a hard description language Circuit synthesis and simulation are pe rformed by Quartus5.0. The program can be used in the truly traffic light controller system by downloading to the FPGA chipKeywords:Verilog HDL; hardware description language; state; FPGA目录一、概述 (4)二、任务功能 (5)三.系统设计 (5)1.工作原理 (5)2.系统设计方案 (6)四、程序设计 (7)1.verilog源程序 (7)2.设备选择 (11)3.引脚 (12)五、仿真 (12)1.仿真波形 (12)2.硬件验证 (12)六、结束语 (13)七、参考文献 (14)一:概述HDL(Hardware Description Language,硬件描述语言)是一种描述硬件所做工作的语言。
目前,电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,HDL在这种形势下显示出了巨大的优势,展望将来HDL在硬件设计领域的地位将与C和C++在软件设计领域地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法而成为主要的硬件描述工具。
Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。
现在它们都已成为IEEE标准。
两者各有特点,但Verilog HDL 拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。
Quartus简介:Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
二、任务功能交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
基本要求:(1)设计一个交通红绿灯。
要求分主干道和支干道,每条道上安装红(主:red1,支:red2)绿(主:green1,支:green2)黄(主:yellow1,支:yellow2)三种颜色灯,由四种状态自动循环构成;(2)在交通灯处在不同的状态时,设计一个计时器以倒计时方式显示计时,主干道上绿灯亮30S,支干道上绿灯亮20S。
每个干道上,在绿灯转为红灯时,要求黄灯先亮5S。
在完成基本要求的基础上,可进一步增加功能、提高性能,如绿灯亮的时间可调。
三、系统设计1.工作原理:城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30sS1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5sS2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20sS3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s在S3结束后又回到(1)状态,并周期重复进行。
状态图如下:2.系统设计方案:根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图所示:四、程序设计30秒 5秒 20秒 5秒1.verilog源程序:module traffic(en,clk,rst,num1,num2,light1,light2,out1,out2,out3,out4,in1,in2); input en,clk,rst,in1,in2; //en为使能端。
in1,in2控制绿灯和红灯亮时间output [7:0] num1,num2;output [2:0] light1,light2;output [6:0]out1,out2,out3,out4;//输出四个数码管reg [6:0]out1,out2,out3,out4;reg tim1,tim2;reg [1:0]state1,state2;reg [2:0]light1,light2;reg [7:0] num1,num2;reg [7:0] red1,red2,green1,green2,yellow1,yellow2;parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//四个循环状态reg[25:0]count;reg div;always @(en )if(en)begin //设置计数初值if (!in1)begin green1<=8'b00110000;red2<=8'b00110000; end//30H,即30秒else begin green1<=8'b01100000;red2<=8'b01100000;end//60sif (!in2)begin red1<=8'b00100000;green2<=8'b00100000; end//20selse begin red1<=8'b01000000;green2<=8'b01000000; end//40syellow1<=8'b00000101; yellow2<=8'b00000101;//05sendalways@(posedge clk)//分频if (count==25000000) begin div<=1;count<=count+1;endelse if(count==50000000)begin div<=0;count<=0;endelse count<=count+1;always @(posedge div)beginif(rst) //复位情况控制beginlight1<=3'b001;num1<=green1;endelse if(en)begin //使能有效开始控制计数if(!tim1) //开始控制begin //主干道交通灯点亮控制tim1<=1;case(state1)//状态机s0:begin num1<=green1;light1<=3'b001;state1<=s1;ends1:begin num1<=yellow1;light1<=3'b010;state1<=s2;ends2:begin num1<=red1;light1<=3'b100;state1<=s3;ends3:begin num1<=yellow1;light1<=3'b010;state1<=s0;enddefault:light1<=3'b100;endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;//十位减1endelse num1[3:0]<=num1[3:0]-1; //个位减1if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge div ) //从干道beginif(rst) //复位情况控制beginlight2<=3'b100;num2<=red2;endelse if(en)beginif(!tim2)begintim2<=1;case(state1)s0:begin num2<=red2;light2<=3'b100;state2<=s1;ends1:begin num2<=yellow1;light2<=3'b010;state2<=s2;ends2:begin num2<=green2;light2<=3'b001;state2<=s3;ends3:begin num2<=yellow2;light2<=3'b010;state2<=s0;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendalways @(posedge clk)begin //数码管译码显示case(num1[3:0])4'b0000: out1<=~7'b0111111; //0 ,3F4'b0001: out1<=~7'b0000110; //1 ,064'b0010: out1<=~7'b1011011; //2 ,5B4'b0011: out1<=~7'b1001111; //3 ,4F4'b0100: out1<=~7'b1100110; //4 ,664'b0101: out1<=~7'b1101101; //5 ,6D4'b0110: out1<=~7'b1111101; //6 ,7D4'b0111: out1<=~7'b0000111; //7 ,074'b1000: out1<=~7'b1111111; //8, 7F4'b1001: out1<=~7'b1101111; //9, 6Fdefault: out1<=~7'b0111111; //0 ,3Fendcaseendalways @(posedge clk)begin //数码管译码显示case(num1[7:4])4'b0000: out2<=~7'b0111111; //0 ,3F 4'b0001: out2<=~7'b0000110; //1 ,06 4'b0010: out2<=~7'b1011011; //2 ,5B 4'b0011: out2<=~7'b1001111; //3 ,4F 4'b0100: out2<=~7'b1100110; //4 ,66 4'b0101: out2<=~7'b1101101; //5 ,6D 4'b0110: out2<=~7'b1111101; //6 ,7D 4'b0111: out2<=~7'b0000111; //7 ,07 4'b1000: out2<=~7'b1111111; //8, 7F 4'b1001: out2<=~7'b1101111; //9, 6F default: out2<=~7'b0111111; //0 ,3F endcaseendalways @(posedge clk)begin //数码管译码显示case(num2[3:0])4'b0000: out3<=~7'b0111111; //0 ,3F 4'b0001: out3<=~7'b0000110; //1 ,06 4'b0010: out3<=~7'b1011011; //2 ,5B 4'b0011: out3<=~7'b1001111; //3 ,4F 4'b0100: out3<=~7'b1100110; //4 ,66 4'b0101: out3<=~7'b1101101; //5 ,6D 4'b0110: out3<=~7'b1111101; //6 ,7D 4'b0111: out3<=~7'b0000111; //7 ,07 4'b1000: out3<=~7'b1111111; //8, 7F 4'b1001: out3<=~7'b1101111; //9, 6F default: out3<=~7'b0111111; //0 ,3F endcaseendalways @(posedge clk)begin //数码管译码显示case(num2[7:4])4'b0000: out4<=~7'b0111111; //0 ,3F 4'b0001: out4<=~7'b0000110; //1 ,06 4'b0010: out4<=~7'b1011011; //2 ,5B 4'b0011: out4<=~7'b1001111; //3 ,4F 4'b0100: out4<=~7'b1100110; //4 ,66 4'b0101: out4<=~7'b1101101; //5 ,6D 4'b0110: out4<=~7'b1111101; //6 ,7D 4'b0111: out4<=~7'b0000111; //7 ,074'b1000: out4<=~7'b1111111; //8, 7F 4'b1001: out4<=~7'b1101111; //9, 6F default: out4<=~7'b0111111; //0 ,3F endcaseendendmodule2.设备选择:3.引脚绑定五、仿真1.仿真波形:2.硬件验证:将verilog源程序文件下载到DE2开发板进行硬件验证,完成检测和调试。