电子线路课程设计报告
电话计费系统
目录
一、设计内容及要求.......................................................................................................................3
系统组成框图...........................................................................................................................3
二、系统工作流程图.......................................................................................................................4
三、模块组成及分工.......................................................................................................................5
四、模块实现及仿真.......................................................................................................................6
money.v.....................................................................................................................................6
源代码...............................................................................................................................6
仿真波形...........................................................................................................................8
C60.v..........................................................................................................................................9
源代码...............................................................................................................................9
仿真波形.........................................................................................................................10
timecount.v.............................................................................................................................11
源代码.............................................................................................................................11
仿真波形.........................................................................................................................12
fenping.v..................................................................................................................................12
源代码.............................................................................................................................12
仿真波形.........................................................................................................................13
main.v......................................................................................................................................13
源代码.............................................................................................................................13
五、整机仿真及管脚分配.............................................................................................................14
整机仿真波形.........................................................................................................................14
市话仿真.........................................................................................................................14
国内长途仿真.................................................................................................................14
国际长途仿真.................................................................................................................15
特殊通话仿真.................................................................................................................15
余额不足两分钟报警仿真.............................................................................................16
余额不足一分钟自动挂断仿真.....................................................................................16
通话不足一分钟扣费情况仿真.....................................................................................17
多少次通话仿真.............................................................................................................17
管脚分配.................................................................................................................................18
六、实验感想.................................................................................................................................18
一、设计内容及要求
时钟频率为1hz,用“charge”对电话卡进行充值,充值金额最
大为200元。用“state”信号代表电话系统的状态信号,“1”进入电
话充值,“0”则继续判断直到为“1跳出循环”。用“decide”代表话
务种类,“00”表示市话,市话每分钟1元,用“01”表示国内长途,
国内长途每分钟2元;用“11”表示国际长途,国际长途每分钟4元;
用“10”表示特殊电话,特殊电话每分钟3元。判断当前电话种类,
余额少于2分钟进行报警(即当打市话时,余额少于2元,打国内长
途时,余额少于4元,打国际长途时,余额少于8元,打特殊电话时,
余额少于6元产生告警信号);当告警时间持续1分钟,即余额少于
1分钟时自动挂断电话。
系统组成框图
时钟
系统组成框图如上图所示。其中时钟激励信号产生模块每完成
60进制计时就产生一个正脉冲(即分钟激励信号),作为计费模块和
时钟激励信
号产生模块
计费模块
计时模块
切断
通话
模块
显示
模块
计时模块的时钟信号;计费模块、计时模块用来统计话费、通话时间。
切断通话模块用于产生警告信号及余额不足时切断通话。
二、系统工作流程图
系统工作流程图上图所示。系统工作流程为:当清0信号为0时电话
开通(state=1),开始进行充值,(为1时计数器复位),并通过充值
按钮(charge=1)对话费进行充值,当按下通话按键时(call=1),启
动计时器,并根据decide信号,选择计费模式。若decide信号为”00”,
表示市话通话,卡内余额以每分钟1元递减;若decide信号为”01”,
表示国内长途通话,卡内余额以每分钟2元递减;若decide信号
为”11”,表示国际长途通话,卡内余额以每分钟4元递减;若decide
信号为”10”,表示特殊通话,卡内余额以每分钟3元递减。若通话结
束(call=0),则state信号置”0”,计时器、计费器不再工作,通话终
止;若余额小于2分钟时,warn信号置”1”,警告声响,若小于一分
钟,cut信号置”1”,通话终止。
三、模块组成及分工
模块名(编写人)端口名端口说明
money.v计费模块
(XXX)
clk/I
秒脉冲输入
cin/I
扣费信号输入
charge/I
充值按钮按下有效
mH/O
余额百位输出
mM/O
余额十位输出
mL/O
余额个位输出
decide/I
通话类型输入
warm/O
余额不足报警
state/O
通话状态判断输出
money_max/O
充值上线警告
rs_n/I
重置信号
g_state/I
现在通话情况
call/I
通话按钮按下有效
clk/I
秒脉冲输入
time.v计时模块
(XXX)
cH/O
秒计时十位输出
cL/O
秒计时个位输出
cout/O
扣费信号输出
state/I
现在通话情况
rs_n/I
重置信号
timecount.v分钟累计
模块(XXX)
cin/I
秒进位输入
tH/O
分钟十位输出
tL/O
分钟个位输出
rs_n/I
重置信号
state/I
现在通话情况
fenping.v二分频模块
(XXX)
clk_in/I
信号输入
clk_out/O
分频信号输出
main.v主模块
(XXX)
clk/I
秒脉冲输入
ring_in/I
铃声信号输入
charge/I
充值按钮按下有效
mH/O
余额百位输出
mM/O
余额十位输出
mL/O
余额个位输出
cH/O
秒十位输出
cL/O
秒个位输出
tH/O
分十位输出
tL/O
分个位输出
warm/O
余额不足警告
money_max/O
充值上限警告
call/I
通话按钮按下有效
call_kind/O
通话种类输出
decide/I
通话类型输入
g_state/O
现在通话状态
ring/O
铃声输出
rs_n/I
重置按钮
四、模块实现及仿真
money.v
源代码
modulemoney(clk,cin,charge,mH,mM,mL,decide,warm,state,money_max,rs_n,g_state,call);
inputclk,cin,charge,rs_n,g_state,call;
input[1:0]decide;
outputwarm,state,money_max;
output[3:0]mH,mM,mL;
reg[3:0]mH,mM,mL;
regflag;
assignwarm=(mH==4'b0&&mM==4'b0&&mL<(decide+1'b1)*2);//判断是否余额不足
assignstate=!(mH==4'b0&&mM==4'b0&&mL<(decide+1'b1));//判断是否还可以通话
assignmoney_max=(mH==4'd2);//判断余额是否超过200块
always@(negedgeclkornegedgers_n)
begin
if(g_state==1'b1)flag=1;//转态位用于不足一分钟是挂断电话扣费
if(!rs_n){mH,mM,mL}<=12'b0;
el
begin
if(charge)//充值
begin
if(!money_max)//如果没超过充值上限
begin
if(mL==4'd9)//个位进位
begin
if(mM==4'd9)//十位进位
begin
mH<=mH+1'b1;
mM<=4'b0;
end
elmM<=mM+1'b1;
mL=4'b0;
end
elmL<=mL+1'b1;
end
end
elif(cin&&flag)//扣费
begin
if(!g_state&&call);//还没进入通话状态,但按下通话钱是不扣费
el
begin
if(mL>=(decide+1'b1))mL<=mL-(decide+1'b1);//不需退位
el
begin
if(mM==4'b0)//退位扣费
begin
mH<=mH-1'b1;
mM<=4'd9;
end
elmM<=mM-1'b1;
mL<=mL+(10-1'b1-decide);
end
end
if(!g_state)flag<=0;//保证挂断电话只扣一次费
end
end
end
endmodule
仿真波形
充值过程以及达到充值上限(200元)报警波形
余额不足报警仿真波形
通话状态下持续cin输入扣费情况仿真波形
非通话状态下持续cin输入扣费情况仿真波形
C60.v
源代码
modulec60(clk,cH,cL,cout,state,rs_n);
inputclk,state,rs_n;
outputcout;
output[3:0]cH,cL;
reg[3:0]cH,cL;
regcout;
always@(podgeclkornegedgers_nornegedgestate)
begin
if(!rs_n){cH,cL}<=8'b0;
elif(!state)//若通话结束,不足一分钟按一分钟处理
begin
if(cH!=4'b0||cL!=4'b0)cout=1'b1;//若分钟不为零且通话结束产生进位信号
{cH,cL}=8'b0;
end
el
begin
if(cH==4'd5&&cL==4'd9)
begin
cout<=1;//59时产生进位信号
{cH,cL}<=8'b0;
end
el
begin
cout<=0;
if(cL==4'd9)
begin
cL<=4'b0;
cH<=cH+1'b1;
end
elcL<=cL+1'b1;
end
end
end
endmodule
仿真波形
在通话状态下(即state=1时)正常计数,且在59秒后进位并输出进位信号
挂断电话时,若秒计数不为零产生进位信号,并自动清零
timecount.v
源代码
moduletimecount(cin,tH,tL,rs_n,state);
inputcin,rs_n,state;
output[3:0]tH,tL;
reg[3:0]tH,tL;
always@(podgecinornegedgers_nornegedgestate)
begin
if(!rs_n){tH,tL}<=8'b0;
elif(!state){tH,tL}<=8'b0;//挂断电话自动清零
el
begin
if(tL==9)//个位为9是进位处理
begin
tH<=tH+1'b1;
tL<=4'b0;
end
eltL<=tL+1'b1;
end
end
endmodule
仿真波形
正常计数及进位的仿真波形
通话结束自动清零
fenping.v
源代码
modulefenping(clk_in,clk_out);
inputclk_in;
outputclk_out;
regclk_out;
always@(podgeclk_in)
begin
clk_out<=~clk_out;//上升沿取反实现二分频
end
endmodule
仿真波形
分频波形
main.v
源代码
module
main(clk,ring_in,charge,mH,mM,mL,cH,cL,tH,tL,warm,money_max,call,call_kind,decide,g_sta
te,ring,rs_n);
inputclk,charge,call,rs_n,ring_in;
input[1:0]decide;
outputg_state,warm,money_max,ring;
output[3:0]mH,mM,mL,cH,cL,tH,tL;
output[1:0]call_kind;
wirestate,ring,half_ring,cout;
assigng_state=(call&&state);//通过通话按钮和余额决定通话转台
assignring=(warm?ring_in:(money_max?half_ring:0));//选择输出铃声的频率
assigncall_kind[0]=decide[0];//输出通话类型
assigncall_kind[1]=decide[1];//输出通话类型
fenpingfenping(ring_in,half_ring);//实例化分频模块
c60C60(clk,cH,cL,cout,g_state,rs_n);//实例化计时模块
money
Money(clk,cout,charge,mH,mM,mL,decide,warm,state,money_max,rs_n,g_state,call);
//实例化计费模块
timecountTimecount(cout,tH,tL,rs_n,g_state);//实例化分累加模块
endmodule
五、整机仿真及管脚分配
整机仿真波形
市话仿真
满一分钟扣费1元,分累加加1
国内长途仿真
满一分钟扣费2元,分累加加1
国际长途仿真
满一分钟扣费4元,分累加加1
特殊通话仿真
满一分钟扣费3元,分累加加1
余额不足两分钟报警仿真
Warm信号由0变为1且ring有波形输出
余额不足一分钟自动挂断仿真
余额1元不足以在打一分钟国内长途g_state由1变为0,即电话被挂断
通话不足一分钟扣费情况仿真
在通话23秒是挂断电话,扣费一元
多少次通话仿真
分累计和秒计时自动清零,余额不变
管脚分配
六、实验感想
在本次实验中我主要负责计费模块和主模块的编写,在拿到题目后,根据老
师的提示我们对电话计费系统的功能做了初步的分析,并写了初期的功能文档。
在编码初期,我们觉得Verilog和c语言很相似,于是便用了c语言的编程
方法进行了程序的编写,可是在我们编得差不多的时候,开始写测试代码的时候
发现,Verilog和c语言还是有很多不同的,比如:用Verilog编写的模块不能
理解成为c语言的函数,应该把它理解成为数电里面一块块集成芯片。由于最开
始的认识上的错误,导致我们初期编写的一两百行代码宣告作废。
在经历了第一次失败后,我们开始补充Verilog知识,在大略的看了一下从
网上下载下来的Verilog电子书籍后,我们对用Verilog编写硬件整个流程和结
构有了大概的了解。也明白了用Verilog编写一个个模块,不能像c语言那样编
写成为一个个互相调用的模块,而是要做成一个个独立的模块,仅仅只需要把两
个不同模块的实例芯片的输入和输出端口相连便能是先两个模块的互相联机使
用。
在经过对Verilog的简单学习后,我们便开始第二的阶段的代码编写,我们
按照明确的分工各自编写好自己的模块,并给自己模块写好测试代码,分析自己
模块的测试波形是否正确。在确保各个模块都已正确最后在通过顶层模块把各个
模块连接在一起完成了最后整机测试。
在做电话计费系统的过程中我遇到了不少关于Verilog语言的问题
比如:
1.在编写过程中遇到了如下语句
a<=b;
b<=c;
想把b赋给a之后,在把c赋给b,可实际测试的时候却不是我想的那样,结果是a,
b都被赋予c的值,翻阅书籍后我才明白用<=是进行非阻塞赋值,两句语句是同时进行
2.同时我还遇到了其他一些很低级的错误:
比如在always的条件里面同时使用一个时钟信号的上升沿和下降沿导致无法编译;在
元件连接的时候把输出端口接到寄存器变量上,导致无法编译;
在做课设的过程中,通过发现问题和解决问题,是我对数电模块的设计
有了更深层次的了解,也使我摸清了Verilog的脾气。
本文发布于:2023-01-04 07:03:01,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/89348.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |