EDA程序设计--出租车计费器

题目:出租车计费器

 

1  系统设计

    1. 设计要求

1.1.1 设计任务  

设计并制作一台出租车计费器。

1.1.2 性能指标要求 

① 用EDA实训仪的I/O设备和FPGA实现出租车计费器的设计。

② 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。

③ 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。

④ 出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。

⑤ 出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

1.2 设计思路及设计框图

1.2.1设计思路

计程和计费都是十进制位的输入,通过脉冲实现计数。计程通过分频器的输出作为输入,产生的秒脉冲以实现计数功能。计费在LED数码管上分为个位十位(例如起步价为7元,显示器上显示70,三公里时为86......),计程器和计费器在一个程序内完成,分频器用另一个程序完成,并将程序都生成一个元器件,用图形法级联在一起。上硬件仿真后,打开开关输入脉冲,通过上升沿触发使路程计算加一,并使总路计算模块加一,到达相应的公里数后没每公里收费也随之改变。

1.2.2总体设计框图

2.1 总体电路图

 

2.2 分频器模块

module  fpq_(clk,KS,clk_1s);

input  clk,KS;

output  reg  clk_1s;

reg[26:0]  qs;

always    @(posedge   clk)

    if(KS==1) 

    begin

         if(qs==49999999)      qs=0;

         else   qs=qs+1;

         if(qs==24999999)   clk_1s=0;

         else  clk_1s=1;

  end

  endmodule   

分频器

2.3计程计费器模块

module CZCJFQ(clk,clrn,clk2,L1,L2,L3,L4,L5,L6);

input  clk,clrn,clk2;

output L1,L2,L3,L4,L5,L6;

wire[15:0] Q;

reg[7:0]  km;

reg[11:0]  ZJ;

reg  clk1;

reg [6:0] L1,L2,L3,L4,L5,L6;

initial    clk1=1;

always  @(posedge   clk^clk2   or  negedge   clrn)

  begin

        if(~clrn)   km[3:0]=0;

  else   begin

             if(km[3:0]==9)   km[3:0]=0;

             else  km[3:0]=km[3:0]+1;

         if(km[3:0]==9)  clk1=0;

   else   clk1=1;

     end

end

   always  @(posedge  clk1 or  negedge  clrn)

     begin

        if(~clrn)     km[7:4]=0;

          else  begin

                      if( km[7:4]==9)   km[7:4]=0;

                     else  km[7:4]= km[7:4]+1;

                   end     

      end

initial   ZJ[11:0]=70;

always   @(posedge  clk^clk2  or  negedge   clrn)

   begin

    if(~clrn) ZJ[11:0]=70;

    else   begin

       if(ZJ[11:0]>9999)   ZJ[11:0]=70;

        else  if(km[7:0]>'h9)   ZJ[11:0]=ZJ[11:0]+24;

        else  if(km[7:0]>'h1)   ZJ[11:0]=ZJ[11:0]+16;

        else  ZJ[11:0]=ZJ[11:0];

    end

end

assign{Q[3:0]}={ZJ[11:0]}%10;

assign{Q[7:4]}={ZJ[11:0]}/10%10;

assign{Q[11:8]}={ZJ[11:0]}/100%10;

assign{Q[15:12]}={ZJ[11:0]}/1000;

路程计费器模块

2.4 组合逻辑模块(部分)

always@ (Q[0],Q[1],Q[2],Q[3])

       begin

           case ({Q[3],Q[2],Q[1],Q[0]})

              4'B0000:L1=7'B1000000;

              4'B0001:L1=7'B1111001;

              4'B0010:L1=7'B0100100;

              4'B0011:L1=7'B0110000;

              4'B0100:L1=7'B0011001;

              4'B0101:L1=7'B0010010;

              4'B0110:L1=7'B0000010;

              4'B0111:L1=7'B1111000;

              4'B1000:L1=7'B0000000;

              4'B1001:L1=7'B0010000;

              4'B1010:L1=7'B0001000;

              4'B1011:L1=7'B0000011;

              4'B1100:L1=7'B1000110;

              4'B1101:L1=7'B0100001;

              4'B1110:L1=7'B0000110;

              4'B1111:L1=7'B0001110;

           endcase

       end

always@ (Q[4],Q[5],Q[6],Q[7])

       begin

           case ({Q[7],Q[6],Q[5],Q[4]})

              4'B0000:L2=7'B1000000;

              4'B0001:L2=7'B1111001;

              4'B0010:L2=7'B0100100;

              4'B0011:L2=7'B0110000;

              4'B0100:L2=7'B0011001;

              4'B0101:L2=7'B0010010;

              4'B0110:L2=7'B0000010;

              4'B0111:L2=7'B1111000;

              4'B1000:L2=7'B0000000;

              4'B1001:L2=7'B0010000;

              4'B1010:L2=7'B0001000;

              4'B1011:L2=7'B0000011;

              4'B1100:L2=7'B1000110;

              4'B1101:L2=7'B0100001;

              4'B1110:L2=7'B0000110;

              4'B1111:L2=7'B0001110;

           endcase

       end

       .......

3  调试过程

在编程代码和编译过程经常出现问题,尤其是always@(*)语句上经常出错,以及在下载到硬件仿真的时候LED数码管没有反应,在向老师求助答疑后加入了些组合逻辑模块,修改过后的程序能正常编译,之后将程序下载到硬件中,打开开关检查路程计算能正常运行,路程计费计算功能正常,可以达到验收标准。

4  功能测试

4.1 测试仪器与设备

计算机一台

EDA实训仪

4.2 性能指标测试

打开开关后输入脉冲可产生路程计算,随着路程的递增费用也按要求递增,按下按键后数据可清零,也可以通过按下按键自行增加路程。

仿真波形图(部分模块)

需要全部资料可在我的资源里下载,包括程序文档、源程序。

 

 需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传 点击用微信打开即可,过程有点繁琐请见谅

  • 7
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值