Verilog设计交通信号灯

这篇具有很好参考价值的文章主要介绍了Verilog设计交通信号灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、设计要求

二、模块总和

三、模块设计

1.顶层模块

2.分频模块

3.计数模块

4.状态机模块

5.倒计时模块

6.数码显示模块

7.约束代码

四、引脚分配

五、板上测试

总结

一、设计要求

1.利用 NEXYS4 DDR 开发板设计一款交通灯控制系统,能够显示红、黄、绿灯;
2.交通灯控制系统具有秒表倒计时功能;

3.我通过修改led六个分别表示主干道红绿黄和支干道红绿黄

4.信号灯设计时间

主干道绿灯,支干道红灯 30s
主干道红灯,支干道黄灯 5s
主干道红灯,支干道绿灯 30s
主干道黄灯,支干道红灯 5s

二、模块总和

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

三、模块设计

1.顶层模块

module top(
	input clk,
	input rst_n,
	output [7:0]sel,
	output [7:0]seg,
	output [5:0]led
	);
wire clk_1s;
wire [6:0]cnt;
wire [3:0]en1,en2;
 div div(
	.clk(clk),
	.rst_n(rst_n),
	.clk_1s(clk_1s)
    );
 counter counter(
	.clk(clk_1s),
	.rst_n(rst_n),
	.cnt(cnt)
    );
 vlg_traffic a1(
	.clk(clk),
	.rst_n(rst_n),
	.cnt(cnt),
	.led(led)
    );
 countdown countdown(
	.clk(clk),
	.rst_n(rst_n),
	.cnt(cnt),
	.en1(en1),
	.en2(en2) 
    );
 digital digital(
	.clk(clk),
	.rst_n(rst_n),
	.en1(en1),
	.en2(en2),
	.sel(sel),
	.seg(seg) 
);
endmodule

2.分频模块

module div(
	input clk,
	input rst_n,
	output  reg clk_1s//1s
    );

reg[29:0]count1;//计数1s
//1s计数
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		count1 <= 1'b0;

	else if(count1 == 49999999)//计数器1完成0.5s计数
		count1 <= 1'b0;
	else
		count1 <= count1 + 1'b1;
//1s分频
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		clk_1s <= 0;
	else if(count1 == 49999999)
		clk_1s <= ~clk_1s;//时钟100Mhz 完成1s分频
	else 
		clk_1s <= clk_1s;

	endmodule

3.计数模块

module counter(
	input clk,
	input rst_n,
	output reg [6:0]cnt//实现70s红绿黄灯
    );

