基于FPGA交通灯设计Word格式.docx
《基于FPGA交通灯设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA交通灯设计Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次的通行时间都设为25秒。
要求黄灯先亮5秒,才能变换运行车道并且黄灯亮时另一干道的红灯按1Hz的频率闪烁。
要求通行时间及黄灯亮的时间均可在60秒内任意设定。
要求交通灯控制电路可以手动控制立即进入特殊运行状态,即两条道上红灯全亮,时钟停止计时。
当特殊运行状态结束后,系统复原,继续正常运行。
Ⅲ系统设计总体方案。
由设计要求可得如下交通控制器的状态转换表:
甲车道
乙车道
时间
绿灯
红灯
6S
黄灯
5S
11S
红灯(闪烁)
Ⅳ各模块具体实现。
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;
elsebegincount=count+1;
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:
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:
=red_NS;
st2:
=8'
h00;
st3:
default:
endcase
elseif(en&
~set)
begin
q_NS<
=q_NS-1;
2倒计时模块。
由于是东西南北两条道路,固有两个倒计时器。
在相应状态下实现倒序计数。
程序如下:
moduletimer_EW(clk,reset,set,ld,en,state,q_EW,done_EW);
0]q_EW;
outputdone_EW;
parameterred_EW=8'
d10,green_EW=8'
d5,yellow_EW=8'
assigndone_EW=~(|q_EW)&
if(reset)q_EW<
=red_EW;
q_EW<
=green_EW;
=yellow_EW;
q_EW<
=q_EW-1;
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]>
temp[7:
4]=temp[7:
4]+4'
if(temp[11:
8]>
temp[11:
8]=temp[11:
8]+4'
dat_r=dat_r<
<
1;
{hundreds_r,tens_r,units_r}={temp[10:
0],data[0]};
end
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'
reg[3:
0]current_state,next_state;
regred1,yellow1,green1,red2,yellow2,green2;
regsload_NS,sload_EW;
assignstate_cnt=current_state;
always@(posedgeclkorposedgereset)
if(reset)
current_state<
=s0;
else
=next_state;
always@(current_stateordone_NSordone_EW)
begin:
fsmtr
case(current_state)
s0:
if(done_NS)next_state<
=s1;
elsenext_state<
end
s1:
=s2;
s2:
if(done_EW)next_state<
=s3;
s3:
default:
next_state<
endcase
always@(*)
if(set)begin
green1<
=1'
b0;
yellow1<
red1<
b1;
green2<
yellow2<
red2<
elsebegin
case(current_state)
if(clk_1hz)red2<
=~red2;
if(clk_1hz)red1<
=~red1;
sload_NS<
sload_EW<
if(done_NS)
sload_NS<
sload_EW<
if(done_EW)
endmodule
moduleSEG7_LUT(oSEG,iDIG);
0]iDIG;
output[6:
0]oSEG;
reg[6:
always@(iDIG)
case(iDIG)
4'
h1:
oSEG=7'
b1111001;
4'
h2:
b0100100;
h3:
b0110000;
h4:
b0011001;
h5:
b0010010;
h6:
b0000010;
h7:
b1111000;
h8:
b0000000;
h9:
b0011000;
ha:
b0001000;
hb:
b0000011;
hc:
b1000110;
hd:
b0100001;
he:
b0000110;
hf:
b0001110;
h0:
b1000000;
endcase
moduleSEG7_LUT_4(oSEG0,oSEG1,oSEG2,oSEG3,iDIG);
input[15:
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年