基于EDA的VHDL语言设计的交通灯.docx

上传人:b****1 文档编号:3555124 上传时间:2023-05-06 格式:DOCX 页数:17 大小:396.96KB
下载 相关 举报
基于EDA的VHDL语言设计的交通灯.docx_第1页
第1页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第2页
第2页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第3页
第3页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第4页
第4页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第5页
第5页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第6页
第6页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第7页
第7页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第8页
第8页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第9页
第9页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第10页
第10页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第11页
第11页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第12页
第12页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第13页
第13页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第14页
第14页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第15页
第15页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第16页
第16页 / 共17页
基于EDA的VHDL语言设计的交通灯.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于EDA的VHDL语言设计的交通灯.docx

《基于EDA的VHDL语言设计的交通灯.docx》由会员分享,可在线阅读,更多相关《基于EDA的VHDL语言设计的交通灯.docx(17页珍藏版)》请在冰点文库上搜索。

基于EDA的VHDL语言设计的交通灯.docx

基于EDA的VHDL语言设计的交通灯

 

师学院本科生课程设计论文

 

基于VerilogHDL的RS编码器设计

 

院系

电子与通信工程学院

专业

通信工程

学生班级

通信111班

姓名

韦仁良

学号

3

指导教师单位

电子与通信工程学院

指导教师

宇宁

【摘要】

随着社会上特别是城市中机动车辆保有量的不断增加,在现代城市的日常运行控制中,车辆的交通控制越来越重要,在十字交叉路口,越来越多的使用红绿灯进行交通指挥和管理。

本文以VHDL硬件描述语言为设计手段,完成了交通信号灯控制电路的设计,其通信号灯控制电路的开发目的是设计一个适用于主、支干道十字交叉路口的红黄绿交通灯的控制系统,通过合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。

所设计的交通信号灯控制电路经过在QuartusⅡ软件下进行模拟仿真,观察其波形,证明所设计的交通信号灯控制电路完全可以实现预定的功能,并有一定的实用性。

【关键词】

VHDL;QuartusⅡ;交通灯

【题目要求】

用有限状态机设计一个交通灯控制器,设计要求:

A路和B路,每路都有红、黄、绿三种灯,持续时间为:

红灯45s、黄灯5s、绿灯40s。

A、B路交通灯的转换状态是:

(1)A红、B绿(持续时间40s);

(2)A红、B黄(持续时间5);

(3)A绿、B红(持续时间40s);

(4)A黄、B红(持续时间5s);

【系统总体设计原理】

50MHz

1秒分频器

交通灯控制器

4000Hz

分频器

发光二极管

显示模块

数码管

 

外部时钟

 

该系统主要由分频模块fen50m_1s、控制模块traffic_control、转换模块bin2bcd以及显示模块display电路构成。

其中分频模块fen50m_1s主要将系统输入的基准时钟信号转换为1Hz的激励信号,驱动控制模块工作。

控制模块traffic_control根据计数情况对交通灯的亮灭及持续时间进行控制。

转换模块bin2bcd将控制模块设计的亮灯时间的二进制转换为bcd码。

显示模块display主要将亮灯时间以倒计时的形式通过数码显示出来

【时钟分频模块】

系统时钟脉冲为50MHz,为满足各个模块脉冲需求,需要分频成2Hz和4000Hz的脉冲。

fen50m_1s模块设计,实现频率由50MHz到2Hz的转变,达到我们需要的1s的要求,模块如下图:

分频器一

端口说明:

clkin:

输入50MHz时钟脉冲

clkout:

输出2Hz脉冲

fen50m_1s实现Verilog语言描述如下:

modulefen50m_1s(clkin,clkout);

inputclkin;

outputclkout;

regclkout;

reg[24:

0]q;

always(posedgeclkin)

begin

if(q==24999999)

begin

q<=0;

clkout<=~clkout;

end

elseq<=q+1;

end

endmodule

编译结果:

分频器二fen50m_4000模块设计,实现频率由50MHz到4000Hz的转变

分频器二

端口说明:

clkin:

输入50MHz时钟脉冲

clkout:

输出4000Hz脉冲

分频器fen50m_4000模块实现程序:

modulefen50m_4000(clkin,clkout);

inputclkin;

outputclkout;

regclkout;

reg[24:

0]q;

always(posedgeclkin)

begin

if(q==12499)

begin

q<=0;

clkout<=~clkout;

end

elseq<=q+1;

end