always @(posedge clk or negedge rst_n)
	if(!rst_n)
		cnt <= 0;
	else if(cnt == 7'd70)
			cnt <= 0; 
    else 
		cnt <= cnt + 1;
endmodule

4.状态机模块

module vlg_traffic(
	input clk,
	input rst_n,
	input  [6:0]cnt,
	output reg [5:0]led//led[5]主干道黄灯 led[4]主干道红灯 led[3]主干道绿灯 
					   //led[2]支干道黄灯 led[1]支干道红灯 led[0]支干道绿灯
    );

reg [3:0]state;	

parameter s0 = 4'b00001;//s0:主干道绿灯,支干道红灯 30s 灯6'b001_010
parameter s1 = 4'b00010;//s1:主干道黄灯,支干道红灯 5s  灯6'b100_010
parameter s2 = 4'b00100;//s2:主干道红灯,支干道黄灯 5s  灯6'b010_100
parameter s3 = 4'b01000;//s3:主干道红灯,支干道绿灯 30s 灯6'b010_001

always @(posedge clk or negedge rst_n)
	if(!rst_n)
			state <= s0;
	else case(state)
		s0:begin
				if(cnt <= 7'd29)
					begin
						led <= 6'b001_010;
						state <= s0;
					end
				else 
					state <= s1;
			end
		s1:begin
				if((cnt > 7'd29)&&(cnt <= 7'd34))//用于板上显示从5s倒计时
					begin
						led <= 6'b100_010;
						state <= s1;
					end
				else 
					state <= s2;
			end 
			
		s2:begin
				if((cnt > 7'd34)&&(cnt <= 7'd39))
					begin
						led <= 6'b010_100;	
						state <= s2;
					end
				else 
						state <= s3;
			end
	   
		s3:begin 
				if((cnt > 7'd39)&&(cnt <= 7'd69))
					begin 
						led <= 6'b010_001;
						state <= s3;
					end	
				else
						state <= s0;

			end
		default:state <= s0;
		endcase
endmodule

5.倒计时模块

module countdown(
	input clk,
	input rst_n,
	input [6:0]cnt,
	output reg [3:0]en1,// 个位 最多为9 位宽为4
	output reg [3:0]en2 // 十位 最多为9 位宽为4 
    );

always @(posedge clk or negedge rst_n)
	if(!rst_n)
		begin
			en1 <= 0;
			en2 <= 0;
		end
	else if(cnt <= 7'd29)//用于板上从29s倒计时
		begin 
			en1 <= (29-cnt)%10;
			en2 <= ((29-cnt)-en1)/10; 
		end
	else if((cnt > 7'd29)&&(cnt <= 7'd34))//板上从4s倒计时
		begin 	
			en1 <= (34-cnt);
			en2 <= 0;
		end
	else if((cnt > 7'd34)&&(cnt <= 7'd39))//板上从4s倒计时
		begin 
			en1 <= (39-cnt);
			en2 <= 0;
		end
	else if((cnt > 7'd39)&&(cnt <= 7'd69))//板上从29s倒计时
		begin 
			en1 <= (69-cnt)%10;
			en2 <= ((69-cnt)-en1)/10;
		end
endmodule 

6.数码显示模块

module digital(
	input clk,
	input rst_n,
	input [3:0]en1,
	input [3:0]en2,
	output reg [7:0]sel,//片选信号
	output reg [7:0]seg //段选信号
);
//1ms计数器
	reg [16:0]cnt1;
	always @(posedge clk or negedge rst_n)
		if(!rst_n)
			cnt1 <= 0;
		else if(cnt1 == 99999)//1000000/10=100000
			cnt1 <= 0;
		else 
			cnt1 <= cnt1 + 1;
//1ms使能时钟控制信号	
	reg clk_1ms;
	always @(posedge clk or negedge rst_n)
		if(!rst_n)
			clk_1ms <= 0;
		else if(cnt1 == 99999)
			clk_1ms <= 1;
		else 
			clk_1ms <= 0;
//位选计数器
	reg [2:0]num_cnt;
	always @(posedge clk or negedge rst_n)
	if(!rst_n)
		num_cnt <= 0;
	else if(clk_1ms)
		num_cnt <= num_cnt + 1;
//板上位选信号	共阳极 低电平有效
	always @(posedge clk)
		case(num_cnt)
			0:sel <=8'b1111_1110;//个位
			1:sel <=8'b1111_1101;//十位
			2:sel <=8'b1111_1011;
			3:sel <=8'b1111_0111;
			4:sel <=8'b1110_1111;
			5:sel <=8'b1101_1111;
			6:sel <=8'b1011_1111;
			7:sel <=8'b0111_1111;
		endcase 
//数据分配	
	wire [31:0]data;
	assign data[3:0] = en1;
	assign data[7:4] = en2;
	assign data[11:8] = 0;
	assign data[15:12] = 0;
	assign data[19:16] = 0;
	assign data[23:20] = 0;
	assign data[27:24] = 0;
	assign data[31:28] = 0;
	
	reg [3:0]disp_tmp;
	always @(posedge clk)
		case(num_cnt)
			0:disp_tmp <= data[3:0];
			1:disp_tmp <= data[7:4];
			2:disp_tmp <= data[11:8];
			3:disp_tmp <= data[15:12];
			4:disp_tmp <= data[19:16];
			5:disp_tmp <= data[23:20];
			6:disp_tmp <= data[27:24];
			7:disp_tmp <= data[31:28];
		endcase 
		
//板上段选信号 共阳极 低电平有效	
	always @(posedge clk)
		case(disp_tmp)
			4'd0:seg <= 8'b1100_0000;
			4'd1:seg <= 8'b1111_1001;
			4'd2:seg <= 8'b1010_0100;
			4'd3:seg <= 8'b1011_0000;
			4'd4:seg <= 8'b1001_1001;
			4'd5:seg <= 8'b1001_0010;
	        4'd6:seg <= 8'b1000_0010;
			4'd7:seg <= 8'b1111_1000;
			4'd8:seg <= 8'b1000_0000;
			4'd9:seg <= 8'b1001_0000;
		endcase 
		
endmodule

7.约束代码

set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN E3 [get_ports clk]
set_property PACKAGE_PIN C12 [get_ports rst_n]
set_property PACKAGE_PIN U13 [get_ports {sel[7]}]
set_property PACKAGE_PIN K2 [get_ports {sel[6]}]
set_property PACKAGE_PIN T14 [get_ports {sel[5]}]
set_property PACKAGE_PIN P14 [get_ports {sel[4]}]
set_property PACKAGE_PIN J14 [get_ports {sel[3]}]
set_property PACKAGE_PIN T9 [get_ports {sel[2]}]
set_property PACKAGE_PIN J18 [get_ports {sel[1]}]
set_property PACKAGE_PIN J17 [get_ports {sel[0]}]
set_property PACKAGE_PIN T10 [get_ports {seg[0]}]
set_property PACKAGE_PIN R10 [get_ports {seg[1]}]
set_property PACKAGE_PIN K16 [get_ports {seg[2]}]
set_property PACKAGE_PIN K13 [get_ports {seg[3]}]
set_property PACKAGE_PIN P15 [get_ports {seg[4]}]
set_property PACKAGE_PIN T11 [get_ports {seg[5]}]
set_property PACKAGE_PIN L18 [get_ports {seg[6]}]
set_property PACKAGE_PIN H15 [get_ports {seg[7]}]
set_property PACKAGE_PIN H17 [get_ports {led[0]}]
set_property PACKAGE_PIN K15 [get_ports {led[1]}]
set_property PACKAGE_PIN J13 [get_ports {led[2]}]
set_property PACKAGE_PIN N14 [get_ports {led[3]}]
set_property PACKAGE_PIN R18 [get_ports {led[4]}]
set_property PACKAGE_PIN V17 [get_ports {led[5]}]

四、引脚分配

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

五、板上测试

S0:

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

S1:

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

S2:

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

S3:

nexys4 开发板,项目设计,开发语言,fpga开发,学习,课程设计,经验分享

总结

进行顶层模块时钟分配的时候,千万不能分配错,不然容易导致时间不一致导致数码显示错误;除了计数70s模块使用1s分频时钟,其余模块都是使用的原时钟信号,数码显示模块内部进行使用了1ms时钟使能,利用视觉暂留,进行数码管的动态扫描。文章来源地址https://www.toymoban.com/news/detail-517951.html

到了这里,关于Verilog设计交通信号灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数电课程设计——课设二:交通信号灯

     一、实验内容 (1)十字路口有 x、y 方向两组交通信号灯,每组有红、黄、绿灯各一个; (2)设计一个交通灯控制电路,模拟十字路口交通灯工作情况,红灯亮 35s,黄灯亮 5s,绿 灯亮 30s; (3)设系统时钟频率为 50MHz,要求用数码管显示计时结果; (4)掌握 Verilog HDL 的

    2024年02月09日
    浏览(52)
  • 基于FPGA的交通信号灯设计(二)

    根据要求,我们可以用典型时序状态机实现功能,共有六个大的状态,现设定: S0: 四个方向的红灯全亮 S1: 东、西方向绿灯亮,南、北方向红灯亮 S2:东、西方向黄灯闪烁,南、北方向红灯亮 S3:东、西方向红灯亮,南、北方向绿灯亮 S4:东、西方向红灯亮,南、北方向黄

    2024年04月23日
    浏览(46)
  • 基于STM32的智能交通信号灯控制系统设计

    通过分析交通规则和交通灯的工作原理,给出智能交通信号灯控制系统的设计方法。基于STM32F103芯片开发满足需求的外围电路,并绘制电路原理图。基于MDK keil软件编写交通信号灯控制程序,利用LabVIEW搭建交通信号灯场景,LabVIEW可以控制红绿灯时长。分别完成硬件、软件调试

    2024年02月03日
    浏览(55)
  • 基于51单片机的交通信号灯设计

    简介 1.本系统采用STC89C51单片机以及单片机最小系统和74HC245电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置,而且具有蜂鸣器提示。 2、本设计拟实现的性能指标如下: 设在十

    2024年02月04日
    浏览(41)
  • 基于Proteus仿真的交通信号灯设计——利用汇编语言实现

    基本信息 采用AT89C51单片机 晶振频率:12MHZ 红绿灯:发光二极管 数字显示:LED数码管 东西南北四个方向,一次循环共有六个状态,且每个状态的倒计时时间一样 交通状态 东西红灯22s,南北绿灯22s(数码管从0到21); 东西红灯5s,南北绿灯5s且没0.5s闪烁一次(数码管从0到4);

    2024年02月09日
    浏览(56)
  • 基于AT89C52单片机的交通信号灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功

    2024年02月10日
    浏览(63)
  • 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    浏览必读: 使用搜索可以达到事半功倍的效果。 电脑浏览器CTRL+F可以使用搜索查找 功能说明: 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯。 2.紧急情况下按键紧急按钮,四路黄灯快闪。 3.可以动态设置红绿灯时间。 涉及知识点:按键扫

    2024年02月11日
    浏览(118)
  • 【EDA课程设计】FPGA交通信号灯的设计(含动画视频、超详细思路/步骤分析、完整代码与效果详解)

    ✨你好啊,我是 “ 怪 ” ,是一名在校大学生哦。 🌍主页链接:怪的个人博客主页 ☀️博文主更方向为: 课程学习知识、作业题解、期末备考。 随着专业的深入会越来越广哦…一起期待。 ❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。 💪很高兴与你相遇,

    2023年04月08日
    浏览(61)
  • 【论文笔记】IntelliLight智能交通灯:一种基于强化学习的智能交通信号灯控制方法

    博客声明:本文仅为个人论文阅读笔记,大部分原文对照的中文为翻译而来,只对其中错误明显的部分作了修改。其他一些个人理解不到位或有误的地方也尽请见谅。 标题原文: IntelliLight:A Reinforcement Learning Approach for Intelligent Traffic Light Control 论文来源: Proceedings of the 24

    2024年04月12日
    浏览(61)
  • 【WinForm项目】C#模拟交通信号灯|WinForm交通红绿灯

    交通信号灯十字路口通行原理图。 实际上归类为四大类: 南北双向直行 东西双向直行 一对黑色粗线的左转 一对红色粗线的左转。 状态逻辑图如下图所示: 假定通行顺序为:南北直行、南北左转、东西直行、东西左转。 南北行人只在南北车流绿灯和黄灯的时候可以通行,

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包