




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XXXXXX学院题目:基于FPGA的交通灯控制课程设计学院:信息工程学院班级:设计人:指导教师:设计时间:2016年6月16日目录一.摘要.1二.概述.11.FPGA的应用.1三.系统总体设计.2 1.设计任务.2 2.系统设计流程.2四.硬件设计.4 1.控制模块.5 2.时钟分频模块.5 3.分位译码模块.5 4.计数模块.6五.实验程序设计.6六.程序仿真与分析.13 1.仿真结果.13 2.仿真结果分析.14七.心得体会.14八.参考文献.15九.附录.15一.摘要 EDA工具对于电子设计人员来说极其重要,它可以在电子设计的各个阶段、层次进行计算机模拟验证,确保设计的准确性,可缩短设计
2、周期,降低设计成本。目前交通灯广泛应用于道路交通建设中。交通灯可以实现十字路口红绿灯的自动控制。本文设计一个十字路口交通灯控制电路,要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。为了对交通灯系统进行精确控制,采用FPGA实验板,在Quartus软件环境下,分别实现脉冲发生模块、状态定时模块、交通灯显示模块、时间显示模块,进行仿真实验和硬件下载,获得的测试结果满足设计要求。 基于FPGA的交通灯设计系统具有可靠性强、实时快速擦写、运算速度高、故障率低、电路简单,且体积小的特点。使用QuartusII软件作为开发平台;采用自顶向下的设计思路对系
3、统进行模块化设计和综合,并通过波形仿真和硬件实现两种方式实现并验证交通灯的功能。二.概述 FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。随着电子技术的发展,特别是大规模集成电路和计算机技术的研制和发展,让电子
4、产品设计有了更好的应用市场,实现方法也有了更多的选择,而电子电路的设计却变得越来越复杂,使用“语言”进行电子设计已成为一种趋势。现代电子系统设计方法是设计师自己设计芯片来实现电子系统的功能,将传统的固件选用及电路板设计工作放在芯片设计中进行。在这些专业化软件中,EDA(Electronic Design Automation)具有一定的代表性,EDA技术是一种基于芯片的现代电子系统设计方法。基于EDA技术的现场可编程门阵列(FPGA),在数字系统设计和控制电路中越来越受到重视。VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考
5、虑具体的硬件结构。基于EDA技术的现场可编程门阵列(FPGA)电路,提出现场可编程门阵列(FPGA)是近年来迅速发展的大规模可编程专用集成电路(ASIC),在数字系统设计和控制电路中越来越受到重视。VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。目前以硬件描述语言所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。1.FPGA的应用FPGA的应用可分为三个层面:电路设计,产品设计,系统设计。a.电路设计 连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领
6、域也是FPGA应用的基石。事实上在电路设计中应用FPGA要求开发者要具备相应的硬件知识(电路知识)和软件应用能力(开发工具)。b.产品设计 把相对成熟的技术应用到某些特定领域开发出满足行业需要并能被行业客户接受的产品。这方面主要是FPGA技术和专业技术的结合问题,重点在性能,FPGA技术在这个领域是一个实现手段,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计。c.系统级的应用 系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统如用Xilinx V-4, V-5系列的FPGA,实现内嵌POWER PC C
7、PU, 然后再配合各种外围功能,这个平台上跑LINIX等系统这个系统也就支持各种标准外设和功能接口了,这对于快速构成FPGA大型系统来讲是很有帮助的。三.系统总体设计1.设计任务设计一个十字路口交通控制器,方向分为东南西北四个方向。东西方向的红绿灯状态一样,南北方向的红绿灯状态一样。每个方向上,有四盏灯,分别是左转灯、红灯、绿灯和黄灯。左拐灯亮表示左转车辆可以通行;红灯亮表示左转和直行车辆禁行;绿灯亮表示直行车辆和右转的车辆可以通行;黄灯亮表示左转和直行的车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间倒计时。2.系统设计流程提出系统设计要求需求分析模块化方案设计底层电路设计-模块方
8、案设计顶层电路设计-原理图描述+各模块连接功能仿真FPGA整体方案编译仿真FPGA整体方案设计完成硬件连接和运行时序仿真FPGA整体方案设计实现 系统分析通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2-1所示)。还要求四种灯的点亮时间能够以倒计时的形式显示出来。可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。经分析,系统的总体结
9、构可以描述下述的方框图:Hold倒计时数字及闪烁控制信号七段数码管七段数码管驱动电路Reset分频电路分位译码电路红、黄、绿发光二极管控制器计数器在FPGA设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:复位开关信号reset;外部时钟信号clk。LED七段显示数码管的输出信号count1(6 downto 0),count2(6 downto 0),count3(6 downto 0),count4(6 downto 0);在自顶向下的VH
10、DL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。 时钟分频模块:把555多谐振荡器发出的较高频率脉冲用分频电路的到较第频率的时钟信号,本电路通过三次10分平分别得到10Hz、1Hz的时钟信号。控制器电路:根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。当检测到手动控制信号(Con=1)时,执行手动控制;计数器电路:这里需要的计数器的计数范围
11、为089。计到89后,下一个时钟沿升为1时,开始下一轮计数,此外当系统复位信号(Reset=1)使计数器异步清0。手动信号(Con=1)使系统清0。分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如20分为2和0,7分为0和7)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阳极数码管,因此译码电路输出逻辑数值0点亮二极管,译码电路输出逻辑数值1熄灭二极管。四.硬件设计1.控制模块控制模块的作用是根据计数器的数值控制发光二极管的亮、灭
12、,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到特殊情况(EMI =1)发生时,无条件点亮红灯的二极管(急救灯按下EMI='1',则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。2.时钟分频模块分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。将频率变为1Hz的脉冲波,从而得到周期为1s的脉冲波。3.分位译码模块(1)因为控制输出的倒计时数值可能是1位或2位十进制数,所以七段数码管的译码电路前要加上分
13、位电路(即将其分为两个1位的十进制数,如25分为2和5)。(2)分位模块输出的计数值将十位数和个位数分别存到数组里,这样就可以得到两个路口倒计时时间显示的十位和个位信号。4.计数模块实现计数为0-80计数,计数到80后,下一个时钟沿回复到0,开始下一计数。此外当检测到特殊情况(hold=“1”)发生时,计数器暂停计数,无条件点亮红色的发光二极管。而系统复位信号Reset则使计数器异步清零。五.实验程序设计1.顶层模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;en
14、tity 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
15、;downto 0); 七段数码管显示reda, yellowa,greena,lifta:out std_logic; a发光二极管输出redb, yellowb,greenb,liftb:out std_logic); b 发光二极管输出end entity dingceng;architecture one of dingceng is2.实体定义component clk_10脉冲输入port(clk:in std_logic;) - 时钟频率为250KHz.clk_div10 : ou
16、t std_logic); -十分频后脉冲输出end component;component counter3.计数模块port(clk0:in std_logic;) -脉冲信号输入con:in std_logic; -手动控制信号reset:in std_logic; -复位信号countnum:buffer integer range 0to89); -0-89计数输出。end component;a4.控制模块component controllerport( clk1
17、0;: in std_logic;)-脉冲信号输入con1 : in std_logic; - 手动控制信号con2: in std_logic; -状态控制信号countnum : in integer range 0 to 89 0-89计数输入;numa,numb : out integer range 0 to 25; -东西、南北两个方向的倒计时数值输出ra,ga,ya,la:
18、 out std_logic); - ra,ga,ya,la发光二极管输出rb,gb,yb,lb: out std_logic); - rb,gb,yb,lb 发光二极管输出end component;a5.分位模块component fenweiport ( numin:in integer range 0 to 25; - 倒计时数值输入numa,numb:out integer range 0 to 9
19、0;); -将数值分为2个1位的十进制输出end component;component yimaport(clk2:in std_logic;bb: in integer range 0 to 9;ya:out std_logic; -BCD码输出yb:out std_logic; -BCD码输出yc:out std_logic; -BCD码输出yd:out std_logic; -BCD码输出ye:out std_logic; -BCD码输出yf:ou
20、t std_logic; -BCD码输出yg:out std_logic); -BCD码输出end component;signal a,b,c,d: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
21、: 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 portmap(clk0=>c,con=>cond,reset=>resetd,countnum=>ww);u4:controller port
22、;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
23、 (numin=>yy2,numa=>tt3,numb=>tt4);u7:yimaportmap(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),yf=>count2(5),yg=>count2(6);u9:yima3(4),yf=>count3(5),yg=>count3(6);u10:yim
24、a4(4),yf=>count4(5),yg=>count4(6);end architecture one;b1.实体定义library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_10 is-脉冲输入port( clk : in std_logic; - 时钟频率为250KHzclk_div10
25、 : 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
26、downto 0) := "101"beginif(clk'event and clk='1') thenif(counter = md)thencounter := (others =>'0');clk_temp <= not clk_temp;end if;counter := counter + 1 end i
27、f;end process; port map(clk2=>b,bb=>tt4,ya=>count4(0),yb=>count4(1),yc=>count4(2),yd=>count4(3),ye=>countport map(clk2=>b,bb=>tt3,ya=>count3(0),yb=>count3(1),yc=>count3(2),yd=>count3(3),ye=>countport map (clk2=>b,bb=>tt2,y
28、a=>count2(0),yb=>count2(1),yc=>count2(2),yd=>count2(3),ye=>count2(4)clk_div10 <= clk_temp;end one;b2.计数模块library ieee;use ieee.std_logic_1164.all;entity counter isport( clk0:in std_logic;) -脉冲信号输入con:in std_logic; -手动控制信号reset:in
29、60;std_logic; -复位信号countnum:buffer integer range 0 to 89); -复位信号 end counter; architecture one of counter isbeginprocess (reset,clk0)beginif reset='1' thencountnum <= 0;elsif rising_edge( clk0 )
30、 thenif con='1' thencountnum <= 0;elseif countnum=89 thencountnum <= 0;elsecountnum <= countnum + 1;end if;end if;end if;end process;end one;b3控制模块library ieee;use ieee.std_logic_1164
31、.all;use ieee.std_logic_unsigned.all;entity controller isport( clk1 : in std_logic;)-脉冲信号输入con1 : in std_logic; - 手动控制信号con2: in std_logic; -状态控制信号countnum : in integer range 0 to 89 0-89计数输入;numa,numb
32、0;: out integer range 0 to 25; -东西、南北两个方向的倒计时数值输出ra,ga,ya,la: out std_logic); - ra,ga,ya,la发光二极管输出rb,gb,yb,lb: out std_logic); - rb,gb,yb,lb 发光二极管输出end component;end controller;architecture one of controller issignal
33、0;m : integer range 0 to 7;beginprocess ( clk1,con1,con2,countnum )variable aa:std_logic_vector(7 downto 0); beginif (clk1'event and clk1 = '1' )thenif con1 ='0' thenif
34、160;countnum >= 65thennumb<=90-countnum;numa <=90-countnum;if countnum >= 70 thenaa := "00011000"else aa := "00101000"numa<= 70-countnum;end if;elsif countnum >= 45 thennum
35、b <= 65-countnum;numa <=65-countnum;if countnum >= 50 thenaa := "10000100"else aa := "10000010"numb<= 50-countnum;end if;else if countnum >= 20 thennuma <= 45-cou
36、ntnum;numb <=45-countnum;if countnum >= 25 thenaa := "01001000"else aa := "00101000"numa <= 25-countnum;end if;elsif countnum >= 0 then numa <= 20-countnum; num
37、b <= 20-countnum;if countnum >= 5 then aa := "10000100" else aa := "10000010" numb <= 5-countnum; end if;end if;elseif con1= '1' thenuma <=
38、0;numb <= 0;if con2 = '1' thenif m = 7 thenm <= 0;elsem <= m + 1;end if;end if;if m = 0 thenaa := "01001000"elsif m= 1 thenaa :=
39、;"00101000"elsif m=2 thenaa :="10000100"elsif m=3 thenaa := "10000010"elsif m=4 thenaa := "00011000"elsif m=5 thenaa := "00101000"elsif m=6 thenaa := "
40、;10000001"elsif m=7 thenaa := "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<=aa(0); endprocess;endone;b4.分位
41、模块library ieee;use ieee.std_logic_1164.all; entity fenwei isport ( numin:in integer range 0 to 25; - 倒计时数值输入numa,numb:out integer range 0 to 9 ); -将数值分为2个1位的十进制输出end fenwei; -倒计时输出architecture one of&
42、#160;fenwei is beginprocess( numin )variable numa1,numb1: integer range 0 to 9; beginif numin >= 20 then numa1 :=2;numb1 := numin - 20; elsif numin >= 10 then
43、numa1 := 1;numb1 := numin - 10; elsenuma1 := 0 numb1 := numin end if numa <= numa1; numb <= numb1; end process end one bb3.0-BCD码输入clk2脉冲输入ya,yb,yc,yd,
44、ye,yf,yg七段数码管显示输出5.译码模块library ieee;use ieee.std_logic_1164.all; entity display is port(clk2:in std_logic;bb: in std_logic_vector(3 downto 0);-BCD码输入ya:out std_logic; -七段数码管显示输出 yb:out std_logic; -七段数码管显示输出yc:out std_logic; -
45、七段数码管显示输出yd:out std_logic; -七段数码管显示输出 ye:out std_logic; -七段数码管显示输出 yf:out std_logic;-七段数码管显示输出yg:out std_logic);-七段数码管显示输出end display;architecture one of display issignal temp: std_logic_vector(6 downto 0); -BCD码输入begin&
46、#160;process(bb) begin case bb iswhen "0000" => temp <= "1000000" when "0001" => temp <= "1111001" when "0010" => temp <= "
47、;0100100" when "0011" => temp <= "0110000" when "0100" => temp <= "0011001" when "0101" => temp <= "0010010" when &qu
48、ot;0110" => temp <= "0000010" when "0111" => temp <= "1011000" when "1000" => temp <= "0000000" when "1001" => temp <= "0010000"when others => temp <= "1111111" end case; end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卧式刮刀卸料离心机企业ESG实践与创新战略研究报告
- 胶合板制造企业县域市场拓展与下沉战略研究报告
- 切片干燥、增粘部分相关设备企业县域市场拓展与下沉战略研究报告
- 制粉机企业ESG实践与创新战略研究报告
- 卤钨灯企业县域市场拓展与下沉战略研究报告
- 石膏墙板成型机企业ESG实践与创新战略研究报告
- 粘结钕铁硼磁粉企业数字化转型与智慧升级战略研究报告
- 圣诞树裙、布挂企业县域市场拓展与下沉战略研究报告
- 农用自卸车企业县域市场拓展与下沉战略研究报告
- 2025年包装件试验机合作协议书
- 《三角形的分类》-完整版课件
- 吊装安全心得体会(6篇)
- DB52-T 1057-2022+农村生活污水处理技术规范
- 血液透析中心管理规范(2020年版)
- 课本剧孔雀东南飞 演示文稿
- 注塑机日常保养点检表
- 一年级语文下册课件-13 荷叶圆圆70-部编版(共16张PPT)
- 湘少版四年级英语下册1-3单元测试卷无答案
- 培训考试汇总金属胶接工艺简介
- Q-RJ 557-2017 航天型号产品禁(限)用工艺目录(公开)
- 食品安全法培训课件
评论
0/150
提交评论