FPGA交通灯控制程序设计.docx

上传人:b****6 文档编号:8658971 上传时间:2023-02-01 格式:DOCX 页数:25 大小:201.50KB
下载 相关 举报
FPGA交通灯控制程序设计.docx_第1页
第1页 / 共25页
FPGA交通灯控制程序设计.docx_第2页
第2页 / 共25页
FPGA交通灯控制程序设计.docx_第3页
第3页 / 共25页
FPGA交通灯控制程序设计.docx_第4页
第4页 / 共25页
FPGA交通灯控制程序设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

FPGA交通灯控制程序设计.docx

《FPGA交通灯控制程序设计.docx》由会员分享,可在线阅读,更多相关《FPGA交通灯控制程序设计.docx(25页珍藏版)》请在冰豆网上搜索。

FPGA交通灯控制程序设计.docx

FPGA交通灯控制程序设计

实验三交通灯控制程序设计

1.实验目的和要求

完成交通灯控制器的设计,掌握状态机的使用。

2.实验内容或原理

在十字路口,每条道路各有一组红,黄,绿和倒计时显示器,用以指挥车辆和行人有序的通行。

其中,红灯亮表示该道路禁止通行;黄灯亮表示停车;绿灯亮表示可以通行;倒计时显示器是用来显示允许通行或是禁止通行的时间。

根据交通灯的工作方式,设计的交通灯由两组红绿灯信号控制四组交通灯,其中处于同一个方向的交通灯共用一组红绿灯信号。

显示顺序为:

方向一为黄灯、红灯、绿灯,方向二为绿灯、黄灯,红灯。

‘0’表示灯亮,‘1’表示灯熄。

其中绿灯,黄灯,红灯的持续时间分别为25秒,5秒,20秒。

系统框图如图2所示,系统包括分频模块及信号灯模块。

分频模块对系统时钟进行秒分频,为信号灯提供秒输入信号;信号灯模块实现交通灯控制的逻辑功能。

3.交通灯控制器的设计方案

设东西方向和南北方向的车流量大致相同,因此红、绿、黄灯的时长也相同,定为红灯20秒,绿灯25秒,黄灯5秒,同时用数码管指示当前状态(红、绿、黄灯)剩余时间。

方案一:

采用VHDL语言直接编写,实现交通灯指挥功能。

方案二:

采用模块层次化设计,将此设计分为四个模块:

计时模块,状态控制模块,信号灯显示模块,数码扫描显示模块。

将四个模块再分别用VHDL语言编写成,做成原理图模块,用原理图输入法做整个设计的顶层文件。

4.交通灯原理分析

当SPC='1'时,数码管停止计时,S输出为B"010010",即南北、东西方向指示灯示数维持不变。

当SPC=‘1’跳变到SPC=‘0’时,数码管继续计时,恢复正常工作状态。

当SPC='0'时,交通即开始正常工作。

R=‘1’时,进入初始状态S0="001010"经过20秒,变为S1="100010"再经过5秒,变为S2="010001",再经过20秒,变为S3="010100",再经过5秒,S变为B"001010"……如此循环下去。

南北、东西方向的红绿灯按表一表二变化。

表一交通灯状态转换表

东西(A)方向

黄灯

红灯

红灯

绿灯

绿灯

黄灯

5秒

20秒

25秒

5秒

南北(B)方向

绿灯

黄灯

绿灯

黄灯

红灯

红灯

25秒

5秒

5

20秒

表二交通灯状态转换表

SPC

S

备注

1

010010

指示灯示数维持不变

0

S0:

001010

持续5秒,转到S1

S1:

100010

持续20秒,转到S2

S2:

010001

持续5秒,转到S3

S3:

010100

持续20秒,转到S0

注:

S的六位分别对应东西方向(A方向)的红绿黄和南北方向(B方向)的红绿黄。

‘1’表示亮,‘0’表示灭。

5.VHDL仿真实验

(1)为此工程新建一个文件夹。

启动QuartusII软件工作平台,新建工程设计文件名为traffic.vhd。

在新建的VHDL模型窗口下编写源程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH;

ENTITYtrafficIS

