基于FPGA的交通灯.docx
《基于FPGA的交通灯.docx》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯.docx(11页珍藏版)》请在冰豆网上搜索。
基于FPGA的交通灯
1、绪论
当前基于EDA技术的设计中,有两种基本的设计思路,一种是自上而下的设计思路,一种是自下而上的设计思路。
Top-down设计,即自上而下的设计,这种设计方法首先从系统设计入手,在顶层进行功能框图的划分和结构设计,在功能级别进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,然后用综合工具将设计转化为具体门电路网表,其对应的物理实现可以是PLD器件或专用集成电路(ASIC)。
由于设计的主要仿真和调试是在高层次上完成的,这不仅有利于早期发现结构设计错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功的效率。
在Top-down设计中,将设计分成系统级、功能级、门级、开关级等几个不同的层次,按照自上而下的顺序,在不同的层次上,对系统进行设计和仿真。
Bottom-up设计,即自下而上的设计,这是一种传统的设计思路。
当前Top-down设计更为人们所接受,也为更多的EDA工具所支持,以为该设计思想更符合人们的逻辑思维的习惯,也容易使设计者对复杂的系统进行合理的划分与不断的优化。
在该设计中采用了可编程逻辑器件(FPGA)和硬件描述语言(VerilogHDL),改变了传统的设计思路,设计者可以通过芯片设计来实现各种不同的功能。
设计人员使用相应的仿真软件就可以在短的时间内完成电路的输入、编译、优化、仿真直到最后的芯片制作。
对于FPGA用户可以反复的编程、擦除、使用,或者在外围电路不变的情况下,用不同的软件就可实现不同的功能。
譬如,如已经用该方法设计完成的交通灯由于用在不同的路口,对时间设置有不同的要求(或某一路口交通灯的时间设置需要改变)时,并不需要改变外围硬件电路,只要修改软件的时间预置数即可。
2、FPGA简介
FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA一类高集成度的可编程逻辑器件,起源于美国的Xilinx公司,该公司于1985年推出了世界上第一块FPGA芯片。
在这二十年的发展过程中,FPGA的硬件体系结构和软件开发工具都在不断的完善,日趋成熟。
从最初的1200个可用门,90年代时几十万个可用门,发展到目前数百万门至上千万门的单片FPGA芯片,Xilinx、Altera等世界顶级厂商已经将FPGA器件的集成度提高到一个新的水平。
FPGA结合了微电子技术、电路技术、EDA技术,使设计者可以集中精力进行所需逻辑功能的设计,缩短设计周期,提高设计质量。
2.1FPGA基本结构
目前生产FPGA的公司主要有Xilinx、Altera、Actel、Lattice、QuickLogic等,生产的FPGA品种和型号繁多。
尽管这些FPGA的具体结构和性能指标各有特色,但它们都有一个共同之处,即由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块,从而实现不同的设计。
典型的FPGA通常包含三类基本资源:
可编程逻辑功能块、可编程输入/输出块和可编程互连资源。
可编程逻辑功能块是实现用户功能的基本单元,多个逻辑功能块通常规则地排成一个阵列结构,分布于整个芯片;可编程输入/输出块完成芯片内部逻辑与外部管脚之间的接口,围绕在逻辑单元阵列四周;可编程内部互连资源包括各种长度的连线线段和一些可编程连接开关,它们将各个可编程逻辑块或输入/输出块连接起来,构成特定功能的电路。
用户可以通过编程决定每个单元的功能以及它们的互连关系,从而实现所需的逻辑功能。
不同厂家或不同型号的FPGA,在可编程逻辑块的内部结构、规模、内部互连的结构等方面通常存在较大的差异。
除了上述构成FPGA基本结构的三种资源以外,随着工艺的进步和应用系统需求的发展,一般在FPGA中还可能包含以下可选资源:
存储器资源(块RAM、分布式RAM);
数字时钟管理单元(分频/倍频、数字延迟、时钟锁定);
算数运算单元(高速硬件乘法器、乘加器);
多电平标准兼容的I/O接口;
高速串行I/O接口;
特殊功能模块(以太网MAC等硬IP核);
微处理器(PowerPC405等硬处理器IP核)。
下面以Xilinx公司的Spartan-II系列以及Altera公司的Cyclone-II系列FPGA为例,介绍FPGA的一般结构。
Xilinx公司的Spartan-II系列FPGA器件主要包括5个可配置部分:
(1)可配置逻辑块(ConfigurableLogicBlocks,CLBs),用于实现大部分逻辑功能;
(2)在CLBs的四周分布着可编程的输入输出块(Input/OutputBlocks,IOBs),提供封装引脚与内部逻辑之间的连接接口;
(3)丰富的多层互连结构的可编程连线;
(4)片上的随机存取块状RAM(BLOCKRAM);
(5)全数字式延迟锁相环(DLL)时钟控制块,与每个全局时钟输入缓冲器相连,该闭环系统确保时钟边沿到达内部触发器与其到达输入引脚同步,有效地消除时钟分配的延迟。
Altera公司FPGA器件Cyclone-II系列的基本结构主要包括:
(1)逻辑阵列,由多个逻辑阵列块(LogicArrayBlocks,LABs)排列而成,用于实现大部分逻辑功能;
(2)在芯片四周分布着可编程的输入输出单元(Input/OutputElementsIOEs),提供封装引脚与内部逻辑之间的连接接口;
(3)丰富的多层互连结构的可编程连线;
(4)片上的随机存取块状RAM;
(5)锁相环(PLL),用于时钟的锁定与同步、能够实现时钟的倍频和分频;(6)高速的硬件乘法器,有助于实现高性能的DSP功能。
2.2FPGA的编程技术
目前,市场上有三种基本的FPGA编程技术:
SRAM、反熔丝、Flash。
其中,SRAM是迄今为止应用范围最广的架构,主要因为它速度快且具有可重编程能力,而反熔丝FPGA只具有一次可编程(OneTimeProgrammable,OTP)能力。
基于Flash的FPGA是FPGA领域比较新的技术,也能提供可重编程功能。
基于SRAM的FPGA器件经常带来一些其他的成本,包括:
启动PROMS支持安全和保密应用的备用电池等等。
基于Flash和反熔丝的FPGA没有这些隐含成本,因此可保证较低的总系统成本。
2.2.1基于SRAM的FPGA器件
这类产品是基于SRAM结构的可再配置型器件,上电时要将配置数据读入片内SRAM中,配置完成就可进入工作状态。
掉电后SRAM中的配置数据丢失,FPGA内部逻辑关系随之消失。
这种基于SRAM的FPGA可以反复使用。
2.2.2反熔丝FPGA
采用反熔丝编程技术的FPGA内部具有反熔丝阵列开关结构,其逻辑功能的定义由专用编程器根据设计实现所给出的数据文件,对其内部的反熔丝阵列进行烧录,从而使器件实现相应的逻辑功能。
这种器件的缺点是只能一次性编程;优点是具有高抗干扰性和低功耗,适合于要求高可靠性、高保密性的定型产品。
2.2.3基于Flash的FPGA
在这类FPGA器件中集成了SRAM和非易失性EEPROM两类存储结构。
其中SRAM
用于在器件正常工作时对系统进行控制,而EEPROM则用来装载SRAM。
由于这类FPGA将EEPROM集成在基于SRAM工艺的现场可编程器件中,因而可以充分发挥EEPROM的非易失特性和SRAM的重配置性。
掉电后,配置信息保存在片内的EEPROM中,因此不需要片外的配置芯片,有助于降低系统成本、提高设计的安全性。
2.3FPGA器件性能参数和指标
如前所述,目前市场上FPGA的品种和型号相当多,它们的具体结构、可用资源以及性能都各具特色。
为了在系统设计中选择合适的FPGA器件,充分发挥器件的能力,设计者必须了解FPGA的各项参数和性能指标。
数字系统逻辑功能设计之前的一个重要问题就是FPGA器件的选型,包括厂商的选择以及器件系列和型号的选择。
1)FPGA厂商的选择
每个FPGA厂商都有自己特有的核心技术和相应的产品。
对于继承性产品的开发,尽量使用熟悉并一直使用的FPGA厂商的产品;对于新产品的开发,则可以根据待设计系统的特点和要求,以及各种FPGA器件的特性来初步选择FPGA厂商和产品系列。
另外,还可以根据FPGA芯片成本来选择FPGA器件厂商和产品系列。
比如Xilinx的Virtex系列和Altera的Stratix系列FPGA属于高性能产品;而Xilinx的Spartan系列和Altera的Cyclone系列则属于低成本FPGA器件。
2)FPGA型号的选择
选择具体型号的FPGA时,需要考虑的因素较多,包括管脚数量、逻辑资源、片内存储器、功耗、封装形式等等。
另外,为了保证系统具有较好的可扩展性和可升级性,一般应留出一定的资源余量。
3)FPGA外围器件的选择
FPGA选定之后,还有根据FPGA的特性,为其选择合适的电源芯片、片外存储器芯片、配置信息存储器等多种器件。
在系统设计和开发阶段,应该尽量选择升级空间大、管脚兼容的器件。
在产品开发后期再考虑将这些外围器件替换为其他的兼容器件以降低成本。
2.4FPGA的优点
FPGA是在PAL、GAL等逻辑器件的基础上发展起来的,同以往的逻辑器件相比较,FPGA的规模较大,它可以替代几十甚至几千块通用IC芯片。
可以说,FPGA芯片是小批量系统提高集成度、可靠性的最佳选择之一。
FPGA芯片可以被称为可订制的特殊ASIC芯片,它除了具有ASIC的特点之外,还具有以下几个优点:
1)随着VISI(VerylargeScaleIC,大规模集成电路)工艺的不断提高,单一芯片内部已可以容纳上百万个晶体管,这使得FPGA芯片所能实现的功能也越来越强,同时也可以实现系统集成。
2)FPGA芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投片风险和费用,设计人员只需在自己的实验室里通过相关的软硬件环境来完成芯片的最终功能设计,所以,FPGA的资金投入小,节省了许多潜在的费用。
3)用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件即可实现不同的功能。
4)FPGA软件包含各种输入工具、仿真工具、版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直到最后芯片的制作。
5)电路设计人员使用FPGA进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识,FPGA软件易学易用。
2.5FPGA技术的发展趋势
随着微电子技术、EDA技术、以及应用系统需求的发展,FPGA正在逐渐成为数字系统开发的平台,并将在以下方面继续完善和提高:
(1)高集成度、大容量、低成本、低电压、低功耗;
(2)资源多样化;
(3)适用于片上系统:
处理器、高速串行I/O、DSP等等;
(4)深亚微米工艺的使用。
目前基于90nm工艺的FPGA已经商用,正在向65nm挺进;
(5)各种软硬IP库的发展和完善;
(6)动态可重构技术实用化
3、系统概述
该系统为VerilogHDL语言设计的十字路口交通灯控制器,A方向和B方向各设红(R)、黄(Y)、绿(G)三个灯,3个灯按合理的顺序亮灭。
3.1功能要求
两个方向各种灯亮的时间能够通过程序进行设定。
交通灯控制器的状态转换表见表5.1-1。
表中,1表示灯亮,0表示灯不亮。
A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。
表3.1-1交通灯控制器状态转换表
A方向
B方向
绿灯(G1)
黄灯(Y1)
红灯(R1)
绿灯(G2)
黄灯(Y2)
红灯(R2)
1
0
0
0
0
1
1
1
0
0
1
1
1
0
0
0
0
1
0
0
1
1
0
0
从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:
绿灯----黄灯----红灯
并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。
黄灯所起的作用是用来在绿灯后进行缓冲,以提醒行人该方向马上要禁行了。
3.2设计思路
根据交通灯控制器要实现的功能,考虑用两个并行执行的always语句来分别控制A方向和B方向的3盏灯。
这两个always语句使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。
每个always语句控制一个方向的3种灯按如下顺序点亮,并往复循环:
绿灯----黄灯----红灯
每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置数法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行预置数就可以。
设定A方向红灯、黄灯、绿灯亮的时间分别为:
50s、5s、20s,B方向的红灯、黄灯、绿灯亮的时间分别为:
20s、5s、50s。
假如要改变这些时间,只需要改变计数器的预置数即可。
4、系统仿真
4.1系统电路框图
利用QuartusII软件对本设计的程序进行编译,得到系统的原理图。
图4.1系统整体电路图
4.2设计结果仿真
利用QuartusII软件对本设计的程序进行编译,得到系统的仿真时序图。
图4.2系统时序仿真图
5、心得体会
通过本次课程设计体验到了细心对一个编程者的重要性,和程序的规范性对于程序的重要性,这些平时我们忽略的问题,其实有时候关乎着我们编程的成功率;再者,在verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。
还有,verilogHDL设计语言是一门很好的硬件描述语言,可以直白的描述实际的电路,实际的系统模型,易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。
这次期末的课程设计就是对我们的一次考核,也可以说是一次考验,在平时做题目比较简单,而这次课程设计综合考核了我们的学习结果。
课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
然而从理论到实践,我在做课程设计的几天里,使我对有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实际操作才能更好地学习它,但是学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知解得不够深刻,掌握得不够牢固,在边编学程序的过程中我几乎是重新复习课本上的知识,但这还是没能让我完成这次课程设计,通过询问同学、到网上查询资料慢慢的完善才勉强完成。
6、参考文献
1、《FPGA设计及应用(第二版)》作者:
褚振勇齐亮田红心高楷娟西安电子科技大学出版社出版日期:
2006年12月第2版书号:
ISBN7-5606-1132-X/TP·0574
2、《CPLD/FPGA应用系统设计与(基础篇)》作者:
亿特科技人民邮电出版社出版日期:
2005年7月书号:
ISBN7-115-13200-3/TP.4503
3、《基于CPLD/FPGA的数字通信系统建模与设计》作者:
段吉海黄智伟电子工业出版社出版日期:
2004年8月书号:
ISBN7121002124
7、附件
原程序
moduletraffic_led(CLK,EN,LAMPA,LAMPB,);
output[2:
0]LAMPA,LAMPB;
inputCLK,EN;
reg[7:
0]ared,ayellow,agreen,bred,byellow,bgreen;
reg[2:
0]LAMPA,LAMPB;
always@(EN)
if(!
EN)
begin
ared<=8'd40;
ayellow<=8'd5;
agreen<=8'd25;
bred<=8'd30;
byellow<=8'd5;
bgreen<=8'd35;
end
reg[31:
0]cnt;
parameterTIME_CELL=32'd50000000;//时间单元时间=Time_cell*20ns(50MHz主频)
always@(posedgeCLKornegedgeEN)
begin
if(!
EN)
cnt<=32'h0;
elseif(cntelse
cnt<=0;
end
always@(posedgeCLK)
begin
if(EN)
begin
case(counta)
0:
beginnuma<=agreen;LAMPA<=6;counta<=1;end
1:
beginnuma<=ared;LAMPA<=3;counta<=2;end
2:
beginnuma<=ayellow;LAMPA<=5;counta<=0;end
default:
LAMPA<=4;
endcase
end
end
always@(posedgeCLK)
begin
if(EN)
begin
case(counta)
0:
beginnumb<=bgreen;LAMPB<=6;countb<=1;end
1:
beginnumb<=bred;LAMPB<=3;countb<=2;end
2:
beginnumb<=byellow;LAMPB<=5;countb<=0;end
default:
LAMPB<=4;
endcase
end
end
Endmodule
实物图