fpga课程设计出租车计价器Word文档下载推荐.docx
《fpga课程设计出租车计价器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《fpga课程设计出租车计价器Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
另外一种方法是用CPLD(复杂可编程逻辑器件备)。
CPLD(ComplexProgrammableLogicDevice)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。
是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
CPLD主要是由可编程逻辑宏单元(MC,MacroCell)围绕中心的可编程互连矩阵单元组成。
其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。
由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。
几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。
CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。
第二节CPLD与FPGA的关系
早在1980年代中期,FPGA已经在PLD设备中扎根。
CPLD和FPGA包括了一些相对大数量的可以编辑逻辑单元。
CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。
CPLD是一个有点限制性的结构。
这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。
这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。
而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。
一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。
允许他们的设计随着系统升级或者动态重新配置而改变。
一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。
第三节FPGA与CPLD的辨别和分类
FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。
通常的分类方法是:
将以乘积项结构方式构成逻辑行为的器件称为CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。
将以查表法结构方式构成逻辑行为的器件称为FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。
尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:
一CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。
换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
二CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
三在编程上FPGA比CPLD具有更大的灵活性。
CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;
FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。
四FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
五CPLD比FPGA使用起来更方便。
CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。
而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
六CPLD的速度比FPGA快,并且具有较大的时间可预测性。
这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
七在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。
CPLD又可分为在编程器上编程和在系统编程两类。
FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。
其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
八CPLD保密性好,FPGA保密性差。
九一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
第四节FPGA/CPLD配置模式
FPGA有多种配置模式:
并行主模式为一片FPGA加一片EPROM的方式;
主从模式可以支持一片PROM编程多片FPGA;
串行模式可以采用串行PROM编程FPGA;
外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。
如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。
例如,领先FPGA厂商Xilinx最近推出的Virtex-5系列采用65nm工艺,可提供高达33万个逻辑单元、1,200个I/O和大量硬IP块。
超大容量和密度使复杂的布线变得更加不可预测,由此带来更严重的时序收敛问题。
此外,针对不同应用而集成的更多数量的逻辑功能、DSP、嵌入式处理和接口模块,也让时钟管理和电压分配问题变得更加困难。
幸运地是,FPGA厂商、EDA工具供应商正在通力合作解决65nmFPGA独特的设计挑战。
不久以前,Synplicity与Xilinx宣布成立超大容量时序收敛联合工作小组,旨在最大程度帮助地系统设计工程师以更快、更高效的方式应用65nmFPGA器件。
设计软件供应商Magma推出的综合工具BlastFPGA能帮助建立优化的布局,加快时序的收敛。
第二章出租车计价器的功能和主要功能模块
第一节车租车计价器的功能和设计框图
所要设计的出租车计价器,要求能够显示里程数和乘客应付的费用,其中里程数精确到1公里,乘客应付的费用精确到1元,显示必须以十进制的形式来进行。
出租车的计费标准为:
起步价6元,里程在5公里以内均为起步价;
里程在超过5公里,每行驶1km增加1元。
该系统的设计可以采用分立元件来搭建,也可以通过单片机来设计,而使用可编程FPGA/CPLD来设计,具有设计周期短、易于修改等明显特点,而且随着可编程逻辑器件和EDA软件的飞速发展,越来越多的电子系统采用FPGA/CPLD来设计,一旦该系统达到一定的量产规模,也比较容易转化为ASIC芯片设计。
因此,基于FPGA/CPLD来设计一个出租车的计价器。
本系统在EDA工具软件MAX+plusⅡ中,采用硬件描述语言VerilogHDL和原理图设计相结合的方法,进行各个模块的设计,最终将各个模块组成整个系统。
出租车能够显示行驶的里程,可以通过车轮的转动产生脉冲,然后通过计数器对脉冲进行计数来实现。
假设出租车每行驶20m就产生一个脉冲。
由于里程数要精确到1km,也就是1000m,因此每经过50个脉冲就要输出一个新的脉冲信号,这里称为1000m脉冲信号,作为里程计数器的时钟信号,可以通过一个模为50的计数器进行分频而得到。
里程计数器可以用一个三位BCD码计数器来实现,最大能显示到999。
以前两位为整数,第三位为小数,也就是最大能显示里程99.9km,因为出租车都在市区和近郊活动,三位BCD码计数器是可以实现里程计数的。
里程计数器每计数1km还会周期性地输出一个脉冲信号,称为1km脉冲信号,可以通过一定的组合电路来实现。
系统最核心的部分就是计费如何实现。
这里就需要设计一个BCD码的加法器,在起步价的基础上,根据行驶里程的不同,依据计费标准,每增加1km加上一个单价,单价的产生可以用VerilogHDL编写程序来实现。
系统的总体设计框图如图1所示。
图1总体设计框图
第二节主要功能模块
一单价产生模块
单价产生模块的VerilogHDL源程序如下:
modulejiashu(bai,shi,jia);
input[3:
0]bai,shi;
output[11:
0]jia;
reg[11:
always@(baiorshi)
begin
if(bai==0)
begin
if(shi>
=0&
&
shi<
5)jia=0;
elseif(shi>
=5)jia=12′h010;
end
else jia=12′h010;
end
endmodule
其中输入信号bai和shi就是里程计数器输出的两位整数里程,输出信号jia就是根据计费标准而产生的单价,以三位BCD码的形式输出,以前两位为整数,第三位为小数。
即里程在5km以内时,jia=0;
里程超过5km时,jia=010(1元)。
用VerilogHDL编写程序来实现模块功能的优点在于,当出租车的计费标准发生变化时,可以很容易地通过改写程序来完成新的设计,比起硬件电路的修改要方便得多,这也是用VerilogHDL来实现模块功能的重要优势。
二三位BCD码加法器
系统中用到了三位BCD码加法器,可以实现三位十进制数的加法运算。
加法器输出的结果就是乘客应付的费用,这里同样以前两位为整数,第三位为小数,也就是最大能显示99.9元。
三位BCD码加法器由三个一位BCD码加法器级联而成。
一位BCD码由四位二进制数组成,四位二进制数的加法运算会产生大于9的数字,必须进行适当的调整才会产生正确的结果。
一位BCD码加法器的Ver-ilogHDL源程序如下:
modulebcd_jia(a,b,sum,cin,co);
0]a,b;
inputcin;
output[3:
0]sum;
outputco;
reg[3:
regco;
always@(aorborcin)
assign{co,sum}=a+b+cin;
if({co,sum}>
5′b01001)
beginsum=sum+6;
co=1;
end
end
一位BCD码加法器模块的仿真波形和生成的模块符号如图2和图3所示。
图2一位BCD码加法器的仿真波形
图3一位BCD码加法器的模块符号
本模块中A和B为输入的一位BCD码,CIN为低位来的进位信号,CO是本片向高位产生的进位输出信号,SUM是两个数相加的和。
三位BCD码加法器由三个本模块级联而成,其电路原理图和仿真波形如图4和图5所示。
图4三位BCD码加法器的电路原理图
图5三位BCD码加法器的仿真波形
三缓冲器模块
三位BCD码加法器输出的结果通过缓冲器以后,反馈到输入端重新作为一个加数,在1km脉冲信号的作用下,每来一个脉冲就和单价相加,形成连续累加的功能。
缓冲器还有一个控制输入端LD,LD=0时,在1km脉冲的作用下,输出起步价6元;
LD=1时,在1km脉冲的作用下,输出和输入相等。
缓冲器的VerilogHDL源程序如下:
moduledff12(clk,ld,d,q);
inputclk,ld;
input[11:
0]d;
0]q;
always@(posedgeclkornegedgeld)
if(ld==0)q=12′h060;
elseq=d;
四顶层设计原理图
将各个模块按照输入输出关系连接成顶层设计原理图如图6所示。
图6出租车计价器的顶层设计原理图
在整体电路中,clk为最原始的时钟输入端,cr为异步清零端,q[11..0]输出里程,jiaqian[11..0]输出乘客应付的费用。
第三章系统仿真验证
整体电路的仿真波形如图7所示。
图7系统仿真波形
从系统仿真波形图7(a)中可以看出,当清零端cr=0时,里程数立刻清零,乘客应付的费用显示三位十进制数060(起步价6元),表示乘客刚上车。
当清零端cr=1时,出租车开始行进,里程和费用都开始计数,里程显示三位十进制数,前两位为整数,第三位为小数,也就是每行驶1km计一次数。
从系统仿真波形图7(b)中可以看出,行驶到5km时,费用由6元增加为7元,行驶到6km时,费用由7元增加为8元,1km增加1元。
系统仿真波形图7中显示了每行驶1km后,费用逐渐累加的情况。
系统仿真波形完全验证了预期的设计要求。
第四章整体电路图
图8整体电路原路图
第五章结 语
出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。
车暂时停止不计费,车费保持不变。
若停止则车费清零,等待下一次计费的开始。
各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。
出租车计费系统的设计中体现了VerilogHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。
通过仿真验证表明,本文所设计的出租车计价器能够正常地显示行驶的里程数和乘客应付的费用,符合预定的计费标准和功能要求。
基于FPGA的设计,集成度高、设计周期短。
尤其是当计费标准发生变化时,容易通过改写VerilogHDL源程序来完成新的设计。
第六章心得体会
这次课程设计中,我们主要是运用VHDL语言设计了一个出租车计费器,并且用层次化的设计方法来实现这个电路。
在程序编写结束后,我们还对该程序进行了调试,能按预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。
通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并通过使用对它有了更深的体会。
对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些注意事项,对于下次进行编程设计有很大的帮助和提高。
总之,这次实验不仅仅加强了我的动手编程能力,也大大加强了团队合作以及设计能力,使我在理论学习和编程练习方面都获得了较大的收获
附录
EPM7128SLC84-15的引脚图
图9EPM7128SLC84-15的引脚图
元器件列表:
型号
数量
大小
备注
数码管
3个
全部是共阳的
电阻
1个
200欧姆
24个
1K欧姆
按键
EPM7128SLC84-15
1片
主处理器
74HC05
晶体
6M
搭建震荡电路
导线
若干
表1元器件列表
参考文献:
[1]刘艳萍,高振斌,李志军.EDA技术及应用[M].北京:
国防工业出版社,2006.
[2]朱正涌.半导体集成电路[M].北京:
清华大学出版社,2001.
[3]刘笃仁.用ISP器件设计现代电路与系统[M].西安:
西安电子科技大学出版社,2002.
[4]王金明,杨吉斌.数字系统设计与VerilogHDL[M].北京:
电子工业出版社,2002.
[5]李辉.PLD与数字系统设计[M].西安:
西安电子科技大学出版社,2005.
[6]江国强.EDA技术与应用[M].北京:
电子工业出版社,2004.
[7]刘爱荣,王振成.EDA技术与CPLD/FPGA开发应用简明教程[M].北京:
清华大学出版社,2007.
[8]夏继强,沈德金,邢春香.单片机实验与实践教程[M].2版.北京:
北京航空航天大学出版社,2006.
[9]张毅坤,陈善久,裘雪红.单片微型计算机原理及应用[M].西安:
西安电子科技大学出版社,1998.
[10]冯博琴.微型计算机原理与接口技术[M].北京:
清华大学出版社,2002.