FPGA交通灯课程设计_第1页
FPGA交通灯课程设计_第2页
FPGA交通灯课程设计_第3页
FPGA交通灯课程设计_第4页
FPGA交通灯课程设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、f p g a课程设计论文 题 目: 学 院: 专 业: 学生姓名: 指导教师: 16目录目录11 fpga/cpld概述22 系统分析与总体方案42.1系统分析42.2 设计的总体方案53 软件设计与调试61.顶层文件设计及程序代码62. 控制器设计与仿真图83. 分频电路的设计及仿真图104. 计数器的设计及仿真图105. 分位模块的设计及仿真图106. 数码管驱动模块的设计及仿真图114个人心得115附录121. 部分模块源程序代码122.元器件清单183.引脚号与实验系统的关系:181 fpga/cpld概述随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球化的问题。城

2、市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日趋加重,交通事故频繁,环境污染加剧等问题普遍存在。目前,全国大中城市普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给人民的生命财产安全带来了极大的损失。如何解决城市交通问题已成为全社会关注的焦点和大众的迫切呼声。探究城市交通发展中存在问题的原因,无论是从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。城市交通控制系(utc ,urban traffic control system)是现代城市智能交通系统(idj ,intelligent transport system)的组成之一,主要用于城市道路

3、交通的控制与管理。城市平交路口实现交通信号控制是城市交通管理现代化的基本标志之一,是提高交通管理效能的重要技术手段。路口信号控制器是控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。各种交通控制方案,最终都要由路口信号控制器来实现。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,eda技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。利用eda技术设计交通灯来完成这个需求就显的更加迫切,同样也是非常的实用和合理。

4、fpga(现场可编程门阵列)和cpld(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在pal,gal等逻辑器件的基础上发展起来的。同以往的pal,gal相比较fpga/cpld的规模比较大,它可以替代几十甚至几千块通用ic芯片。这样的fpga/cpld上就是一个子系统部件。这种芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎。比较典型的就是altera公司和xilinx公司的cpld器件系列和fpga器件系列,他们开发较早,占用了较大的pld市场。fpga/cpld芯片都是特殊的asic芯片,除了具有asic的特点外,还具有以下几个优点:随着vlsi(超大集成电路)工艺的不断提高单一芯

5、片内部可以容纳上百万个晶体管,fpga/cpld芯片的规模也越来越大,其单片逻辑门数已达上百万门,它所实现的功能也越来越强,同时也可以实现系统集成,即片上系统soc。fpga/cpld芯片在出厂之前都做过百分之百的测试,不需要设计人员承担芯片风险和费用,设计人员只需在自己的实验室就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,fpga/cpld的资金投入就少,减少了潜在的花费。用户可以反复的编程,擦除,使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。fpga/cpld软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路

6、的输入,编译,优化,仿真,直至最后芯片的制作。当电路有少量的改动,更能显示fpga/cpld的优势。在线可编程技术(isp)使得使用fpga/cpld的产品可以做到远程升级。 2 系统分析与总体方案2.1系统分析在vhdl设计描述中,采用自顶向下的设计思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:外部时钟信号clk。led在自顶向下的vhdl设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。 分频电路:输入较高频

7、率脉冲用分频电路的到较第频率的时钟信号,本电路通过二次分平分别得到1hz的时钟信号。控制器电路:根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。当检测到手动控制信号(hold=1)时,执行特殊控制;计数器电路:下一个时钟沿回复到0,开始下一轮计数。当检测到特殊情况(hold=1)发生是,计数器暂停计数。分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进数)。译码电路:七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我

8、们用的是共阴极数码管,因此译码电路输出逻辑数值1点亮二极管,译码电路输出逻辑数值0熄灭二极管。 2.2 设计的总体方案 根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图3.1所示:图2.2 系统的框图3 软件设计与调试一个完整的vhdl语言程序通常包括实体(entity)、构造体、配置、包集合(package)和库(library)5个部分组成。下面结合实际的程序来加以说明。1.顶层文件设计及程序代码library ieee; use ieee.std_logic_1164.all; use ieee.st

