我是靠谱客的博主 醉熏太阳,最近开发中收集的这篇文章主要介绍出租车计费器的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

最后

以上就是醉熏太阳为你收集整理的出租车计费器的Verilog语言简单完成的全部内容,希望文章能够帮你解决出租车计费器的Verilog语言简单完成所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部