出租车计价器 课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学院
课程设计报告
课程
题目出租车计价器
班级集成13-4
专业集成电路设计与集成系统
学生学号
指导教师(填写自己班的指导教师)
年月日
1.课程设计目的
全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的组合逻
辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
2.课程设计题目描述和要求
2.1.课程设计题目描述
①.实现计费功能,计费标准为:按行驶里程计费,起步价为7.0元,并在车行3km 后按2.2元/km 计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
②.现场模拟功能:以开关或按键模拟公里计数,能模拟汽车起动、停止、暂停等状态。
③.将车费和路程显示出来,各有一位小数。
2.2.总体设计思路框架
2.3.课程设计题目要求 ①.设计正确,方案合理。 ②.程序精炼,结构清晰。
③.设计报告含程序设计说明,用户使用说明,源程序清单及程序框图。 ④.上机演示。
⑤.有详细的文档。文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
3.设计思想和设计内容
3.1 出租车计费设计
该出租车计费器按下开关S1后开始计费和计里程数,起步价是7元,行驶3公里,以后2.2元/公里。并且设计选择模块,在车费超过20元每公里加收50%车费即3.3元/公里。
3.2 基本设计思想
出租车计费器根据设计要求可初步分为3方面——显示、记里程数、记费。之后再根据三方面分别设计模块。1.显示模块。一般计数器显示数字为1-F即16进制,而16进制不方便观看,所以在设计这一模块时我们将16进制改为10进制输出进而设计了译码模块。2、里程模块。设计要求对里程计数主要分为两个方面,计数以及公里数比较。即3公里之内收7元,3公里之后20元(通过计算为9公里)以内每公里2.2元,9公里以外为每公里3.3元。所以,我们将里程模块分为里程计数模块以为比较模块。3.计费模块。计费模块同里程比较模块所以将两个模块合二为一,为价格计算模块。
4.Verilog代码
4.1顶层模块
module taxi(
clk,stop,rst_n,
time1,time2,time3,time4,
seg1,seg2,seg3,seg4
);
input clk;
input stop;
input rst_n;
output [6:0]time1;
output [6:0]time2;
output [6:0]time3;
output [6:0]time4;
output [6:0]seg1;
output [6:0]seg2;
output [6:0]seg3;
output [6:0]seg4;
wire clk_fp;
wire [15:0] distance;
wire [15:0] price;
wire [15:0]distan_bcd;
wire [15:0]price_bcd;
fp my_fp(clk,clk_fp,rst_n,stop);
distance_counter dis_counter(clk_fp,rst_n,stop,distance);
price_counter
price_coun(clk_fp,rst_n,stop,price,distance);
yimaqi distance_BCD(distance,distan_bcd,clk_fp);
yimaqi price_BCD(price,price_bcd,clk_fp);
dispaly_my aa(clk_fp,distan_bcd,seg1,seg2,seg3,seg4);
dispaly_my bb(clk_fp,price_bcd,time1,time2,time3,time4);
endmodule
4.2分频模块
module fp(
clk,clk_fp,rst_n,stop
);//50mhz
input clk;
input rst_n;
input stop;
output clk_fp;
reg [25:0] counter;
reg clk_fp;
always@(posedge clk or negedge rst_n or negedge stop) begin
if(!rst_n)
begin
clk_fp<=1'd0;
counter<=26'd0;
end
else if(!stop)
begin
counter<=counter;
end
else
begin
if(counter==26'd49_999_999)
begin
clk_fp<=1'b1;
counter<=1'b0;
end
else
begin
clk_fp<=1'b0;
counter<=counter+1'b1;
end
end
end
endmodule
4.3里程计算模块
clk_fp,rst_n,stop,distance
);
input clk_fp;//1S
input rst_n;
input stop;
output [15:0]distance;
reg [15:0]distance;
always@(posedge clk_fp or negedge rst_n) begin
if(!rst_n)
distance<=8'd0;
else if(!stop)
distance<=distance;
else
distance<=distance+5'd10;
end
endmodule