PORT(CLK,R,SPC:

INSTD_LOGIC;

LIGHT:

OUTSTD_LOGIC_VECTOR(5DOWNTO0);

Q1,Q2:

OUTINTEGERRANGE0TO25;

LED1,LED2,LED3,LED4:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDtraffic;

ARCHITECTUREbehavOFtrafficIS

TYPESTATESIS(S0,S1,S2,S3);

SIGNALSTATE:

STATES;

SIGNALT1,T2:

INTEGERRANGE0TO25;

SIGNALL1,L2,L3,L4:

INTEGERRANGE0TO9;

BEGIN

P1:

PROCESS(CLK,STATE)

BEGIN

IFR='1'THENSTATE<=S0;T1<=20;T2<=25;

ELSIFSPC='1'THENLIGHT<="010010";

ELSIFCLK'EVENTANDCLK='1'THEN

CASESTATEIS

WHENS0=>LIGHT<="100010";

T1<=T1-1;T2<=T2-1;

Q1<=T1;Q2<=T2;

IFT1=0THEN

STATE<=S1;T1<=5;T2<=5;

ENDIF;

WHENS1=>LIGHT<="001010";

T1<=T1-1;T2<=T2-1;

Q1<=T1;Q2<=T2;

IFT1=0THEN

STATE<=S2;T1<=25;T2<=20;

ENDIF;

WHENS2=>LIGHT<="010100";

T1<=T1-1;T2<=T2-1;

Q1<=T1;Q2<=T2;

IFT2=0THEN

STATE<=S3;T1<=5;T2<=5;

ENDIF;

WHENS3=>LIGHT<="010001";

T1<=T1-1;T2<=T2-1;

Q1<=T1;Q2<=T2;

IFT1=0THEN

STATE<=S0;T1<=20;T2<=25;

ENDIF;

WHENOTHERS=>STATE<=S0;T1<=20;T2<=25;

ENDCASE;

ENDIF;

endPROCESS;

p2:

PROCESS(T1,T2)

begin

L1<=T1/10;L2<=T1REM10;

L3<=T2/10;L4<=T2REM10;

ENDPROCESS;

P3:

PROCESS(L1)

BEGIN

CASEL1IS

WHEN0=>LED1<="0000";

WHEN1=>LED1<="0001";

WHEN2=>LED1<="0010";

WHEN3=>LED1<="0011";

WHEN4=>LED1<="0100";

WHEN5=>LED1<="0101";

WHEN6=>LED1<="0110";

WHEN7=>LED1<="0111";

WHEN8=>LED1<="1000";

WHEN9=>LED1<="1001";

WHENOTHERS=>LED1<="0000";

ENDCASE;

ENDPROCESS;

P4:

PROCESS(L2)

BEGIN

CASEL2IS

WHEN0=>LED2<="0000";

WHEN1=>LED2<="0001";

WHEN2=>LED2<="0010";

WHEN3=>LED2<="0011";

WHEN4=>LED2<="0100";

WHEN5=>LED2<="0101";

WHEN6=>LED2<="0110";

WHEN7=>LED2<="0111";

WHEN8=>LED2<="1000";

WHEN9=>LED2<="1001";

WHENOTHERS=>LED2<="0000";

ENDCASE;

ENDPROCESS;

P5:

PROCESS(L3)

BEGIN

CASEL3IS

WHEN0=>LED3<="0000";

WHEN1=>LED3<="0001";

WHEN2=>LED3<="0010";

WHEN3=>LED3<="0011";

WHEN4=>LED3<="0100";

WHEN5=>LED3<="0101";

WHEN6=>LED3<="0110";

WHEN7=>LED3<="0111";

WHEN8=>LED3<="1000";

WHEN9=>LED3<="1001";

WHENOTHERS=>LED3<="0000";

ENDCASE;

ENDPROCESS;

P6:

PROCESS(L4)

BEGIN

CASEL4IS

WHEN0=>LED4<="0000";

WHEN1=>LED4<="0001";

WHEN2=>LED4<="0010";

WHEN3=>LED4<="0011";

WHEN4=>LED4<="0100";

WHEN5=>LED4<="0101";

WHEN6=>LED4<="0110";

WHEN7=>LED4<="0111";

WHEN8=>LED4<="1000";

WHEN9=>LED4<="1001";

WHENOTHERS=>LED4<="0000";

ENDCASE;

ENDPROCESS;

ENDbehav;

(2)创建工程及全程编译。

完成源代码输入后即可创建工程然后进入全程编译,检查设计是否正确。

选择Tools->NetlistViewers->RTLViewers命令,即HDL的RTL级图形观测器,选择好后即自动弹出计数器设计的RTL电路,如下图:

(3)仿真。

建立波形编辑文件进行时序仿真或时序仿真,仿真结果如下图所示,

时序仿真:

4)硬件测试。

完成仿真实验后,若仿真结果无误,则进行锁脚,然后下载到FPGA实验箱上进行硬件测试。

