基于FPGA交通灯设计.docx
- 文档编号:12053095
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:17
- 大小:200.88KB
基于FPGA交通灯设计.docx
《基于FPGA交通灯设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA交通灯设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于FPGA交通灯设计
河南科技学院新科学院
数字系统课程设计报告书
课题名称
基于FPGA的交通灯设计
院系
新科学院
姓名学号
夏文平、2013280218
专业班级
通信工程、通信132
指导教师
刘艳昌、雷进辉
设计时间
2014-2015学年第2学期12、13周
2015年6月5日
摘要
交通灯信号控制器通常要实现自动控制和手动控制其红绿灯的变化,基于FPGA设计的交通灯信号控制器电路简单、可靠性好。
本设计可控制2个路口的红、黄、绿三盏灯.让其按特定的规律进行变化。
利用QuartusⅡ对设计结果进行仿真,发现系统工作性能良好。
据此设计而成的硬件电路,也实现了控制要求。
关键词:
交通灯自动控制手动控制
Ⅰ课程设计目的。
巩固加深所学电子技术课程的基本知识,提高综合运用所学知识的能力。
同时培养学生选用参考书、查阅手册、图表和文献资料的能力,提高解决实际问题的能力。
并且,在设计方案分析比较、设计计算、电路安装等缓解掌握使用电路的设计方法。
然后提高学生的动手能力,掌握仪器设备的正确使用方法。
最后了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务数的要求编写设计说明书,可以正确反映设计和实验成果,能正确绘制电路图等。
Ⅱ设计任务及要求。
设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次的通行时间都设为25秒。
要求黄灯先亮5秒,才能变换运行车道并且黄灯亮时另一干道的红灯按1Hz的频率闪烁。
要求通行时间及黄灯亮的时间均可在60秒内任意设定。
要求交通灯控制电路可以手动控制立即进入特殊运行状态,即两条道上红灯全亮,时钟停止计时。
当特殊运行状态结束后,系统复原,继续正常运行。
Ⅲ系统设计总体方案。
由设计要求可得如下交通控制器的状态转换表:
甲车道
乙车道
时间
绿灯
红灯
6S
黄灯
红灯
5S
红灯
绿灯
11S
红灯(闪烁)
黄灯
5S
Ⅳ各模块具体实现。
1分频模块。
如图为分频模块。
模块功能:
实现分频功能,输入50MHz的时钟信号,对上升沿进行计数,每50M个脉冲的上升沿输出一次高电平脉冲信号,从而实现分频。
模块程序如下:
moduleone_second_clk(reset,clk,cout);
inputreset,clk;
integercount;
outputregcout;
always@(posedgeclk)
if(reset)begincount=0;cout=0;end
elseif(count==50000000-1)begincount=0;cout=1;end
elsebegincount=count+1;cout=0;end
endmodule
moduletimer_NS(clk,reset,set,ld,en,state,q_NS,done_NS);
inputclk,reset,set,ld,en;
input[3:
0]state;
output[7:
0]q_NS;
outputdone_NS;
reg[7:
0]q_NS;
parameterred_NS=8'd10,green_NS=8'd5,yellow_NS=8'h04;
parameterst0=4'b0001,st1=4'b0010,st2=4'b0100,st3=4'b1000;
assigndone_NS=~(|q_NS)&&en;
always@(posedgeclk)
if(reset)q_NS<=green_NS;
elseif(ld)
case(state)
st0:
q_NS<=yellow_NS;
st1:
q_NS<=red_NS;
st2:
q_NS<=8'h00;
st3:
q_NS<=green_NS;
default:
q_NS<=8'h00;
endcase
elseif(en&&~set)
begin
q_NS<=q_NS-1;
end
endmodule
2倒计时模块。
由于是东西南北两条道路,固有两个倒计时器。
模块功能:
在相应状态下实现倒序计数。
程序如下:
moduletimer_EW(clk,reset,set,ld,en,state,q_EW,done_EW);
inputclk,reset,set,ld,en;
input[3:
0]state;
output[7:
0]q_EW;
outputdone_EW;
reg[7:
0]q_EW;
parameterred_EW=8'd10,green_EW=8'd5,yellow_EW=8'h04;
parameterst0=4'b0001,st1=4'b0010,st2=4'b0100,st3=4'b1000;
assigndone_EW=~(|q_EW)&&en;
always@(posedgeclk)
if(reset)q_EW<=red_EW;
elseif(ld)
case(state)
st0:
q_EW<=8'h00;
st1:
q_EW<=green_EW;
st2:
q_EW<=yellow_EW;
st3:
q_EW<=red_EW;
default:
q_EW<=8'h00;
endcase
elseif(en&&~set)
begin
q_EW<=q_EW-1;
end
endmodule
3转码模块。
模块功能:
将计数器输出的的二进制数转换为bcd码表示的十进制数。
转码程序如下:
modulebin_to_bcd(data,units,tens,hundreds);
input[7:
0]data;
output[3:
0]units,tens,hundreds;
reg[3:
0]units_r,tens_r,hundreds_r;
reg[7:
0]dat_r;
reg[11:
0]temp;
integeri;
assignunits=units_r;
assigntens=tens_r;
assignhundreds=hundreds_r;
always@(data)
begin
dat_r=data;
temp=0;
for(i=0;i<7;i=i+1)
begin
temp={temp[10:
0],dat_r[7]};
if(temp[3:
0]>4'd4)
temp[3:
0]=temp[3:
0]+4'd3;
if(temp[7:
4]>4'd4)
temp[7:
4]=temp[7:
4]+4'd3;
if(temp[11:
8]>4'd4)
temp[11:
8]=temp[11:
8]+4'd3;
dat_r=dat_r<<1;
{hundreds_r,tens_r,units_r}={temp[10:
0],data[0]};
end
end
endmodule
4交通控制模块。
模块功能:
把以上五个模块连接起来形成一个完整的电路,从而实现交通灯控制功能。
交通控制模块程序如下:
moduletraffic_control(clk,clk_1hz,reset,set,done_NS,done_EW,red1,yellow1,green1,red2,yellow2,green2,sload_NS,sload_EW,state_cnt);
inputclk,clk_1hz,reset,set;
inputdone_NS,done_EW;
outputred1,yellow1,green1,red2,yellow2,green2;
outputsload_NS,sload_EW;
output[3:
0]state_cnt;
parameters0=4'b0001,s1=4'b0010,s2=4'b0100,s3=4'b1000;
reg[3:
0]current_state,next_state;
regred1,yellow1,green1,red2,yellow2,green2;
regsload_NS,sload_EW;
assignstate_cnt=current_state;
always@(posedgeclkorposedgereset)
begin
if(reset)
current_state<=s0;
else
current_state<=next_state;
end
always@(current_stateordone_NSordone_EW)
begin:
fsmtr
case(current_state)
s0:
begin
if(done_NS)next_state<=s1;
elsenext_state<=s0;
end
s1:
begin
if(done_NS)next_state<=s2;
elsenext_state<=s1;
end
s2:
begin
if(done_EW)next_state<=s3;
elsenext_state<=s2;
end
s3:
begin
if(done_EW)next_state<=s0;
elsenext_state<=s3;
end
default:
next_state<=s0;
endcase
end
always@(*)
begin
if(set)begin
green1<=1'b0;yellow1<=1'b0;red1<=1'b1;
green2<=1'b0;yellow2<=1'b0;red2<=1'b1;
end
elsebegin
case(current_state)
s0:
begin
green1<=1'b1;yellow1<=1'b0;red1<=1'b0;
green2<=1'b0;yellow2<=1'b0;red2<=1'b1;
end
s1:
begin
green1<=1'b0;yellow1<=1'b1;red1<=1'b0;
green2<=1'b0;yellow2<=1'b0;if(clk_1hz)red2<=~red2;
end
s2:
begin
green1<=1'b0;yellow1<=1'b0;red1<=1'b1;
green2<=1'b1;yellow2<=1'b0;red2<=1'b0;
end
s3:
begin
green1<=1'b0;yellow1<=1'b0;if(clk_1hz)red1<=~red1;
green2<=1'b0;yellow2<=1'b1;red2<=1'b0;
end
default:
begin
green1<=1'b1;yellow1<=1'b0;red1<=1'b0;
green2<=1'b0;yellow2<=1'b0;red2<=1'b1;
end
endcase
end
end
always@(*)
begin
sload_NS<=1'b0;
sload_EW<=1'b0;
case(current_state)
s0:
begin
if(done_NS)
begin
sload_NS<=1'b1;
end
end
s1:
begin
if(done_NS)
begin
sload_NS<=1'b1;
sload_EW<=1'b1;
end
end
s2:
begin
if(done_EW)
begin
sload_EW<=1'b1;
end
end
s3:
begin
if(done_EW)
begin
sload_NS<=1'b1;
sload_EW<=1'b1;
end
end
default:
begin
sload_NS<=1'b1;
sload_EW<=1'b1;
end
endcase
end
endmodule
moduleSEG7_LUT(oSEG,iDIG);
input[3:
0]iDIG;
output[6:
0]oSEG;
reg[6:
0]oSEG;
always@(iDIG)
begin
case(iDIG)
4'h1:
oSEG=7'b1111001;
4'h2:
oSEG=7'b0100100;
4'h3:
oSEG=7'b0110000;
4'h4:
oSEG=7'b0011001;
4'h5:
oSEG=7'b0010010;
4'h6:
oSEG=7'b0000010;
4'h7:
oSEG=7'b1111000;
4'h8:
oSEG=7'b0000000;
4'h9:
oSEG=7'b0011000;
4'ha:
oSEG=7'b0001000;
4'hb:
oSEG=7'b0000011;
4'hc:
oSEG=7'b1000110;
4'hd:
oSEG=7'b0100001;
4'he:
oSEG=7'b0000110;
4'hf:
oSEG=7'b0001110;
4'h0:
oSEG=7'b1000000;
endcase
end
endmodule
moduleSEG7_LUT_4(oSEG0,oSEG1,oSEG2,oSEG3,iDIG);
input[15:
0]iDIG;
output[6:
0]oSEG0,oSEG1,oSEG2,oSEG3;
SEG7_LUTu0(oSEG0,iDIG[3:
0]);
SEG7_LUTu1(oSEG1,iDIG[7:
4]);
SEG7_LUTu2(oSEG2,iDIG[11:
8]);
SEG7_LUTu3(oSEG3,iDIG[15:
12]);
Endmodule
Ⅴ系统仿真及硬件下载。
Ⅵ遇到的问题及分析。
1.我们在设计时使用了四个数码管,分别用来显示东西、南北方向的计数。
两个计数器模块的状态是不一样的。
经分析调试后发现两个计数器的状态应该是相对应的,调整后使计数器数值正确显示。
Ⅶ结论与心得。
通过这次课程设计,我们学习了VerilogHDL这种语言,并且学习完理论知识后能够直接用于解决实际问题,这使得我们的自学能力有了很大的提高;然后,通过使用QuartusⅡ进行编程,以及程序烧录,熟悉了这个软件的使用;接着,通过对FPGA的编程和控制,我们一定程度的学会了FPGA的使用。
经过这次课程设计,我们通过查阅资料,自学工具的使用,分析问题以及方案的设计,最后进行程序的编写和烧录,完成所给的设计任务,这是一次我们利用理论知识解决实际问题的尝试,这给我们以后解决更多的实际问题提供了经验。
同时在实践中我们也发现了自己的不足,因此在设计中,我们也在不断地改进设计中的不足之处。
参考文献:
[l]庄新敏《QuartusⅡ用户指南及仿真实现》国防工业出版社2001年
[2]张亦华《数字电路EDA入门-VHDL程序实例集》北京邮电大学出版社2003年
[3]马临超《基于VHDL语言的交通灯控制器设计》河南机电高等专科学校学报2008年
[4]侯伯亨《VHDL硬件描述语言与数字逻辑电路设计》西安电子科技大学出版社1999年
[5]任勇峰《VHDL与硬件实现速成》国防工业出版社2005年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 交通灯 设计