endmodule

编译结果:

【交通灯控制及计时模块】

端口说明:

Clock:

输入时钟信号,上升沿有效。

Reset:

复位信号,高电平有效。

Red1、yellow1、green1:

分别表示A路的红灯、黄灯、绿灯显示信号,高电平有效。

Red2、yellow2、green2:

分别表示B路的红灯、黄灯、绿灯显示信号,高电平有效。

Timea:

A路绿灯亮时间,高电平有效。

Timeb:

B路红灯亮时间,高电平有效。

Alarm:

倒计时信号输出

实现程序:

moduletraffic_control(clock,reset,red1,yellow1,green1,red2,yellow2,green2,timea,timeb,alarm);

inputclock,reset;

outputred1,yellow1,green1,red2,yellow2,green2,alarm;

output[7:

0]timea,timeb;

reg[1:

0]state=2'b00;

reg[7:

0]timea=40;//A路绿灯亮时间

reg[7:

0]timeb=45;//B路红灯亮时间

regred1=1'b0,yellow1=1'b0,green1=1'b1;//A绿灯亮

regred2=1'b1,yellow2=1'b0,green2=1'b0;//B红灯亮

regalarm=1'b0;

always(posedgeclockorposedgereset)

begin

if(reset)begin

state<=2'b00;timea<=40;timeb<=45;

end

else

begin

case(state)

2'b00:

begin

if(timea==0)//A绿灯亮时间40S结束

begin

timea<=5;//A黄灯亮时间5S

red1<=1'b0;yellow1<=1'b1;green1<=1'b0;//A黄灯亮

red2<=1'b1;yellow2<=1'b0;green2<=1'b0;//B红灯继续亮

state<=2'b01;//转到A黄灯,B红灯

end

else

begin

timea<=timea-1;//A绿灯亮时间40S--

timeb<=timeb-1;//B红灯亮时间45S--

state<=2'b00;

end

end

2'b01:

begin

if(timea==0)//A黄灯亮5S时间结束

begin

timea<=45;//A红灯亮时间45S

timeb<=40;//B绿灯亮时间40S

red1<=1'b1;yellow1<=1'b0;green1<=1'b0;//A红灯亮

red2<=1'b0;yellow2<=1'b0;green2<=1'b1;//B绿灯亮

alarm<=1'b0;

state<=2'b10;//转到A红灯,B绿灯

end

else

begin

timea<=timea-1;//A黄灯亮时间3S--

timeb<=timeb-1;//B红灯亮时间3S--

alarm<=~alarm;yellow1<=~yellow1;

state<=2'b01;

end

end

2'b10:

begin

if(timeb==0)//B绿灯亮40S时间结束

begin

timeb<=5;//B灯黄亮时间5S

red1<=1'b1;yellow1<=1'b0;green1<=1'b0;//A红灯亮

red2<=1'b0;yellow2<=1'b1;green2<=1'b0;//B黄灯亮

state<=2'b11;//转到A红灯,B黄灯

end

else

begin

timea<=timea-1;//A红灯亮时间--

timeb<=timeb-1;//B绿灯亮时间--

state<=2'b10;

end

end

2'b11:

begin

if(timeb==0)//B黄灯亮5S时间结束

begin

timea<=40;//A绿灯亮时间40S

timeb<=45;//B绿灯亮时间45S

red1<=1'b0;yellow1<=1'b0;green1<=1'b1;//A绿灯亮

red2<=1'b1;yellow2<=1'b0;green2<=1'b0;//B红灯亮

alarm<=1'b0;

state<=2'b00;//转到A绿灯,B红灯

end

else

begin

timea<=timea-1;//A红灯亮时间--

timeb<=timeb-1;//B黄灯亮时间--

alarm<=~alarm;yellow2<=~yellow2;

state<=2'b11;

end

end

endcase

end

end

Endmodule

 

编译结果:

此模块是整个系统的核心部分,主要功能是完成四个状态的转换,并且在每个状态里完成相应的控制作用,即控制主干道和支干道的红黄绿灯的点亮和各自数码管倒计时显示。

【bin2bcd转换模块】

该模块将二进制语言转换为BCD码输出,模块如下图:

端口说明:

numin[7..0]:

输入8位二进制编码

numa[3..0]:

输出高4位BCD码

numb[3..0]:

输出低4位BCD码

bin2bcd转换模块实现程序:

modulebin2bcd(numin,numa,numb);

input[7:

0]numin;

