基于verilogHDL的出租车计费器Word格式文档下载.docx
- 文档编号:18038429
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:14
- 大小:59.78KB
基于verilogHDL的出租车计费器Word格式文档下载.docx
《基于verilogHDL的出租车计费器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于verilogHDL的出租车计费器Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
clr
#4
clk
sum[i1..0]
K2
qm[7.0)
a
z
cru
jm
JT
cout
3
js
court^ls
inrgtl
q[23q
qm[7..0JqTF.0]qs^-.O]qlF-O]sumlllOl
2.各个模块程序的设计
1分频模块:
模拟车辆行进,分1s/km档和0.1s/km档
i
L
clkcout
=1
c
J
KI
fenpinqi
r
modulefpq(clk,cout,k1);
inputclk,k1;
reg[24:
0]q;
outputregcout;
always@(posedgeclk)begin
case(k1)
0:
beginq=q+1;
if(q==20000000-1)begincout=1;
q=0;
endelsecout=0;
end
1:
beginq=q+1;
if(q==2000000-1)
begincout=1;
endcaseend
endmodule
2计程兼计费模块:
jsq99累计路程dejfq按规则计费,同时附带输出显示
■\fuck
q|70]
sum[110]
k2
ck4[7..0|
z.・com
.:
对口
ch埴11”切
cbm
_u「
I・■■:
BI:
instS
该模块又由两个小模块组成:
.=intt
jsq99:
路程显示
modulejsq99(clr,clk,q,cout,k2);
inputclk,clr,k2;
outputreg[7:
0]q;
outputregcout;
always@(posedgeclkornegedgeclr)beginif(~clr)q=0;
elsebeginif(k2==0)beginif(q=='
h99)q=0;
elseq=q+1;
if(q[3:
0]=='
ha)beginq[3:
0]=0;
q[7:
4]=q[7:
4]+1;
end
if(q==0)cout=1;
elsecout=0;
endend
dejfq:
计费
moduledejfq(clk,clrn,q,k2);
inputclk,k2;
inputclrn;
outputreg[11:
reg[3:
0]c;
always@(posedgeclkornegedgeclrn)
begin
if(~clrn)beginc=0;
end
elsebegin
if(k2==0)
if(c<
14)c=c+1;
=2)q[7:
4]=7;
elseif(c<
=10)
q[3:
0]=q[3:
0]+6;
4]=q[7:
if(q[3:
0]>
9)beginq[3:
0]-10;
endif(q[7:
4]>
9)beginq[7:
4]-10;
q[11:
8]=q[11:
8]+1;
endend
elseif(c>
10)
0]+4;
4]+2;
endend
if(c>
14)c=11;
endendmodule
3选择器:
选择显示时间或费用,拨下拨码开关显示路程和费用,拨上显示时钟。
modulexzq(k,qm,qf,qs,q,q1,sum);
inputk;
input[7:
0]qm,qf,qs,q1;
input[11:
0]sum;
outputreg[23:
always
if(k==0)begin
0]=q1;
8]=0;
q[23:
12]=sum;
elseq[23:
0]={qs,qf,qm};
4
即4
Qlrn
j
叩..QJ
■-
c*fi
cnm
?
ins12
….(:
iiin..““
q[7..g]
D"
n
wi7-
_J「矽i
|、旷一二
■TI■»
■'
■■
〉DGUt_is
■■w呻.”|*r
时间模块:
24小时时钟,可以显示时分秒,可以校准。
[jsq24
・・
・・i
qm[70]
qs[7.0]
■■i
.1,
R
clrn
I…
br|
Jf
f"
"
a8-f
cout_1s
1JJ
F
一一;
instl
J"
'
该模块又由几个小模块组成
moduleclkgen(clk,cout);
〃两千万分频器
inputclk;
if(q==20000000-1)q=0;
elseq=q+1;
if(q==20000000-1)cout=1;
elsecout=0;
endmodule
modulecnt60(clk,clrn,j,q,cout);
//60进制计数器inputclk,clrn,j;
always@(posedgeclkAjornegedgeclrn)
if(~clrn)q=0;
elsebegin
if(q=='
h59)q=0;
if(q[3:
ha)begin
0]=0;
q[7:
h59)cout=1;
modulecnt24(clk,clrn,j,q,cout);
//24进制计数器
inputclk,clrn,j;
always@(posedgeclkAjornegedgeclrn)
h23)q=0;
h23)cout=1;
⑤流水灯模块:
通过亮灭提示行进状态
moduleIsd(clk,q,k2);
reg[7:
0]d;
initialq=1;
always@(posedgeclk)
if(d==23)d=0;
elsed=d+1;
if(d<
=11)
if(q==12'
b111111111111)q=12'
b0111111111111;
elseq=q<
<
1;
q=q+1;
if(d>
11)
b000000000000)q=1;
3.制作与调试过程
1新建工程,输入程序,生成模块
2各模块波形模拟
3进行各模块间连线
4引脚锁定
5下载硬件验证
调试:
最初计费时选择乘法,但占用资源过多,而且在数码管显示时出现进制,所以转换成加法,成功解决问题。
4.结论
通过硬件验证,我的系统已经达到设计要求,同时附加了时钟和流水灯显示
两个小功能,可以通过拨码开关选择显示时间和费用。
但由于是初次实践,所以选用了以前上课的模块,导致程序过于臃肿,总体来说还是可以的。
5.实训心得体会
为期两周的实训结束了,这是我首次将EDA课程学习到的知识运用到实际当中。
在实训过程中我遇到许多的困难,特别是将16进制转换成0-9的16进制输出到数码管这个地方,困扰了我数天的时间,通过查找资料我采用将乘法转换成加法的方法避开了问题,同时也降低了资源占用率,我在这一点上明白了,想要得到一个优异的程序,我们必须善于发现问题改正问题,同时要有一颗持之以恒的心。
虽然在实训中遇到了一些我们不能完成的问题,但也能在问题中提高很多
专业知识,当然也离不开老师的悉心教导。
6.参考文献
1《数字逻辑电路基础》,江国强,电子工业出版社
2纟EDA技术与应用》,江国强,电子工业出版社
附录:
①仿真波形图(部分模块)
②程序清单
〃分频模块
inputclk,k1;
beginq=q+1;
if(q==20000000-1)begincout=1;
endelsecout=0;
beginq=q+1;
if(q==2000000-1)begincout=1;
endendcaseendendmodule
//计程inputclk,clr,k2;
always@(posedgeclkornegedgeclr)begin
if(~clr)q=0;
elsebeginif(k2==0)beginif(q=='
elseq=q+1;
endif(q==0)cout=1;
endendendendmodulemoduledejfq(clk,clrn,q,k2);
//计费inputclk,k2;
inputclrn;
always@(posedgeclk)
if(~clrn)beginc=0;
=10)beginq[3:
if(q[7:
10)beginq[3:
14)c=1;
moduleclkgen(clk,cout);
//两千万分频器
inputclk;
//60进制计数器
endendendmodule
//24inputclk,clrn,j;
always@(posedgeclkAjornegedgeclrn)begin
endmodulemodulexzq(k,qm,qf,qs,q,q1,sum);
//
inputk;
input[7:
input[11:
if(k==0)begin
endelseq[23:
modulelsd(clk,q,k2);
//流水灯
initialq=1;
进制计数器
选择器
endendmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 verilogHDL 出租车 计费