FPGA模拟电话计费器设计.doc_第1页
FPGA模拟电话计费器设计.doc_第2页
FPGA模拟电话计费器设计.doc_第3页
FPGA模拟电话计费器设计.doc_第4页
FPGA模拟电话计费器设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除可编辑器件及应用期末综合设计报告 题 目: 电话计费系统 学 号: 姓 名: 完成时间: 摘要FPGA芯片的集成度越来越高,极大地满足用户的要求,可以用到生活中的各个领域。现在的可编程逻辑器件稳定性高,代码容易编写和修改。如verilog HDL代码程序(硬件描述语言),verilog的部分语法是参照C语言的语法设立的(但与C有本质区别),因此,具有很多C语言的优点,从形式表述上来看,verilog代码简明扼要,使用灵活,且语法规定不是很严谨,容易上手。本系统采用50MZH的脉冲作为内部时钟脉冲,因此要进行分频作为秒脉冲(1HZ)用于计时;本系统还涉及到按键问题,因此要进行按键消抖,我们采用延时的方法作为简单的消抖处理。关键字:可编程逻辑器件;verilog HDL;脉冲;消抖目录第一章 绪论11.1 FPGA发展及现状11.2 电话计费器相关背景11.3 基于FPGA实现电话计费器的方案设计基本原则11.4 论文主要完成的工作1第二章 系统的硬件设计22.1电话计费器的控制要求22.2方案设计32.2.1按键分配32.2.2按键消抖原理32.2.3按键消抖原方法32.3各功能的设计和实现42.3.1控制与计费模块42.3.2模块的设计52.4 控制系统的实现6第三章 系统的软件设计73.1 软件整体设计73.2 主要模块软件设计73.3 引脚分配10第四章 总结11第五章 源程序代码12参考文献17精品文档第一章 绪论1.1 FPGA发展及现状随着先进科技的发展,计算机仿真与应用技术也在发生着日新月异的变化。在计算机技术实现重大飞跃的同时,复杂可编程逻辑器件(FPGA)的应用逐步渗透到生产与生活各个方面,给人们生活带来了极大方便。因其性能的不断提高,应用范围也越来越广。1.2 电话计费器相关背景在商品经济迅猛发展中,人们对电话的需求日益增长,大力发展和普及公用电话,以满足人们日常生活以及流动人口办理业务之需已成为当前市场趋势。在公用电话业务发展中,由于诸多原因,计费不准的现象屡见不鲜,相关管理混乱,给人们生活带来极大不便。为了使电话计费更加准确,本文将介绍一种采用FPGA设计实现电话计费器的方法。1.3 基于FPGA实现电话计费器的方案设计基本原则本文将针对自动计费电话机为例,给出方案设计基本原则如下:能够通过选择充值金额的方式快速增加卡内的余额;能够设计通话的种类(如按1键选择),并能够根据打电话的种类和通话时间进行金额的扣除:1为市话(0.15元/分钟),2为国内长途(1.5元/分钟),3为国际长途电话(3元/分钟);能进行余额不足的报警:市话低于0.3元、国内长途低于3元报警、国际电话低于6元报警,led闪烁报警;当余额不足以通话一分钟即停止通话,并且蜂鸣器拉响。因为在设计中只对电话机的计费系统进行设计,而没有涉及到电话通话的信令过程,因此通话类型必须由外部输入。1.4 论文主要完成的工作本文主要完成对电话计费系统的FPGA设计,其中包括系统组成框图、相关程序设计、系统仿真三大部分。设计语言采用Verilog_HDL硬件描述语言。第二章 系统的硬件设计2.1电话计费器的控制要求为了使电话计费器能够正常稳定运行,在设计时应考虑到如下几点:在插入电话卡的同时,电话计费器的控制模块开始工作;电话计费控制器与正常通话计费、计时模块相连,以实现整个系统的计费计时功能;如果卡内余额不足,报警模块将实现报警功能,报警模式采用声光报警;计费计时模块与显示模块相连,显示模块应实现对通话时间以及对话费余额的显示功能。其计费一般过程可概括为:用户插入电话卡(按键)整个系统开始运行显示卡内余额。由于没有信号接受器,该系统将由按键设置输入通话类型(市话、国内/国际长途)。如果选择通话,计费系统将话费余额与所选通话类型计费率进行比较。如果话费余额小于费率值,则禁止通话且报警提示;如果话费余额大于等于通话二分钟门限, 是正常通话状态, 通话指示灯亮;如果话费余额大于或等于费率值并且小于通话二分钟门限,则进入通话指示灯闪烁;通话时间不足一分钟,通话指示灯闪烁且声音报警。根据电话计费器的工作过程,本系统采用分层次化、分模块的方式设计,本系统设计的系统组成框图如图1所示三个模块:控制与计费模块、显示模块和报警模块。如图中虚线框所示。控制与计费模块完成计费功能并产生控制信号,控制另外两个模块。显示模块动态显示通话时间与通话余额计费等信息。报警模块是根据通话中出现的报警信息,及时给出声、光或者声光同时报警。图1电 话 计费 控 制器时 钟正 常 通 话计 费 计 时模 块显 示方 式通话计时显示话费余额显示余 额 不 足 声 光报 警插入电话卡2.2方案设计2.2.1按键分配本系统采用按键对插入电话卡、选着充值金额、确认充值、通话类型、拨打/挂断、接通/挂断的模拟,这里时间和费用计数器均采用十进制表示。按键分配如下:key0:有卡或无卡key1:选择充值金额(5元、10元、50元)key2:查余额(check=0)/上次通话时间(check=1)key3:选择通话模式(市话、国内长途、国际长途)key4:确定充值(在key1选择后)/拨打或挂断(在key3选择后)key5:接通/挂断2.2.2按键消抖原理键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘。在一般嵌入式应用中,用的最多的是非编码键盘,也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。如图 2.1 所示,按键在闭合和断开时,触点会存在抖动现象。在按键按下或者是释放的时候都会出现一个不稳定的抖动时间,如果不处理好这个抖动时间,我们就无法处理好按键编码,所以我们的设计中必须有效消除按键抖动。图 2.1按键波形2.2.3按键消抖原方法为了得到稳定的信号,必须去掉抖动信号,因为抖动时间一般为20ms左右,所以我们采用了按键按下延时20ms的方法。即当按键按下时,用一个寄存器cnt统计脉冲clk上升沿的次数(50MHZ),在主程序中检测条件当cnt=1000000(20ms)时,表示有按键按下,否则表示无按键按下。代码如下:always(posedge clk) /消抖beginif(key) cnt=0;else cnt=cnt+1b1;end如图 2.2 所示,4 个独立按键一端接地,另一端在上拉的同时连接到 CPLD的 I/O 口。 当 I/O 口 (SW0/SW1/SW2/SW3) 的电平为高时, 说明按键没有被按下,当 I/O 口的电平为低时,说明按键被按下了。图 2.2 独立按键接口2.3各功能的设计和实现2.3.1控制与计费模块该模块的主要功能是控制电话的计费和报警,是整个设计的核心。控制与计费模块输入信号有:插卡输入信号enable(准备通话)、t12:0(通话类型选择)、count1(系统工作的秒脉冲时钟信号)。 具体工作过程为:初始化显示上次卡内的余额,且enable为无效电平,当用户按下enable键,使之成为有效电平时电路进入工作状态。首先判断通话类型t12:0(市话、国内长途、国际长途)。若t12:0=3b0xx,表示进入通话状态,每分钟balance=balance-fee;计费系统将余额与所选取的通话类型计费率(每分钟所收取的费用fee)进行比较。如果话费余额balance小于费率fee值,则禁止通话且声光报警;如果话费余额balance 大于等于门限2*fee(只能通话二分钟门限),是正常通话状态,通话指示灯亮;如果话费余额balance大于等于费率fee值并且balance小于2*fee,则进入通话报警状态,表示通话时间不足二分钟。通话报警灯亮,通话指示灯闪烁且声音报警。计费过程:当下一分钟到来且电路工作在限制通话或正常工作状态,则在秒脉冲的上升沿通话时间发生改变,并将改变后的值输出至显示模块。2.3.2模块的设计1分频功能Clk是50MHZ的脉冲信号,因此要将其分频为秒脉冲(1HZ),如图所示:代码如下:always (posedge clk)begincount=count+1b1;if(count=24d25000000) begin count1=count1;count=0;endend2显示模块该模块的主要功能是实时显示通话时间、话费余额、充值金额、通话模式。利用动态扫描6位7段数码管显示,即位选对应段选输出,每一位的有效状态为09; 3通话计时模块当en=1(拨通电话)后,re_en=1(接通电话),即进入通话中,则启动计时功能,计时框图如下所示:程序如下:always(posedge count1)if(re_en)/通话中beginif(miao=1b1)balance=balance-fee;/费用,不足一分钟按一分钟计end4报警模块该模块的功能是产生声光报警信号,提示用户卡内余额不足。控制与计费模块允许输出信号on,报警输出warn及整个系统的输入允许信号enable作为该模块的控制信号,当报警条件满足时,通话指示灯闪烁或声音提示。程序如下:if(balance=fee)begin warn=count1;en=0;re_en=0;endassign led2=(balance=fee)?count1:(en?(balance=2*fee?count1:en):0);/通话led长亮,余额少于2分钟led闪烁2.4 控制系统的实现整个系统各模块设计仿真实现后,分别创建成元件符号,将各个模块用Verilog_HDL语言或者图形的方法连接起来,形成顶层模块。然后创建工程,经过输入、调试、综合、适配、仿真后,确认能够实现系统所有功能后,进行编程下载,最终实现对整个系统的控制。第三章 系统的软件设计3.1 软件整体设计本系统设计的系统组成框图如图1 所示。包括三个模块:控制与计费模块、显示模块和报警模块。如图中虚线框所示。控制与计费模块完成计费功能并产生控制信号,控制另外两个模块。显示模块动态显示通话时间与通话余额计费等信息。报警模块是根据通话中出现的报警信息, 及时给出声、光或者声光同时报警。本系统采用Verilog_HDL硬件描述语言进行设计。3.2 主要模块软件设计 显示余额与充值模块流程图充值模块check=0,state=0,wrn=00=0=0enablet=0?0101图2check=0,wran=0,t=0,t1=0显示余额模块 显示模块流程图0now(当前状态)enable=1?Sm_bit=111111bufr=xcount+count=25000000!Count1Count1?Bufr=bufrmiao+011图3 报警模块流程图Key0enableBalance=feewarn=1led=0warn=1led=1alarm=count1led=count10101图43.3 引脚分配六个按键引脚分配:LED引脚分配:第四章 总结本文介绍了一种全新的电话计费系统的FPGA 设计方法, 如果结合到实际改变设计中计费要求, 就可以应用到各种自动电话计费系统中。通过对本学期数字系统设计与Verilog HDL这门课的学习,我初步了解了EDA和数字系统设计的相关知识,其中包括EDA技术、FPGA/CPLD器件、Verilog HDL硬件描述语言等。此门课以Quartus 软件为平台,以可综合的设计为重点,并通过老师对已经过大量实践验证的数字设计实例的讲解,使我们在学习过程中培养了兴趣,增长了知识,并且能够对简单的系统进行设计与实现。随着计算机技术和微电子技术工艺的发展,现代数字系统的设计和应用进入了新的阶段。电子设计自动化技术(EDA)在数字系统设计中起的作用越来越重要,新的工具和新的设计方法不断推出,可编程逻辑器件不断增加新的模块,功能越来越强,硬件设计语言也顺应了形势,推出新的标准,更加好用,更加便捷。为了顺应时代潮流的发展,越来越多的数字系统将采用硬件描述语言来进行设计,作为一个从事数字系统设计开发的工程师,必须至少熟练掌握一种HDL语言。为了巩固学习效果和实践动手能力,杜绝死记硬背,充分巩固对在课程学习的相关知识,采用课程设计的方法有利于考查我们综合应用的能力,提高其动手和分析能力,为今后的学习和就业提供帮助。这次课程设计,不仅使我巩固了Word 2010的用法,同时也锻炼了我的综合应用能力。在设计过程中,通过查找相关资料,培养了我搜索信息的能力,提高了动手和分析能力。总之,我在这次课程设计中受益匪浅。第五章 源程序代码module system (clk,sm_bit,sm_seg,key,led,warn);input clk;input 5:0 key;output warn;output 3:0 led;output 5:0 sm_bit;output 7:0 sm_seg;reg warn;reg 5:0 sm_bit;reg 7:0 sm_seg;reg 24:0 count;reg 36:0 cnt0,cnt1,cnt2,cnt3,cnt4,cnt5;reg 16:0 balance=d500,balan,fee,money;reg count1,enable,en,re_en,check,b,s,s1;reg 2:0 t,t1,a;reg 4:0 shi,y_shi; reg 5:0 fen,y_fen; reg 5:0 miao,y_miao; reg 3:0 bufr;always(posedge clk)begincount=count+1b1;if(count=25d25000000)begin count1=count1;count=0;endendalways(posedge clk)/消抖begincase(key)6b111110:cnt0=cnt0+1b1;6b111101:cnt1=cnt1+1b1;6b111011:cnt2=cnt2+1b1;6b110111:cnt3=cnt3+1b1;6b101111:cnt4=cnt4+1b1;6b011111:cnt5=cnt5+1b1;default:begin cnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=0;endendcaseendalways(posedge clk)beginif(cnt0=d1000000) enable=enable;/使工作或不工作if(enable)/通信正常工作beginif(balance=fee&en)begin a=1; en=0;re_en=0;endif(balancefee) warn=1;if(cnt1=d1000000)/选择充值金额 begin a=d2;t=t+1b1;if(t=3d4)begin t=1;end/数码管显示moneyif(t)case (t)3b001:money=d500;/5元3b010:money=d1000;/10元3b011:money=d5000;/50元endcaseendelse if(cnt4=d1000000&t)/确定充值begins=1;t=0;a=1;endelse if(cnt2=d1000000) /查余额,数码管显示balance,上次通话时间begincheck=check;a=1;t=0;t1=0;endelse if(cnt3=d1000000)/选择通话模式begina=d3;t1=t1+1b1;b=1;if(t1=3d4) begin t1=1b1;b=0;end/数码管显示feeif(t1)case(t1)3b001:fee=d15;/本地0.15元/分3b010:fee=d150;/国内长途1.5元/分3b011:fee=d300;/国际长途3.0元/分endcaseendelse if(cnt4=d1000000&b)/拨通或挂断begint1=0; a=d5;en=en;if(en=0) begin b=0;re_en=0;a=1;endendelse if(cnt5=d1000000&en)/接通或挂断begina=d4;re_en=re_en;if(re_en=0) begin en=0;b=0;a=1;endendelse if(t&t1) begin t=0;t1=1;b=0;check=0;a=1;endelse if(t&check) begin t=0;check=0;a=1;endelse if(t1&check) begin t1=0;b=0;check=0;a=1;endelse if(s1) s=0;endelse begin t=0;t1=0;b=0;check=0;warn=1;endendassign led3=enable;assign led2=enable?(balance=fee)?count1:(en?(balance=2*fee?count1:en):0):0;/l通话led长亮,余额少于2分钟led闪烁assign led1:0=0;always(posedge count1)beginif(miao=1b1)balance=balance-fee;/费用,不足一分钟按一分钟计if(s)begin balance=balance+money;s1=1;endelse if(s=0) s1=0;endalways(posedge count1)beginif(re_en)beginmiao=miao+1b1; if(miao=6d60) fen=fen+1b1;if(fen=6d60) shi=shi+1b1; if(miao=6d60) miao=0;if(fen=6d60) fen=0;if(shi=5d24) shi=0;y_miao=miao;y_fen=fen;y_shi=shi;endif(!re_en)beginmiao=0;fen=0;shi=0;endendalways (posedge clk)beginif(enable)case (count15:13) /位选3b000 : begin sm_bit = 6b11_1110; end3b001 : begin sm_bit = 6b11_1101; end3b010 : begin sm_bit = 6b11_1011; end3b011 : begin sm_bit = 6b11_0111; end3b100 : begin sm_bit = 6b10_1111; end3b101 : begin sm_bit = 6b01_1111; end3b110 : begin sm_bit = 6b11_1111; end/消隐endcaseelse sm_bit=6b111111;endalways(clk)begincase(sm_bit)6b11_1110:begin if(!check&a=1) bufr=balance%d10;else if(check) bufr=y_miao%4d10;else if(t&a=d2) bufr=money%d10;else if(t1&a=d3) bufr=fee%d10;else if(re_en&a=d4) bufr=miao%4d10;end6b11_1101:begin if(!check&a=1) bufr=balance/4d10%4d10;else if(check) bufr=y_miao/4d10;else if(t&a=d2) bufr=money/d10%d10;else if(t1&a=d3) bufr=fee/4d10%4d10;else if(re_en&a=d4) bufr=miao/4d10;end6b11_1011:begin if(!check&a=1) bufr=balance/d100%d10;else if(check) bufr=y_fen%4d10;else if(t&a=d2) bufr=money/d100%d10;else if(t1&a=d3) bufr=fee/d100%d10;else if(re_en&a=d4) bufr=fen%4d10;end6b11_0111:begin if(!check&a=1) bufr=balance/d1000%d10;else if(check) bufr=y_fen/4d10;else if(t&a=d2) bufr=money/d1000;else if(t1&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论