verilog课程设计—交通灯1

合集下载

verilog课程设计交通灯

verilog课程设计交通灯

verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。

具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。

二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。

具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。

三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。

首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。

四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。

此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。

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的交通灯设计(状态机)一、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语言编写交通灯程序

用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交通灯课程设计

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交通灯(模块化)

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课程设计-交通灯

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的交通灯控制器设计

基于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时主干道红灯及支干道绿灯亮起。

VerilogHDL编写的交通灯

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方向由直行变左转,符合倒计时的要求。

Verilog语言实现设计交通灯控制器

Verilog语言实现设计交通灯控制器

Verilog语言实现设计交通灯控制器实验模块组成:(计数器+控制器)可以分开实现,最好一起实现避免接口对接时出错译码器实验要求:1.在十字路口两个方向各设一组红、绿、黄灯,显示顺序为:南北方向是绿、黄、红灯;东西方向是红、绿、黄灯。

2.要求红、绿、黄灯的持续时间分别为:10s、7s、3s,东西、南北方向各用一个数码管显示倒计时时间。

3.当任意方向出现特殊情况时,应优先放行,即使各方向均亮红灯,倒计时停止,且显示数字闪烁。

经过规定时间之后,恢复正常运行状态。

//计数器+控制器module ZTJ(clk,s,count1,count2,led);parameter s0=6’b010100,s1=6’b001100,s2=6'b100010,s3=6'b100001,s4=6'b100100;input clk,s;output[3:0]count1;output[3:0]count2;output[5:0]led;reg[3:0]count1;reg[3:0]count2;reg[5:0]led;reg[5:0]st;reg[5:0]jicun;reg[3:0]i;always @(posedge clk)if(s==0 &led==6’b000000)beginled<=s0;st<=s0;count1<=4'b0110;count2〈=4’b1001;endelse if(s==0 & led!=6’b000000)begincase(st)s0:if(count1!=4'b0000) begin led<=s0;count1〈=count1—1;count2<=count2-1;end else begin count1<=4'b0010;st<=s1;ends1:if(count1!=4'b0000)begin led〈=s1;count1〈=count1—1;count2<=count2-1;end else begin count1〈=4’b1001;count2<=4'b0110;st<=s2;ends2:if(count2!=4’b0000) begin led〈=s2;count1<=count1-1;count2〈=count2-1;end else begin count2〈=4’b0010;st〈=s3;ends3:if(count2!=4'b0000)begin led<=s3;count1〈=count1—1;count2〈=count2—1;end else begin count1<=4’b0110;count2〈=4’b1001;st<=s0;enddefault:led<=s4;endcaseendelsebeginjicun<=led;led〈=s4;count1<=count1;count2〈=count2;i<=i+1;if(i==4’b1001)led〈=jicun;endendmodule//译码器module DECL7S(A,LED7S);input [3:0]A;output [6:0]LED7S;reg [6:0]LED7S;always@(A)begincase(A)4’b0000:LED7S<=7'b0111111;4’b0001: LED7S<=7'b0000110;4'b0010: LED7S<=7'b1011011;4'b0011:LED7S〈=7'b1001111;4'b0100:LED7S<=7’b1100110;4’b0101:LED7S<=7’b1101101;4'b0110: LED7S<=7’b1111101;4'b0111:LED7S<=7'b0000111;4’b1000:LED7S<=7'b1111111;4’b1001: LED7S<=7'b1101111;4'b1010: LED7S<=7’b1110111;4’b1011:LED7S〈=7'b1111100;4’b1100: LED7S〈=7'b0111001;4'b1101:LED7S<=7’b1011110;4'b1110: LED7S<=7'b1111001;4’b1111:LED7S〈=7’b1110001;default:LED7S〈=7'b0111111;endcaseendendmodule。

verilog语言-设计一个交通灯信号控制电路

verilog语言-设计一个交通灯信号控制电路

