已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2013届电子信息工程专业毕业设计(论文)1概述1.1FPGA概述随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球化的问题。城市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日趋加重,交通事故频繁,环境污染加剧等问题普遍存在。目前,全国大中城市普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给人民的生命财产安全带来了极大的损失。如何解决城市交通问题已成为全社会关注的焦点和大众的迫切呼声。探究城市交通发展中存在问题的原因,无论是从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。城市交通控制系(UTC ,Urban Traffic Control System)是现代城市智能交通系统(IDJ ,Intelligent transport system)的组成之一,主要用于城市道路交通的控制与管理。城市平交路口实现交通信号控制是城市交通管理现代化的基本标志之一,是提高交通管理效能的重要技术手段。路口信号控制器是控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。各种交通控制方案,最终都要由路口信号控制器来实现。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,EDA技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。利用EDA技术设计交通灯来完成这个需求就显的更加迫切,同样也是非常的实用和合理。FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在PAL,GAL等逻辑器件的基础上发展起来的。同以往的PAL,GAL相比较FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA/CPLD上就是一个子系统部件。这种芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎。比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他们开发较早,占用了较大的PLD市场。FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特点外,还具有以下几个优点:随着VLSI(超大集成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA/CPLD芯片的规模也越来越大,其单片逻辑门数已达上百万门,它所实现的功能也越来越强,同时也可以实现系统集成,即片上系统SOC。FPGA/CPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承担芯片风险和费用,设计人员只需在自己的实验室就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,FPGA/CPLD的资金投入就少,减少了潜在的花费。用户可以反复的编程,擦除,使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。FPGA/CPLD软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入,编译,优化,仿真,直至最后芯片的制作。当电路有少量的改动,更能显示FPGA/CPLD的优势。1.2:FPGA设计交通灯的意义 FPGA是一个功能强大的可编程逻辑芯片,采用FPGA设计ASIC电路,用户不需要投片生产,就能得到所需的芯片。FPGA内部有丰富的触发器和I/O引脚。FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。所以用FPGA完成交通灯的设计合理可行。1.3:硬件描述语言VHDL硬件描述语言HDL是EDA技术的重要组成部分,常见的HDL有下列几种:VHDL、Verilog HDL、System Verilog、和System C。其中VHDL、Verilog在现在EDA设计中使用最多,也得到几乎所有的主流EDA工具的支持。VHDL的英文全名是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,于1983年有美国国防部(DOD)发起创建,由IEEE(The Institute of Electrical and Electronics Engineers)进一步发展并在1987年作为“IEEE标准1076”发布。从此,VHDL成为硬件描述语言的业界标准之一。自IEEE公布了VHDL的标准版本之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具支持VHDL。此后VHDL在电子设计领域得到了广泛应用,并逐步取代了原有的非标准硬件描述语言。VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。VHDL具有与具体硬件电路无关和设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,在语言易读性和层次化结构化设计方面表现了强大的生命力和应用潜力。用VHDL进行电子系统设计的一个很大优点是设计者可以专心致力于其功能的实现,而不需对不影响功能的与工艺有关的因素花费过多的时间和精力。2系统分析与总体方案2.1:系统介绍设计交通灯是为了自动控制各个十字路口倒计时器和交通信号灯,从而使行人和各种车辆能够安全通过。本文设计要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。硬件设计采用的是FPGA器件CycloneII系列EP2C5T144,要在硬件中实现交通灯的功能首先要在软件中仿真成功,然后设置芯片的管教和程序端口的对应关系。,以及LED发光并将程序在Quartus软件环境中设计、仿真。2.2:设计任务本论文通过设计一个十字路口的交通灯来形象指挥行人和车辆的安全通行。十字路口处,方向分为东西南北四个方向。东西方向的交通信号灯状态保持一致,南北方向的交通信号灯状态也保持一致。其中每个方向有左转灯、红灯、绿灯和黄灯,共四盏。左转灯亮说明车辆可以左转通行;红灯亮说明禁止车辆直行和左转;绿灯亮说明允许车辆直行和右转;黄灯亮说明即将禁止车辆直行和左转。在每个方向上均设有一个倒计时显示器,以显示禁止或允许通行的倒计时间。十字路口交通灯如图2-1所示图2-1交通灯系统2.3系统设计仿真本毕业论文设计是基于QuartusII软件,底层设计和顶层设计均采用VHDL进行描述设计,同时为了使设计变得形象简明,通过顶层设计生成了原理图。2.4:系统分析通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2-1所示)。还要求四种灯的点亮时间能够以倒计时的形式显示出来。可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。绿灯黄灯左转灯黄灯红灯图2-1 四种灯的循环顺序使用基于FPGA的方法具有周期短、使用灵活、易于修改等明显的优点。而且,随着FPGA器件,设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。未来使用FPGA器件设计的产品将出现在各个领域。因此此次的交通灯控制器将基于FPGA的设计方案来实现所需要的功能。 2.5:设计的总体方案根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案!系统框图由6部分组成,包括:分频、控制、倒计时、红绿灯显示、译码、译码显示等模块。框图如下图2-2所示:图2-2 系统的框图在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:复位开关信号reset;外部时钟信号clk。LED七段显示数码管的输出信号count1(6 downto 0),count2(6 downto 0),count3(6 downto 0),count4(6 downto 0);在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。分频电路:把555多谐振荡器发出的较高频率脉冲用分频电路的到较第频率的时钟信号,本电路通过三次10分平分别得到10Hz、1Hz的时钟信号。控制器电路:根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。当检测到手动控制信号(Con=1)时,执行手动控制; 计数器电路:这里需要的计数器的计数范围为089。计到89后,下一个时钟沿升为1时,开始下一轮计数,此外当系统复位信号(Reset=1)使计数器异步清0。手动信号(Con=1)使系统清0。分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如20分为2和0,7分为0和7)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阳极数码管,因此译码电路输出逻辑数值0点亮二极管,译码电路输出逻辑数值1熄灭二极管。3单元电路设计与仿真3.1分频器模块设计将频率变为1Hz的脉冲波,从而得到周期为1s的脉冲波。其电路图如图3-1所示:图3-1分频器模块实体:entity clk_10 isport( clk : in std_logic; clk_div10 : out std_logic);end clk_10;功能:实现十分频接口:clk脉冲输入 Clk-div10十分频后脉冲输出仿真结果如下图3-2:图3-2分频器模块仿真结果3.2 计数模块的设计及仿真图图3-3计数器模块实体:entity counter is port( clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 80);end counter;功能:实现0到80的计数clk0脉冲输入 con手动控制信号 reset复位信号 countnum计数输出仿真波形如下图3-4:图3-4计数器模块仿真结果3.3 控制模块的设计及仿真图图3-5控制模块实体:entity controller isPort ( clk1 : in std_logic;con1 : in std_logic;con2 : in std_logic; countnum : in integer range 0 to 89; numa,numb : out integer range 0 to 25; ra,ga,ya,ga1 : out std_logic; rb,gb,yb,gb1: out std_logic);end controller;功能:控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。clk1脉冲信号输入 con1手动控制信号 con2状态控制信号 countnum计数输入numa,numb两个方向的倒计时数值输出 ra,ga,ya,ga1,rb,gb,yb,gb1发光二极管输出仿真波形如下图3-6:图3-6控制模块仿真结果3.4 分位模块的设计与仿真图图3-7分位模块实体:entity fenwei is port ( numin:in integer range 0 to 25; numa,numb:out integer range 0 to 9 );end fenwei;功能:把倒计时的数值分成2个1位的十进制数。numin:倒计时数值输入 numa,numb将数值分为2个1位的十进制输出仿真波形如下图3-8:图3-8分位模块仿真3.5 译码模块的设计及仿真图图3-9译码模块实体:entity display is port( clk2:in std_logic; bb: in std_logic_vector(3 downto 0); ya:out std_logic; yb:out std_logic; yc:out std_logic; yd:out std_logic; ye:out std_logic; yf:out std_logic; yg:out std_logic);end display;功能:根据控制电路的控制信号,驱动交通灯的显示, 通过输入二进制数值,输出信号点亮二极管。bb3.0-BCD码输入clk2脉冲输入 ya,yb,yc,yd,ye,yf,yg七段数码管显示输出仿真波形如下图3-10:图3-10译码模块仿真3.6顶层文件的设计图3-11顶层模块entity dingceng isport(clkd,resetd,cond,con1d:in std_logic;count1:out std_logic_vector(6 downto 0);count2:out std_logic_vector(6 downto 0);count3:out std_logic_vector(6 downto 0);count4:out std_logic_vector(6 downto 0);reda,greena,yellowa,greena1: out std_logic;redb,greenb,yellowb,greenb1: out std_logic);end entity dingceng;clkd脉冲输入resetd复位信号con手动控制信号con1d状态控制信号count1,count2,count3,count4七段数码管显示reda,greena,yellowa,greena1,redb,greenb,yellowb,greenb1发光二极管输出4实验程序设计一个完整的VHDL语言程序通常包括实体(Entity)、构造体、配置、包集合(Package)和库(Library)5个部分组成。下面结合实际的程序来加以说明。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dingceng isport(clkd,resetd,cond,con1d:in std_logic;count1:out std_logic_vector(6 downto 0);count2:out std_logic_vector(6 downto 0);count3:out std_logic_vector(6 downto 0);count4:out std_logic_vector(6 downto 0);reda,greena,yellowa,greena1: out std_logic;redb,greenb,yellowb,greenb1: out std_logic);end entity dingceng;architecture one of dingceng iscomponent clk_10port(clk:in std_logic; clk_div10 : out std_logic);end component;component counterport (clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 89);end component;component controllerport ( clk1 : in std_logic; con1 : in std_logic;con2: in std_logic; countnum : in integer range 0 to 89; numa,numb : out integer range 0 to 25; ra,ga,ya,ga1: out std_logic; rb,gb,yb,gb1 : out std_logic);end component;component fenwei port ( numin:in integer range 0 to 25; numa,numb:out integer range 0 to 9 );end component;component yimaport(clk2:in std_logic; bb: in integer range 0 to 9; ya:out std_logic; yb:out std_logic; yc:out std_logic; yd:out std_logic; ye:out std_logic; yf:out std_logic; yg:out std_logic);end component;signal a,b,c:std_logic;signal ww:integer range 0 to 89;signal yy1,yy2:integer range 0 to 25;signal tt1,tt2,tt3,tt4:integer range 0 to 9;beginu0: clk_10 port map(clk=clkd,clk_div10=a);u1: clk_10 port map(clk=clkd,clk_div10=b);u2: clk_10 port map(clk=b,clk_div10=c);u3:counter port map(clk0=c,con=cond,reset=resetd,countnum=ww);u4:controller port map (clk1=c,con1=cond,con2=con1d,countnum=ww,numa=yy1,numb=yy2,ra=reda,ga=greena,ya=yellowa,ga1=greena1,rb=redb,gb=greenb,yb=yellowb,gb1=greenb1);u5:fenwei port map(numin=yy1,numa=tt1,numb=tt2);u6:fenwei port map (numin=yy2,numa=tt3,numb=tt4);u7:yimaport map(clk2=b,bb=tt1,ya=count1(0),yb=count1(1),yc=count1(2),yd=count1(3),ye=count1(4),yf=count1(5),yg=count1(6);u8:yima port map (clk2=b,bb=tt2,ya=count2(0),yb=count2(1),yc=count2(2),yd=count2(3),ye=count2(4),yf=count2(5),yg=count2(6);u9:yima port map(clk2=b,bb=tt3,ya=count3(0),yb=count3(1),yc=count3(2),yd=count3(3),ye=count3(4),yf=count3(5),yg=count3(6);u10:yima port map(clk2=b,bb=tt4,ya=count4(0),yb=count4(1),yc=count4(2),yd=count4(3),ye=count4(4),yf=count4(5),yg=count4(6);end architecture one;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_10 isport( clk : in std_logic; clk_div10 : out std_logic);end clk_10;architecture one of clk_10 issignal clk_temp : std_logic;beginprocess(clk)variable counter : std_logic_vector(2 downto 0);constant md : std_logic_vector(2 downto 0) := 101;beginif(clkevent and clk=1) thenif(counter = md)thencounter := (others =0);clk_temp = not clk_temp;end if;counter := counter + 1 ;end if; end process;clk_div10 = clk_temp;end one;library ieee;use ieee.std_logic_1164.all;entity counter is port ( clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 89);end counter;architecture one of counter is begin process (reset,clk0) begin if reset=1 then countnum = 0; elsif rising_edge( clk0 ) then if con=1 then countnum = 0; else if countnum=89 then countnum = 0; else countnum = 65then numb=90-countnum; numa = 70 then aa := 00011000; else aa := 00101000; numa= 45 then numb = 65-countnum;numa = 50 then aa := 10000100; else aa := 10000010; numb= 20 then numa = 45-countnum;numb = 25 then aa := 01001000; else aa := 00101000; numa = 0 then numa = 20-countnum;numb = 5 then aa := 10000100; else aa := 10000010; numb = 5-countnum; end if;end if;elseif con1= 1 then numa = 0;numb = 0; if con2 = 1 thenif m = 7 then m = 0;elsem = m + 1;end if;end if;if m = 0 then aa := 01001000;elsif m= 1 then aa := 00101000; elsif m=2 then aa :=10000100; elsif m=3 then aa := 10000010; elsif m=4 then aa := 00011000; elsif m=5 then aa := 00101000; elsif m=6 then aa := 10000001; elsif m=7 then aa := 10000010; end if;end if;end if;end if; ra = aa(7); ga = aa(6);ya = aa(5); ga1 = aa(4); rb = aa(3); gb = aa(2);yb = aa(1);gb1 = 20 then numa1 :=2; numb1 := numin - 20; elsif numin = 10 then numa1 := 1; numb1 := numin - 10; else numa1 := 0 ; numb1 := numin ; end if ; numa = numa1; numb temp temp temp temp temp temp temp temp temp temp temp = 1111111;end case;end process;ya=temp(0);yb=temp(1); yc=temp(2);yd=temp(3);ye=temp(4);yf=temp(5);yg=temp(6);end one; 程序仿真与分析5.1:仿真结果利用QUARTUS软件对本程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件。仿真结果如图5-1所示:图5-1 仿真结果5.2:仿真结果分析在顶层设计中,cond是复位信号,输入的时钟频率CLKd是经过分频器后,变为频率为1Hz的时钟信号,周期为1s,用此时钟信号来控制整个系统的步调,与现实生活中交通灯的步调保持一致。 通过设定clkd值以及cond和conld的初值,就可以得到如上所示的仿真波形图。由仿真波形图可以看出波形是由conld初值信号触发而显示出各个状态的。Cond高电平信号输入时,所有交通灯都变为红灯状态(符合任务书的要求)。由仿真波形图还可以清楚的看出各时间段每个交通灯的状态,当东西方向的绿灯亮时南北方向的红灯亮,其中有黄灯闪5秒的过程,这符合我们的设计要求,也达到了我们所要的结果,从波形上看实验程序是可行的。 要得到正确的仿真波形图就必须设定合适的时间信号clkd值。如果clkd值设置的太小则交通灯状态变化得太快无法分辨,如果clk值设置得太大则交通灯状态转换缓慢,效果不明显。6结论利用网络和图书馆的有效资源,搜集并下载了大量的关于用FPGA做交通灯设计的资料;然后精心阅读,在赵老师的指导督促下,并和周围同学进行有效学习和沟通,最终确定了自己的设计方案;最后按照既定的设计方案,通过努力有步骤的实现了最终的毕业设计,实现了交通灯、倒计时器按预定状态表5-1运行,并指挥交通,本设计利用VerilogHDL程序编写,以芯片EP1Q100QC208-3的FPGA试验箱为平台为基础,在软件和硬件上实现了交通灯控制器的设计,以双色LED的变换模拟交通灯的红绿两个信号灯的变化,本设计综合了多种通行模式,加入了人性化的声音提示功能。因为硬件芯片I/O口数量的问题,在硬件测试中精简了一部分软件中的功能,比如,取消了黄灯的显示,由三行道改为了双行道,倒计时显示由闪烁的信号灯取代,只有一个方向有声音提示等,不过这不代表本系统其他功能不能在软件上仿真和实现。另外本设计的各模块有的可以合并为一个模块,比如黄灯插入模块和红黄绿译码模块就可以合并为一个模块。本设计虽然结束了,不过系统的完善是没有终点的,但由于时间、设备、条件和水平等各方面因素有限,通过此次毕业设计,让我加深了FPGA的理解,更加熟练了V
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年盘锦职业技术学院单招职业适应性测试题库带答案
- 2026年吉林交通职业技术学院单招职业技能考试必刷测试卷带答案
- 2025年河南省新闻出版学校公开招聘人事代理工作人员16名参考题库附答案详解(夺分金卷)
- 2026年云南旅游职业学院单招综合素质考试题库新版
- 2025年甘肃省事业单位招聘考试模拟试卷 公共某础知识(一)附答案详解(培优b卷)
- 2026年福建水利电力职业技术学院单招综合素质考试必刷测试卷必考题
- 2025广东韶关“百万英才汇南粤”南雄市秋季高层次和急需紧缺专业人才招聘88人参考题库附答案详解(综合卷)
- 2026年烟台汽车工程职业学院单招职业适应性测试题库带答案
- 2026年贵州省黔东南苗族侗族自治州单招职业适应性考试题库新版
- 2026年汉中职业技术学院单招综合素质考试必刷测试卷及答案1套
- 【A3】人教版2023-2024学年五年级数学上册期中检测卷(卷一)(含答案)
- 重说二十年前的作品亮出你的舌苔或空空荡荡
- 身份证前六位与省市县区对照表可直接存入数据库
- 工程洽商单(样本)及工程设计中标通知书
- 三菱HOPE电梯的故障码
- JJG 875-2019数字压力计
- 量子信息与量子计算课件
- 基于Robotstudio机器人上下料工作站设计
- 制梁场制存梁台座检测方案
- 质性研究方法PPT通用课件
- 中线的用法(倍长中线法)分析
评论
0/150
提交评论