找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3783|回复: 2
收起左侧

出租车计费器verilog HDL源程序

[复制链接]
ID:329016 发表于 2020-11-4 20:55 | 显示全部楼层 |阅读模式
设计并制作一台出租车计费器。
1.1.2 性能指标要求
① 用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。
② 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。
③ 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。
④ 出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
⑤ 出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。
1.2 设计思路及设计框图
1.2.1设计思路
              本次设计首先在QuartusⅡ环境中对出租车计费器的各个部分利用verilog HDL这一硬件描述语言予以设计、生成模块。而整个设计的核心部分就在分频/计量模块和路程车费计数模块,分频/计量模块的功能主要是用来产生路程脉冲功能,路程车费技术模块主要包括计算路程和车费,通过路程和车费之间的关系,当路程少于一定公里数时车费保持不变,达到一定公里数按照规则每公里增加车费,超过某公里时,再每公里加收车费。待所有模块的功能正确之后,运用原理图搭建顶层电路并进行整体仿真直至达到设计要求,最后再在实验箱上检验设计的正确与否。在实现基本功能的基础上,做了一个创新,设计流水灯,当乘客上车时,流水灯开始运转,乘客下车时,流水灯停止。
51hei.png
  • 各个模块程序的设计
2.1一秒钟分频器路程计数器的设计
    通过秒脉冲来实现计费器调价,超过9自动进一位、实现计费脉冲。
            



    •            路程模块

路程模块用于控制数码管SEG4~SEG7的显示,输入有2个,分别是nclk,clrn。这里还有一个寄存器类型的输出d,是为了给计费器进行一个路程提示。



    •            计费模块:

计费模块是用来计出租车的路费的,一共有3个输入,d,clrn,j。

d是计圈模块给的一个输出,主要给计费器提供一个路程的提示,开始计费。2公里内,数码管显示起步价7.0元;2公里到10公里,按每公里1.6元在7.0元的基础上增加;10公里以外,每公里2.4元;期间,低位的逢十进一。另外输入j是用来给计程车一个起步价的设定的。clrn仍未清零端。



    • 流水灯模块:
流水灯模块是出租车计费器设计的创新点,一共有2个输入,clk,key。给led灯赋初值为1,然后设置一个中间变量temp,将led灯的初值给temp。然后在key=0时执行对led灯的左移,左移完成后给led赋temp的值,即又回到初值,循环执行。

3  调试过程
将程序锁好实训箱上的管脚后,将程序下载到实训箱模拟出租车的路程计费。实训箱前四个数码管表示路程,后四个数码管表示车费。将分频器的按键置于高电平状态,分频器开始输送1秒时钟信号,将控制路程开始的按键置于高电平,模拟乘客上车,车费数码管开始显示起步价7.0元,路程开始计算,2公里内,车费数码管一直显示7.0元,路程大于2公里后小于10公里时,车费数码管开始每公里增加1.6元,路程大于10公里后,车费数码管开始每公里增加2.4元,之后将按键置于低电平,按下清零键,8个数码管重置,恢复起步价。并且当乘客上车时,路程和计费都开始增加,流水灯也会一直转着,当乘客下车时,流水灯就停止,这是实训的创新也是亮点。
4  功能测试
4.1 测试仪器与设备
EDA实训箱,数据连接线,电脑quartus仿真。
4.2 性能指标测试
① 用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。
② 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。
③ 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。
④ 出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
⑤ 出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。
              性能指标要求指标全部完成。

5  心得体会
EDA的学习在某些方面和CAD很像。也涉及到软件Quartus II的应用,还涉及到数电与c语言的学习,可以说结合很多知识。而且程序写出来后,编译有错误又应该一个个改错,然后还要验证能否在实验箱上实现功能,验证和实现

6  参考文献
《EDA技术与应用》第3版              江国强编著              电子工业出版社

附录
附录1:仿真波形图(部分模块)

附录2:程序清单
(1)计费模块:
module jf(d,clrn,q,j);
input j,d,clrn ;
output reg[15:0] q;
reg[3:0] c;
always @(posedge d&&j or negedge clrn)
begin
if(clrn==0) begin c=0;q=0;end
else begin c=c+1;
if(c<=2) q[7:4]=7;
else if(c<=10) begin q[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;
if(q[3:0]>9)begin q[3:0]=q[3:0]%10;q[7:4]=q[7:4]+1;end
if(q[7:4]>9)begin q[7:4]=q[7:4]%10;q[11:8]=q[11:8]+1; end
end
else if(c>10) begin q[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;
if(q[3:0]>9)begin q[3:0]=q[3:0]%10;q[7:4]=q[7:4]+1;end
if(q[7:4]>9)begin q[7:4]=q[7:4]%10;q[11:8]=q[11:8]+1;
if(q[11:8]>9)begin q[11:8]=q[11:8]%10;q[15:12]=q[15:12]+1;end
end
end
end
end
endmodule
(2)路程模块:
module lc (nclk,clrn,d,q);
input nclk,clrn;
output reg[15:0] q;
output reg d;
reg[11:0]i;
always @(negedge clrn or posedge nclk)
begin
if(clrn==0) begin q=0;i=0; end
else
begin i=i+5;
if(i>9)
begin q[3:0]=q[3:0]+1;i=0; d=1;
if(q[3:0]>9)
begin
q[3:0]=0;q[7:4]=q[7:4]+1;
//if(q[7:0]<=2) d=1;
if(q[7:4]>9)
begin
q[7:4]=0;q[11:8]=q[11:8]+1;
if(q[11:8]>9)
begin
q[11:8]=0;q[15:12]=q[15:12]+1;
end
end
end
end
else d=0;
end
end
endmodule
(4)分频器模块:
module fpq(clk,kaishi,clk_1s);
input clk,kaishi;
output reg clk_1s;
reg[24:0] qs;
always     @(posedge clk)
    if(kaishi==1)
    begin
    if(qs==20000000-1)   qs=0;
    else   qs=qs+1;
    if(qs==20000000-1)  clk_1s=0;
    else  clk_1s=1;
   end
endmodule
(5)流水灯模块:
module deng(led,key,clk);
input  clk,key;
output[11:0]  led;
reg[11:0]   led;
reg         temp;
initial led=12'b000000000001;
always @(posedge clk)
  begin
  if(key==0)
  begin
  temp=12'b000000000001;
  led=led<<1;
  if(led==12'b000000000000)
  led=temp;
  end
  end
  endmodule

51hei.png

全部资料51hei下载地址:
出租车计费器.7z (523.9 KB, 下载次数: 59)
回复

使用道具 举报

ID:668512 发表于 2020-11-29 17:51 | 显示全部楼层
very nice
回复

使用道具 举报

ID:808093 发表于 2022-11-29 15:27 | 显示全部楼层
nice!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表