文案大全
实用文档
直接用两个七段译码显示倒计时数。 Rst 信号是清零用的,为“ 1”时,三个信号灯及循环变量 k 复位置“ 0”。
流程图
开始 输入 50MHz
clk1:1Hz 循环变量 k
计数 70≤ k≤
yel=~yel
60 ≤ k ≤ 69
0≤ k≤
图四
red=1 显示输出
blu=1
3.时序说明:
blu,yel,red
全局时钟信号, 50MHz 全局复位端,高电平有效
倒计时个位上数字 倒计时十位上数字
各个灯状态
框图说明 :
状态机的输入,只有时钟信号 clk 和复位信号 reset.输出为数码管十位和个位的二进制
显示状态以及三个灯的颜色显示 ( blu,yel,red, 分别是绿黄红灯, “ 1”表示灯亮,“ 0”表示灭)。
顶层及控制模块: 此模块做例化, 和控制, 是本程序的主体,对底层的分频模块和译码显示模块进行例化,并 且做控制设计。控制设计如下:
采用同步时序逻辑。包括一个循环计数器,三个比较器, 控制。
always
通过分频后的 CLK1 新号( 1Hz),进行对一个循环变量“ k”的周期为 130 的循环,进 而控制三个灯的控制;具体循环为: clk1 每进行一次跳变, k 值减 1;当 K=0 时,重新复值
实用文档
西北工业大学
《FPGA 》 实验报告
学 院: 学 号: 姓 名: 专 业: 实验时间: 实验地点: 指导教师:
软件与微电子学院 2011303596 杨清山 微电子学 2013/11/11 毅字楼 335 韩兵
西北工业大学
2013 年 11 月
文案大全
实用文档

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G1 0 0 1 0 0 IDLE1 0 0 0 0 1 S11 0 0 0 1 0 S20 0 1 1 0 0 S30 1 0 1 0 0 S4根据实验要求画出控制器的状态转移图如下:三、代码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/100psmodule 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.

. . .. . .基于Verilog语言交通灯设计报告院系:工学院自动化系年级:14级班级:10班:周博学号:14032291这学期我学习了EDA技术及其创新实践这门课程,通过自己学习的容和自己查找的一些资料用Verilog语言编写交通灯的程序,并且完成了仿真。

Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。

现在它们都已成为IEEE标准。

两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。

一、设计背景和意义交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。

在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。

二、设计任务(1)设计一个交通红绿灯。

要求分主干道和支干道,每条道上安装红(主:red1,支:red2)绿(主:green1,支:green2)黄(主:yellow1,支:yellow2)三种颜色灯,由四种状态自动循环构成;(2)在交通灯处在不同的状态时,设计一个计时器以倒计时方式显示计时,主干道上绿灯亮30S,支干道上绿灯亮20S。

每个干道上,在绿灯转为红灯时,要求黄灯先亮5S。

在完成基本要求的基础上,可进一步增加功能、提高性能,如绿灯亮的时间可调。

三、设计方案1.工作原理:城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30sS1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5sS2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20sS3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s在S3结束后又回到(1)状态,并周期重复进行。

基于FPGA和Verilog HDL的交通灯控制器设计(一)

基于FPGA和Verilog HDL的交通灯控制器设计(一)

中文摘要与关键词摘 要:V e r i l o g H D L作为一种规范的硬件描述语言,被广泛应用于电路的设计中。

他的设计描述可被不同的工具所支持,可用不同器件来实现。

利用V e r i l o g H D L语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Q u a r t u s I I完成综合、仿真、进行管脚分配、绘出仿真波形及R T L 原理图。

此程序通过下载到F P G A芯片后,可应用于实际的交通灯控制系统中。

