出租车计费器的Verilog语言简单完成

1.本课程设计完成的计费器应具有如下功能:
(1)实现计费功能,计费标准为:按行驶里程计算,起步价为7.0元,并在车行驶3km后按元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止不收费。
(2)现场模拟功能:以开关按键模拟千米计数,能模拟汽车启动、停止、暂停等状态。
(3)将车费和路程分别以十进制的形式显示出来。
2.设计思想以及过程
本次出租车计费器的设计主要是基于FPGA芯片,使用硬件描述语言VerilogHDL,用“自顶向下”的设计方法,编写一个出租车计费芯片,并使用quartus软件和Modelsim软件进行编程,同时使用软件进行功能和时序的仿真

2.其代码如下展示:

module driver (kilometer,money,a,stop,start,suspend,m1,m0,k1,k0,b1,b2,b3,b4);
    input stop,start,suspend;
    input a;
    output [6:0] kilometer,money;
    output [3:0] m1,m0,k1,k0;
    output [6:0] b1,b2,b3,b4;
    reg [6:0] kilometer,money;
    reg [3:0] m1,m0,k1,k0;
    reg [6:0] b1,b2,b3,b4;
    reg [6:0] money_reg,kilometer_reg;

always@(posedge a )
begin
    if(stop)
    begin
    kilometer<= 0;
    end
    else if(start)
    begin
    kilometer<= 0;
    end
    else
    begin
    if(suspend)
    kilometer<=kilometer+1;
    else
      kilometer<=kilometer;
    end
end
    always@(kilometer)
    begin
    if(kilometer>9)
    begin
    money=money+3;
    end
    else if(kilometer>3)
    begin
    money=money+2;
end
    else money=7;
    
    m1=money/10;
    m0=money%10;
    k1=kilometer/10;
    k0=kilometer%10;
end
    always@(m1)
    begin
    case(m1)
    4'b0000:begin b1<=7'b1000000;end
    4'b0001:begin b1<=7'b1111001;end
    4'b0010:begin b1<=7'b0100100;end
    4'b0011:begin b1<=7'b0110000;end
    4'b0100:begin b1<=7'b0011010;end
    4'b0101:begin b1<=7'b0010010;end
    4'b0110:begin b1<=7'b1000010;end
    4'b0111:begin b1<=7'b1111000;end
    4'b1000:begin b1<=7'b0000000;end
    4'b1001:begin b1<=7'b0010000;end
    endcase
end

    always@(m0)
    begin
     case(m0)
    4'b0000:begin b2<=7'b1000000;end
    4'b0001:begin b2<=7'b1111001;end
    4'b0010:begin b2<=7'b0100100;end
    4'b0011:begin b2<=7'b0110000;end
    4'b0100:begin b2<=7'b0011010;end
    4'b0101:begin b2<=7'b0010010;end
    4'b0110:begin b2<=7'b1000010;end
    4'b0111:begin b2<=7'b1111000;end
    4'b1000:begin b2<=7'b0000000;end
    4'b1001:begin b2<=7'b0010000;end
    endcase
end

    always@(k1)
    begin
    case(k1)
    4'b0000:begin b3<=7'b1000000;end
    4'b0001:begin b3<=7'b1111001;end
    4'b0010:begin b3<=7'b0100100;end
    4'b0011:begin b3<=7'b0110000;end
    4'b0100:begin b3<=7'b0011010;end
    4'b0101:begin b3<=7'b0010010;end
    4'b0110:begin b3<=7'b1000010;end
    4'b0111:begin b3<=7'b1111000;end
    4'b1000:begin b3<=7'b0000000;end
    4'b1001:begin b3<=7'b0010000;end
    endcase
end

    always@(k0)
    begin
    case(k0)
    4'b0000:begin b4<=7'b1000000;end
    4'b0001:begin b4<=7'b1111001;end
    4'b0010:begin b4<=7'b0100100;end
    4'b0011:begin b4<=7'b0110000;end
    4'b0100:begin b4<=7'b0011010;end
    4'b0101:begin b4<=7'b0010010;end
    4'b0110:begin b4<=7'b1000010;end
    4'b0111:begin b4<=7'b1111000;end
    4'b1000:begin b4<=7'b0000000;end
    4'b1001:begin b4<=7'b0010000;end
    endcase
end
endmodule

module check;
    reg A,Stop,Suspend,Start;
    wire [6:0] Kilometer,Money;
    wire [3:0] M1,M0,K1,K0;
    wire [6:0] B1,B2,B3,B4;


    initial
    begin
    A=1;Stop=0;Start=1;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=1;
    #20 A=1;Stop=0;Start=0;Suspend=1;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=1;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #50 $stop;
