EDA课程设计.docx
《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
EDA课程设计
学号:
14082101440成绩:
信息学院
《EDA技术及应用》课程论文
题目:
基于FPGA的电话计费器设计
作者王耀明班级08-1BF
系别信息学院专业自动化
完成时间2010年12月20日
1绪论
1.1FPGA发展及现状
随着先进科技的发展,计算机仿真与应用技术也在发生着日新月异的变化。
在计算机技术实现重大飞跃的同时,复杂可编程逻辑器件(CPLD)的应用逐步渗透到生产与生活各个方面,给人们生活带来了极大方便。
因其性能的不断提高,应用范围也越来越广。
1.2电话计费器相关背景
在商品经济迅猛发展中,人们对电话的需求日益增长,大力发展和普及公用电话,以满足人们日常生活以及流动人口办理业务之需已成为当前市场趋势。
在公用电话业务发展中,由于诸多原因,计费不准的现象屡见不鲜,相关管理混乱,给人们生活带来极大不便。
为了使电话计费更加准确,本文将介绍一种采用FPGA设计实现电话计费器的方法。
1.3基于FPGA实现电话计费器的方案设计基本原则
本文将针对自动计费电话机为例,给出方案设计基本原则如下:
1.金能够通过选择增减的方式快速设定卡内的余额(最大显示定为200元);
2.能够设计通话的种类(如按1~3键选择),并能够根据打电话的种类和通话时间进行金额的扣除:
1为市话(0.1元/分钟),2为国内长途(1元/分钟),3为特殊种类电话(1.6元/分钟);
3.能进行余额不足的报警:
市话低于0.5元报警;国内长途低于5元报警;国际长途低于10元报警;特殊电话低于8元报警;并且当余额不足以通话一分钟即停止通话。
因为在设计中只对电话机的计费系统进行设计,而没有涉及到电话通话的信令过程,因此通话类型必须由外部输入。
1.4论文主要完成的工作
本文主要完成对电话计费系统的FPGA设计,其中包括系统组成框图、相关电路设计(包括控制与计费模块、显示模块、报警模块、顶层电路图)、系统仿真三大部分。
设计语言采用Verilog_HDL硬件描述语言。
2系统的硬件设计
2.1电话计费器的控制要求
为了使电话计费器能够正常稳定运行,在设计时应考虑到如下几点:
1.在插入电话卡的同时,电话计费器的控制模块开始工作;
2.电话计费控制器与正常通话计费、计时模块相连,以实现整个系统的计费计时功能;
3.如果卡内余额不足,报警模块将实现报警功能,报警模式采用声光报警;
4.计费计时模块与显示模块相连,显示模块应实现对通话时间以及对话费余额的显示功能。
其计费一般过程可概括为:
用户插入电话卡→整个系统开始运行→显示卡内余额。
由于没有信号接受器,该系统将由外部输入通话类型(市话、国内/国际长途、特殊电话等)。
如果选择通话,计费系统将话费余额与所选通话类型计费率进行比较。
如果话费余额小于费率值,则禁止通话且报警提示;如果话费余额大于等于通话二分钟门限,是正常通话状态,通话指示灯亮;如果话费余额大于或等于费率值并且小于通话二分钟门限,则进入通话报警状态,表示通话时间不足一分钟,通话报警灯亮,通话指示灯闪烁且声音报警。
根据电话计费器的工作过程,本系统采用分层次化、分模块的方式设计,本系统设计的系统组成框图如图1所示三个模块:
控制与计费模块、显示模块和报警模块。
如图中虚线框所示。
控制与计费模块完成计费功能并产生控制信号,控制另外两个模块。
显示模块动态显示通话时间与通话余额计费等信息。
报警模块是根据通话中出现的报警信息,及时给出声、光或者声光同时报警。
图1
2.2方案设计和功能分割
本系统采用层次化、模块化的设计方法,设计顺序采用自底向上设计。
首先实现系统总体框图(图1)中各子模块然后由顶层模块调用各子模块实现整个系统。
为了便于BCD码显示,这里时间和费用计数器均采用十进制表示。
2.3各功能模块的设计和实现
2.3.1控制与计费模块
该模块的主要功能是控制电话的计费和报警,是整个设计的核心。
控制与计费模块输入信号有:
插卡输入信号enable(准备通话)、mode[2:
0](通话类型选择与充值信号)、clk(系统工作的秒脉冲时钟信号)。
具体工作过程为:
初始化显示上次卡内的余额,且enable为无效电平,当用户按下enable键,使之成为有效电平时电路进入工作状态。
首先判断通话类型mode[2:
0](国内长途,市话,特殊电话)。
若mode[2:
0]=3’b0xx,表示进入通话状态。
计费系统将余额与所选取的通话类型计费率(每分钟所收取的费用)进行比较。
如果话费余额balance小于费率fee值,则禁止通话且声音报警;如果话费余额balance大于等于门限limit(只能通话二分钟门限),是正常通话状态,通话指示灯亮;如果话费余额balance大于等于费率fee值并且balance小于limit,则进入通话报警状态,表示通话时间不足二分钟。
通话报警灯亮,通话指示灯闪烁且声音报警。
计费过程:
当下一分钟到来且电路工作在限制通话或正常工作状态,则在秒脉冲的下降沿余额发生改变,并将改变后的值输出至显示模块。
2.3.2显示模块
该模块的主要功能是实时显示通话时间和话费余额。
余额显示采用数据流方式描述;时间显示由于采用BCD码显示,每一位的有效状态为0~9;同时存在60分频问题,所以采用行为级描述比较简单。
2.3.3报警模块
该模块的功能是产生声光报警信号,提示用户卡内余额不足。
控制与计费模块允许输出信号on,报警输出warn及整个系统的输入允许信号enable作为该模块的控制信号,当报警条件满足时,通话指示灯闪烁或声音提示。
2.4控制系统的实现
整个系统各模块设计仿真实现后,分别创建成元件符号,将各个模块用Verilog_HDL语言或者图形的方法连接起来,形成顶层模块。
然后创建工程,经过输入、调试、综合、适配、仿真后,确认能够实现系统所有功能后,进行编程下载,最终实现对整个系统的控制。
3系统的软件设计
3.1软件整体设计
本系统设计的系统组成框图如图1所示。
包括三个模块:
控制与计费模块、显示模块和报警模块。
如图中虚线框所示。
控制与计费模块完成计费功能并产生控制信号,控制另外两个模块。
显示模块动态显示通话时间与通话余额计费等信息。
报警模块是根据通话中出现的报警信息,及时给出声、光或者声光同时报警。
本系统采用Verilog_HDL硬件描述语言进行设计。
3.2主要模块软件设计
3.2.1控制与计费模块流程图
3.2.2显示模块流程图
3.2.3报警模块流程图
图4
3.2.4顶层电路图
各模块设计仿真实现后,分别创建成元件符号。
顶层就是将各分模块用Verilog_HDL语言或者是图形的方法连接起来。
下图5所示是采用图形的方法新建一电路图,在图中添加各模块元件符号,连接实现系统电路。
图5
3.3系统仿真
图6是正常通话过程中特殊电话类计费的情形。
图7是仿真国内长途计费中出现不足一分钟通话时间声光报警。
图8是仿真余额不足自动禁止通话声音报警的情形。
图6
图7
图8
4结束语
本文介绍了一种全新的电话计费系统的FPGA设计方法,如果结合到实际改变设计中计费要求,就可以应用到各种自动电话计费系统中。
5总结
通过对本学期《数字系统设计与VerilogHDL》这门课的学习,我初步了解了EDA和数字系统设计的相关知识,其中包括EDA技术、FPGA/CPLD器件、VerilogHDL硬件描述语言等。
此门课以QuartusⅡ、SynplifyPro/Synplify软件为平台,以verilog-2001和Verilog-1995为语言标准,以可综合的设计为重点,并通过老师对已经过大量实践验证的数字设计实例的讲解,使我们在学习过程中培养了兴趣,增长了知识,并且能够对简单的系统进行设计与实现。
随着计算机技术和微电子技术工艺的发展,现代数字系统的设计和应用进入了新的阶段。
电子设计自动化技术(EDA)在数字系统设计中起的作用越来越重要,新的工具和新的设计方法不断推出,可编程逻辑器件不断增加新的模块,功能越来越强,硬件设计语言也顺应了形势,推出新的标准,更加好用,更加便捷。
为了顺应时代潮流的发展,越来越多的数字系统将采用硬件描述语言来进行设计,作为一个从事数字系统设计开发的工程师,必须至少熟练掌握一种HDL语言。
为了巩固学习效果和实践动手能力,杜绝死记硬背,充分巩固对在课程学习的相关知识,采用课程设计的方法有利于考查我们综合应用的能力,提高其动手和分析能力,为今后的学习和就业提供帮助。
这次课程设计,不仅使我巩固了Word2003的用法,同时也锻炼了我的综合应用能力。
在设计过程中,通过查找相关资料,培养了我搜索信息的能力,提高了动手和分析能力。
总之,我在这次课程设计中受益匪浅。
6源程序代码
6.1顶层模块
moduleTop(enable,Clk3,purse,mod,time1,time2,clk1,clk2,indicator,alarm,balance2);
inputenable,Clk3,clk1,clk2;input[1:
0]mod;input[15:
0]purse;
outputindicator,alarm;output[7:
0]time1,time2;output[15:
0]balance2;
regindicator,alarm;reg[7:
0]time2,time1;reg[15:
0]balance2;
wireon,state,warn;wire[15:
0]times,banlance1;
control(enable,Clk3,purse,mod,on,state,warn,times,balance1);
disp(state,times,balance1,time1,time2,Clk3,balance2);
warning(enable,clk1,clk2,warn,on,indicator,alarm);
endmodule
6.2控制与计费模块
modulecontrol(enable,Clk3,purse,mod,on,state,warn,times,balance);
inputenable,Clk3;input[1:
0]mod;input[15:
0]purse;
outputon,state,warn;output[15:
0]times,balance;
regon,state,warn;reg[15:
0]times,balance;reg[7:
0]fee;reg[11:
0]limit;
always@(negedgeClk3)//费率及极限的赋值
begin
case(mod)
2'b00:
beginfee<=16;limit<=80;end
2'b01:
beginfee<=01;limit<=5;end
2'b10:
beginfee<=10;limit<=50;end
2'b11:
beginfee<=20;limit<=100;end
endcase
end
always@(negedgeClk3)//余额与费率及极限的比较
begin
if(enable)begin
if(purse[7:
0]beginon<=0;state<=0;warn<=1;end
elseif(purse[11:
0]beginon<=1;state<=1;warn<=1;end
elsebeginon<=0;state<=1;warn<=1;end
end
elsebegin
on<=0;state<=0;warn<=0;
end
end
always@(negedgeClk3)//计时
begin
if(enable)
beginif(times==16'b0101100101011001)
times<=16'd0;
elseif(times[11:
0]==12'b100101011001)
begintimes[11:
0]<=12'd0;times[15:
12]<=times[15:
12]+4'b0001;end
elseif(times[7:
0]==8'b01011001)
begintimes[7:
0]<=8'd0;times[11:
8]<=times[11:
8]+4'b0001;end
elseif(times[3:
0]==4'b1001)
begintimes[3:
0]<=4'b0000;times[7:
4]<=times[7:
4]+4'b0001;end
elsetimes[3:
0]<=times[3:
0]+4'b0001;
end
elsetimes<=0;
end
always@(negedgeClk3)//剩额的计算
begin
if(enable)
begin
if(balance[3:
0]0])
if(balance[7:
4]>fee[7:
4])begin
balance[7:
4]<=balance[7:
4]-fee[7:
4]-4'b0001;
balance[3:
0]<=balance[3:
0]+(4'b1010-fee[3:
0]);end
elseif(balance[11:
8]>4'b0000)begin
balance[11:
8]<=balance[11:
8]-4'b0001;
balance[7:
4]<=balance[7:
4]+(4'b1001-fee[7:
4]);
balance[3:
0]<=balance[3:
0]+(4'b1010-fee[3:
0]);end
elsebegin
balance[15:
12]<=balance[15:
12]-4'b0001;
balance[11:
8]<=4'b1001;
balance[7:
4]<=balance[7:
4]+(4'b1001-fee[7:
4]);
balance[3:
0]<=balance[3:
0]+(4'b1010-fee[3:
0]);end
elseif(balance[7:
4]4])begin
if(balance[11:
8]>0)begin
balance[11:
8]<=balance[11:
8]-4'b0001;
balance[7:
4]<=balance[7:
4]+(4'b1010-fee[7:
4]);
balance[3:
0]<=balance[3:
0]-fee[3:
0];
end
elsebegin
balance[15:
12]<=balance[15:
12]-4'b0001;balance[11:
8]<=4'b1001;
balance[7:
4]<=balance[7:
4]+(4'b1010-fee[7:
4]);balance[3:
0]<=balance[3:
0]-fee[3:
0];
end
end
elsebegin
balance[7:
0]<=balance[7:
0]-fee;
end
end
elsebalance<=purse;
end
endmodule
6.3显示模块
moduledisp(state,times,balance1,time1,time2,Clk3,balance2);
inputstate,Clk3;input[15:
0]balance1,times;
output[15:
0]balance2;output[7:
0]time1,time2;
reg[7:
0]time1,time2;reg[15:
0]balance2;
always@(posedgeClk3)
begin
if(state)
begin
time1<=8'd0;time2<=8'd0;
end
else
begin
time1=times[7:
0];
time2=times[15:
8];
end
end
always@(posedgeClk3)
balance2<=balance1;
endmodule
6.4报警模块
modulewarning(enable,clk1,clk2,warn,on,indicator,alarm);//报警模块
inputenable,clk1,clk2,warn,on;//clk1高频,clk2低频
outputindicator,alarm;//声光报警信号
regalarm,indicator;
always@(enableorwarnoron)begin//控制信号发生变化时
if(enable==1&&warn==1)alarm<=clk1;//声音报警
elsealarm<=0;
if(on==1)//通话指示灯
if(warn==1)indicator<=clk2;
elseindicator<=1;
elseindicator<=0;endendmodule
参考文献
[1]谢自美等.电子线路设计实验测试(第三版)[M].华中科技大学出版社,2006.
[2]陈赜,朱如琪.在系统可编程技术实践教程[M].科学出版社,2001.
[3]江世明,刘湘涛.基于单片机的智能电话控制系统的研制[J].船电技术,2006,
(2).
[4]刘猛.基于桑达程控交换机的电话计费系统实现[J].计算机与信息技术,2007,(17).[4]
[5]王金明.数字系统设计与VerilogHDL(第三版).北京.电子工业出版社.2009.1