verilog交通灯控制器设计_fpga交通灯控制器课程设计

verilog交通灯控制器设计_fpga交通灯控制器课程设计交通信号灯控制系统的Verilog实现作为数字系统设计入门案例,下面简单介绍最简单的交通控制系统,说明设计思路。首先给出要求:设计一个主干道和支干道十字路口的交通信号灯控制电路(1)一般情况下保持主干道通畅,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮时间不少于60秒。(2)主干道绿灯亮超过60秒,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道亮灯时间不超过30秒。(3)每次主干道或支干道绿灯变红灯时,黄灯先亮5秒。1.逻辑抽象,明确输入输出。主干道和支干道的十字路口交通灯系统求优先保证

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

交通信号灯控制系统的Verilog实现
作为数字系统设计入门案例,下面简单介绍最简单的交通控制系统,说明设计思路。
首先给出要求:设计一个主干道和支干道十字路口的交通信号灯控制电路
(1)一般情况下保持主干道通畅,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮时间不少于60秒。
(2)主干道绿灯亮超过60秒,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道亮灯时间不超过30秒。
(3)每次主干道或支干道绿灯变红灯时,黄灯先亮5秒。
1.逻辑抽象,明确输入输出。
主干道和支干道的十字路口交通灯系统求优先保证主干道的畅通。平时处于主干道绿灯、支干道红灯的状态。当支干道有车时,传感器发出信号S=1,主干道绿灯先转换成黄灯、再变成红灯,支干道由红灯变成绿灯。如果支干道继续有车通过时,则传感器继续有信号,使支干道保持绿灯亮,但支干道绿灯持续亮的时间不得超过30s,否则支干道绿灯先转换成黄灯再变成红灯,同时主干道由红灯变成绿灯。主干道每次通行时间不得短于60s,在此期间,即使支干道S有信号,也不能中止主干道的绿灯亮。
输入信号有时钟、复位、传感器信号;输出有主干道红黄绿灯和支干道红黄绿灯。
2.确定系统框图
首先用状态机作为主控制,状态机转换条件根据计时器信息判断转换条件,译码电路中根据所在状态输出对应干道信号灯状态。
控制单元根据时钟和传感信号向计数器发出信号,计时器向控制单元发出60s(t1)、30s(t2)、5s(t3)计时信号。主干道红黄绿用h_r,h_y,h_g表示,支干道红黄绿用f_r,f_y,f_g表示。
在这里插入图片描述
因此,用计时分别产生三个持续的时间段后,向控制单元发出时间已到信号,控制单元根据计时器及传感器的信号,决定是否进行状态转换。如果肯定,则控制单元发出状态转换信号St,计时器开始清零,准备重新计时。

