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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 远程调试部署在容器中的springboot项目「建议收藏」

    远程调试部署在容器中的springboot项目「建议收藏」问题:访问网站,会根据ip判断访客所处位置,但部分ip插入数据库失败。 以为是一次小问题,很快就解决了,没想到最终花了6个小时左右,才搞清楚。分析 :1、将本地程序跑起来,发现一切正常,可以插入到数据库。但问题在线上确实妥妥的出现的,而我现在日志级别是info,没有错误日志。所有准备Debug线上程序,之前只debug过使用基本的tomcat发布。而我现在的jar是使用docker构建的镜像,运行的镜像。 2、问题从线上转化到了,我需要远程debug线上程序发现问题,并将之解决。查各种资料,配置

    2022年6月13日
    25
  • 汇编语言之Debug教程篇

    参考书籍《汇编语言》——王爽Debug的命令比较多,这里我介绍常用的命令,其余的等需要的时候再进行查询。命令用途Debug-R查看、改变CPU寄存器的内容Debug-D查看内存中的内容Debug-E改写内存中的内容Debug-U将内存中的机器指令翻译成汇编指令Debug-T执行一条机器指令…

    2022年4月16日
    43
  • 测试用例八大要素以及设计方法

    测试用例八大要素以及设计方法测试用例(TestCase)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求测试用例八大要素1.测试用例编号由字母、字符、数字组合而成的字符串,有唯一性,易识别性。eg:1)系统测试:产品编号-ST-系统测试项名-系统测试子项名-编号2)集成测试:产品编号

    2022年6月28日
    25
  • win10电脑一插u盘就重启_u盘启动盘复制到另一个u盘

    win10电脑一插u盘就重启_u盘启动盘复制到另一个u盘不知道大家有没有遇到过这样的情况,就是当你用U盘复制东西的时候,电脑莫名其妙自动重启,可是只要讲U盘拔下来就没事了,而用杀毒软件杀毒也没有查出任何病毒,重新安装了一次系统也是一样的无济于事,这究竟是什么问题?带着这个问题往下看,U盘量产网将为你解答。这个问题几率不大,但首先要百分之百确认U盘里没有病毒或者木马,杀毒软件可能检查不出来,所以建议您将U盘格式化,格式化时注意要选择FAT而不是FAT32…

    2022年9月8日
    0
  • 计算机会员登录系统,华林会员登录系统 会员登录系统.doc「建议收藏」

    计算机会员登录系统,华林会员登录系统 会员登录系统.doc「建议收藏」华林会员登录系统会员登录系统重庆三峡学院验证体系文档题目:会员注册登录系统专业:计算科学与技术年级:2009级学号:200906024129作者:唐承兰完成时间:2011年5月会员注册登录系统目录摘要……………………………………………………………..

    2022年4月20日
    168
  • 流程引擎标准定义_开源流程引擎

    流程引擎标准定义_开源流程引擎1.1流程定义引擎功能说明管理员无需编程基础便能快捷地定义出符合本单位需求的各项工作流程,协同办公平台流程定义项目丰富,能够规范企业业务流程,发挥企业各种资源及系统的最大效能。流程定义主要包括流程的基本属性、节点定义、相关表单、审核常用语、流程归档。可自定义流程的使用范围,序号一级功能二级功能功能详细需求说明1. 

    2022年10月20日
    0

发表回复

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

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