9、d_logic_arith.all; use ieee.std_logic_unsigned.all; entity jiaotongdeng is port(clk1:in std_logic; rst:in std_logic; hold1:in std_logic; segout2:out std_logic_vector(7 downto 0); led_sel1:out std_logic_vector(1 downto 0); reda1,yellowa1,greena1:out std_logic; redb1,yellowb1,greenb1:out std_logic); e

10、nd jiaotongdeng; architecture behavioral of jiaotongdeng is component fredecider port (clk:in std_logic; rst: in std_logic; clkout:out std_logic); end component; component countroller port (clock:in std_logic; hold:in std_logic; countnum:in integer range 0 to 89; numa:out integer range 0 to 90; reda

11、,greena,yellowa:out std_logic; redb,greenb,yellowb:out std_logic); end component; component counter port (clock:in std_logic; hold:in std_logic; countnum:buffer integer range 0 to 90); end component; component fenwei port (numin:in integer range 0 to 90; numa,numb:out integer range 0 to 9 ); end com

12、ponent; component dtsm port(clk:in std_logic; numa,numb: in integer range 0 to 9; segout1:out std_logic_vector(7 downto 0); led_sel: out std_logic_vector(1 downto 0); end component; signal b,rst1:std_logic; signal c:integer range 0 to 89; signal d:integer range 0 to 90; signal e,f:integer range 0 to

13、 9; begin u1: fredecider port map(clk=>clk1,rst=>rst,clkout=>b); u2:counter port map(clock=>b,hold=>hold1,countnum=>c); u3:countroller port map(clock=>b,hold=>hold1,countnum=>c,numa=>d,reda=>reda1,greena=>greena1,yellowa=>yellowa1,redb=>redb1,greenb=>gree

14、nb1,yellowb=>yellowb1); u4:fenwei port map(numin=>d,numa=>e,numb=>f); u5:dtsm port map(clk=>clk1,numa=>e,numb=>f,segout1=>segout2,led_sel=>led_sel1); end behavioral; 2. 控制器设计与仿真图控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(hold=1)发生时,无条件点亮红色的发光二极管。功能:控制发光二极

15、管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity countroller is port (clock:in std_logic; hold:in std_logic; countnum:in integer range 0 to 89; numa:out integer range 0 to 90; reda,greena,yellowa:out std_log

16、ic; redb,greenb,yellowb:out std_logic); end countroller; architecture behavioral of countroller is begin process(clock) begin if falling_edge(clock)then if hold='1' then reda<='1' redb<='1' greena<='0' greena<='0' yellowa<='0' yellowb<

17、;='0' elsif countnum<=54 then numa<=55-countnum; reda<='0' greena<='1' yellowa<='0' elsif countnum<=59 then numa<=60; reda<='0' greena<='0' yellowa<='1' else numa<=90-countnum; reda<='1' greena<=&#

18、39;0' yellowa<='0' end if; if countnum<=54 then redb<='1' greenb<='0' yellowb<='0' elsif countnum<=84 then redb<='0' greenb<='1' yellowb<='0' else redb<='0' greenb<='0' yellowb<='1'

19、; end if; end if; end process; end behavioral; 3. 分频电路的设计及仿真图利用计数器,对50mhz的时钟进行计数到50m,得到1hz的时钟4. 计数器的设计及仿真图计数器的计数范围为0120s ,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(hold=1)发生时,计数器暂停计数。 5. 分位模块的设计及仿真图功能:将数字分为个位和十位,然后输出到数码管驱动模块6. 数码管驱动模块的设计及仿真图包含了数码管译码模块和使能控制模块4个人心得fapga课程设计就要结束了,这次课程设计历时近一个星期,通过这个星期的学习,发现了自己的很多不

20、足,发现了很多知识上的漏洞。同时也看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。这次课程设计让我学到了很多,不仅是巩固了先前学的eda技术的理论知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。在课程设计中一个人的力量是远远不够的,真正的完成任务需要共同的智慧与劳动,团结协作是我们成功的一项非常重要的保证。在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。还有一点是我们做任何事情都无法缺少的,那就是细心认真。此次设计我们就深深地体会到了,由于编程的时候没有做到足够的细心,导致一串代码弄混了。但是密密麻麻的英文字母混在一起,我始终没有发现。最终

21、在调试的时候,就出现了问题。只知道出现了问题,就是不知道到问题的根源在哪里,好长时间都没有找出问题的所在。这也让我真正的明白了,科学的严谨性,它不允许出半点差错,否则后果会是比较麻烦的。做其他事情也一样,都需要我们付出足够的认真去对待,才能顺利的完成。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然我这次做的课程设计不是非常的复杂,但在设计和仿真的过程中,我们也遇到了不少的困难,回首整个过程,却受益匪浅。 对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰

22、在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆! 5附录1. 部分模块源程序代码1.1分频器模块:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fredecider is port ( clk : in std_logic; rst : in std_logic; clkout : out std_logic); end fredecider; architecture

23、behavioral of fredecider is signal sec1 : std_logic_vector (9 downto 0);- signal sec2 : std_logic_vector (9 downto 0);-jishi yimiao- signal sec3 : std_logic_vector (4 downto 0);- signal dout : std_logic := '1' begin clkout <= dout; -计时1秒- process(clk,rst) begin if rst='0' then sec

24、1 <= (others => '0'); sec2 <= (others => '0'); sec3 <= (others => '0'); elsif clk'event and clk='1' then if sec1 >= "1111100111" then sec1 <= (others => '0'); sec2 <= sec2 + '1' if sec2 >= "1111100111

25、" then sec2 <= (others => '0'); sec3 <= sec3 + '1' if sec3 >= "10011" then sec3 <= (others => '0'); dout <= not dout; else sec3 <= sec3 + '1' end if; end if; else sec1 <= sec1 + '1' end if; end if; end process; end beh

26、avioral;1.2计数器模块:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity counter is port (clock:in std_logic; hold:in std_logic; countnum:buffer integer range 0 to 90); end counter; architecture behavioral of counter is begin process(clock) be

27、gin if rising_edge(clock) then if hold='1' then countnum<=countnum; else if countnum=90 then countnum<=0; else countnum<=countnum+1; end if; end if; end if; end process; end behavioral; 1.3分位模块:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_log

28、ic_unsigned.all; entity fenwei is port (numin:in integer range 0 to 90; numa,numb:out integer range 0 to 9; numc,numd:out integer range 0 to 9); end fenwei; architecture behavioral of fenwei is begin process(numin) begin if numin>=60 then numa<=0; numb<=0; numc<=0;numd<=0;elsif numin&

29、gt;=50 then numa<=5; numb<=numin-50; numc<=5;numd<=numin-50;elsif numin>=40 then numa<=4; numb<=numin-40; numc<=4;numd<=numin-40;elsif numin>=30 then numa<=3; numb<=numin-30; numc<=3;numd<=numin-30;elsif numin>=20 then numa<=2; numb<=numin-20; numc&

30、lt;=2;numd<=numin-20;elsif numin>=10 then numa<=1; numb<=numin-10; numc<=1;numd<=numin-10;else numa<=0; numb<=numin; numc<=0;numd<=numin;end if; end process; end behavioral; 1.4数码管驱动模块:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std

31、_logic_unsigned.all; entity bcd_data is port (bcd_data:in integer range 0 to 9; segout: out std_logic_vector(7 downto 0) ); end bcd_data; architecture behavioral of bcd_data is begin process(bcd_data) begin case bcd_data is when 0=>segout<="11000000"-0 when 1=>segout<="111

32、11001"-1 when 2=>segout<="10100100"-2 when 3=>segout<="10110000"-3 when 4=>segout<="10011001"-4 when 5=>segout<="10010010"-5 when 6=>segout<="10000010"-6 when 7=>segout<="11111000"-7 when 8=>segou

33、t<="10000000"-8 when 9=>segout<="10010000"-9 when others =>null; end case; end process; end behavioral; -使能端控制扫描显示- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity dtsm is port(clk:in std_logic; numa,numb: in integer range 0 to 9; segout1:out std_logic_vector(7 downto 0); led_sel: out std_logic_vector(1 downto 0); end dtsm; a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论