交通灯设计verilog.docx

上传人:b****5 文档编号:3351284 上传时间:2022-11-22 格式:DOCX 页数:10 大小:160.01KB
下载 相关 举报
交通灯设计verilog.docx_第1页
第1页 / 共10页
交通灯设计verilog.docx_第2页
第2页 / 共10页
交通灯设计verilog.docx_第3页
第3页 / 共10页
交通灯设计verilog.docx_第4页
第4页 / 共10页
交通灯设计verilog.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

交通灯设计verilog.docx

《交通灯设计verilog.docx》由会员分享,可在线阅读,更多相关《交通灯设计verilog.docx(10页珍藏版)》请在冰豆网上搜索。

交通灯设计verilog.docx

交通灯设计verilog

 

基于Verilog语言交通灯设计报告

院系:

工学院自动化系

年级:

14级

班级:

10班

周博

学号:

14032291

 

这学期我学习了EDA技术及其创新实践这门课程,通过自己学习的容和自己查找的一些资料用Verilog语言编写交通灯的程序,并且完成了仿真。

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

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

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

一、设计背景和意义

交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。

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

二、设计任务

(1)设计一个交通红绿灯。

要求分主干道和支干道,每条道上安装红(主:

red1,支:

red2)绿(主:

green1,支:

green2)黄(主:

yellow1,支:

yellow2)三种颜色灯,由四种状态自动循环构成;

(2)在交通灯处在不同的状态时,设计一个计时器以倒计时方式显示计时,主干道上绿灯亮30S,支干道上绿灯亮20S。

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

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

三、设计方案

1.工作原理:

城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:

  S0:

当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30s

  S1:

当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s

  S2:

当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20s

  S3:

当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s

在S3结束后又回到

(1)状态,并周期重复进行。

状态图如下:

 

20秒

2.系统设计方案:

根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图所示:

 

 

四、设计源程序

1.verilog源程序:

moduletraffic(en,clk,rst,num1,num2,light1,light2,out1,out2,out3,out4,in1,in2);

inputen,clk,rst,in1,in2;//en为使能端。

in1,in2控制绿灯和红灯亮时间

output[7:

0]num1,num2;

output[2:

0]light1,light2;

output[6:

0]out1,out2,out3,out4;//输出四个数码管

reg[6:

0]out1,out2,out3,out4;

regtim1,tim2;

reg[1:

0]state1,state2;

reg[2:

0]light1,light2;

reg[7:

0]num1,num2;

reg[7:

0]red1,red2,green1,green2,yellow1,yellow2;

parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//四个循环状态

reg[25:

0]count;regdiv;

always(en)

if(en)

begin//设置计数初值

if(!

in1)begingreen1<=8'b00110000;red2<=8'b00110000;end//30H,即30秒

elsebegingreen1<=8'b01100000;red2<=8'b01100000;end//60s

if(!

in2)beginred1<=8'b00100000;green2<=8'b00100000;end//20s

elsebeginred1<=8'b01000000;green2<=8'b01000000;end//40s

yellow1<=8'b00000101;yellow2<=8'b00000101;//05s

end

always(posedgeclk)//分频

if(count==25000000)begindiv<=1;count<=count+1;end

elseif(count==50000000)begindiv<=0;count<=0;end

elsecount<=count+1;

always(posedgediv)

begin

if(rst)//复位情况控制

begin

light1<=3'b001;

num1<=green1;

end

elseif(en)

begin//使能有效开始控制计数

if(!

tim1)//开始控制

begin//主干道交通灯点亮控制

tim1<=1;

case(state1)//状态机

s0:

beginnum1<=green1;light1<=3'b001;state1<=s1;end

s1:

beginnum1<=yellow1;light1<=3'b010;state1<=s2;end

s2:

beginnum1<=red1;light1<=3'b100;state1<=s3;end

s3:

beginnum1<=yellow1;light1<=3'b010;state1<=s0;end

default:

light1<=3'b100;

endcase

end

else

begin//倒数计时

if(num1>0)

if(num1[3:

0]==0)

begin

num1[3:

0]<=4'b1001;

num1[7:

4]<=num1[7:

4]-1;//十位减1

end

elsenum1[3:

0]<=num1[3:

0]-1;//个位减1

if(num1==1)tim1<=0;

end

end

else

begin

light1<=3'b010;

num1=2'b00;

tim1<=0;

end

end

always(posedgediv)//从干道

begin

if(rst)//复位情况控制

begin

light2<=3'b100;

num2<=red2;