output[3:

0]numa,numb;

reg[3:

0]numa,numb;

always(numin)

begin

if(numin>=90)beginnuma=9;numb=numin-90;end

elseif(numin>=80)beginnuma=8;numb=numin-80;end

elseif(numin>=70)beginnuma=7;numb=numin-70;end

elseif(numin>=60)beginnuma=6;numb=numin-60;end

elseif(numin>=50)beginnuma=5;numb=numin-50;end

elseif(numin>=40)beginnuma=4;numb=numin-40;end

elseif(numin>=30)beginnuma=3;numb=numin-30;end

elseif(numin>=20)beginnuma=2;numb=numin-20;end

elseif(numin>=10)beginnuma=1;numb=numin-10;end

elsebeginnuma=0;numb=numin;end

end

endmodule

编译结果:

【数码管显示译码和扫描模块】

驱动交通信号LED灯以及倒计时器数码管的显示,模块如下图:

端口说明:

Scanclk:

4000Hz时钟脉冲

Ewh,smh:

输入高4位BCD码

Ewl,sml:

输入高4位BCD码

Ledout:

数码管段选

Ledsel:

数码管位选

Verilog语言描述如下:

moduledisplay(scanclk,ewh,ewl,snh,snl,ledout,ledsel);

inputscanclk;

input[3:

0]ewh,ewl,snh,snl;

output[6:

0]ledout;

output[3:

0]ledsel;

reg[6:

0]ledout;

reg[3:

0]ledsel;

reg[3:

0]bcd;

reg[2:

0]q;

always(posedgescanclk)

begin

q<=q+1;

case(q)

3'b000:

beginledsel<=4'b0111;bcd<=ewh;end

3'b001:

beginledsel<=4'b1011;bcd<=ewl;end

3'b010:

beginledsel<=4'b1101;bcd<=snh;end

3'b011:

beginledsel<=4'b1110;bcd<=snl;end

default:

beginledsel<=8'b11111111;bcd<=4'bzzzz;end

endcase

end

always(bcd)

begin

case(bcd)

4'b0000:

ledout=7'b0111111;

4'b0001:

ledout=7'b0000110;

4'b0010:

ledout=7'b1011011;

4'b0011:

ledout=7'b1001111;

4'b0100:

ledout=7'b1100110;

4'b0101:

ledout=7'b1101101;

4'b0110:

ledout=7'b1111101;

4'b0111:

ledout=7'b0000111;

4'b1000:

ledout=7'b1111111;

4'b1001:

ledout=7'b1101111;

default:

ledout=7'b0000000;

endcase

end

endmodule

编译结果:

【各模块电路符号】

顶层电路图如下:

顶层文件原理图

顶层文件编译结果如下:

【硬件验证结果】

1、引脚配置如下:

2、硬件验证效果如下:

按照设计好的原理图,运行QuartusⅡ软件,运用模块化设计方法,创建图形设计文件,画出所设计的交通灯控制器总框图并连接,对其进行测试,编译,得到结果如图所示:

 

【总结】

本设计借助FPGA器件及其支撑软件,快速明确的验证了交通灯控制功能。

通过此次EDA课程设计,我系统的学习了课本上的相关知识,对程序设计有了一定思路;通过实验课的学习,在程序的调试方面也学到了很多东西。

其中在编程中也出现了很多的问题,但通过老师同学的帮助下,把问题一一解决了。

其实只要我们自己认真看书,仔细分析,仔细调试,就一定会发现错误,真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中。

在这个设计过程中我深刻地体会到刻苦努力与认真对待的重要性,进一步巩固了自己所学的专业基础知识,提高了自己解决问题的能力。

本设计使得我有了一次非常好的将理论与实践结合的机会,并使我从中学到了新知识。

通过学习EDA这门课程,懂得了QuartusⅡ这个软件的基本操作、用Verilog语言编写一些简单的程序,我知道我还需要不断的学习,才能更好地掌握这一门课程。

最后我想特别的感宇宁老师,感您的悉心指导,您渊博的学识,谦虚、严谨的治学态度、灵活的思维方式、认真的工作作风和对学生的关心都令我佩服不已,谆谆教诲使我受益匪浅!

我会继续努力的!

参考文献

参考文献

[1]王金明.数字系统设计与VerilogHDL[M].:

电子工业.2011.1.

[2]昕燕,周凤臣,聂春燕.EDA技术实验与课程设计[M].:

清华.2006.5.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2