基于FPGA交通灯设计Word格式.docx

上传人:b****6 文档编号:18238001 上传时间:2022-12-14 格式:DOCX 页数:15 大小:200.95KB
下载 相关 举报
基于FPGA交通灯设计Word格式.docx_第1页
第1页 / 共15页
基于FPGA交通灯设计Word格式.docx_第2页
第2页 / 共15页
基于FPGA交通灯设计Word格式.docx_第3页
第3页 / 共15页
基于FPGA交通灯设计Word格式.docx_第4页
第4页 / 共15页
基于FPGA交通灯设计Word格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于FPGA交通灯设计Word格式.docx

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

基于FPGA交通灯设计Word格式.docx

设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次的通行时间都设为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年

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

当前位置:首页 > 工程科技 > 机械仪表

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

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