交通灯设计verilog.docx
- 文档编号:28733180
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:11
- 大小:159.97KB
交通灯设计verilog.docx
《交通灯设计verilog.docx》由会员分享,可在线阅读,更多相关《交通灯设计verilog.docx(11页珍藏版)》请在冰豆网上搜索。
交通灯设计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开发板进行硬件验证,完成检测和调试。
六、设计总结和心得体会
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究题目。
其次,对于老师的讲课要一丝不苟的去听,因为只有都明白了。
做起设计会事半功倍,在今后我一定会更加努力的学习这门课程,去钻研它。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计 verilog