选择试验箱的模式为模式5,时钟CLK选择为CLOCK0(PIN_28脚),频率f=4Hz,LDE1[3..0]对应的引脚编号PIN-20,19,18,17,LDE2[3..0]对应的引脚编号PIN-16,15,14,13,LDE3[3..0]对应的引脚编号PIN-136,135,134,133,LDE4[3..0]对应的引脚编号PIN-132,128,41,21,LIGHT[5..0]对应的引脚编号PIN7,6,4,3,2,1,R对应的引脚编号PIN-233,SPC对应的引脚编号PIN-234.

6.实践教学报告要求

将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。

 

注:

 

本论文格式严格按照课程设计

要求格式,基本没有任何问题。

中国XXXXX学校

课程设计任务书

题目交通灯控制器的设计

专业学号姓名

主要内容、基本要求、主要参考资料等:

主要内容

1.学习ALTERA公司的FPGA/CPLD的结构、特点和性能。

2.学习集成开发软件MAX+plusII/QuartusII的使用及设计过程。

3.熟悉EDA工具设计数字电路设计方法,掌握VHDL硬件描述语言设计方法。

4.根据给定题目设计数字电路,来加深对可编程逻辑器件的理解和掌握。

技术要求

1.在所选择器件内完成交通灯控制器的设计,要求设计完成后芯片具有交通灯控制器的全部功能、包括显示和操作接口。

2.交通灯控制器要求控制十字路口两道路的交通灯,两道路交替通行,每次通行时间可设定20——60秒之间,每个路口要求有前行、禁止、人行灯。

(根据实际设计进度考虑可以增加左右转向灯,等待和通行时间显示等)。

主要参考资料

1.康华光主编,《电子技术基础-数字部分》,高等教育出版社,1998。

2.谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001

3.潘松等主编,《EDA技术实用教程》,科学出版社,2006

4.雷伏容主编,《VHDL电路设计》,清华大学出版社,2006

5.CharlesH.Roth等著,《数字系统设计与VHDL》,电子工业出版社,2008

完成期限:

2012年7月2日

指导教师签章:

专业负责人签章:

2012年6月25日

摘要

可编程逻辑器件,不仅速度快、集成度高,并且能随心所欲地完成用户定义的逻辑功能,还可以加密和重新编程,其编程次数最大可达1万次以上。

使用可编程逻辑器件可以大大简化硬件系统、降低成本、提高系统的可靠性、灵活性和保密性。

关键词:

可编程逻辑器件稳定可靠低成本

第一章EDA技术概述

第一节EDA技术及其发展

现代电子设计技术的核心是EDA(ElectronicDesignAutomation)技术。

EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,它能自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。

EDA技术在进入21世纪后,得到了更大的发展。

在仿真和设计两方面支持标准硬件描述语言的功能越来越强大,软硬件技术也进一步得到了融合,在电子行业的产业领域、技术领域和设计应用领域得到了进一步的肯定,使得复杂电子系统的设计和验证趋于简单化。

第二节可编程逻辑器件概述

可编程逻辑器件(简称CPLD)是允许用户编程(配置)实现所需逻辑功能的电路,一般可利用计算机辅助设计,即用原理图、状态机、硬件描述语言(VHDL)等方法来表示设计思想,经过一系列编译或装换程序,生成相应的目标文件,再由编程器或下载电缆将设计文件配置到目标器件中,这时的可编程逻辑器件就可作为满足用户需求的专用集成电路使用了。

可编程逻辑器件,不仅速度快、集成度高,并且能随心所欲地完成用户定义的逻辑功能,还可以加密和重新编程,其编程次数最大可达1万次以上。

使用可编程逻辑器件可以大大简化硬件系统、降低成本、提高系统的可靠性、灵活性和保密性。

PLD的出现,打破了由中小规模通用型集成电路和大规模专用集成电路垄断的局面,在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到广泛应用,可以预见,不久的将来,PLD将在集成电路市场占统治地位。

第三节FPGA/CPLD概述

FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在PAL,GAL等逻辑器件的基础上发展起来的。

同以往的PAL,GAL相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。

这样的FPGA/CPLD实际上就是一个子系统部件。

这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。

比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他们开发较早,占用了较大的PLD市场。

对用户而言,虽然FPGA/CPLD的内部结构稍有不同,但其用法都一样,所以大多数情况下,不加以区分。

FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特点外,还具有以下几个优点:

(1)随着VLSI(VeryLargeScaleIC,超大集成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA/CPLD芯片的规模也越来越大,其单片逻辑门数已达到上百万门,它所实现的功能也越来越强,同时也可以实现系统集成,即片上系统SOC.

(2)FPGA/CPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承担芯片风险和费用,设计人员只需在自己的实验室就可以通过相关的软硬件环境来完成芯片的最终功能设计。

所以,FPGA/CPLD的资金投入就小,减少了潜在的花费。

(3)用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。

FPGA/CPLD软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化。

仿真,直至最后芯片的制作。

当电路有少量的改动,更能显示FPGA/CPLD的优势。

电路设计人员在使用FPGA/CPLD进行电路设计时,不需要具有专门的IC(集成电路)深层次的知识,FPGA/CPLD软件易学易用,能使设计人员更能集中精力进行电路设计,快速将产品推向市场。

(4)在线可编程技术(ISP)使得使用FPGA/CPLD的产品可以做到远程升级。

 

第二章设计思路

第一节设计思路

所设计的交通信号灯控制电路,主要适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。

东西方向和南北方向各使用3个LED显示,红黄绿各代表红黄绿灯,绿灯亮同时是人行灯。

东西方向和南北方向计时均为2位数,共需要4个LED七段数码管显示。

Time信号输出显示的内容。

采用EPF10K10LC84-4实现控制

总体设计图,如下

Clk1r

Keyg

t

r1

g1

t1

time1[4..0]

time2[4..0]

(一)

东西向

交通灯

南北向

交通灯

Main

数码管显示

25mhz有源晶振

第二节所实现功能说明

南北和东西方向各有一组绿,人行,红,黄灯,各自的持续时间分别为20s,20s,25s,5s;用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的剩余时间;绿灯也可看做人行灯;

第三章各模块的编程实现

第一节时基脉冲发生模块

在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。

因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟才能让系统正常的工作。

因此时钟发生模块最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。

通过编程实现1Hz脉冲的产生,程序如下所示。

LibraryIEEE;

useIEEE.std_logic_1164.all;

ENTITYCLKGENIS

PORT(CLK1:

INSTD_LOGIC;

CLK:

OUTSTD_LOGIC);

ENDCLKGEN;

ARCHITECTUREbehavOFCLKGENIS

SIGNALCNTER:

INTEGERRANGE0TO25000000;

BEGIN

PROCESS(CLK)BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNTER=25000000THENCNTER<=0;

ELSECNTER<=CNTER+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CNTER)

BEGIN

IFCNTER=12500000THENCLK<='1';

ENDIF;

IFCNTER=25000000THENCLK<='0';

ENDIF;

ENDPROCESS;

ENDbehav;

第二节计数及红绿灯控制模块

南北向和东西向各有一组红黄绿灯,各自持续的时间为分别为25s、5s、20s。

通过编程可以实现控制各通道的计数控制且输出为二进制数,并且可以控制各灯的亮灭情况,高电平为亮,低电平为灭。

东西向模块程序为:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydaolu1is

port(

clk:

instd_logic;

timel:

outstd_logic_vector(4downto0);

r,g,t:

outstd_logic);

enddaolu1;

architecturedaoduofdaolu1is

typecoloris(green,yellow,red);

begin

process(clk)

variablereset:

std_logic:

='0';

variabletempr,tempg,tempt:

std_logic;

variabletemp_l:

std_logic_vector(4downto0);

variabletemp_color:

color:

=green;

begin

if(clk'eventandclk='1')then

casetemp_coloris

whenyellow=>

tempr:

='1';

tempg:

='0';

tempt:

='0';

caseresetis

when'0'=>

temp_l:

="00100";

reset:

='1';

whenothers=>

casetemp_lis

when"00000"=>

temp_l:

="11000";

temp_color:

=red;

whenothers=>

temp_l:

=temp_l-1;

endcase;

endcase;

whengreen=>

tempr:

='0';

tempg:

='0';

tempt:

='1';

caseresetis

when'0'=>

temp_l:

="10011";

reset:

='1';

whenothers=>

casetemp_lis

when"00000"=>

temp_l:

="00100";

temp_color:

=yellow;

whenothers=>

temp_l:

=temp_l-1;

endcase;

endcase;

whenred=>

tempr:

='0';

tempg:

='1';

tempt:

='0';

caseresetis

when'0'=>

temp_l:

="11000";

reset:

='1';

whenothers=>

casetemp_lis

when"00000"=>

temp_l:

="10011";

temp_color:

=green;

whenothers=>

temp_l:

=temp_l-1;

endcase;

endcase;

endcase;

endif;

timel<=temp_l;

r<=tempr;

g<=tempg;

t<=tempt;

endprocess;

end;

南北向模块程序为:

libraryieee;

useieee.std_lo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1