基于FPGA的交通灯控制器设计.docx
- 文档编号:25438495
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:38
- 大小:371.85KB
基于FPGA的交通灯控制器设计.docx
《基于FPGA的交通灯控制器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制器设计.docx(38页珍藏版)》请在冰豆网上搜索。
基于FPGA的交通灯控制器设计
基于FPGA的交通灯控制器设计
摘要
超高速硬件描述语言VHDL,是对数字系统进行抽象的行为与功能描述到具体的内部线路结构描述,利用EDA工具可以在电子设计的各个阶段、各个层系进行计算机模拟验证,保证设计过程的正确性,可大大降低设计成本,缩短设计周期。
本文介绍的数字秒表设计,利用基于VHDL的EDA设计工具,采用大规模可编程逻辑器件FPGA,通过设计芯片来实现系统功能。
交通灯控制系统可以实现路口红绿灯的自动控制。
基于FPGA设计的交通灯控制系统具有电路简单、可靠性强、实时快速擦写、运算速度高、故障率低、可靠性高,而且体积小的特点。
本设计采用Altera公司Cyclone系列的EPlC3T1444C8芯片,在QuartusII软件平台上使用VHDL语言,采用自顶向下的设计方法对系统进行了模块化设计和综合,并进行了仿真。
该系统可实现十字路口红绿灯及左转弯控制和倒计时显示,仿真结果结果表明系统能够自动控制交通灯转变。
关键词:
VHDL,交通灯,EDA
THELIGHTCONTROLLERBASEDONFPGADESIGN
ABSTRACT
Withthedevelopmentoftheeconomy,microelectronictechnology,computertechnologyandtheautomatictheoryaredevelopedrapidly.Itsapplicationisbecomingmoreandmorewidely.Butthetrafficlightasanimportanttraffic,italsohasdevelopedquicklywiththeimprovingrequirementofthepeople.Onallthesystemofthetrafficlight,ThesystemoftrafficcontrolwhichdesignedbasedonFPGAisreceivedbymoreandmorepeople.
Thesystemoftrafficcontrolcanrealizetheautomaticcontroloftrafficlightinaintersection.ThesystemoftrafficcontrolwhichdesignedbasedonFPGAhasmanycharacteristicssuchassimplecircuit,reliableoperation,toerasefunctionquicklywithreal-timeapplications,highspeed,highreliability,lowfailurerate,andsmallvolume.ByusingtheplatformofsoftwaredesignsystemQuartusIIandtheformoftheVHDLlanguage,wesimulatethesystembyusingEPlC3T1444C8Marsdeviceandtheresultshowthatthedownloadsystemcanautomaticallycontrolthetrafficlights.
KEYWORDS:
VHDL,trafficlight,EDA
前 言
当今社会是数字化的社会,是数字集成电路广泛应用的社会。
数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。
系统设计师更愿意自己设计专业集成电路(ASIC)芯片,而且希望设计周期尽可能短,最好在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程器件(FPLD)。
现场可编程门阵列(FPGA)即属其中应用最广泛的一种。
随着电子技术的发展,特别是大规模集成电路和计算机技术的研制和发展,让电子产品设计有了更好的应用市场,实现方法也有了更多的选择,而电子电路的设计却变得越来越复杂,使用“语言”进行电子设计已成为一种趋势。
现代电子系统设计方法是设计师自己设计芯片来实现电子系统的功能,将传统的固件选用及电路板设计工作放在芯片设计中进行。
在这些专业化软件中,EDA(ElectronicDesignAutomation)具有一定的代表性,EDA技术是一种基于芯片的现代电子系统设计方法。
基于EDA技术的现场可编程门阵列(FPGA)电(ASIC),在数字系统设计和控制电路中越来越受到重视。
VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。
基于EDA技术的现场可编程门阵列(FPGA)电路,提出现场可编程门阵列(FPGA)是近年来迅速发展的大规模可编程专用集成电路(ASIC),在数字系统设计和控制电路中越来越受到重视。
VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。
第1章FPGA概述
1.1FPGA的简介
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在可编程器件的基础上进一步发展的产物。
它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
目前以硬件描述语言所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
1.2FPGA的应用
FPGA的应用可分为三个层面:
电路设计,产品设计,系统设计。
1.电路设计
连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领域也是FPGA应用的基石。
事实上在电路设计中应用FPGA要求开发者要具备相应的硬件知识(电路知识)和软件应用能力(开发工具)。
2.产品设计
把相对成熟的技术应用到某些特定领域开发出满足行业需要并能被行业客户接受的产品。
这方面主要是FPGA技术和专业技术的结合问题,重点在性能,FPGA技术在这个领域是一个实现手段,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计。
3.系统级应用
系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统如用Xilinx V-4,V-5系列的FPGA,实现内嵌POWER PC CPU,然后再配合各种外围功能,这个平台上跑LINIX等系统这个系统也就支持各种标准外设和功能接口了,这对于快速构成FPGA大型系统来讲是很有帮助的。
第2章VHDL硬件描述语言
2.1VHDL程序基本结构
一个相对完整的VHDL程序通常包含实体、结构体、配置、程序包和库5个部分。
程序模板如下:
LIBRARYlibraryname;
USElibraryname.packagename.all;
ENTITYentitynameIS
GENERIC
(parametername:
string:
=defaultvalue;
parametername:
integer:
=defaultvalue);
PORT
(inputname,inputname:
INSTD-LOGIC;
Inputvectorname:
INSTD_LOGIC_VECTOR(highDOWNTOlow);
outputname,outputname:
OUTSTD_LOGIC);
ENDentityname;
ARCHITECTUREaOFentitynameIS
SIGNALsignalname:
STD_LOGIC;
BEGIN
--processstatement(optional)
:
--generatestatement(optional)
ENDa;
2.1.1实体
实体一般用来描述所设计的系统的外部接口信号,是可视部分;其中最重要的部分是端口说明。
端口说明语句是对于一个设计实体界面的说明。
端口名是赋予每个系统引脚的名称。
一个实体通常有一个或多个端口,端口类似于原理图部件符合上的管脚。
实体与外界交流的信息必须通过端口通道流入或流出。
IEEE1064标准包中定义了四种端口模式,其功能及符号分别是IN、OUT、INOUT、BUFFER、LINKAGE。
2.1.2结构体
结构体用于描述系统内部的结构和行为,建立输入输出之间的关系。
在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。
其中,实体名必须是被设计的实体的名字。
结构体中的说明语句是对结构体的功能描述语句中将要用到的信号、数据类型、常数、元件、函数和过程等加以说明的语句。
结构体包含两类语句:
并行语句和顺序语句。
在PROCESS中的语句是顺序执行的,当PROCESS所带的敏感信号发生变化时,PROCESS中的语句就会执行一遍。
2.1.3库
库使用说明用于打开(调用)本设计实体将要用到的库,库是专门存放预编译程序包的地方。
IEEE库:
在IEEE库中有一个STD_LOGIC的包,它是IEEE正式认可的包。
STD库:
STD库是VHDL的标准库,在库中有名为STANDARD的包。
在使用库之前,一定要进行库说明,库的说明总是放在设计单元的前面。
2.2VHDL语言
2.2.1VHDL文字规则
VHDL文字主要包括数值和标识符。
数值型文字主要有数字型、字符串型和位串型。
数字型文字有:
整数文字(十进制数)、实数文字(十进制数,必须带有小数点)、以数字基数表示的文字。
字符串型文字有:
文字字符串、数位字符串、标识符。
2.2.2VHDL数据对象
在VHDL中,数据对象类似于一种容器,接受不同数据类型的赋值。
数据对象有3种:
即常量、信号、变量。
常量是固定值,不能在程序中被改变。
变量时一个局部量,是一个临时数据,没有物理意义。
它只能在Process和Function中定义,必须在进程和子程序的说明性区域说明,并只在其内部有效。
信号是描述硬件系统的基本数据对象,代表连接线,Port也是一种信号。
2.2.3VHDL数据类型
VHDL是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且只有相同的数据类型的量才能互相传递和作用。
VHDL的基本类型有:
bit(位)、bit-Vector(位矢量)、Boolean、time、character、string、integer、real。
2.2.4VHDL顺序语句
VHDL有如下六类基本顺序语句:
赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句。
赋值语句有信号赋值语句和变量赋值语句两种。
流程控制语句共有五种:
IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句。
IF语句根据条件句产生的判断结果:
TRUE或FALSE,有条件地选择执行其后的顺序语句。
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行。
空操作语句不完成任何操作,它常用于CASE语句中,利用它来表示所余的不用条件下的操作行为——满足所有可能的条件。
2.2.5VHDL并行语句
结构体中的并行语句主要有七种:
并行信号赋值语句、进程语句、块语句、条件信号赋值语句、元件例化语句(其中包括类属配置语句)生成语句、并行过程调用语句。
第3章系统设计与仿真
3.1系统介绍
交通灯控制器用于自动控制十字路口交通灯和计时器,指挥各种车辆和行人安全通行。
3.1.1设计任务
设计一个十字路口交通控制器,方向分为东南西北四个方向。
东西方向的红绿灯状态一样,南北方向的红绿灯状态一样。
每个方向上,有四盏灯,分别是左转灯、红灯、绿灯和黄灯。
左拐灯亮表示左转车辆可以通行;红灯亮表示左转和直行车辆禁行;绿灯亮表示直行车辆和右转的车辆可以通行;黄灯亮表示左转和直行的车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间倒计时。
3.1.2设计要求
在十字路口东西方向和南北方向各设一组左转灯、;显示的顺序为:
左转灯
绿灯
黄灯
红灯。
在东西方向和南北方向各设一组倒计时显示器。
倒计时只显示对应方向上的红灯倒计时和绿灯倒计时。
其余的状态不显示倒计时。
左转灯、红灯、绿灯和黄灯亮的时间分别是15秒、80秒、45秒、5秒。
状态表如表3-1所示:
表3-1交通灯状态转换表
状态
S0
S1
S2
S3
S4
S5
东西方向
红
红
红
红左转
绿
黄
亮灯
15
45
5
15
45
5
南北方向
红左转
绿
黄
红
红
红
亮灯
15
45
5
15
45
5
3.2系统设计仿真
对于交通灯控制器,可基于QuartusII软件,采用层次化混合输入方式进行设计,即顶层采用原理图设计,底层采用VHDL语言设计。
3.2.1顶层框图的设计
顶层原理图设计可以依据系统框图进行,有分频模块、控制模块、倒计时模块、红绿灯显示模块、译码模块、译码显示模块6六部分组成,如图3-1所示:
图3-1顶层原理图系统框图
3.2.2时序状态图的设计
图3-2交通灯时序状态图
3.2.3工程设计流程框图:
图3-3工程设计流程框图
3.2.4芯片的选择
在这次毕业设计中,我们选用的FPGA芯片是Altera公司的Cyclone(飓风)系列的芯片,型号为:
EP1C3T144C8。
它是基于1.5V的,采用0.13um全铜SRAM工艺、TQFP封装,有5980个逻辑单元,2个锁相环,20个M4KRAM块,其中每个RAM为4kbit,可以另加一位奇偶校验位。
3.2.5各个模块的设计与仿真
1.模块设计
该模块可将频率为1KHZ的脉冲波,经过分频变为频率为1HZ的脉冲波,这样我们就得到了周期为1S的脉冲波。
分频器程序清单如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinqiis
port(clk1khz:
instd_logic;
clk1hz:
outstd_logic);
endfenpinqi;
architectureaoffenpinqiis
begin
process(clk1khz)
variableq:
integer:
=0;
variabler:
std_logic:
='0';
begin
ifclk1khz'eventandclk1khz='1'then
ifq=512thenr:
=notr;q:
=0;
elseq:
=q+1;
endif;
clk1hz<=r;
endif;
endprocess;
enda;
分频器程序仿真结果如图3-4所示:
图3-4分频器程序仿真结果图
在分频器程序仿真结果图中,clk1khz为输入脉冲信号,频率为1khz;clk1hz为输出脉冲信号,频率为1hz。
从图中,我们可以看出clk1hz的周期为1s。
这表明程序的确把1khz的信号分频成1hz的信号。
2.模块设计
control模块可根据clk的脉冲信号输出S的值,下游模块根据S的值来决定红绿灯的状态。
同时对倒计时的信号赋初值。
control模块程序清单:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycontrolis
port(clk:
instd_logic;
s:
outstd_logic_vector(2downto0);
loadat,loadbt:
outstd_logic;
at,bt:
outintegerrange0to80);
endcontrol;
architectureaofcontrolis
signalt:
integer;
begin
process(clk)
begin
ifclk'eventandclk='1'then
loadat<='0';loadbt<='0';
ift=0thens<="000";at<=80;loadat<='1';
elsift=15thens<="001";bt<=45;loadbt<='1';
elsift=60thens<="010";
elsift=65thens<="011";bt<=80;loadbt<='1';
elsift=80thens<="100";at<=45;loadat<='1';
elsift=125thens<="101";
endif;
t<=t+1;
endif;
ift=130thent<=0;endif;
endprocess;
enda;
control模块程序仿真结果如图3-5所示:
图3-5control模块程序仿真结果图
在control模块程序仿真结果图中,只有一个输入信号clk,它是一个频率为1hz的时钟脉冲信号,输出信号有3个分别是s、at、bt。
程序中,通过变量t的值来确定输出信号s的值,并由此确定将要赋得倒计时的初值,然后赋给at,bt。
在每次给at,bt赋值时,都会使另一个输出信号loadat,loadbt变成高电平,从而可以触发下一模块的装载。
3.daojishi模块设计
该模块用来接收control模块的输出作为初值,并进行减一操作,最后把减一得结果输出。
程序里每检测到一个脉冲clk,就进行一次减一操作。
atdaojishi模块程序清单:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityatdaojishiis
port(clk,loadat:
instd_logic;
atin:
inintegerrange0to80;
atout:
outintegerrange0to80);
endatdaojishi;
architectureaofatdaojishiis
signalcountat:
integerrange0to80;
begin
process
begin
waituntilrising_edge(clk);
ifloadat='1'thencountat<=atin;
elsecountat<=countat-1;
endif;
endprocess;
atout<=countat;
enda;
atdaojishi模块程序仿真结果如图3-6所示:
图3-6atdaojishi模块程序仿真结果图
在atdaojishi模块程序仿真结果图中,clk为1hz的输入信号,loadat为at计数器的装载信号,当loadat为高电平时,将输入信号atin的值装载到计数器中,开始执行减一操作,每接受一次clk,执行一次,并将结果输出。
4.daojishi模块设计
该模块用来接收control模块的输出作为初值,并进行减一操作,最后把减一得结果输出。
程序里每检测到一个脉冲clk,就进行一次减一操作。
btdaojishi模块程序清单:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybtdaojishiis
port(clk,loadbt:
instd_logic;
btin:
inintegerrange0to80;
btout:
outintegerrange0to80);
endbtdaojishi;
architectureaofbtdaojishiis
signalcountbt:
integerrange0to80;
begin
process
begin
waituntilrising_edge(clk);
ifloadbt='1'thencountbt<=btin;
elsecountbt<=countbt-1;
endif;
endprocess;
btout<=countbt;
enda;
btdaojishi模块程序仿真结果如图3-7所示:
图3-7btdaojishi模块程序仿真结果图
在btdaojishi模块程序仿真结果图中,clk为1hz的输入信号,loadbt为bt计数器的装载信号,当loadbt为高电平时,将输入信号btin的值装载到计数器中,开始执行减一操作,每接受一次clk,执行一次,并将结果输出。
5.Main模块设计
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitymainis
port(s:
instd_logic_vector(2downto0);
lrgy:
outstd_logic_vector(7downto0));
endmain;
architectureaofmainis
begin
process(s)
variableb:
std_logic_vector(7downto0);
begin
casesis
when"000"=>b:
="01001100";
when"001"=>b:
="01000010";
when"010"=>b:
="01000001";
when"011"=>b:
="11000100";
when"100"=>b:
="00100100";
when"101"=>b:
="00010100";
whenothers=>b:
="00000000";
endcase;
lrgy<=b;
endp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 交通灯 控制器 设计