关键词:V e r i l o g H D L;硬件描述语言;状态;F P G A英文摘要与关键词A b s t r a c t:A s a c o m m o n l a n g u a g e f o r t h e d e s c r i p t i o n o f h a r d w a r e,V e r i l o g H D L i s w i d e l y a p p l i e d i n c i r c u i t d e s i g n i n g T h e d e s i g n d e s c r i p t i o nc a n b e s u p p o r t t ed b y d i f fe r e n t t o o l s a n d i m p l e m e n t e d b y d if f e r e n t d e v i c e sI n t h i s p a p e r,t h e p r o c e s s o f d e s i g n i n g t r a f f i c l i g h t c o n t r o l l e r s y s t e m b y t h e V e r i l o g H D L t o p d o w n d e s i g n m e t h o d i s p r e s e n t e d,w h i c h h a s m a d e t h er o a d t r a f f i c w o r k w e l l,t h e d e s i g n o f t h i s s y s t e m h a s s h o w n t h er e a d a b i l i t y,p o r t a b i l i t y a n d e a s i l y u n d e r s t a n d i n g o f V e r i l o g H D L a s a h a r dd e s c r i p t i o n l a n g u a g e C i r c u i t s y n t h e s i s、s i m u l a t i o n、t o p i n a l l o c a t i o n a n d R T L s i m u l a t i o n w a v e f o r m d r a w n s c h e m a t i c a r e p e r f o r m e d b y Q u a r t u s I I.T h ep r o g r a m c a n b e u s e d i n t h e t r u l y t r a f f i c l i g h t c o n t r o l l e r s y s t e m b yd o w n l o a d i n g t o t he F P G A c h i pK e y w o r d s:V e r i l o g H D L;h a r d w a r e d e s c r i p t i o n l a n g u a g e;s t a t e;F P G A第一章绪论近20年来,电子系统的设计方法都发生了深刻的变化。

基于verilog HDL数字系统设计--交通灯

基于verilog HDL数字系统设计--交通灯

交通灯控制器-------数字系统设计文档姓名:学号:一.课题简介:我在本课程中所选择的课题是用Verilog HDL 实现的交通灯控制器。

该交通灯控制器处在一个城乡结合处的十字路口,这个十字路口分为主干道和乡村公路,由于主干道的车流量远大于乡村公路的车流量,所以这个交通灯控制器不同于常见的交通灯控制器。

这个交通控制器的功能有如下几点:1.当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。

2.当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。

主干道最短通车时间为25s 。

3.当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。

4.不论主干道情况如何,乡村公路通车最长时间为16s。

5.在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。

6.用开关代替传感器作为检测车辆是否到来的信号。

用红、绿、黄三种颜色的发光二极管作交通灯。

要求显示时间,倒计时。

二.控制框图和设计流程图:1.这个交通灯控制器由三个主要部分组成---核心控制器以及、译码器、分频器。

2.流程图的内容同上面交通灯的功能,这里不再多做解释。

三.各部分组件的具体实现和分析:1.核心控制器实现基本功能:(1)它的输入端有4个输入信号—C、RST、ST、CLK。

C信号是一个检测信号,检测乡村公路是否有车,C=0示无车,这种情况下乡村公路一直亮红灯,主干道一直亮红灯,并且两个计数器都同步30秒重复计数,直到C=1即乡村公路有车是才跳变到其他情况。

RST信号是复位信号,当RST=0时,这个交通灯控制器才能正常工作。

当RST=1时,所有计数器都立刻赋初值,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。

ST信号表示使能信号,当ST=1时,交通灯控制器才能正常工作。

ST=0时,所有计数器都停止计数,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G1 0 0 1 0 0 IDLE1 0 0 0 0 1 S11 0 0 0 1 0 S20 0 1 1 0 0 S30 1 0 1 0 0 S4根据实验要求画出控制器的状态转移图如下:三、代码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/100psmodule 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交通灯设计

