概述
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语言简单完成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复