end
driver dr (Kilometer,Money,A,Stop,Start,Suspend,M1,M0,K1,K0,B1,B2,B3,B4);
endmodule
module driver (kilometer,money,a,stop,start,suspend,m1,m0,k1,k0,b1,b2,b3,b4);
    input stop,start,suspend;
    input a;
    output [6:0] kilometer,money;
    output [3:0] m1,m0,k1,k0;
    output [6:0] b1,b2,b3,b4;
    reg [6:0] kilometer,money;
    reg [3:0] m1,m0,k1,k0;
    reg [6:0] b1,b2,b3,b4;
    reg [6:0] money_reg,kilometer_reg;

always@(posedge a )
begin
    if(stop)
    begin
    kilometer<= 0;
    end
    else if(start)
    begin
    kilometer<= 0;
    end
    else
    begin
    if(suspend)
    kilometer<=kilometer+1;
    else
      kilometer<=kilometer;
    end
end
    always@(kilometer)
    begin
    if(kilometer>9)
    begin
    money=money+3;
    end
    else if(kilometer>3)
    begin
    money=money+2;
end
    else money=7;
    
    m1=money/10;
    m0=money%10;
    k1=kilometer/10;
    k0=kilometer%10;
end
    always@(m1)
    begin
    case(m1)
    4'b0000:begin b1<=7'b1000000;end
    4'b0001:begin b1<=7'b1111001;end
    4'b0010:begin b1<=7'b0100100;end
    4'b0011:begin b1<=7'b0110000;end
    4'b0100:begin b1<=7'b0011010;end
    4'b0101:begin b1<=7'b0010010;end
    4'b0110:begin b1<=7'b1000010;end
    4'b0111:begin b1<=7'b1111000;end
    4'b1000:begin b1<=7'b0000000;end
    4'b1001:begin b1<=7'b0010000;end
    endcase
end

    always@(m0)
    begin
     case(m0)
    4'b0000:begin b2<=7'b1000000;end
    4'b0001:begin b2<=7'b1111001;end
    4'b0010:begin b2<=7'b0100100;end
    4'b0011:begin b2<=7'b0110000;end
    4'b0100:begin b2<=7'b0011010;end
    4'b0101:begin b2<=7'b0010010;end
    4'b0110:begin b2<=7'b1000010;end
    4'b0111:begin b2<=7'b1111000;end
    4'b1000:begin b2<=7'b0000000;end
    4'b1001:begin b2<=7'b0010000;end
    endcase
end

    always@(k1)
    begin
    case(k1)
    4'b0000:begin b3<=7'b1000000;end
    4'b0001:begin b3<=7'b1111001;end
    4'b0010:begin b3<=7'b0100100;end
    4'b0011:begin b3<=7'b0110000;end
    4'b0100:begin b3<=7'b0011010;end
    4'b0101:begin b3<=7'b0010010;end
    4'b0110:begin b3<=7'b1000010;end
    4'b0111:begin b3<=7'b1111000;end
    4'b1000:begin b3<=7'b0000000;end
    4'b1001:begin b3<=7'b0010000;end
    endcase
end

    always@(k0)
    begin
    case(k0)
    4'b0000:begin b4<=7'b1000000;end
    4'b0001:begin b4<=7'b1111001;end
    4'b0010:begin b4<=7'b0100100;end
    4'b0011:begin b4<=7'b0110000;end
    4'b0100:begin b4<=7'b0011010;end
    4'b0101:begin b4<=7'b0010010;end
    4'b0110:begin b4<=7'b1000010;end
    4'b0111:begin b4<=7'b1111000;end
    4'b1000:begin b4<=7'b0000000;end
    4'b1001:begin b4<=7'b0010000;end
    endcase
end
endmodule

module check;
    reg A,Stop,Suspend,Start;
    wire [6:0] Kilometer,Money;
    wire [3:0] M1,M0,K1,K0;
    wire [6:0] B1,B2,B3,B4;


    initial
    begin
    A=1;Stop=0;Start=1;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=1;
    #20 A=1;Stop=0;Start=0;Suspend=1;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=0;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #20 A=1;Stop=1;Start=0;Suspend=0;
    #20 A=0;Stop=0;Start=0;Suspend=0;
    #50 $stop;
end
driver dr (Kilometer,Money,A,Stop,Start,Suspend,M1,M0,K1,K0,B1,B2,B3,B4);
endmodule

4.完成截图如下:

5.其实验视频地址:第12章课题1视频_哔哩哔哩_bilibili

  • 5
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值