module jtd (zhi,clk,u,i); input zhi,clk;output [2:0]u,i;reg[2:0]u,i;reg d;always@(posedge clk) beginif(zhi)beginu[2:0]<=3'b100;i[2:0]<=3'b001;endelse begind<=d+1;if(d==30)u[2:0]<=3'b010; if(d==34)beginu[2:0]<=3'b001; i[2:0]<=3'b100; endif(d==64)beginu[2:0]<=3'b001; i[2:0]<=3'b010; endif(d==68)beginu[2:0]<=3'b100; i[2:0]<=3'b001; d<=0;endmodule jtd(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [5:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s0;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin u[2:0]<=3'b010;i[2:0]<=3'b001;d=d+1;if(d==4)begin state<=s2;d=0;end else state<=s1;ends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin u[2:0]<=3'b001;i[2:0]<=3'b010;d=d+1;if(d==4)begin state<=s4;d=0;end else state<=s3;enddefault: state<=s4;endcaseendendendmodule黄灯闪module jtde(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [6:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin d=d+1;if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s1;endif(d==3)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==4)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s2;d=0;endends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin d=d+1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d=0;endenddefault: state<=s4;endcaseendend黄灯闪且倒计时module mnb(zhi,u,i,clk,rst,ugx,usx,igx,isx);input zhi,clk,rst;output [2:0]u,i;output [3:0]ugx,usx,igx,isx;reg [2:0]u,i;reg[4:0]state;reg [4:0]ugx,usx,igx,isx;reg [6:0]d,e,f;initialbegin d<=0;e<=30;f<=34;endparameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=0;usx<=0;igx<=0;isx<=0;if(zhi)beginstate<=s0;d<=0;e<=30;f<=35;end else state<=s4;ends0:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e< =e-1;f<=f-1;if(d==30)begin state<=s1;d<=0;e<=4;f<=4;end else state<=s0;ends1:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;e<=e-1;f<=f-1;if(d==0)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==3)beginu[2:0]<=3'b000;i[2:0]<=3'b001;state<=s2;d<=0;e<=35;f<=30;endends2:beginu[2:0]<=3'b001;i[2:0]<=3'b100;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e< =e-1;f<=f-1;if(d==30) begin state<=s3;d<=0;e<=4;f<=4;end else state<=s2;ends3:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f<=f-1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d<=0;endenddefault: state<=s4;endcaseendendendmodule黄灯闪。

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯实验目的写一个交通灯,要求:有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim 软件进行仿真。

要求设计是一个可综合设计。