end

elseif(en)

begin

if(!

tim2)

begin

tim2<=1;

case(state1)

s0:

beginnum2<=red2;light2<=3'b100;state2<=s1;end

s1:

beginnum2<=yellow1;light2<=3'b010;state2<=s2;end

s2:

beginnum2<=green2;light2<=3'b001;state2<=s3;end

s3:

beginnum2<=yellow2;light2<=3'b010;state2<=s0;end

default:

light2<=3'b100;

endcase

end

else

begin//倒数计时

if(num2>0)

if(num2[3:

0]==0)

begin

num2[3:

0]<=4'b1001;

num2[7:

4]<=num2[7:

4]-1;

end

elsenum2[3:

0]<=num2[3:

0]-1;

if(num2==1)tim2<=0;

end

end

else

begin

tim2<=0;

state2<=2'b00;

light2<=3'b010;

end

end

always(posedgeclk)

begin//数码管译码显示

case(num1[3:

0])

4'b0000:

out1<=~7'b0111111;//0,3F

4'b0001:

out1<=~7'b0000110;//1,06

4'b0010:

out1<=~7'b1011011;//2,5B

4'b0011:

out1<=~7'b1001111;//3,4F

4'b0100:

out1<=~7'b1100110;//4,66

4'b0101:

out1<=~7'b1101101;//5,6D

4'b0110:

out1<=~7'b1111101;//6,7D

4'b0111:

out1<=~7'b0000111;//7,07

4'b1000:

out1<=~7'b1111111;//8,7F

4'b1001:

out1<=~7'b1101111;//9,6F

default:

out1<=~7'b0111111;//0,3F

endcase

end

always(posedgeclk)

begin//数码管译码显示

case(num1[7:

4])

4'b0000:

out2<=~7'b0111111;//0,3F

4'b0001:

out2<=~7'b0000110;//1,06

4'b0010:

out2<=~7'b1011011;//2,5B

4'b0011:

out2<=~7'b1001111;//3,4F

4'b0100:

out2<=~7'b1100110;//4,66

4'b0101:

out2<=~7'b1101101;//5,6D

4'b0110:

out2<=~7'b1111101;//6,7D

4'b0111:

out2<=~7'b0000111;//7,07

4'b1000:

out2<=~7'b1111111;//8,7F

4'b1001:

out2<=~7'b1101111;//9,6F

default:

out2<=~7'b0111111;//0,3F

endcase

end

always(posedgeclk)

begin//数码管译码显示

case(num2[3:

0])

4'b0000:

out3<=~7'b0111111;//0,3F

4'b0001:

out3<=~7'b0000110;//1,06

4'b0010:

out3<=~7'b1011011;//2,5B

4'b0011:

out3<=~7'b1001111;//3,4F

4'b0100:

out3<=~7'b1100110;//4,66

4'b0101:

out3<=~7'b1101101;//5,6D

4'b0110:

out3<=~7'b1111101;//6,7D

4'b0111:

out3<=~7'b0000111;//7,07

4'b1000:

out3<=~7'b1111111;//8,7F

4'b1001:

out3<=~7'b1101111;//9,6F

default:

out3<=~7'b0111111;//0,3F

endcase

end

always(posedgeclk)

begin//数码管译码显示

case(num2[7:

4])

4'b0000:

out4<=~7'b0111111;//0,3F

4'b0001:

out4<=~7'b0000110;//1,06

4'b0010:

out4<=~7'b1011011;//2,5B

4'b0011:

out4<=~7'b1001111;//3,4F

4'b0100:

out4<=~7'b1100110;//4,66

4'b0101:

out4<=~7'b1101101;//5,6D

4'b0110:

out4<=~7'b1111101;//6,7D

4'b0111:

out4<=~7'b0000111;//7,07

4'b1000:

out4<=~7'b1111111;//8,7F

4'b1001:

out4<=~7'b1101111;//9,6F

default:

out4<=~7'b0111111;//0,3F

endcase

end

endmodule

2.设备选择:

3.引脚绑定

 

五、设计仿真测试结果

1.仿真波形:

 

2.硬件验证:

将verilog源程序文件下载到DE2开发板进行硬件验证,完成检测和调试。

六、设计总结和心得体会

说起课程设计,我认为最重要的就是做好设计的预习,认真的研究题目。

其次,对于老师的讲课要一丝不苟的去听,因为只有都明白了。

做起设计会事半功倍,在今后我一定会更加努力的学习这门课程,去钻研它。

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

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1