欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于FPGA交通灯设计(共16页).doc

    • 资源ID:14247152       资源大小:202KB        全文页数:16页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于FPGA交通灯设计(共16页).doc

    精选优质文档-倾情为你奉上河南科技学院新科学院数字系统课程设计报告书课题名称 基于FPGA的交通灯设计院 系新科学院姓名学号 夏文平、专业班级通信工程、通信132指导教师刘艳昌、雷进辉设计时间2014-2015学年第2学期12、13周2015年 6月 5 日专心-专注-专业摘要交通灯信号控制器通常要实现自动控制和手动控制其红绿灯的变化,基于FPGA设计的交通灯信号控制器电路简单、可靠性好。本设计可控制2个路口的红、黄、绿三盏灯让其按特定的规律进行变化。利用Quartus对设计结果进行仿真,发现系统工作性能良好。据此设计而成的硬件电路,也实现了控制要求。关键词:交通灯 自动控制 手动控制 课程设计目的。巩固加深所学电子技术课程的基本知识,提高综合运用所学知识的能力。同时培养学生选用参考书、查阅手册、图表和文献资料的能力,提高解决实际问题的能力。并且,在设计方案分析比较、设计计算、电路安装等缓解掌握使用电路的设计方法。然后提高学生的动手能力,掌握仪器设备的正确使用方法。最后了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务数的要求编写设计说明书,可以正确反映设计和实验成果,能正确绘制电路图等。 设计任务及要求。设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次的通行时间都设为25秒。要求黄灯先亮5秒,才能变换运行车道并且黄灯亮时另一干道的红灯按1Hz的频率闪烁。要求通行时间及黄灯亮的时间均可在60秒内任意设定。要求交通灯控制电路可以手动控制立即进入特殊运行状态,即两条道上红灯全亮,时钟停止计时。当特殊运行状态结束后,系统复原,继续正常运行。 系统设计总体方案。由设计要求可得如下交通控制器的状态转换表:甲车道乙车道时间绿灯红灯6S黄灯红灯5S红灯绿灯11S红灯(闪烁)黄灯5S 各模块具体实现。 分频模块。如图为分频模块。模块功能:实现分频功能,输入50MHz的时钟信号,对上升沿进行计数,每50M个脉冲的上升沿输出一次高电平脉冲信号,从而实现分频。模块程序如下:module one_second_clk(reset,clk,cout);input reset,clk;integer count;output reg cout;always (posedge clk) if(reset) begin count=0;cout=0;end else if(count=-1) begin count=0;cout=1;end else begin count=count+1;cout=0;endendmodulemodule timer_NS(clk,reset,set,ld,en,state,q_NS,done_NS);input clk,reset,set,ld,en;input 3:0 state;output 7:0 q_NS;output done_NS;reg 7:0 q_NS;parameter red_NS=8'd10,green_NS=8'd5,yellow_NS=8'h04;parameter st0=4'b0001,st1=4'b0010,st2=4'b0100,st3=4'b1000;assign done_NS=(|q_NS)&&en;always(posedge clk)if(reset)q_NS<=green_NS;else if(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;endcaseelse if(en&&set)beginq_NS<=q_NS-1;endendmodule 倒计时模块。由于是东西南北两条道路,固有两个倒计时器。模块功能:在相应状态下实现倒序计数。程序如下:module timer_EW(clk,reset,set,ld,en,state,q_EW,done_EW);input clk,reset,set,ld,en;input 3:0 state;output 7:0 q_EW;output done_EW;reg 7:0 q_EW;parameter red_EW=8'd10,green_EW=8'd5,yellow_EW=8'h04;parameter st0=4'b0001,st1=4'b0010,st2=4'b0100,st3=4'b1000;assign done_EW=(|q_EW)&&en;always(posedge clk)if(reset)q_EW<=red_EW;else if(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;endcaseelse if(en&&set)beginq_EW<=q_EW-1;endendmodule 转码模块。模块功能:将计数器输出的的二进制数转换为bcd码表示的十进制数。转码程序如下:module bin_to_bcd(data,units,tens,hundreds);input7:0 data;output3:0 units,tens,hundreds;reg3:0 units_r,tens_r,hundreds_r;reg7:0 dat_r;reg11:0 temp;integer i;assign units=units_r;assign tens=tens_r;assign hundreds=hundreds_r;always(data) begin dat_r=data; temp=0; for(i=0;i<7;i=i+1) begin temp=temp10:0,dat_r7; if(temp3:0>4'd4) temp3:0=temp3:0+4'd3; if(temp7:4>4'd4) temp7:4=temp7:4+4'd3; if(temp11:8>4'd4) temp11:8=temp11:8+4'd3; dat_r=dat_r<<1; hundreds_r,tens_r,units_r=temp10:0,data0; end endendmodule 交通控制模块。模块功能:把以上五个模块连接起来形成一个完整的电路,从而实现交通灯控制功能。交通控制模块程序如下:module traffic_control(clk,clk_1hz,reset,set,done_NS,done_EW,red1,yellow1,green1,red2,yellow2,green2,sload_NS,sload_EW,state_cnt);input clk,clk_1hz,reset,set;input done_NS,done_EW;output red1,yellow1,green1,red2,yellow2,green2;output sload_NS,sload_EW;output 3:0 state_cnt;parameter s0=4'b0001,s1=4'b0010,s2=4'b0100,s3=4'b1000;reg 3:0 current_state,next_state;reg red1,yellow1,green1,red2,yellow2,green2;reg sload_NS,sload_EW;assign state_cnt=current_state;always(posedge clk or posedge reset) begin if(reset) current_state<=s0; else current_state<=next_state; endalways(current_state or done_NS or done_EW)begin:fsmtr case(current_state) s0:begin if(done_NS)next_state<=s1; else next_state<=s0; end s1:begin if(done_NS)next_state<=s2; else next_state<=s1; end s2:begin if(done_EW)next_state<=s3; else next_state<=s2; end s3:begin if(done_EW)next_state<=s0; else next_state<=s3; end default:next_state<=s0; endcaseendalways(*)beginif(set) begin green1<=1'b0;yellow1<=1'b0;red1<=1'b1; green2<=1'b0;yellow2<=1'b0;red2<=1'b1; end else begincase(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 endalways(*)beginsload_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 module SEG7_LUT(oSEG,iDIG);input3:0iDIG;output6:0oSEG;reg6:0oSEG;always (iDIG)begincase(iDIG)4'h1: oSEG = 7'b;4'h2: oSEG = 7'b; 4'h3: oSEG = 7'b; 4'h4: oSEG = 7'b; 4'h5: oSEG = 7'b; 4'h6: oSEG = 7'b; 4'h7: oSEG = 7'b; 4'h8: oSEG = 7'b; 4'h9: oSEG = 7'b; 4'ha: oSEG = 7'b;4'hb: oSEG = 7'b;4'hc: oSEG = 7'b;4'hd: oSEG = 7'b;4'he: oSEG = 7'b;4'hf: oSEG = 7'b;4'h0: oSEG = 7'b;endcaseendendmodulemodule SEG7_LUT_4 (oSEG0,oSEG1,oSEG2,oSEG3,iDIG );input15:0iDIG;output6:0oSEG0,oSEG1,oSEG2,oSEG3;SEG7_LUTu0(oSEG0,iDIG3:0);SEG7_LUTu1(oSEG1,iDIG7:4);SEG7_LUTu2(oSEG2,iDIG11:8);SEG7_LUTu3(oSEG3,iDIG15:12);Endmodule 系统仿真及硬件下载。 遇到的问题及分析。1.我们在设计时使用了四个数码管,分别用来显示东西、南北方向的计数。两个计数器模块的状态是不一样的。经分析调试后发现两个计数器的状态应该是相对应的,调整后使计数器数值正确显示。 结论与心得。通过这次课程设计,我们学习了Verilog HDL这种语言,并且学习完理论知识后能够直接用于解决实际问题,这使得我们的自学能力有了很大的提高;然后,通过使用Quartus进行编程,以及程序烧录,熟悉了这个软件的使用;接着,通过对FPGA的编程和控制,我们一定程度的学会了FPGA的使用。经过这次课程设计,我们通过查阅资料,自学工具的使用,分析问题以及方案的设计,最后进行程序的编写和烧录,完成所给的设计任务,这是一次我们利用理论知识解决实际问题的尝试,这给我们以后解决更多的实际问题提供了经验。同时在实践中我们也发现了自己的不足,因此在设计中,我们也在不断地改进设计中的不足之处。参考文献:l 庄新敏Quartus 用户指南及仿真实现国防工业出版社 2001年2 张亦华 数字电路EDA入门-VHDL程序实例集北京邮电大学出版社 2003年3 马临超 基于VHDL语言的交通灯控制器设计河南机电高等专科学校学报 2008年4 侯伯亨 VHDL硬件描述语言与数字逻辑电路设计西安电子科技大学出版社 1999年5 任勇峰 VHDL与硬件实现速成国防工业出版社 2005年

    注意事项

    本文(基于FPGA交通灯设计(共16页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开