• 514.36 KB
  • 17页

西电电院工程设计报告

  • 17页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'工程设计报告2013级《工程设计》课程实践报告基于FPGA的交通控制器设计班级:1302041姓名:陈串串学号:13020410024指导教师:任爱锋1 工程设计报告2 工程设计报告交通控制器一、选题目的了解VHDL语言,并且学会使用该语言编写程序,在QuartusII8.0仿真实现,在数电实验板上实际操作,锻炼动手能力,交通控制器的选题十分贴近生活,能够将理论和实际相结合。VHDL简介(1)描述在这个语言首次开发出来时,其目标仅是一个使电路文本化的一种标准,为了使人们采用文本方式描述的设计能够被其他人没有二意性地所理解。因为用自然语言描述电路会产生二意性。这个模型是让人来阅读的。(2)模拟的模型作为模型语言,用于采用模拟软件进行模拟。这个模型是让仿真软件来阅读的。(3)综合的模型在自动设计系统中,作为设计输入。这个模型是让综合软件来阅读的。VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来,VHDL语言主要具有以下优点:(1)VHDL语言功能强大,设计方式多样VHDL语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。(2)VHDL语言具有强大的硬件描述能力VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,3 工程设计报告也可以采用三者的混合描述方式。同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL语言的强大描述能力还体现在它具有丰富的数据类型。VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。(3)VHDL语言具有很强的移植能力VHDL语言很强的移植能力主要体现在:对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。(4)VHDL语言的设计描述与器件无关采用VHDL语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL语言允许采用多种不同的器件结构来实现。(5)VHDL语言程序易于共享和复用VHDL语言采用基于库(library)的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。由于VHDL语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言,因此它可以使设计成果在设计人员之间方便地进行交流和共享,从而减小硬件电路设计的工作量,缩短开发周期。二、设计目标交通控制器交通灯是城市交通中不可缺少的重要工具,是城市交通秩序的重要保障。十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。一个十字路口的交通一般分为两个方向,每个方向具有红灯、绿灯和黄灯3种,另外每个方向还具有左转灯,因此每个方向具有4个灯。4 工程设计报告这个交通灯还为每一个灯的状态设计了倒计时数码管显示功能。可以为每一个灯的状态设置一个初始值,灯状态改变后,开始按照这个初始值倒计时。倒计时归零后,灯的状态将会改变至下一个状态。实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。三、实现方案5 工程设计报告流程图如下:本系统主要由分频器、计数器、控制器等电路组成。分频器将晶振送来的1000HZ信号变为1HZ时钟信号;计数器实现总共90秒的计数,90秒也是交通灯控制器的一个大循环;控制其控制系统的状态转移和红黄绿灯信号的输出;倒计时显示红黄绿灯闪亮的时间。整个系统的时序受控制器控制,它是系统的核心。控制器的整个工作过程用状态机进行描述,5种状态描述如下:6 工程设计报告S0:A方向绿灯亮,B方向红灯亮,此状态持续40秒时间;S1:A方向黄灯亮,B方向红灯亮,此状态持续5秒的时间;S2:A方向红灯亮,B方向绿灯亮,此状态持续40秒时间;S3:A方向红灯亮,B方向黄灯亮,此状态持续5秒时间;S4:紧急制动状态,A方向红灯亮,B方向绿灯亮,当紧急制动信号有效时,进入这种状态。交通控制器系统的状态转移图:A红亮B红亮S4A绿亮A黄亮A红亮A红亮B红亮B红亮B绿亮B黄亮S440sS15sS240sS35s四、设计过程7 工程设计报告顶层原理图,共分为devide模块、control模块、m45模块。原理:通过devide模块将1000HZ的clk分频为1HZ,通过control模块分别控制两个方向的红绿黄灯的亮暗,并将红绿黄灯(即ared,agreen,ayellow和bred,bgreen,byellow)作为m45模块的输入端来选择5s,40s,45s这三个时段的显示。1)devide模块作用:1000HZ分频器2)control模块作用:控制器control的逻辑符号如下图所示。其中clk为时钟输入信号;hold为紧急制动信号;A[2..0]分别为东西分方向驱动红灯、绿灯、黄灯的输出信号;B[2..0]分别为南北方向驱动红灯、绿灯、黄灯指示的输出信号。3)m45模块作用:倒计时计数器顶层原理图五、遇到问题及解决办法8 工程设计报告遇到问题:1.数码管的显示出现乱码;2.两个路口的计数器要实现不同的显示。3.紧急制动状态下,数码管要来回显示当前数字和零,即实现闪烁。4.数码管显示的数字与红绿黄灯的状态不同步。解决方法:1.seg7模块(仅去低四位,即d、e、f、g四个输出端口有效,a、b、c三个输出端口不发生作用)接入数码管显示时钟。2.通过control模块分别控制两个方向的红绿黄灯的亮暗,并将红绿黄灯(即ared,agreen,ayellow和bred,bgreen,byellow)作为m45模块的输入端来选择5s,40s,45s这三个时段的显示。实现结果:仿真结果:各个端口输出波形(CLK频率为1000HZ)六、编程调试1)devide模块9 工程设计报告devideclkclk_outinst1libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydevideisport(clk:instd_logic;clk_out:outstd_logic);enddevide;architecturearc_devideofdevideissignalcount:std_logic_vector(9downto0);beginprocessbeginwaituntilclk"eventandclk="1";if(count<999)thencount<=count+1;clk_out<="0";elsecount<=(others=>"0");clk_out<="1";endif;endprocess;endarchitecturearc_devide;2)Control模块10 工程设计报告控制器control的逻辑符号如下图所示。其中clk为时钟输入信号;hold为紧急制动信号;A[2..0]分别为东西分方向驱动红灯、绿灯、黄灯的输出信号;B[2..0]分别为南北方向驱动红灯、绿灯、黄灯指示的输出信号。控制器的VHDL描述文件如下:controlclkA[2..0]holdB[2..0]instlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycontrolisport(clk,hold:instd_logic;A,B:outstd_logic_vector(2downto0));endcontrol;architecturebehaviorofcontrolistypestate_typeis(s0,s1,s2,s3,s4);signalcurrent_state,next_state:state_type;signalcounter:std_logic_vector(6downto0);beginsynch:processbeginwaituntilclk"eventandclk="1";ifhold="0"thencounter<=counter;elseifcounter<89thencounter<=counter+1;elsecounter<=(others=>"0");endif;endif;endprocess;process11 工程设计报告beginwaituntilclk"eventandclk="1";current_state<=next_state;endprocess;state_trans:process(current_state)begincasecurrent_stateiswhens0=>ifhold="0"thennext_state<=s4;elseifcounter<39thennext_state<=s0;elsenext_state<=s1;endif;endif;whens1=>ifhold="0"thennext_state<=s4;elseifcounter<44thennext_state<=s1;elsenext_state<=s2;endif;endif;whens2=>ifhold="0"thennext_state<=s4;elseifcounter<84thennext_state<=s2;elsenext_state<=s3;endif;endif;whens3=>ifhold="0"thennext_state<=s4;elseifcounter<89thennext_state<=s3;else12 工程设计报告next_state<=s0;endif;endif;whens4=>ifhold="0"thennext_state<=s4;elseifcounter<39thennext_state<=s0;elsifcounter<44thennext_state<=s1;elsifcounter<84thennext_state<=s2;elsifcounter<=89thennext_state<=s3;endif;endif;endcase;endprocess;output:process(current_state)begincasecurrent_stateiswhens0=>A<="010";B<="100";whens1=>A<="001";B<="100";whens2=>A<="100";B<="010";whens3=>A<="100";B<="001";whens4=>A<="100";B<="100";endcase;endprocess;endbehavior;控制器control的仿真波形图如下:13 工程设计报告3)m45模块倒计时计数器m45的逻辑符号如图所示。其中CLK为时钟输入,EN为紧急制动信号输入,CR为清零,led[2..0]为路灯控制倒计时信号,QL[3..0]和QH[3..0]为BCD码的个十位输出。m45CLKQL[3..0]ENQH[3..0]CROCled[2..0]inst3libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitym45isport(CLK:instd_logic;EN:instd_logic;CR:instd_logic;led:instd_logic_vector(2downto0);QL,QH:outstd_logic_vector(3downto0);OC:outstd_logic);endm45;14 工程设计报告architecturebehavofm45issignalcouL,couH:std_logic_vector(3downto0);beginprocess(CR,CLK,EN,led)beginifCR="0"thencouL<="0000";couH<="0000";elsifCLK"eventandCLK="1"thenifEN="1"thenif(couL=0andcouH=0)thencaselediswhen"100"=>couL<="0100";couH<="0100";when"010"=>couL<="1001";couH<="0011";when"001"=>couL<="0100";couH<="0000";whenothers=>couL<="0000";couH<="0000";endcase;elsifcouL=0thencouL<="1001";couH<=couH-1;elsecouL<=couL-1;endif;endif;endif;endprocess;process(couL,couH)beginif(couL=0andcouH=0)thenOC<="1";elseOC<="0";endif;endprocess;QL<=couL;QH<=couH;endbehav;15 工程设计报告附m45模块仿真图:七、结论通过这门工程设计的实验任务,我熟练的了解并掌握的VHDL语言的编程规范和QuantusII软件的使用。为了完成本次实验任务,我大量的查阅了相关书籍和学长之前的作业,自学能力得到了很好的提高。在实验报告撰写阶段,又学习了相关的论文书写格式,得到了锻炼。八、参考文献[1]杨松华等编著.数字电子技术技术基础(第二版).西安:西安电子科技大学出版社,2009.[2]康华光主编.电子技术基础数字部分.北京:高教出版社,2006.[3]阎石主编.数字电子技术基础.北京:高教出版社,2003.[4]曹昕燕,周凤臣,聂春燕.EDA技术与课程设计.北京:清华大学出版社,2006.[5]孙延鹏,尹常永.VHDL与可编程逻辑器件应用.北京:航空工业出版社,2006.[6]百度百科16 工程设计报告17'