交通灯控制单元的控制过程分为四个阶段,对应的输出有四种状态,分别用S0、S1、S2和S3表示:
S0状态 主干道绿灯亮支干道红灯亮,此时若支干道有车等待通过,而且主干道绿灯已亮足规定的时间t1,控制器发出状态转换信号St,输出从状态S0转换到S1 (转换条件:绿灯亮够60s且检测到支干道有车即 t1&&s=1

S1状态 主干道黄灯亮,支干道红灯亮,进人此状态,黄灯亮足规定的时间t3时,控制器发出状态转换信号St,输出从状态S1转换到S2。 (转换条件:黄灯亮够5s就转换状态即 t3=1

S2状态 支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮的时间不得超过t2,否则控制单元发出状态转换信号St,使输出转换到S3状态。若此时支干道没有车,则控制单元立即发出状态转换信号St,使输出转换到S3状态。
(转换条件:支干道绿灯亮够30s或者检测到支干道没车即 t2+(~s)=1

S3状态 支干道黄灯亮,主干道红灯亮,此时状态与S1状态持续的时间相同均为t3,时间到时,控制器发出St信号,输出从状态S3回到S0状态。对上述S0、S1、S2和S3四种状态按照格雷码进行编码分别为00,01,11和10。
/控制状态机/
always@(posedge clk or negedge rst)
begin
if(!rst)
current_state<=2’d0;
else
current_state<=next_state;
end

always@(s,current_state,t1,t2,t3)
begin
	case(current_state)
		s0:	begin
			next_state=(t1&&s)?s1:s0;
			ST=(t1&&s)?1'b1:1'b0;			
			end
		s1:	begin
			next_state=(t3)?s2:s1;
			ST=(t3)?1'b1:1'b0;			
			end
		s2:	begin
			next_state=(t2||~s)?s3:s2;
			ST=(t2||~s)?1'b1:1'b0;			
			end
		s3:	begin
			next_state=(t3)?s0:s3;
			ST=(t3)?1'b1:1'b0;
			end
		endcase
end

在这里插入图片描述
在这里插入图片描述

计时部分采用2个寄存器代表十位(t_h)和个位(t_l)计数,同时每次检测到转换信号都要清零重新计时

always@(posedge clk or negedge rst)   //计时模块
	begin
		if(!rst)
			{ 
   t_h,t_l}<=8'd0; else if(ST) //控制信号有效说明灯的颜色改变重新计数 {t_h,t_l}<=8'd0;
		else if((t_h==4'd5)&(t_l==4'd9))   //判断是否计数到60
			begin
			{ 
   t_h,t_l}<={ 
   t_h,t_l};						
			end
		else if(t_l==4'd9) //判断个位是否计数满,是则十位加一 begin t_h<=t_h+1'b1;
			t_l<=4'd0; end else begin t_h<=t_h; t_l<=t_l+1'b1;		
		end
	end
    assign t3=(t_h==4'd0)&(t_l==4'd4);   //主干道绿灯计数时间
	assign t2=(t_h==4'd2)&(t_l==4'd9);	 //	支干道绿灯计数时间
	assign t1=(t_h==4'd5)&(t_l==4'd9);   //黄灯计数时间

译码部分根据状态机所在状态输出对应信号灯状态

always@(current_state)
	begin
		case(current_state)
			s0:	begin
				{ 
   hg,hy,hr}=3'b100; //主干道绿灯 {fg,fy,fr}=3'b001;  //支干道红灯			
				end
			s1:	begin
				{ 
   hg,hy,hr}=3'b010; //主干道黄灯 {fg,fy,fr}=3'b001;  //支干道红灯			
				end
			s2:	begin
				{ 
   hg,hy,hr}=3'b001; //主干道红灯 {fg,fy,fr}=3'b100;  //支干道绿灯			
				end		
			s3:	begin
				{ 
   hg,hy,hr}=3'b001; //主干道红灯 {fg,fy,fr}=3'b010;  //支干道黄灯			
				end	
			endcase
	end

在这里插入图片描述
仿真结果图
总结:本文设计较简单,对于复杂交通还需改善,但是能够从中慢慢建立对系统架构的认知和联系,从中理清各模块间关系。后续还需多查资料研究,如有错误不合理之处,请告知。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189744.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 摄像头-MIPI接口、DVP接口和CSI接口[通俗易懂]

    摄像头-MIPI接口、DVP接口和CSI接口[通俗易懂]本文转自摄像头的MIPI接口、DVP接口和CSI接口-百度经验(baidu.com),感谢作者分享一般来讲,摄像头的接口主要有MIPI接口、DVP接口、CSI接口三大类;我们常用的电脑摄像头接口是USB接口,而常见的智能手机上的摄像头是MIPI接口,还有一部分的摄像头(比如说某些支持DVP接口的硬件)是DVP接口;通俗的讲,USB是串行通用串行总线(UniversalSerialBus)的简称,而MIPI是移动行业处理器接口(MobileIndustryProcessorInterf

    2022年6月11日
    187
  • Android sha1_android studio打包apk教程

    Android sha1_android studio打包apk教程开发版sha1方法一:打开AndroidStudio的Terminal窗口,进入.android目录(默认是在C:\Users\Administrator.android目录下),输入如下命令:keytool-v-list-keystoredebug.keystore方法二:在AndroidStudio右边找到Gradle,点开(图片不够大,右键,新窗口打开)接下来发布版版sh

    2022年8月10日
    8
  • k8s 资源管理_k8s资源限制

    k8s 资源管理_k8s资源限制1. namespace2. pod3. label4. deployment5. service

    2022年8月12日
    9
  • 《那些年啊,那些事——一个程序员的奋斗史》十一[通俗易懂]

    《那些年啊,那些事——一个程序员的奋斗史》十一[通俗易懂]101   回家了!从大巴下来,踏上北海的土地,段伏枥不由地深吸一口气:多么熟悉的带有腥味的空气!虽然说每年段伏枥都会回家过年,但每次都感慨万分。是啊,外出的游子谁不是这样呢?外面的世界或许很精彩,或许很美,但总欠缺了一种熟悉的味道。即使像自己在深圳呆了三年有余,却还是觉得很陌生,似乎只是一个匆匆过客,终究会离开一样。只有回到了家乡,才会有那种回到家的踏实感。    国人的春节归家

    2022年5月5日
    40
  • Java教学视频下载(全集)

    Java教学视频下载(全集)1:四百本Java电子书下载链接:http://www.verycd.com/topics/2784992/2:蓝点在线Java视频教程http://you.video.sina.com.cn/a/1905723-1393828897/1/2.html3:J2EEWeb程序开发定向班V1.0Java就业班V2.0(完整版)http://www.verycd.com/topics/…

    2022年5月15日
    42
  • GoogLeNet论文详解[通俗易懂]

    GoogLeNet论文详解[通俗易懂]GoogLeNet1.Introduction  得益于深度学习的优势和更强大的卷积神经网络的出现,图像分类和目标检测的准确率发生了令人意想不到的进步。在2014年的ILSVRC比赛中,GoogLeNet取得了第一名的成绩,所用模型参数不足AlexNet(2012年冠军)的1/12。论文题目《Goingdeeperwithconvolutions》中的deeper有两层含义…

    2022年8月14日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号