实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G100100IDLE100001S1100010S2001100S3010100S4根据实验要求画出控制器的状态转移图如下:代码源代码(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/100psmodule 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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计课程名称__EDA技术综合设计与实践__ 题目名称交通灯控制系统学生学院信息工程学院专业班级通信工程08(4)学号 **********学生姓名高高指导教师李学易2011 年12 月26 日基于FPGA 的交通灯控制器的设计摘要:Verilog 是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。

随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD 结构,成为设计专用集成电路和其他集成电路的主流。

现代城市在日常运行控制中,越来越多的使用红绿灯对交通进行指挥和管理。

而一套完整的交通灯控制系统通常要实现自动控制和手动控制去实现其红绿灯的转换。

基于FPGA 设计的交通灯控制系统电路简单、可靠性好。

本设计利用Verilog HDL 语言、采用层次化混合输入方式,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。

在QUARTUSⅡ下对系统进行了综合与仿真。

仿真结果表明系统可实现十字路口红绿灯及左转弯控制和倒计时显示,并能够自动控制交通灯转变。

通过应用Verilog HDL 对交通灯控制器的设计,达到对Verilog HDL 的理解关键词:FPGA ;交通灯自动控制;Verilog HDL;Quartus Ⅱ1.交通信号控制器设计要求与思路1.1设计要求在交通灯系统中(图1),路口1、2、3、4均需要红、黄、绿、左转四盏灯(用RYGL分别表示) ,并且每个路口都需要一个倒数的计时器,假设绿灯每次维持的时间是40 s ,黄灯为5 s ,左转灯10s,红灯60s,黄灯亮时以一定的频率闪动。

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

实现设计目标如下:(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,通过电路对十字路口的两组交通灯的状态实现自动循环控制;(2)实现东西车道和南北车道上的车辆交替运行,绿灯每次维持的时间是40 s ,黄灯为5 s ,左转灯10s,红灯60s;(3)要求黄灯亮5 秒后,红灯才能转为绿灯,黄灯亮时以一定的频率闪动;(4)东西车道和南北车道每次通行的时间不同且可调;图1 交通灯系统示意图1.2设计思路为了便于讨论,我们只讨论路口1(用A表示)和路口4(用B表示)。

此交通灯控制系统一共设计有5种工作模式。

分别为:方式1 :A 向绿灯长亮,B 向红灯亮。

方式2 :A 向左转灯长亮,B 向红灯亮。

方式3 :B 向绿灯长亮,A 向红灯亮。

方式4 :B 向左转灯长亮,A 向红灯亮。

方式5 :自动工作方式,两个方向的灯按照显示的顺序,交替循环显示。

系统设有总复位开关,可在任意时间内对系统进行复位。

利用M2M1M0对系统工作的状态进行控制(见表1)。

A路口和B路口均需要红黄绿加左转四盏灯。

所以输出显示可以用8个LED灯代替。

又因为最大显示时间为60s,故用两个数码管即可承担显示一个倒数计时器的任务。

由以上分析可知,系统的输入确定为CLK、RST、M2、M1、M0,输出确定为8个LED灯和4个数码管。

在这种情况下,设AB方向状态转换如表2。

S1: M2=1,M1=X,M0=X A绿B红。

S2: M2=1,M1=X,M0=X A黄B红S3: M2=1,M1=X,M0=X, A左转B红S4: M2=1,M1=X,M0=X, A黄B红S5: M2=1,M1=X,M0=X, A红B绿S6: M2=1,M1=X,M0=X, A红B黄S7: M2=1,M1=X,M0=X, A红B左转S8: M2=1,M1=X,M0=X, A红B黄S9: M2=0,M1=0,M0=0, A长绿B长红S10: M2=0,M1=0,M0=1, A长左转B长红S11: M2=0,M1=1,M0=0, A长红B长绿S12: M2=0,M1=1,M0=1, A长红B长左转1.3系统设计框图系统采用的时钟频率为10KHZ ,经分频为1HZ 后送入控制计时电路,同时送入控制计时电路的还有控制信号M2M1M0以及复位信号RST ,控制交通灯的运行状态。

经处理后输出LED 灯以及数码管显示电路的控制信号,从而完成整个电路的控制与实现。

图3 系统设计示意图2.交通信号控制器具体模块设计 2.1时钟分频模块设计系统的时钟输入为10KHZ 的脉冲,而系统时钟计时模块需要1HZ 的脉冲。

分频模块主要为系统提供所需的时钟计时脉冲。

该模块将10KHZ 的脉冲信号进行分频,产生1S 的方波(占空比为50%),作为系统时钟计时信号。

计时模块用来设定路口计时器的初值,并为扫描显示译码模块提供倒计时时间。

2.2控制模块设计控制模块根据外部输入信号,产生系统的状态机,控制其他部分协调工作。

控制模块采用状态机进行设计,可定义出5种工作方式。

当进入自动工作方式时,一共有8种状态。

2.3扫描显示译码模块设计扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。

2.4.顶层文件设计交通灯的顶层文件是一个原理图文件,它包含3个元件,每一个元件均是由一个模块程序生成。

3个元件分别为:fenpinqi模块、control模块、xianshi模块。

这些模块均经过设计、编译、仿真,结果正确。

最后生成可视化元件。

然后将各个模块用具体电气性质的导线连接起来,这样原理图文件就建好了。

保存编译。

在建立一个vwf波形文件,保存并仿真。

实验证明,仿真结果正确,符合预期3.交通信号控制器功能仿真与测试利用QUARTUSⅡ仿真测试,结果显示,当rst=1时,此时状态led显示为00100100,意思是A向绿灯亮,B向红灯亮数码管输出均为39(图5)。

图5 QUARTUSⅡ仿真结果示意图(一)当M2M1M0处于000时,时间输出为0,LED灯显示为A向绿灯,B向红灯。

当M2M1M0处于001时,时间输出为0,LED灯显示为A向左转,B向红灯。

当M2M1M0处于010时,时间输出为0,LED灯显示为A向红灯,B向绿灯。

当M2M1M0处于011时,时间输出为0,LED灯显示为A向红灯,B向左转(图6)。

图6 QUARTUSⅡ仿真结果示意图(二)当M2等于1时,控制系统进入自动控制状态,数码管倒计时正常,LED灯进入循环状态(图7)。

图7 QUARTUSⅡ仿真结果示意图(三)4.采用的CPLD器件的型号:EP2C8T144C75.结论通过交通信号控制器功能仿真与测试,本设计达到了预定设计的目的,实现了利用可编程门阵列自动控制十字路口交通灯和计时器,各交通灯及计时器均按设计任务要求正常运行。

再一次的体验到了细心对一个编程者的重要性,和程序的规范性对于程序的重要性,这些平时我们忽略的问题,其实有时候关乎着我们编程的成功率;还有,verilog HDL设计语言是一门很好的硬件描述语言,可以直白的描述实际的电路,实际的系统模型,易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。

这次期末的课程设计就是对我们的一次考核,也可以说是一次考验,在平时做题目比较简单,而这次课程设计综合考核了我们的学习结果。

课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

参考文献[1]王正勇.基于FPGA 的交通信号控制器的设计《电子测量技术》第31 卷第10期2008 .10[2] 蓝运维.基于FPGA 的交通灯控制系统的仿真《现代电子技术》2006年第9 期总第224 期[3]《基于CPLD/FPGA 的数字通信系统建模与设计》作者:段吉海黄智伟电子工业出版社出版日期:2004年8月书号:ISBN 7121002124附录:程序源代码分频模块源代码:module fenpin(clk10k,rst,clk1); //将10K的频率分频为1input clk10k,rst;output clk1;reg [7:0]j;reg clk1;always@(posedge clk10k or posedge rst)if(rst)beginclk1<=0;j<=0;endelse if(j==9999)beginj<=0;clk1<=~clk1;endelse j<=j+1;endmodule控制计时模块源代码:module control(rst,clk1,M1,M2,M0, //control moodled, //traffic lightS_NS, //ns seg shiweiM_NS, //ns seg geweiS_WE, //M_WE //);input rst,clk1,M1,M2,M0;output [7:0]led;//8 LEDs;00000000means"al,ar,ag,ay;bl,br,bg,by"all off;output [3:0]S_NS,M_NS,S_WE,M_WE;reg [7:0]led;reg [3:0]S_NS,M_NS,S_WE,M_WE;wire [2:0]a; //判断此时的控制位reg [11:0]state;parameter S1=12'b000000000001,S2=12'b000000000010,S3=12'b000000000100,S4=12'b000000001000,S5=12'b000000010000,S6=12'b000000100000,S7=12'b000001000000,S8=12'b000010000000,S9=12'b000100000000,S10=12'b001000000000,S11=12'b010*********,S12=12'b100000000000;assign a={M2,M1,M0};always@(posedge clk1 or posedge rst)if(rst)beginstate<=S1;led<=8'b00100100;S_NS<=3;M_NS<=9;S_WE<=3;M_WE<=9;endelse begincasex(a)3'b000:beginstate<=S9;led<=8'b00100100;S_NS<=0;M_NS<=0;S_WE<=0;M_WE<=0;end3'b001:beginstate<=S10;led<=8'b10000100;S_NS<=0;M_NS<=0;S_WE<=0;M_WE<=0;end3'b010:beginstate<=S11;led<=8'b01000010;S_NS<=0;M_NS<=0;S_WE<=0;M_WE<=0;end3'b011:beginstate<=S12;led<=8'b01001000;S_NS<=0;M_NS<=0;S_WE<=0;M_WE<=0;end3'b1xx:begincase(state)S1:if(S_NS==0&&M_NS==0)beginstate<=S2;led<=8'b00010100;S_NS<=0;M_NS<=4;S_WE<=0;M_WE<=4;endelse if(M_NS) beginM_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;M_WE<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;endS2:if(S_NS==0&&M_NS==0)beginstate<=S3;led<=8'b10000100;S_NS<=0;M_NS<=9;S_WE<=0;M_WE<=9;endelse if(M_NS) beginled[4]<=~led[4];led[5]<=0;M_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;M_WE<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;endS3:if(S_NS==0&&M_NS==0)begin state<=S4;led<=8'b00010100;S_NS<=0;M_NS<=4;S_WE<=0;M_WE<=4;endelse if(M_NS) beginM_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;M_WE<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;endS4:if(S_NS==0&&M_NS==0)begin state<=S5;led<=8'b01000010;S_NS<=3;M_NS<=9;S_WE<=3;M_WE<=9;endelse if(M_NS) beginled[4]<=~led[4];led[7]<=0;M_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;M_WE<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;endS5:if(S_NS==0&&M_NS==0)begin state<=S6;led<=8'b01000001;S_NS<=0;M_NS<=4;S_WE<=0;M_WE<=4;endelse if(M_NS) beginM_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;M_WE<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;endS6:if(S_NS==0&&M_NS==0)begin state<=S7;led<=8'b01001000;S_NS<=0;M_NS<=9;S_WE<=0;M_WE<=9;endelse if(M_NS)beginled[0]<=~led[0];led[1]<=0;M_NS<=M_NS-1;M_WE<=M_WE-1;endelse if(S_NS) beginM_NS<=9;S_WE<=S_WE-1;M_WE<=9;S_NS<=S_NS-1;endS7:if(S_NS==0&&M_NS==0)begin state<=S8;led<=8'b01000001;S_NS<=0;M_NS<=4;S_WE<=0;M_WE<=4;endelse if(M_NS) beginM_WE<=M_WE-1;M_NS<=M_NS-1;endelse if(S_NS) beginS_WE<=S_WE-1;M_WE<=9;M_NS<=9;S_NS<=S_NS-1;endS8:if(S_NS==0&&M_NS==0)beginstate<=S1;led<=8'b00100100;S_NS<=3;M_NS<=9;S_WE<=3;M_WE<=9;endelse if(M_NS) beginled[0]<=~led[0];led[3]<=0;M_WE<=M_WE-1;M_NS<=M_NS-1;endelse if(S_NS) beginM_NS<=9;S_NS<=S_NS-1;S_WE<=S_WE-1;M_WE<=9;enddefault: beginstate<=S1;led<=8'b00100100;S_NS<=3;M_NS<=9;S_WE<=3;M_WE<=9;endendcaseendendcaseendendmodule显示模块源代码:module xianshi(rst,clk,S_NS,M_NS,S_WE,M_WE,sel,seg); input rst,clk;input [2:0]S_NS,M_NS,S_WE,M_WE;output [6:0]sel;output [3:0]seg;reg [6:0]sel;reg [3:0]seg;reg [15:0] count;reg [1:0] cnt;reg [3:0] data;reg clk_odd;always@(posedge clk or posedge rst)beginif(rst)begincount<=0;clk_odd<=0;endelse if(count==9)beginclk_odd<=~clk_odd;count<=0;endelsecount<=count+1;endalways @(posedge rst or posedge clk_odd) if (rst)begincnt<=2'b00;endelse cnt<=cnt+1;always@(posedge rst or posedge clk_odd) if(rst) beginseg = 4'b1111 ;endelse begincase (cnt)2'b00: beginseg =4'b1110 ;data=S_NS;end2'b01: beginseg = 4'b1101 ;data =M_NS;end2'b10:beginseg= 4'b1011 ;data=S_WE;end2'b11: beginseg= 4'b0111 ;data=M_WE;enddefault :beginseg = 4'b1111 ;endendcaseendalways @ (data or seg)begincase(data)4'b0000:sel=7'b1111110;4'b0001:sel=7'b0110000;4'b0010:sel=7'b1101101;4'b0011:sel=7'b1111001;4'b0100:sel=7'b0110011;4'b0101:sel=7'b1011011;4'b0110:sel=7'b1011111;4'b0111:sel=7'b1110000;4'b1000:sel=7'b1111111;4'b1001:sel=7'b1111011;default:sel=7'b1111110;endcaseendendmodule顶层模块:module mylight(clk10k,rst,M2,M1,M0,led,seg,sel);input clk10k,rst,M2,M1,M0;output [3:0] seg;output [6:0] sel;output [7:0] led;wire [2:0]S_NS,M_NS,S_WE,M_WE;wire clk_odd,M2,M1,M0;wire [3:0] seg;wire [6:0] sel;control control1(.led(led),.rst(rst),.clk1(clk_odd),.S_NS(S_NS),.M_NS(M_NS),.S_WE(S_WE),.M_WE(M_WE),.M2(M2),.M1(M1),.M0(M0));Xianshi xianshi1(.rst(rst),.clk(clk10k),.S_NS(S_NS),.M_NS(M_NS),.S_WE(S_WE),.M_WE(M_WE),.sel(sel),.seg(seg));fenpin fenpin1(.clk10k(clk10k),.rst(rst),.clk1(clk_odd));endmodule。

相关文档
最新文档